| | |
| | | using NPOI.XSSF.UserModel; |
| | | using RYB_PTL_API; |
| | | using SqlSugar; |
| | | using System.Collections.Generic; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.DirectoryServices.Protocols; |
| | | using System.Linq; |
| | |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | WriteLog.Write_Log("容å¨å
¥åºå建任å¡", $"è¾é线信æ¯", "å¼å§å
¥åº", $"æçå·{containerFlowDTO.ContainerCode}ï¼è®¾å¤{deviceCode}"); |
| | | List<Dt_LocationInfo> locationInfos = _locationInfoRepository.QueryData(); |
| | | Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == containerFlowDTO.ContainerCode); |
| | | if (locationInfo != null) throw new Exception($"åºä½æç®±å·{containerFlowDTO.ContainerCode}å·²åå¨"); |
| | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { taskOld.TaskNum }, $"{oldSlotCode}æ¢è³{containerFlowDTO.SlotCode}å
¥åº"); |
| | | return content.OK(); |
| | | } |
| | | else if(taskOld != null) |
| | | else if (taskOld != null) |
| | | { |
| | | throw new Exception($"æç®±å·{containerFlowDTO.ContainerCode}" + (taskOld.TaskType == TaskTypeEnum.Inbound.ObjToInt() ? "å
¥åºAGVæ§è¡ä¸": "åºåºAGVæ§è¡ä¸")); |
| | | 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($"å¯ç¨è´§ä½ä¸è¶³!"); |
| | | Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && x.StationDeviceCode == deviceCode); |
| | | WriteLog.Write_Log("容å¨å
¥åºå建任å¡", $"ç«å°ä¿¡æ¯", "æ¥è¯¢ç«å°", $"ç«å°å·{stationManger.StationCode}ï¼è®¾å¤{stationManger.StationDeviceCode}"); |
| | | //åå»ºä»»å¡ |
| | | Dt_Task task = new Dt_Task(); |
| | | task.PalletCode = containerFlowDTO.ContainerCode; |
| | |
| | | task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt(); |
| | | |
| | | //æ·»å ä»»å¡ |
| | | BaseDal.AddData(task); |
| | | int taskId = BaseDal.AddData(task); |
| | | WriteLog.Write_Log("容å¨å
¥åºå建任å¡", $"ä»»å¡ä¿¡æ¯", "å建å
¥åº", $"ä»»å¡å·ï¼{taskId},æçç¼å·ï¼{task.PalletCode}"); |
| | | if (type > 0) |
| | | { |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "æå¨æé®å
¥åº"); |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | WriteLog.Write_Log("容å¨å
¥åºå建任å¡", $"ä»»å¡", "å建å
¥åº", $"失败ï¼{ex.Message}"); |
| | | content.Error($"é误信æ¯:{ex.Message}"); |
| | | } |
| | | return content; |
| | |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// 人工æå¨åæ¶æå®ä»»å¡ |
| | | /// </summary> |
| | | /// <param name="taskNum">ä»»å¡ç¼å·</param> |
| | | /// <returns>æä½ç»æ</returns> |
| | | public WebResponseContent ManualTaskCancellation(int taskNum) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | // 1. è·åä»»å¡ä¿¡æ¯ |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == 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 = ""; // æ¸
空æçå· |
| | | // æ´æ°æ°æ®åº |
| | | _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 |
| | | { |
| | | content.Error("åªè½å
¥åºä»»å¡åæ¶ï¼"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | content.Error($"åæ¶å¤±è´¥: {ex.Message}"); |
| | | // è®°å½è¯¦ç»é误 |
| | | _taskExecuteDetailService.AddTaskExecuteDetail( |
| | | new Dt_Task { TaskNum = taskNum }, |
| | | $"ä»»å¡åæ¶å¼å¸¸: {ex.Message}" |
| | | ); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// ä»»å¡åæ¶ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent TaskCancelCompleted(int taskNum) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | 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.Cancel.ObjToInt(); |
| | | locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); |
| | | _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); |
| | | content.OK(); |
| | | } |
| | | else |
| | | { |
| | | content.Error($"æªæ¾å°åºåºä»»å¡{taskNum}"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// ä»»å¡åæ¶ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent TaskCancel(List<TaskCancel> taskCancels) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | if (taskCancels==null || taskCancels.Count<=0) |
| | | { |
| | | return content.Error("ä¼ å
¥ä¸è½ä¸ºç©º"); |
| | | } |
| | | //è·åæææç®± |
| | | List<Dt_Task> outTasks = BaseDal.QueryData(x=>x.TaskType==TaskTypeEnum.Outbound.ObjToInt()); |
| | | List<Dt_Task> cancelTasks = new List<Dt_Task>(); |
| | | List<Dt_Task> cancelTasksCompleted = new List<Dt_Task>(); |
| | | //夿æ¯å¦æä»»å¡åå¨ |
| | | foreach (var item in taskCancels) |
| | | { |
| | | Dt_Task? taskExist = outTasks.FirstOrDefault(x=>x.PalletCode== item.ContainerCode); |
| | | if (taskExist==null) |
| | | { |
| | | content.Message += $"{item.ContainerCode}ä»»å¡ä¸åå¨"; |
| | | continue; |
| | | } |
| | | if (taskExist.TaskState==TaskStatusEnum.AGV_TakeFinish.ObjToInt()) |
| | | { |
| | | taskExist.IsCancel = 1; |
| | | cancelTasks.Add(taskExist); |
| | | } |
| | | else if(taskExist.TaskState == TaskStatusEnum.AGV_Executing.ObjToInt()) |
| | | { |
| | | cancelTasksCompleted.Add(taskExist); |
| | | } |
| | | else |
| | | { |
| | | return content.Error($"ä»»å¡åæ¶å¤±è´¥{item.TaskCode}ä»»å¡ç¶æä¸å¯åæ¶ï¼"); |
| | | } |
| | | |
| | | } |
| | | _unitOfWorkManage.BeginTran(); |
| | | BaseDal.UpdateData(cancelTasks); |
| | | foreach (var item in cancelTasksCompleted) |
| | | { |
| | | WebResponseContent responseContent = TaskCancelCompleted(item.TaskNum); |
| | | if (!responseContent.Status) |
| | | { |
| | | throw new Exception(responseContent.Message); |
| | | } |
| | | } |
| | | _unitOfWorkManage.CommitTran(); |
| | | cancelTasks.AddRange(cancelTasksCompleted); |
| | | foreach (var item in cancelTasks) |
| | | { |
| | | AgvTaskCancelDTO agvTaskCancel = new AgvTaskCancelDTO() |
| | | { |
| | | RequestId= DateTime.Now.ToString("yyMMddHHmmssfff"), |
| | | MissionCode=item.GroupId, |
| | | ContainerCode=item.PalletCode, |
| | | Position="", |
| | | CancelMode= "CTU_REDIRECT_START", |
| | | Reason="" |
| | | }; |
| | | AgvCancelTask(agvTaskCancel); |
| | | } |
| | | content.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// äºææç§å¢åä¼ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | |
| | | } |
| | | return content; |
| | | } |
| | | /// <summary> |
| | | /// éç½®ææå¼å¸¸ä»»å¡ |
| | | /// </summary> |
| | | public WebResponseContent ResetAllExceptionTask(int taskNum) |
| | | { |
| | | // è·åå¼å¸¸ä»»å¡990ä¿®æ¹ä¸ºAGVå¾
æ§è¡300 |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); |
| | | if (task.TaskState != (int)TaskStatusEnum.Exception) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯éç½®,ä»»å¡å·:ã{taskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | task.TaskState = (int)TaskStatusEnum.AGV_Execute; |
| | | BaseDal.UpdateData(task); |
| | | //_taskExecuteDetailService.AddTaskExecuteDetail(task, $"人工éç½®å¼å¸¸ä»»å¡,éç½®åä»»å¡ç¶æã{task.TaskState}ã"); |
| | | content = WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content.Error(ex.Message); |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | } |
| | | } |