| | |
| | | |
| | | public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList(); |
| | | |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository,ILocationInfoRepository locationInfoRepository,IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService,ILocationStatusChangeRecordService locationStatusChangeRecordService,IErrorInfoRepository errorInfoRepository) : base(BaseDal) |
| | | public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository, ILocationInfoRepository locationInfoRepository, IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService, ILocationStatusChangeRecordService locationStatusChangeRecordService, IErrorInfoRepository errorInfoRepository) : base(BaseDal) |
| | | { |
| | | _mapper = mapper; |
| | | _cacheService = cacheService; |
| | |
| | | _locationInfoRepository = locationInfoRepository; |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _locationInfoService = locationInfoService; |
| | | _locationStatusChangeRecordService=locationStatusChangeRecordService; |
| | | _locationStatusChangeRecordService = locationStatusChangeRecordService; |
| | | _errorInfoRepository = errorInfoRepository; |
| | | } |
| | | static object lock_taskReceive = new object(); |
| | |
| | | { |
| | | WriteLog.Write_Log("å
¥åºä»»å¡ä¸å", "WMSå
¥åºä»»å¡æ¥æ¶åæ°", "æ¥æ¶åæ°", $"åæ°ï¼{taskDTO.ToJson()}"); |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | List<Dt_Task> taskOlds = BaseDal.QueryData(x=> taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).Contains(x.PalletCode)); |
| | | List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetCanOut(taskDTO.Tasks.Select(x=>x.TaskDescribe.ContainerCode).ToList()); |
| | | List<Dt_Task> taskOlds = BaseDal.QueryData(x => taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).Contains(x.PalletCode)); |
| | | List<Dt_LocationInfo> locationInfos = _locationInfoRepository.GetCanOut(taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).ToList()); |
| | | List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(); |
| | | ////ä¸åä»»å¡ç» |
| | | //string taskGroup= taskDTO.TaskGroupCode.IsNullOrEmpty() ? Guid.NewGuid().ToString().Replace("-","") : taskDTO.TaskGroupCode; |
| | | foreach (var item in taskDTO.Tasks.OrderBy(x=>x.TaskDescribe.ToStationCode)) |
| | | foreach (var item in taskDTO.Tasks.OrderBy(x => x.TaskDescribe.ToStationCode)) |
| | | { |
| | | if (item.TaskDescribe.ToStationCode.IsNullOrEmpty()) throw new Exception($"ä»»å¡{item.TaskCode}åºåºç®æ æä½å°ä¸è½ä¸ºç©º"); |
| | | //è·åæä½å° |
| | | Dt_StationManger? stationManger = stationMangers.FirstOrDefault(x => x.PickStationCode == item.TaskDescribe.ToStationCode); |
| | | if (stationManger == null) throw new Exception($"ä»»å¡{item.TaskCode}åºåºç®æ æä½å°{item.TaskDescribe.ToStationCode}ä¸åå¨"); |
| | | Dt_Task? taskOld = taskOlds.FirstOrDefault(x=>x.PalletCode==item.TaskDescribe.ContainerCode); |
| | | Dt_Task? taskOld = taskOlds.FirstOrDefault(x => x.PalletCode == item.TaskDescribe.ContainerCode); |
| | | if (taskOld != null) |
| | | { |
| | | errorMsg += $"æç®±{taskOld.PalletCode}" + (taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "å
¥åºä»»å¡å·²åå¨;" : "åºåºä»»å¡å·²åå¨;"); |
| | |
| | | errorMsg += $"æç®±{item.TaskDescribe.ContainerCode}ä¸åå¨;"; |
| | | content.FailData.Add(new BinCodeObj() { Bincode = item.TaskDescribe.ContainerCode }); |
| | | continue; |
| | | }; |
| | | } |
| | | Dt_LocationInfo? noOutLocation = locationInfos.FirstOrDefault(x => (x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() || x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()) && x.PalletCode == item.TaskDescribe.ContainerCode); |
| | | if (noOutLocation != null) |
| | | { |
| | |
| | | |
| | | locationInfos.ForEach(x => |
| | | { |
| | | x.LocationStatus=LocationStatusEnum.Lock.ObjToInt(); |
| | | x.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); |
| | | }); |
| | | //æ·»å 任塿´æ°è´§ä½æ°æ® |
| | | _unitOfWorkManage.BeginTran(); |
| | |
| | | _locationInfoRepository.UpdateData(locationInfos); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "æ¥æ¶WMSä»»å¡"); |
| | | if (tasks.Count>0) |
| | | if (tasks.Count > 0) |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.InStock, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, tasks); |
| | | } |
| | | content.OK(errorMsg.IsNullOrEmpty()? "æå": errorMsg); |
| | | content.OK(errorMsg.IsNullOrEmpty() ? "æå" : errorMsg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 容å¨å
¥åºåå»ºä»»å¡ |
| | | /// </summary> |
| | |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == containerFlowDTO.ContainerCode); |
| | | if (locationInfo != null) throw new Exception($"åºä½æç®±å·{containerFlowDTO.ContainerCode}å·²åå¨"); |
| | | Dt_Task taskOld = BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode); |
| | | if (taskOld !=null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode == deviceCode) |
| | | if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode == deviceCode) |
| | | { |
| | | Thread.Sleep(500); |
| | | //Thread.Sleep(500); |
| | | return content.OK(); |
| | | } |
| | | if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode != deviceCode) |
| | |
| | | task.Roadway = noInLocation.RoadwayNo; |
| | | task.DeviceCode = stationManger.StationDeviceCode; |
| | | task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt(); |
| | | |
| | | |
| | | //æ·»å ä»»å¡ |
| | | int taskId = BaseDal.AddData(task); |
| | | if (type > 0) |
| | |
| | | /// ç³è¯·å
¥åº |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent RequestInTask(string stationCode,string barCode) |
| | | public WebResponseContent RequestInTask(string stationCode, string barCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | lock (lock_requestInTask) |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType==TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt()); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt()); |
| | | if (task == null) throw new Exception($"{barCode}æç®±æªæ¾å°ä»»å¡!"); |
| | | Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation(); |
| | | if (locationInfo == null) throw new Exception($"å¯ç¨è´§ä½ä¸è¶³!"); |
| | |
| | | return content; |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// æ¥åWMSæå¨å®æä»»å¡ |
| | | /// </summary> |
| | |
| | | /// <returns></returns> |
| | | public WebResponseContent AgvTaskFlow(string code) |
| | | { |
| | | WebResponseContent content=new WebResponseContent(); |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | WriteLog.Write_Log("AGV任塿¾è¡", "AGV任塿¾è¡æ¥å£", "æç®±å·", $"æç®±ï¼{code}"); |
| | |
| | | /// WMSæç®±å°è¾¾æ£éä½ä¸æ¥ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent WMSPickUp(string stationCode,string pickCode) |
| | | public WebResponseContent WMSPickUp(string stationCode, string pickCode) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | } |
| | | return content; |
| | | } |
| | | // å¨ç±»ä¸æ·»å éæé对象 |
| | | private static readonly object _taskCompleteLock = new object(); |
| | | |
| | | /// <summary> |
| | | /// ä»»å¡å®æ |
| | | /// </summary> |
| | |
| | | public WebResponseContent TaskCompleted(int taskNum) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | WriteLog.Write_Log("ä»»å¡å®æ", "ä»»å¡å®ææ¥å£", "ä»»å¡å·", $"ä»»å¡ï¼{taskNum}"); |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//åºåºä»»å¡å®æé»è¾ |
| | | { |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x=>x.PalletCode==task.PalletCode); |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | { |
| | | return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | } |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | locationInfo.PalletCode = ""; |
| | | //æç®±åºåºå®æä¸æ¥ç»WMS |
| | | string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(url)) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | return content.Error($"{taskNum},æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | { |
| | | TaskCode = task.TaskNum.ToString(), |
| | | ContainerCode = task.PalletCode, |
| | | StationCode = task.TargetAddress, |
| | | LocationCode = task.SourceAddress, |
| | | CompleteType = 1 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WriteLog.Write_Log("WMSåºåºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSåºåºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") content.Message=$"åºåºä»»å¡{task.TaskNum}WMSåºåºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | } |
| | | else if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//å
¥åºä»»å¡å®æé»è¾ |
| | | { |
| | | string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(url)) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | return content.Error($"{taskNum},æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | { |
| | | TaskCode = task.TaskNum.ToString(), |
| | | ContainerCode = task.PalletCode, |
| | | StationCode = task.SourceAddress, |
| | | LocationCode = task.TargetAddress, |
| | | CompleteType = 2 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | { |
| | | return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | } |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | locationInfo.PalletCode = task.PalletCode; |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WriteLog.Write_Log("WMSå
¥åºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSå
¥åºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") content.Message = $"å
¥åºä»»å¡{task.TaskNum}WMSå
¥åºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | } |
| | | content.OK("ä»»å¡å®æ"); |
| | | } |
| | | catch (Exception ex) |
| | | // 使ç¨éç¡®ä¿åä¸ä»»å¡ä¸ä¼å¹¶åå¤ç |
| | | lock (_taskCompleteLock) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | try |
| | | { |
| | | WriteLog.Write_Log("ä»»å¡å®æ", "ä»»å¡å®ææ¥å£", "ä»»å¡å·", $"ä»»å¡ï¼{taskNum}"); |
| | | |
| | | // 忬¡æ¥è¯¢ä»»å¡ç¶æï¼é²æ¢å¨éçå¾
æé´ä»»å¡ç¶æå·²æ¹å |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) |
| | | { |
| | | return content.Error($"ä»»å¡{taskNum}ä¸åå¨"); |
| | | } |
| | | |
| | | // æ£æ¥ä»»å¡ç¶æï¼é¿å
éå¤å®æ |
| | | if (task.TaskState == TaskStatusEnum.Finish.ObjToInt()) |
| | | { |
| | | return content.Error($"ä»»å¡{taskNum}已宿ï¼è¯·å¿é夿ä½"); |
| | | } |
| | | |
| | | if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//åºåºä»»å¡å®æé»è¾ |
| | | { |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | { |
| | | return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | } |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | locationInfo.PalletCode = ""; |
| | | //æç®±åºåºå®æä¸æ¥ç»WMS |
| | | string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(url)) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | return content.Error($"{taskNum},æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | { |
| | | TaskCode = task.TaskNum.ToString(), |
| | | ContainerCode = task.PalletCode, |
| | | StationCode = task.TargetAddress, |
| | | LocationCode = task.SourceAddress, |
| | | CompleteType = 1 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WriteLog.Write_Log("WMSåºåºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSåºåºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") content.Message = $"åºåºä»»å¡{task.TaskNum}WMSåºåºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | } |
| | | else if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//å
¥åºä»»å¡å®æé»è¾ |
| | | { |
| | | string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(url)) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | return content.Error($"{taskNum},æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | { |
| | | TaskCode = task.TaskNum.ToString(), |
| | | ContainerCode = task.PalletCode, |
| | | StationCode = task.SourceAddress, |
| | | LocationCode = task.TargetAddress, |
| | | CompleteType = 2 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | { |
| | | return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | } |
| | | task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | locationInfo.PalletCode = task.PalletCode; |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WriteLog.Write_Log("WMSå
¥åºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSå
¥åºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") content.Message = $"å
¥åºä»»å¡{task.TaskNum}WMSå
¥åºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | } |
| | | content.OK("ä»»å¡å®æ"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | return content; |
| | | } |
| | | ///// <summary> |
| | | ///// ä»»å¡å®æ |
| | | ///// </summary> |
| | | ///// <param name="taskNum"></param> |
| | | ///// <returns></returns> |
| | | //public WebResponseContent TaskCompleted(int taskNum) |
| | | //{ |
| | | // WebResponseContent content = new WebResponseContent(); |
| | | // try |
| | | // { |
| | | // WriteLog.Write_Log("ä»»å¡å®æ", "ä»»å¡å®ææ¥å£", "ä»»å¡å·", $"ä»»å¡ï¼{taskNum}"); |
| | | // Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | // if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup)//åºåºä»»å¡å®æé»è¾ |
| | | // { |
| | | // Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.PalletCode == task.PalletCode); |
| | | // if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | // { |
| | | // return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | // } |
| | | // task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | // locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); |
| | | // locationInfo.PalletCode = ""; |
| | | // //æç®±åºåºå®æä¸æ¥ç»WMS |
| | | // string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | // if (string.IsNullOrEmpty(url)) |
| | | // { |
| | | // _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // return content.Error($"{taskNum},æªæ¾å°WMSåºåºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // } |
| | | // ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | // { |
| | | // TaskCode = task.TaskNum.ToString(), |
| | | // ContainerCode = task.PalletCode, |
| | | // StationCode = task.TargetAddress, |
| | | // LocationCode = task.SourceAddress, |
| | | // CompleteType = 1 |
| | | // }; |
| | | // string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | // _unitOfWorkManage.BeginTran(); |
| | | // _locationInfoRepository.UpdateData(locationInfo); |
| | | // BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | // _unitOfWorkManage.CommitTran(); |
| | | // _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum); |
| | | // //è°ç¨æ¥å£ |
| | | // string response = HttpHelper.Post(url, request); |
| | | // WriteLog.Write_Log("WMSåºåºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | // WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSåºåºä¸æ¥è¿åå¼"); |
| | | // if (wMSResponse.Code != "0") content.Message = $"åºåºä»»å¡{task.TaskNum}WMSåºåºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | // } |
| | | // else if (task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//å
¥åºä»»å¡å®æé»è¾ |
| | | // { |
| | | // string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInOutBoundBack.ToString())?.ApiAddress; |
| | | // if (string.IsNullOrEmpty(url)) |
| | | // { |
| | | // _taskExecuteDetailService.AddTaskExecuteDetail(task, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // UpdateTaskExceptionMessage(taskNum, $"æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // return content.Error($"{taskNum},æªæ¾å°WMSå
¥åºä¸æ¥æ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | // } |
| | | // ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO() |
| | | // { |
| | | // TaskCode = task.TaskNum.ToString(), |
| | | // ContainerCode = task.PalletCode, |
| | | // StationCode = task.SourceAddress, |
| | | // LocationCode = task.TargetAddress, |
| | | // CompleteType = 2 |
| | | // }; |
| | | // string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | |
| | | // Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | // if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | // { |
| | | // return content.Error($"{locationInfo.LocationCode}è´§ä½ç¶æä¸æ£ç¡®"); |
| | | // } |
| | | // task.TaskState = TaskStatusEnum.Finish.ObjToInt(); |
| | | // locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | // locationInfo.PalletCode = task.PalletCode; |
| | | // _unitOfWorkManage.BeginTran(); |
| | | // _locationInfoRepository.UpdateData(locationInfo); |
| | | // BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.èªå¨å®æ : OperateTypeEnum.äººå·¥å®æ); |
| | | // _unitOfWorkManage.CommitTran(); |
| | | // _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum); |
| | | // //è°ç¨æ¥å£ |
| | | // string response = HttpHelper.Post(url, request); |
| | | // WriteLog.Write_Log("WMSå
¥åºä»»å¡å®æåä¼ ", "ä»»å¡å®ææ¥å£", "ä»»å¡ä¿¡æ¯", $"请æ±ï¼{request}ï¼åä¼ ï¼{response}"); |
| | | // WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSå
¥åºä¸æ¥è¿åå¼"); |
| | | // if (wMSResponse.Code != "0") content.Message = $"å
¥åºä»»å¡{task.TaskNum}WMSå
¥åºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | // } |
| | | // content.OK("ä»»å¡å®æ"); |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // _unitOfWorkManage.RollbackTran(); |
| | | // content.Error(ex.Message); |
| | | // } |
| | | // return content; |
| | | //} |
| | | /// <summary> |
| | | /// 人工æå¨åæ¶æå®ä»»å¡ |
| | | /// </summary> |
| | |
| | | WriteLog.Write_Log("ä»»å¡åæ¶æ¥æ¶", "人工æå¨åæ¶æå®ä»»å¡", "ä»»å¡å·", $"ä»»å¡ï¼{taskNum}"); |
| | | // 1. è·åä»»å¡ä¿¡æ¯ |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null)return content.Error($"ä»»å¡{taskNum}ä¸åå¨"); |
| | | if (task == null) return content.Error($"ä»»å¡{taskNum}ä¸åå¨"); |
| | | |
| | | TaskTypeGroup group = task.TaskType.GetTaskTypeGroup(); |
| | | if (group == TaskTypeGroup.InboundGroup)// å
¥åºä»»å¡åæ¶ |
| | | { |
| | | // è·åç®æ è´§ä½ |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (locationInfo == null)return content.Error($"ç®æ è´§ä½{task.TargetAddress}ä¸åå¨"); |
| | | // éªè¯è´§ä½ç¶æ |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | return content.Error($"{task.TargetAddress}è´§ä½ç¶æå¼å¸¸ï¼æ æ³åæ¶"); |
| | | |
| | | // æ¢å¤è´§ä½ç¶æ |
| | | locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // æ¢å¤ä¸ºç©ºé²ç¶æ |
| | | locationInfo.PalletCode = ""; // æ¸
空æçå· |
| | | // æ´æ°æ°æ®åº |
| | | if (locationInfo != null) |
| | | { |
| | | locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); // æ¢å¤ä¸ºç©ºé²ç¶æ |
| | | locationInfo.PalletCode = ""; // æ¸
空æçå· |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | content.OK("ä»»å¡åæ¶æå"); |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | _locationInfoRepository.UpdateData(locationInfo); |
| | | BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.人工å é¤); |
| | | _unitOfWorkManage.CommitTran(); |
| | | //return content.Error($"ç®æ è´§ä½{task.TargetAddress}ä¸åå¨"); |
| | | // éªè¯è´§ä½ç¶æ |
| | | //if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | // return content.Error($"{task.TargetAddress}è´§ä½ç¶æå¼å¸¸ï¼æ æ³åæ¶"); |
| | | |
| | | // æ¢å¤è´§ä½ç¶æ |
| | | |
| | | // æ´æ°æ°æ®åº |
| | | //_unitOfWorkManage.BeginTran(); |
| | | //_locationInfoRepository.UpdateData(locationInfo); |
| | | //BaseDal.DeleteAndMoveIntoHty(task, OperateTypeEnum.人工å é¤); |
| | | //_unitOfWorkManage.CommitTran(); |
| | | // è®°å½ç¶æåæ´ |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord( |
| | | locationInfo, |
| | | LocationStatusEnum.Lock, |
| | | LocationStatusEnum.Free, |
| | | LocationChangeType.InboundCancelled, |
| | | task.TaskNum |
| | | ); |
| | | |
| | | content.OK("ä»»å¡åæ¶æå"); |
| | | } |
| | | else |
| | |
| | | { |
| | | AgvTaskCancelDTO agvTaskCancel = new AgvTaskCancelDTO() |
| | | { |
| | | RequestId= DateTime.Now.ToString("yyMMddHHmmssfff"), |
| | | MissionCode=item.GroupId, |
| | | ContainerCode=item.PalletCode, |
| | | Position="", |
| | | CancelMode= "CTU_REDIRECT_START", |
| | | Reason="" |
| | | RequestId = DateTime.Now.ToString("yyMMddHHmmssfff"), |
| | | MissionCode = item.GroupId, |
| | | ContainerCode = item.PalletCode, |
| | | Position = "", |
| | | CancelMode = "CTU_REDIRECT_START", |
| | | Reason = "" |
| | | }; |
| | | AgvCancelTask(agvTaskCancel); |
| | | } |
| | |
| | | return content; |
| | | } |
| | | |
| | | public WebResponseContent WmsRecovery() |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | // å é¤ç¬¬ä¸ä¸ªå¼å¸¸ |
| | | // æå建æ¶é´ååºè·åç¬¬ä¸æ¡è®°å½ |
| | | var orderBy = new Dictionary<string, OrderByType> |
| | | { |
| | | { "CreateDate", OrderByType.Asc } |
| | | }; |
| | | Dt_ErrorInfo errorInfo = _errorInfoRepository.QueryFirst(x => true, orderBy); |
| | | if (errorInfo == null) |
| | | { |
| | | return content.Error("å½å没æå¼å¸¸ä»»å¡"); |
| | | } |
| | | // è·å第ä¸ä¸ªå¼å¸¸ï¼æå建æ¶é´æåºï¼ |
| | | _unitOfWorkManage.BeginTran(); |
| | | _errorInfoRepository.DeleteData(errorInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | // 䏿¥æ¢å¤ |
| | | string? apiErrorBack = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSErrorBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(apiErrorBack)) throw new Exception($"æªæ¾å°WMSæ
é䏿¥,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | TaskError taskError = new TaskError() |
| | | { |
| | | MsgID = errorInfo.Id, |
| | | StationCode = errorInfo.StationCode, |
| | | MsgCode = 0, |
| | | Msg = "æ¢å¤" |
| | | }; |
| | | string reqErrorBack = JsonConvert.SerializeObject(taskError, settings); |
| | | HttpHelper.Post(apiErrorBack, reqErrorBack); |
| | | return content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return content.Error(ex.Message); |
| | | throw new Exception(ex.Message); |
| | | } |
| | | } |
| | | } |
| | | } |