using WcsMain.ApiClient.AGV.Dto; using WcsMain.ApiServe.Dto.AGV; using WcsMain.Business.CommonAction; using WcsMain.Constant.Enum.Stacker; using WcsMain.DataBase.Dao; using WcsMain.DataBase.TableEntity; using WcsMain.Constant.WcsAttribute.AutoFacAttribute; namespace WcsMain.ApiServe.Service.AGVService; [Service] public class AGVService(AppWmsTaskDao wmsTaskDao, WCSTaskExecuteEvent taskExecuteEvent) { /// /// AGV 任务回告 /// /// /// public AGVResponseLayout> TaskCallBack(Dto.AGV.AGVRequestLayout> request) { var bodyData = request.Body; if(bodyData == default) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = "Body 未能正确解析" } }; } string? wmsTaskId = bodyData.Event?.RobotJobId; // 任务号 string? status = bodyData.Event?.State; // 状态 if(status == default || wmsTaskId == default) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = "任务号和状态未能正确解析" } }; } /* 实际业务处理 */ // 找到此任务 List? wmsTasks = wmsTaskDao.Select(new() { TaskId = wmsTaskId }); if(wmsTasks == default) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = "数据连接异常" } }; } if (wmsTasks.Count < 1) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = "该任务号不存在任务" } }; } AppWmsTask wmsTask = wmsTasks.First(); // 若是入库任务或者移库任务则在开始移动时上报WMS货物离开起始位置 if (status == "MOVE_BEGIN" && (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv)) { // 上报WMS任务已经开始 string? errText = taskExecuteEvent.LeaveStart(wmsTask); if (string.IsNullOrEmpty(errText)) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" } }; } return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" } }; } // 若是出库位置则在上报任务完成时上报WMS任务完成 if (status == "DONE" || status == "ABNORMAL_COMPLETED") { if(wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask || wmsTask.TaskType == (int)WmsTaskTypeEnum.agv) { string? errText = taskExecuteEvent.CompleteTaskEvent(wmsTask, "AGV上报完成", wmsTask.Destination); if (string.IsNullOrEmpty(errText)) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" } }; } return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = $"操作异常:{errText}" } }; } if(wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask) { var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.arriveMid, ModifyTime = DateTime.Now }); if(updateResult > 0) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" } }; } return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = $"操作异常,数据更新失败" } }; } } if(status == "CANCEL" || status == "ABNORMAL_CANCEL") { var updateResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskStatus = (int)WmsTaskStatusEnum.err, TaskMsg = status, ModifyTime = DateTime.Now }); if (updateResult > 0) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" } }; } return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" } }; } var updateAllResult = wmsTaskDao.Update(new() { TaskId = wmsTask.TaskId, TaskMsg = status, ModifyTime = DateTime.Now }); if (updateAllResult > 0) { return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "SUCCESS", Success = true, Message = "操作成功" } }; } return new() { Header = new() { RequestId = request.Header?.RequestId, Version = request.Header?.version, TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }, Body = new() { Code = "ERROR", Success = false, Message = $"操作异常数据更新失败" } }; } }