using DataCheck; using WcsMain.ApiServe.Controllers.Dto.WcsDto.ElTag; using WcsMain.ApiServe.Controllers.Dto.WMSEntity; using WcsMain.ApiServe.Controllers.Dto.WMSEntity.WmsTask; using WcsMain.ApiServe.Factory; using WcsMain.Business.CommonAction; using WcsMain.Common; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.Enum.Stacker; using WcsMain.ExtendMethod; using WcsMain.StaticData; using WcsMain.WcsAttribute.AutoFacAttribute; namespace WcsMain.ApiServe.Service.WmsService; /// /// Wms任务接口逻辑 /// [Service] public class WmsTaskService(WmsTaskAction wmsTaskAction, AppWmsTaskDao wmsTaskDao, AppWcsTaskDao wcsTaskDao) { private readonly AppWmsTaskDao _wmsTaskDao = wmsTaskDao; private readonly WmsTaskAction _wmsTaskAction = wmsTaskAction; private readonly AppWcsTaskDao _wcsTaskDao = wcsTaskDao; /// /// 接收WMS任务数据处理 /// /// /// public WmsApiResponse GetStackerTask(List request) { if (request.Count < 1) return WmsApiResponseFactory.RequestErr("请求的任务数量为 0"); /* 插入库存信息 */ // ---- 库存由WMS管理,数据库表也无需操作 List wmsTasks = []; foreach (var taskData in request) { /* 检验传入的数据格式 */ bool checkData = CheckData.CheckDataRules(taskData); if (!checkData) return WmsApiResponseFactory.RequestErr("请求的任务数据部分存在格式问题,请检查数据格式"); /* 检验起点和终点是否正常 */ var existOringin = CommonData.AppLocations.ExistWmsLocation(taskData.Origin); var existDestination = CommonData.AppLocations.ExistWmsLocation(taskData.Destination); if(!existOringin || !existDestination) return WmsApiResponseFactory.RequestErr($"任务号:{taskData.TaskId} 的起点或者终点不正确"); /* 构造任务 */ wmsTasks.Add(new AppWmsTask() { TaskId = taskData.TaskId, 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, }); } List taskIds = []; // 存放任务号 foreach (var checkEntity in wmsTasks) { /* 检查任务号是否重复 */ List? checkSame = _wmsTaskDao.Select(new AppWmsTask() { TaskId = checkEntity.TaskId }); if (checkSame == default) return WmsApiResponseFactory.DataBaseErr(); if (checkSame.Count > 0 || taskIds.Exists(e => e == checkEntity.TaskId)) { return WmsApiResponseFactory.RequestErr($"任务:{checkEntity.TaskId} 已存在,请勿重复"); } taskIds.Add(checkEntity.TaskId); } /* 插入任务数据 */ //int insertRows = _wmsTaskDao.Insert(wmsTasks.ToArray()); // ---- 直接插入任务数据 int insertRows = _wmsTaskDao.InsertTaskAndMarkErr([.. wmsTasks]); // ---- 先清除这个料箱之前未作的任务,然后插入新数据 if (insertRows > 0) return WmsApiResponseFactory.Success($"任务创建成功,任务号:{string.Join(',', taskIds)}"); return WmsApiResponseFactory.Fail("数据插入失败,请稍后重试或者联系我们"); } /// /// 更新任务状态 /// /// /// 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修改终点" }); // // // // } } }