| | |
| | | /// </summary> |
| | | /// <param name="taskDTOs">WMSä»»å¡å¯¹è±¡éå</param> |
| | | /// <returns>è¿åå¤çç»æ</returns> |
| | | public WebResponseContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO) |
| | | public WMSReceiveTaskContent ReceiveWMSTask([NotNull] WMSTaskDTO taskDTO) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | WMSReceiveTaskContent content = new WMSReceiveTaskContent(); |
| | | string errorMsg = ""; |
| | | try |
| | | { |
| | | lock (lock_taskReceive) |
| | | { |
| | | List<Dt_Task> tasks = new List<Dt_Task>(); |
| | | Dt_Task taskOld = BaseDal.QueryFirst(x=> taskDTO.Tasks.Select(x => x.TaskDescribe.ContainerCode).Contains(x.PalletCode)); |
| | | if (taskOld != null) throw new Exception($"æç®±{taskOld.PalletCode}"+(taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "å
¥åºä»»å¡å·²åå¨" : "åºåºä»»å¡å·²åå¨")); |
| | | 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()); |
| | | |
| | | Dt_LocationInfo? noOutLocation = locationInfos.FirstOrDefault(x=>x.LocationStatus != LocationStatusEnum.InStock.ObjToInt() || x.EnableStatus != EnableStatusEnum.Normal.ObjToInt()); |
| | | |
| | | if (noOutLocation != null) throw new Exception($"æç®±{noOutLocation.PalletCode}è´§ä½{noOutLocation.LocationCode}ç¶æä¸å¯åºåº"); |
| | | List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData(); |
| | | //ä¸åä»»å¡ç» |
| | | string taskGroup= taskDTO.TaskGroupCode.IsNullOrEmpty() ? Guid.NewGuid().ToString().Replace("-","") : taskDTO.TaskGroupCode; |
| | |
| | | //è·åæä½å° |
| | | 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); |
| | | if (taskOld != null) |
| | | { |
| | | errorMsg += $"æç®±{taskOld.PalletCode}" + (taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "å
¥åºä»»å¡å·²åå¨;" : "åºåºä»»å¡å·²åå¨;"); |
| | | content.FailData.Add(new BinCodeObj() { Bincode = item.TaskDescribe.ContainerCode }); |
| | | continue; |
| | | } |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == item.TaskDescribe.ContainerCode); |
| | | if (locationInfo == null) |
| | | { |
| | | 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) |
| | | { |
| | | errorMsg += $"æç®±{noOutLocation.PalletCode}è´§ä½{noOutLocation.LocationCode}ç¶æä¸å¯åºåº"; |
| | | content.FailData.Add(new BinCodeObj() { Bincode = noOutLocation.PalletCode }); |
| | | continue; |
| | | } |
| | | Dt_Task task = _mapper.Map<Dt_Task>(item); |
| | | |
| | | task.SourceAddress = locationInfo.LocationCode; |
| | | task.CurrentAddress = locationInfo.LocationCode; |
| | | task.NextAddress = stationManger.PickStationCode; |
| | |
| | | task.DeviceCode = stationManger.CraneCode; |
| | | task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt(); |
| | | tasks.Add(task); |
| | | content.SucessData.Add(new BinCodeObj() { Bincode = item.TaskDescribe.ContainerCode }); |
| | | } |
| | | |
| | | locationInfos.ForEach(x => |
| | |
| | | _locationInfoRepository.UpdateData(locationInfos); |
| | | _unitOfWorkManage.CommitTran(); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "æ¥æ¶WMSä»»å¡"); |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.InStock, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, tasks.Select(x => x.TaskNum).ToList()); |
| | | content = tasks.Count > 0 ? content.OK("æå!"+(errorMsg.IsNullOrEmpty()? "": errorMsg)) : content.Error("失败"); |
| | | if (tasks.Count>0) |
| | | { |
| | | _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.InStock, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, tasks); |
| | | } |
| | | content.OK(errorMsg.IsNullOrEmpty()? "æå": errorMsg); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | /// 容å¨å
¥åºåå»ºä»»å¡ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent ContainerFlow(ContainerFlowDTO containerFlowDTO, string deviceCode, string stationCode) |
| | | public WebResponseContent ContainerFlow(ContainerFlowDTO containerFlowDTO, string deviceCode, string stationCode, int type = 0) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | List<Dt_LocationInfo> locationInfos = _locationInfoRepository.QueryData(); |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == containerFlowDTO.ContainerCode); |
| | | if (locationInfo != null) throw new Exception($"åºä½æç®±å·{containerFlowDTO.ContainerCode}å·²åå¨"); |
| | | if (BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && x.DeviceCode== deviceCode) != null) |
| | | 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) |
| | | { |
| | | return content.OK(); |
| | | } |
| | | else if(BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode) != null) |
| | | if (taskOld != null && taskOld.PalletCode == containerFlowDTO.ContainerCode && taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() && taskOld.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && taskOld.DeviceCode != deviceCode) |
| | | { |
| | | throw new Exception($"æç®±å·{containerFlowDTO.ContainerCode}ä»»å¡å·²åå¨"); |
| | | Dt_StationManger stationOld = _stationMangerRepository.QueryFirst(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && x.StationDeviceCode == deviceCode); |
| | | string oldSlotCode = taskOld.SourceAddress; |
| | | taskOld.SourceAddress = containerFlowDTO.SlotCode; |
| | | taskOld.CurrentAddress = containerFlowDTO.SlotCode; |
| | | taskOld.NextAddress = stationOld.StationCode; |
| | | taskOld.DeviceCode = stationOld.StationDeviceCode; |
| | | //æ´æ°ä»»å¡ |
| | | BaseDal.UpdateData(taskOld); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { taskOld.TaskNum }, $"{oldSlotCode}æ¢è³{containerFlowDTO.SlotCode}å
¥åº"); |
| | | return content.OK(); |
| | | } |
| | | else if(taskOld != null) |
| | | { |
| | | throw new Exception($"æç®±å·{containerFlowDTO.ContainerCode}" + (taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "å
¥åºAGVæ§è¡ä¸": "åºåºAGVæ§è¡ä¸")); |
| | | } |
| | | Dt_LocationInfo? noInLocation = locationInfos.FirstOrDefault(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt()); |
| | | if (noInLocation == null) throw new Exception($"å¯ç¨è´§ä½ä¸è¶³!"); |
| | |
| | | task.Roadway = noInLocation.RoadwayNo; |
| | | task.DeviceCode = stationManger.StationDeviceCode; |
| | | task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt(); |
| | | |
| | | //æ·»å ä»»å¡ |
| | | BaseDal.AddData(task); |
| | | if (type > 0) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "æå¨æé®å
¥åº"); |
| | | } |
| | | else |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "å建å
¥åºä»»å¡"); |
| | | } |
| | | content.OK("æå"); |
| | | } |
| | | catch (Exception ex) |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | EPLightContent pLightContent = new EPLightContent(); |
| | | if (taskSendLight.TagNo=="B2") |
| | | { |
| | | List<EPLightSendDTO> lightSendDTOs = new List<EPLightSendDTO>() |
| | | { |
| | | new EPLightSendDTO |
| | | { |
| | | DOCNO = taskSendLight.DocNo, |
| | | TASKNO= taskSendLight.TaskNo, |
| | | LOCATION=taskSendLight.TagCode, |
| | | QUANTITY=taskSendLight.TagQunity, |
| | | LIGHTCOLOR=taskSendLight.Color switch |
| | | { |
| | | "Blue" => "1", |
| | | "Green" => "2", |
| | | "Red" => "4", |
| | | _ => throw new Exception($"æªæ¾å°é¢è²å®ä¹") |
| | | }, |
| | | ORDERTYPE=taskSendLight.Mode.ToString(), |
| | | LIGHTTYPE="1", |
| | | } |
| | | }; |
| | | EPLightContent pLightContent = PickOrderInfoRequest(lightSendDTOs); |
| | | if (pLightContent.Result != "0") throw new Exception($"{pLightContent.Msg}"); |
| | | content.OK(); |
| | | } |
| | | else |
| | | { |
| | | content.OK(); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | |
| | | CompleteType = 1 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSåºåºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") throw new Exception($"åºåºä»»å¡{task.TaskNum}WMSåºåºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"); |
| | | |
| | | _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); |
| | | 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)//å
¥åºä»»å¡å®æé»è¾ |
| | | { |
| | |
| | | CompleteType = 2 |
| | | }; |
| | | string request = JsonConvert.SerializeObject(containerInFinishDTO, settings); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSå
¥åºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") throw new Exception($"å
¥åºä»»å¡{task.TaskNum}WMSå
¥åºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"); |
| | | |
| | | Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress); |
| | | if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) |
| | | { |
| | |
| | | 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); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"{taskNum},æªæ¥æ¶å°WMSå
¥åºä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") content.Message = $"å
¥åºä»»å¡{task.TaskNum}WMSå
¥åºä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"; |
| | | } |
| | | content.OK("ä»»å¡å®æ"); |
| | | } |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// äºææç§å¢åä¼ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public EPLightContent WMSLightBack(List<TaskBackLight> taskBackLights) |
| | | { |
| | | EPLightContent content = new EPLightContent(); |
| | | try |
| | | { |
| | | string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSLightBack.ToString())?.ApiAddress; |
| | | if (string.IsNullOrEmpty(url)) |
| | | { |
| | | return content.Error($"æªæ¾å°æç§å¢ä¸æ¥,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | string request = JsonConvert.SerializeObject(taskBackLights, settings); |
| | | string response = HttpHelper.Post(url, request); |
| | | WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ?? throw new Exception($"æªæ¥æ¶å°æç§å¢ä¸æ¥è¿åå¼"); |
| | | if (wMSResponse.Code != "0") throw new Exception($"æç§å¢ä¸æ¥é误,ä¿¡æ¯:{wMSResponse.Msg}"); |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// äºææç§å¢ä¸å |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <returns></returns> |
| | | public EPLightContent PickOrderInfoRequest(List<EPLightSendDTO> lightSendDTOs) |
| | | { |
| | |
| | | { |
| | | return content.Error($"æªæ¾å°æç§å¢ä¸åæ¥å£,è¯·æ£æ¥æ¥å£é
ç½®"); |
| | | } |
| | | string request = JsonConvert.SerializeObject(lightSendDTOs, settings); |
| | | string request = JsonConvert.SerializeObject(lightSendDTOs, settings).ToUpper(); |
| | | //è°ç¨æ¥å£ |
| | | string response = HttpHelper.Post(url, request); |
| | | EPLightContent lightContent = JsonConvert.DeserializeObject<EPLightContent>(response) ?? throw new Exception($"æªæ¥æ¶å°æç§å¢ä¸å䏿¥è¿åå¼"); |