using DataCheck; using WcsMain.ApiServe.Dto.WcsDto.ElTag; using WcsMain.ApiServe.Dto.WMSEntity; using WcsMain.ApiServe.Dto.WMSEntity.WmsTask; using WcsMain.ApiServe.Factory; using WcsMain.Business.CommonAction; using WcsMain.Common; using WcsMain.Constant.Enum.Stacker; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.StaticData; using WcsMain.Utils.Plugins; using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.Constant.ExtendMethod; using WcsMain.Common.DataService; namespace WcsMain.ApiServe.Service.WmsService; /// /// Wms任务接口逻辑 /// [Service] public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, DataBaseData dataBaseData) { /// /// 接收WMS任务数据处理 /// /// /// public WmsApiResponse> GetStackerTask(List request) { if (request.Count < 1 || request.Count > 20) return WmsApiResponseFactory.RequestErr>(null, "请求的任务数量只能在 1 至 20 范围内"); List errRequest = []; // 存放错误的请求 /* 插入库存信息 */ // ---- 库存由WMS管理,数据库表也无需操作 List wmsTasks = []; foreach (var taskData in request) { /* 检验传入的数据格式 */ bool checkData = CheckData.CheckDataRules(taskData); if (!checkData) { var errorRequest = ObjectCopy.CopyProperties(taskData); errRequest.Add(errorRequest); } /* 检验起点和终点是否正常 */ if(taskData.TaskType == (int)WmsTaskTypeEnum.moveTask) { var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin); var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination); if (!existOringin || !existDestination) { var errorRequest = ObjectCopy.CopyProperties(taskData); errRequest.Add(errorRequest); } } else if(taskData.TaskType == (int)WmsTaskTypeEnum.inTask) { var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination); if (!existDestination) { var errorRequest = ObjectCopy.CopyProperties(taskData); errRequest.Add(errorRequest); } } else if(taskData.TaskType == (int)WmsTaskTypeEnum.outTask) { var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin); if (!existOringin) { var errorRequest = ObjectCopy.CopyProperties(taskData); errRequest.Add(errorRequest); } } /* 构造任务 */ wmsTasks.Add(new AppWmsTask() { TaskId = taskData.TaskId, WcsId = dataBaseData.GetNewUUID2(), TaskType = taskData.TaskType, TaskStatus = (int)WmsTaskStatusEnum.create, Priority = taskData.Priority ?? -1, Origin = taskData.Origin, MidPoint = taskData.Midpoint, Destination = taskData.Destination, VehicleNo = taskData.VehicleNo, VehicleSize = taskData.VehicleSize ?? -1, Weight = taskData.Weight ?? -1, CreateTime = DateTime.Now, ModifyTime = DateTime.Now, CreatePerson = StaticString.WMS, }); } if(errRequest.Count > 0) // 如果有错误请求,则返回错误请求 { return WmsApiResponseFactory.RequestErr(errRequest, "请求的任务数据存在异常"); } List taskIds = []; // 存放任务号 foreach (var checkEntity in wmsTasks) { /* 检查任务号是否重复 */ List? checkSame = wmsTaskDao.Select(new AppWmsTask() { TaskId = checkEntity.TaskId }); if (checkSame == default) return WmsApiResponseFactory.DataBaseErr(errRequest); if (checkSame.Count > 0 || taskIds.Exists(e => e == checkEntity.TaskId)) { return WmsApiResponseFactory.RequestErr(errRequest, $"任务:{checkEntity.TaskId} 已存在,请勿重复"); } taskIds.Add(checkEntity.TaskId); } /* 插入任务数据 */ //int insertRows = wmsTaskDao.Insert(wmsTasks.ToArray()); // ---- 直接插入任务数据 int insertRows = wmsTaskDao.InsertTaskAndMarkErr([.. wmsTasks]); // ---- 先清除这个料箱之前未作的任务,然后插入新数据 if (insertRows > 0) return WmsApiResponseFactory.Success(errRequest, $"任务创建成功,任务号:{string.Join(',', taskIds)}"); return WmsApiResponseFactory.Fail(errRequest, "数据插入失败,请稍后重试或者联系我们"); } /// /// 更新任务状态 /// /// /// public WmsApiResponse UpdateStackerTaskStatus(UpdateStackerTaskStatusRequest request) { bool checkData = CheckData.CheckDataRules(request); if (!checkData) return WmsApiResponseFactory.RequestErr(); /* 校验任务是否存在 */ var tasks = wmsTaskDao.Select(new AppWmsTask { TaskId = request.TaskId }); if (tasks == default) return WmsApiResponseFactory.DataBaseErr(); // 数据库连接失败 if (tasks.Count == 0) return WmsApiResponseFactory.RequestErr($"任务:{request.TaskId} 不存在"); int? status = request.TaskStatus; switch(status) { case 0: string resetErrText = wmsTaskAction.ResetWmsTaskStatus(request.TaskId, request.Destination, StaticString.WMS); // 重置任务 return string.IsNullOrEmpty(resetErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(resetErrText); case 2: string completeErrText = wmsTaskAction.CompleteWmsTaskStatus(request.TaskId, StaticString.WMS); // 完成任务 return string.IsNullOrEmpty(completeErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(completeErrText); case 1: string deleteErrText = wmsTaskAction.DeleteWmsTaskStatus(request.TaskId, StaticString.WMS); // 删除任务 return string.IsNullOrEmpty(deleteErrText) ? WmsApiResponseFactory.Success() : WmsApiResponseFactory.Fail(deleteErrText); default: return WmsApiResponseFactory.RequestErr($"不支持的任务状态:{request.TaskStatus}"); } } /// /// WMS向WCS发送任务新终点,卸货位置有货的时候 /// /// /// public WmsApiResponse GetStackerTaskNewDestination(GetStackerTaskNewDestinationRequest request) { return WmsApiResponseFactory.Fail(); // if(!CheckData.CheckDataRules(request)) return WmsApiResponseFactory.RequestErr(); // /* 查找该任务有没有无法卸货 */ // List? wcsTasks = _wcsTaskDao.Select(new AppWcsTask { TaskId = request.TaskId, TaskStatus = (int)WcsTaskStatusEnum.doubleIn }); // if(wcsTasks == default) return WmsApiResponseFactory.DataBaseErr(); // if(wcsTasks.Count() < 1) return WmsApiResponseFactory.Fail($"任务号:{request.TaskId} 没有无法卸货的情况"); // wcsTasks = [.. wcsTasks.OrderByDescending(x => x.CompleteTime)]; // var wcsTask = wcsTasks[0]; // 获取最新的一条任务 // /* 如果是最后一条任务则更新WMS任务终点 */ // if(wcsTask.IsLastTask()) // { // _wmsTaskDao.Update(new AppWmsTask { TaskId = request.TaskId, Destination = request.Destination, TaskMsg = "WMS修改终点" }); // // // // } } }