using WcsMain.ApiServe.Dto.Container; using WcsMain.Business.CommonAction; using WcsMain.Constant.Enum.Stacker; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.Constant.WcsAttribute.AutoFacAttribute; using WcsMain.ApiClient.WMS; using WcsMain.ApiClient.WMS.Dto; using WcsMain.Common; using WcsMain.Constant.ExtendMethod; namespace WcsMain.ApiServe.Service.ContainerService; [Service] public class ContainerService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent, WmsBaseWebApi wmsBaseWebApi) { /// /// 请求四向车任务 /// /// /// public CreateInstoreTaskResoponse CreateInstoreTask(CreateInstoreTaskRequest request) { ConsoleLog.Info($"四向车请求载具入库:{request.PalleetNo},入库点位:{request.FormCellNo}"); if (string.IsNullOrEmpty(request.FormCellNo) || string.IsNullOrEmpty(request.PalleetNo)) { return new() { Code = "400", Message = "缺少必须参数" }; } List? wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.arriveMid })?.OrderByDescending(o => o.CreateTime).ToList(); if (wmsTasks == null) { return new() { Code = "400", Message = "数据连接失败,请重试" }; } if (wmsTasks.Count == 0) { /* 请求WMS获取任务 */ ApplyInRequest applyInRequest = new() { Point = request.FormCellNo, VehicleNo = request.PalleetNo, }; var response = wmsBaseWebApi.HttpPost(applyInRequest, CommonData.AppApiBaseInfos.GetAddress("ApplyEnterApiAddress") ?? ""); if(response.IsSend && response.ResponseEntity != null && response.ResponseEntity.Code == 0) { int i = 0; while(i < 5) { i++; Thread.Sleep(1000); wmsTasks = wmsTaskDao.Select(new() { VehicleNo = request.PalleetNo, TaskStatus = (int)WmsTaskStatusEnum.create })?.OrderByDescending(o => o.CreateTime).ToList(); if (wmsTasks == null || wmsTasks.Count < 1) continue; break; } } } if(wmsTasks == default || wmsTasks.Count < 1) { return new() { Code = "400", Message = "无任务,请重试" }; } AppWmsTask wmsTask = wmsTasks.First(); /* 更新状态为前往终点 */ var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.toDestination, ModifyTime = DateTime.Now }); ConsoleLog.Success($"API更新任务状态结果:{(updateResult > 0 ? "成功" : "失败")},任务号:{wmsTask.TaskId}"); return new() { Code = "200", Message = "操作成功", WmsTaskId = wmsTask.WcsId, PalletNo = wmsTask.VehicleNo, FromCellNo = request.FormCellNo, ToCellNo = wmsTask.Destination, }; } /// /// 四向车任务反馈 /// /// /// public TaskStateNoticeResponse TaskStateNotice(TaskStateNoticeRequest request) { if(string.IsNullOrEmpty(request.TaskState?.ToString()) || string.IsNullOrEmpty(request.WmsTaskId?.ToString()) || string.IsNullOrEmpty(request.FactendCell)) { return new() { Code = "400", Message = "缺少必须的参数" }; } List? appWmsTasks = wmsTaskDao.Select(new() { WcsId = request.WmsTaskId?.ToString() }); if(appWmsTasks == null) { return new() { Code = "400", Message = "数据连接异常,请稍后再试" }; } if (appWmsTasks.Count < 1) { return new() { Code = "400", Message = $"该任务号不存在:{request.WmsTaskId}" }; } AppWmsTask wmsTask = appWmsTasks.First(); if(request.TaskState?.ToString() == "20") { if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.moveTask) { /* 入库/移库 完成需要反馈WMS任务完成,更新任务状态为完成 */ string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "四向车上报完成", request.FactendCell); return new() { Code = string.IsNullOrEmpty(errText) ? "200" : "400", Message = string.IsNullOrEmpty(errText) ? "成功" : errText, WmsTaskId = request.WmsTaskId?.ToString() }; } if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask) { /* 更新任务状态为到达中间点 */ int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now, TaskMsg = "四向车上报到达中间点" }); return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() }; } return new() { Code = "400", Message = $"该任务不支持的类型:{request.WmsTaskId}" }; } if (request.TaskState?.ToString() == "21") { /* 更新任务状态为取消 */ int updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = "四向车取消", EndTime = DateTime.Now, ModifyTime = DateTime.Now }); return new() { Code = updateResult > 0 ? "200" : "400", Message = updateResult > 0 ? "成功" : "数据异常", WmsTaskId = request.WmsTaskId?.ToString() }; } return new() { Code = "400", Message = $"不支持的状态类型:{request.TaskState}" }; } }