using CirculateTool.Attribute; using WcsMain.ExtendMethod; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.DataService; using WcsMain.Business.CommonAction; using WcsMain.Common; using WcsMain.StaticData; using System.Linq.Expressions; using WcsMain.DataBase.MixDao; using WcsMain.Enum.Stacker; using WcsMain.Enum.TaskEnum; namespace WcsMain.Business.CirculationTask.TaskData; /// /// WMS任务解析类 /// [Circulation()] public class ResolveWmsTask(AppWmsTaskDao wmsTaskDao, SendWmsTaskStatus sendWmsTaskStatus, DataBaseData dataBaseData, TaskDao taskDao) { /// /// 解析WMS任务 /// /// [Circulation("解析WMS任务,转换为WCS任务")] public bool ResolveTask() { List? needResolveTask = wmsTaskDao.Select(new AppWmsTask() { TaskStatus = (int)WmsTaskStatusEnum.create }); if (needResolveTask == default) { ConsoleLog.Error("【异常】解析Wms任务时拉取任务列表失败,与数据库连接中断"); Thread.Sleep(5000); return true; } needResolveTask.ForEach(ResolveTask); return true; } /// /// 解析任务 /// /// private void ResolveTask(AppWmsTask wmsTask) { /* 校验起点终点是否在点位表 */ bool checkResult = CommonData.AppLocations.ExistWmsLocation(wmsTask.Origin, wmsTask.Destination); if(!checkResult) { wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = "不受支持的起点或终点", EndTime = DateTime.Now }); if(wmsTask.CreatePerson == StaticString.WMS) { sendWmsTaskStatus.SendTaskErr(wmsTask.TaskId, "不受支持的起点或终点"); } return; } /* 解析任务转换为WCS任务,一般根据项目,此处自定义规则 */ TransToWcsTask(wmsTask); } /// /// 处理WMS任务,插入WCS任务 /// /// /// private void TransToWcsTask(AppWmsTask task) { switch (task.TaskType) { case (int)WmsTaskTypeEnum.inTask:// 入库 TransInTaskToWcsTask(task); break; case (int)WmsTaskTypeEnum.outTask:// 出库 TransOutTaskToWcsTask(task); break; case (int)WmsTaskTypeEnum.moveTask:// 移库 TransMoveTaskToWcsTask(task); break; case (int)WmsTaskTypeEnum.pick:// 拣选 TransPickTaskToWcsTask(task); break; default: // 其他任务,未识别的任务类型,直接报错 TransOtherTaskToWcsTask(task); break; }; } /// /// 转换入库任务 /// /// /// private void TransInTaskToWcsTask(AppWmsTask wmsTask) { AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin); AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination); if (wcsOrigin == default || wcsDestination == default) { return; } int? plcId = dataBaseData.GetNewPlcTaskId(); if(plcId == default) { return; } AppWcsTask wcsTask = new() { PlcId = plcId, TaskId = wmsTask.TaskId, TaskType = (int)WcsTaskTypeEnum.inTask, TaskSort = 1, TaskStatus = (int)WcsTaskStatusEnum.create, TaskCategory = (int)TaskCategoryEnum.stacker, Origin = wcsOrigin!.WcsLocation, Destination = wcsDestination.WcsLocation, VehicleNo = wmsTask.VehicleNo, PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(), Priority = wmsTask.Priority, VehicleSize = wmsTask.VehicleSize, Weight = wmsTask.Weight, WmsTime = wmsTask.CreateTime, CreatePerson = wmsTask.CreatePerson, CreateTime = DateTime.Now, }; /* 插入新任务同时更新 wms 任务为排队中 */ string? errMessage = taskDao.CreateWcsTask(wcsTask); if(string.IsNullOrWhiteSpace(errMessage)) { ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列"); return; } ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}"); return; } /// /// 转换出库任务 /// /// /// private void TransOutTaskToWcsTask(AppWmsTask wmsTask) { AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin); AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination); if (wcsOrigin == default || wcsDestination == default) { return; } int? plcId = dataBaseData.GetNewPlcTaskId(); if (plcId == default) { return; } AppWcsTask wcsTask = new() { PlcId = plcId, TaskId = wmsTask.TaskId, TaskType = (int)WcsTaskTypeEnum.outTask, TaskSort = 1, TaskStatus = (int)WcsTaskStatusEnum.create, TaskCategory = (int)TaskCategoryEnum.stacker, Origin = wcsOrigin.WcsLocation, Destination = wcsDestination.WcsLocation, VehicleNo = wmsTask.VehicleNo, PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(), Priority = wmsTask.Priority, VehicleSize = wmsTask.VehicleSize, Weight = wmsTask.Weight, WmsTime = wmsTask.CreateTime, CreatePerson = wmsTask.CreatePerson, CreateTime = DateTime.Now, }; /* 插入新任务同时更新 wms 任务为排队中 */ string? errMessage = taskDao.CreateWcsTask(wcsTask); if (string.IsNullOrWhiteSpace(errMessage)) { ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列"); return; } ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}"); return; } /// /// 转换拣选任务 /// /// /// private void TransPickTaskToWcsTask(AppWmsTask wmsTask) { AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin); AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination); if (wcsOrigin == default || wcsDestination == default) { return; } int? plcId = dataBaseData.GetNewPlcTaskId(); if (plcId == default) { return; } AppWcsTask wcsTask = new() { PlcId = plcId, TaskId = wmsTask.TaskId, TaskType = (int)WcsTaskTypeEnum.pick, TaskSort = 1, TaskStatus = (int)WcsTaskStatusEnum.create, TaskCategory = (int)TaskCategoryEnum.stacker, Origin = wcsOrigin.WcsLocation, Destination = wcsDestination.WcsLocation, VehicleNo = wmsTask.VehicleNo, PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(), Priority = wmsTask.Priority, VehicleSize = wmsTask.VehicleSize, Weight = wmsTask.Weight, WmsTime = wmsTask.CreateTime, CreatePerson = wmsTask.CreatePerson, CreateTime = DateTime.Now, }; /* 插入新任务同时更新 wms 任务为排队中 */ string? errMessage = taskDao.CreateWcsTask(wcsTask); if (string.IsNullOrWhiteSpace(errMessage)) { ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列"); return; } ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}"); return; } /// /// 转换移库任务 /// /// /// private void TransMoveTaskToWcsTask(AppWmsTask wmsTask) { AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin); AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination); if (wcsOrigin == default || wcsDestination == default) { return; } int? plcId = dataBaseData.GetNewPlcTaskId(); if (plcId == default) { return; } AppWcsTask wcsTask = new() { PlcId = plcId, TaskId = wmsTask.TaskId, TaskType = (int)WcsTaskTypeEnum.moveTask, TaskSort = 1, TaskStatus = (int)WcsTaskStatusEnum.create, TaskCategory = (int)TaskCategoryEnum.stacker, Origin = wcsOrigin.WcsLocation, Destination = wcsDestination.WcsLocation, VehicleNo = wmsTask.VehicleNo, PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(), Priority = wmsTask.Priority, VehicleSize = wmsTask.VehicleSize, Weight = wmsTask.Weight, WmsTime = wmsTask.CreateTime, CreatePerson = wmsTask.CreatePerson, CreateTime = DateTime.Now, }; /* 插入新任务同时更新 wms 任务为排队中 */ string? errMessage = taskDao.CreateWcsTask(wcsTask); if (string.IsNullOrWhiteSpace(errMessage)) { ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列"); return; } ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}"); return; } /// /// 转换其他任务 /// /// /// private List? TransOtherTaskToWcsTask(AppWmsTask wmsTask) { return default; } }