Product_Wms/WcsMain/Business/CommonAction/WCSTaskExecuteEvent.cs

199 lines
6.3 KiB
C#
Raw Normal View History

2024-11-15 11:51:41 +08:00
using WcsMain.DataBase.Dao;
2024-10-07 09:51:55 +08:00
using WcsMain.DataBase.TableEntity;
using WcsMain.DataBase.MixDao;
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
2024-10-07 09:51:55 +08:00
using WcsMain.StaticData;
using WcsMain.ApiClient.WMS;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
2024-11-15 11:51:41 +08:00
using WcsMain.Constant.ExtendMethod;
2024-10-07 09:51:55 +08:00
namespace WcsMain.Business.CommonAction;
/// <summary>
/// WCS 任务 触发的事件
/// </summary>
[Component]
2024-11-14 23:06:18 +08:00
public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskStatus, AppLocationDao locationDao, AppWmsTaskDao wmsTaskDao)
2024-10-07 09:51:55 +08:00
{
/// <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);
}
}
2024-10-07 09:51:55 +08:00
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}");
}
2024-11-14 23:06:18 +08:00
if(task.CreatePerson == StaticData.StaticString.WMS)
{
/* 上报WMS */
sendWmsTaskStatus.SendTaskComplete(task.TaskId, destination: destination);
}
return errText;
}
2024-11-14 23:06:18 +08:00
/// <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
2024-10-07 09:51:55 +08:00
}