using WcsMain.ExtendMethod; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.DataBase.MixDao; using WcsMain.Enum.TaskEnum; using WcsMain.WcsAttribute.AutoFacAttribute; using WcsMain.StaticData; using WcsMain.Enum.Stacker; namespace WcsMain.Business.CommonAction; /// /// WCS 任务 触发的事件 /// [Component] public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskStatus, AppLocationDao locationDao, AppWmsTaskDao wmsTaskDao) { /// /// 任务执行异常触发事件 /// /// /// 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); } } /// /// 任务执行异常触发事件 --- 取货位置无货 /// /// /// 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); } } /// /// 任务执行异常触发事件 --- 卸货位置有货 /// /// /// 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); } } /// /// WCS任务开始时触发 /// /// 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 任务完成时触发 /// /// WCS任务完成时触发 /// /// /// 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}"); } } /// /// 更新库位的相关信息, /// /// /// /// 特别注意:随缘更新,具体占用情况必须以WMS为准 /// 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 任务完成时触发 /// /// WMS任务完成时触发 /// /// /// /// 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; } /// /// 发送任务离开起始位置 /// /// /// 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 }