Product_Wms/WcsMain/Business/CommonAction/WCSTaskExecuteEvent.cs
icewint 03c600bc70 1、修改文件结构
2、删除不使用的 using
2024-11-15 11:38:01 +08:00

199 lines
6.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using WcsMain.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataBase.MixDao;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
using WcsMain.StaticData;
using WcsMain.ApiClient.WMS;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
namespace WcsMain.Business.CommonAction;
/// <summary>
/// WCS 任务 触发的事件
/// </summary>
[Component]
public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskStatus, AppLocationDao locationDao, AppWmsTaskDao wmsTaskDao)
{
/// <summary>
/// 任务执行异常触发事件
/// </summary>
/// <param name="task"></param>
/// <param name="errText"></param>
public void ErrTaskEvent(AppWcsTask task, string errText)
{
string errMsg = taskDao.TaskErrAndCancelOtherTask(task, errText);
if (!string.IsNullOrEmpty(errMsg))
{
ConsoleLog.Error($"【异常】任务异常更新数据库失败,任务信息:{task},参考信息:{errMsg}");
}
if (task.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskErr(task.TaskId, errText);
}
}
/// <summary>
/// 任务执行异常触发事件 --- 取货位置无货
/// </summary>
/// <param name="task"></param>
/// <param name="errText"></param>
public void EmptyOutTaskEvent(AppWcsTask task, string errText)
{
string errMsg = taskDao.TaskErr(task, errText);
if (!string.IsNullOrEmpty(errMsg))
{
ConsoleLog.Error($"【异常】任务异常更新数据库失败,任务信息:{task},参考信息:{errMsg}");
}
if (task.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskEmptyOut(task.TaskId);
}
}
/// <summary>
/// 任务执行异常触发事件 --- 卸货位置有货
/// </summary>
/// <param name="task"></param>
/// <param name="errText"></param>
public void DoubleInTaskEvent(AppWcsTask task, string errText)
{
string errMsg = taskDao.TaskErr(task, errText);
if (!string.IsNullOrEmpty(errMsg))
{
ConsoleLog.Error($"【异常】卸货位置有货更新数据库失败,任务信息:{task},参考信息:{errMsg}");
}
if (task.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskDoubleIn(task.TaskId);
}
}
/// <summary>
/// WCS任务开始时触发
/// </summary>
/// <param name="task"></param>
public void StartTaskEvent(AppWcsTask task)
{
string errMsg = taskDao.StartTask(task);
if (!string.IsNullOrEmpty(errMsg))
{
ConsoleLog.Error($"【异常】任务开始更新数据库失败,任务信息:{task},参考信息:{errMsg}");
}
if (task.IsFirstTask() && task.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskStart(task.TaskId);
}
}
#region WCS
/// <summary>
/// WCS任务完成时触发
/// </summary>
/// <param name="task"></param>
/// <param name="msg"></param>
public void CompleteTaskEvent(AppWcsTask task, string msg)
{
UpdateLocationInfo(task); // 更新库位的相关信息
HandleTaskData(task, msg); // 处理任务数据
if (task.IsFirstTask() && task.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskComplete(task.TaskId);
}
}
private void HandleTaskData(AppWcsTask task, string msg)
{
string errMsg = taskDao.ComlpeteTask(task, msg);
if(!string.IsNullOrEmpty(errMsg))
{
ConsoleLog.Error($"【异常】PlcId{task.PlcId} 任务完成失败,异常信息:{errMsg}");
}
}
/// <summary>
/// 更新库位的相关信息,
/// </summary>
/// <param name="task"></param>
/// <remarks>
/// 特别注意随缘更新具体占用情况必须以WMS为准
/// </remarks>
private void UpdateLocationInfo(AppWcsTask task)
{
switch (task.TaskType)
{
case (int)TaskTypeEnum.inTask: // 入库任务
locationDao.Update(AppLocation.CreateUsedInstance(task.Destination, task.VehicleNo));
break;
case (int)TaskTypeEnum.outTask: // 出库任务
locationDao.Update(AppLocation.CreateEmptyInstance(task.Origin));
break;
case (int)TaskTypeEnum.moveTask: // 移库任务
locationDao.Update(AppLocation.CreateUsedInstance(task.Destination, task.VehicleNo), AppLocation.CreateEmptyInstance(task.Origin));
break;
}
}
#endregion
#region WMS
/// <summary>
/// WMS任务完成时触发
/// </summary>
/// <param name="task"></param>
/// <param name="msg"></param>
/// <param name="destination"></param>
public string? CompleteTaskEvent(AppWmsTask task, string msg, string? destination)
{
/* 更新任务信息,任务完成 */
string? errText = taskDao.ComlpeteTask(task, msg);
if (!string.IsNullOrEmpty(errText))
{
ConsoleLog.Warning($"【异常】任务完成更新WMS任务状态失败异常信息{errText}");
}
if(task.CreatePerson == StaticData.StaticString.WMS)
{
/* 上报WMS */
sendWmsTaskStatus.SendTaskComplete(task.TaskId, destination: destination);
}
return errText;
}
/// <summary>
/// 发送任务离开起始位置
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
public string? LeaveStart(AppWmsTask task)
{
int updateResult = wmsTaskDao.Update(new() { TaskId = task.TaskId, TaskStatus = task.TaskType == (int)WmsTaskTypeEnum.moveTask ? (int)WmsTaskStatusEnum.toDestination : (int)WmsTaskStatusEnum.toMid, ModifyTime = DateTime.Now });
if (updateResult < 1)
{
ConsoleLog.Warning($"【异常】任务完成更新WMS任务状态失败");
}
if (task.CreatePerson == StaticData.StaticString.WMS)
{
/* 上报WMS */
sendWmsTaskStatus.SendTaskLeaveStart(task);
}
return "更新信息失败";
}
#endregion
}