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; namespace WcsMain.Business.CommonAction; /// /// WCS 任务 触发的事件 /// [Component] public class WCSTaskExecuteEvent(TaskDao taskDao, SendWmsTaskStatus sendWmsTaskStatus, AppLocationDao locationDao) { /// /// 任务执行异常触发事件 /// /// /// 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 }