| | |
| | | #region << ç æ¬ 注 é >> |
| | | #region << ç æ¬ 注 é >> |
| | | /*---------------------------------------------------------------- |
| | | * å½å空é´ï¼WIDESEAWCS_TaskInfoService |
| | | * å建è
ï¼è¡ç«¥åº |
| | |
| | | #endregion << ç æ¬ 注 é >> |
| | | |
| | | using AutoMapper; |
| | | using HslCommunication.Enthernet; |
| | | using Newtonsoft.Json; |
| | | using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; |
| | | using SqlSugar; |
| | | using System.Diagnostics.CodeAnalysis; |
| | | using System.Threading.Tasks; |
| | | using WIDESEA_Comm.Http; |
| | | using WIDESEAWCS_Common.TaskEnum; |
| | | using WIDESEAWCS_Core; |
| | | using WIDESEAWCS_Core.BaseRepository; |
| | |
| | | private readonly IRepository<Dt_Router> _routerRepository; |
| | | private readonly IRepository<Dt_StationManger> _stationMangerRepository; |
| | | private readonly IMapper _mapper; |
| | | private readonly ITaskHtyService _taskHtyService; |
| | | |
| | | |
| | | private Dictionary<string, OrderByType> _taskOrderBy = new() |
| | | { |
| | |
| | | |
| | | public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); |
| | | |
| | | public string urlWMSMovelibraryTask = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlWMSMovelibraryTask"]; |
| | | public string urlTaskCompleted = WIDESEAWCS_Core.Helper.AppSettings.Configuration["urlTaskCompleted"]; |
| | | |
| | | /// <summary> |
| | | /// ä»å¨å±(æ°æ®åºè®¿é®) |
| | | /// </summary> |
| | | public IRepository<Dt_Task> Repository => BaseDal; |
| | | |
| | | public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, IUnitOfWorkManage unitOfWorkManage, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, IMapper mapper, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository) : base(BaseDal) |
| | | public TaskService(IRepository<Dt_Task> BaseDal, IRouterService routerService, IUnitOfWorkManage unitOfWorkManage, ITaskExecuteDetailService taskExecuteDetailService, IRepository<Dt_TaskExecuteDetail> taskExecuteDetailRepository, IMapper mapper, IRepository<Dt_Router> routerRepository, IRepository<Dt_StationManger> stationMangerRepository, ITaskHtyService taskHtyService) : base(BaseDal) |
| | | { |
| | | _routerService = routerService; |
| | | _taskExecuteDetailService = taskExecuteDetailService; |
| | |
| | | _mapper = mapper; |
| | | _routerRepository = routerRepository; |
| | | _stationMangerRepository = stationMangerRepository; |
| | | _taskHtyService = taskHtyService; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | continue; |
| | | } |
| | | Dt_Task task = _mapper.Map<Dt_Task>(item); |
| | | task.TaskState = item.TaskStatus; |
| | | |
| | | |
| | | Dt_Router? router; |
| | | |
| | | TaskTypeGroup taskTypeGroup = item.TaskType.GetTaskTypeGroup(); |
| | | Dt_StationManger? stationManger; |
| | | if (taskTypeGroup == TaskTypeGroup.InboundGroup) |
| | | { |
| | | task.Creater = "WMS"; |
| | | task.TaskState = (int)TaskStatusEnum.New.ObjToInt(); |
| | | stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.CurrentAddress || x.StationDeviceCode == item.SourceAddress); |
| | | task.DeviceCode = stationManger.StationDeviceCode; |
| | | } |
| | | else |
| | | { |
| | | stationManger = stationMangers.FirstOrDefault(x => x.StationCode == item.NextAddress || x.StationDeviceCode == item.NextAddress); |
| | | task.DeviceCode = stationManger.StationDeviceCode; |
| | | List<Dt_Router> routers = routersAll.Where(x => x.InOutType == RouterInOutType.Out && (item.NextAddress == x.StartPosi || item.RoadWay == x.StartPosi /*|| item.RoadWay == x.ChildPosiDeviceCode || item.RoadWay == x.ChildPosi*/)).ToList(); |
| | | router = routers.FirstOrDefault(); |
| | | if (router == null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"æªæ¾å°è·¯ç±é
置信æ¯"); |
| | | } |
| | | //task.NextAddress = stationManger.StackerCraneStationCode; |
| | | task.TargetAddress = router.NextPosi; |
| | | //åºåº |
| | | } |
| | | tasks.Add(task); |
| | | } |
| | | BaseDal.AddData(tasks); |
| | |
| | | /// <returns></returns> |
| | | public Dt_Task QueryConveyorLineTask(string deviceNo, string currentAddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => (TaskInboundTypes.Contains(x.TaskType) && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null) |
| | | { |
| | | if (taskTypeGroup == null) |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskInStatusEnum.InNew, TaskOrderBy); |
| | | if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup) |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_Execute, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType), TaskOrderBy); |
| | | if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.SC_Execute, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType), TaskOrderBy); |
| | | return null; |
| | | } |
| | | /// <summary> |
| | |
| | | /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> |
| | | public Dt_Task QueryStackerCraneInTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); |
| | | else |
| | | return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskInboundTypeEnum.Inbound && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡ï¼å¯è½ä¸ºnull</returns> |
| | | public Dt_Task QueryStackerCraneOutTask(string deviceNo, string currentAddress = "") |
| | | { |
| | | if (string.IsNullOrEmpty(currentAddress)) |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); |
| | | else |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="deviceNo">设å¤ç¼å·</param> |
| | | /// <param name="currentAddress">å½åå°å</param> |
| | | /// <returns>è¿åä»»å¡å®ä½å¯¹è±¡éåï¼å¯è½ä¸ºnull</returns> |
| | | public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo, List<string> outStationCodes) |
| | | public List<Dt_Task> QueryStackerCraneOutTasks(string deviceNo) |
| | | { |
| | | return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && outStationCodes.Contains(x.CurrentAddress), TaskOrderBy); |
| | | return BaseDal.QueryData(x => x.Roadway == deviceNo && x.TaskType == (int)TaskOutboundTypeEnum.Outbound && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | try |
| | | { |
| | | int oldState = task.TaskState; |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound) |
| | | { |
| | | if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | |
| | | task.TaskState = nextStatus; |
| | | if (task.TaskState == (int)TaskOutStatusEnum.SC_OutFinish) |
| | | { |
| | | task.TaskState = (int)TaskOutStatusEnum.Line_OutFinish; |
| | | } |
| | | else |
| | | { |
| | | task.TaskState = (int)TaskOutStatusEnum.SC_OutExecuting; |
| | | } |
| | | task.Dispatchertime = DateTime.Now; |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) |
| | | else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound) |
| | | { |
| | | if (task.TaskState >= (int)TaskInStatusEnum.InFinish) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | |
| | | if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) |
| | | //int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | task.TaskState = (int)TaskInStatusEnum.SC_InExecuting; |
| | | task.Dispatchertime = DateTime.Now; |
| | | } |
| | | else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) |
| | | { |
| | | if (task.TaskState != (int)TaskRelocationStatusEnum.RelocationNew) |
| | | { |
| | | Random random = new Random(); |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.NextAddress = $"{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}-{random.Next(1, 100).ToString().PadLeft(3, '0')}"; |
| | | task.TargetAddress = task.NextAddress; |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationExecuting; //ä¸åç§»åºä»»å¡ |
| | | } |
| | | else |
| | | { |
| | |
| | | return content = WebResponseContent.Instance.Error($"该任å¡ç¶æä¸å¯è·³è½¬å°ä¸ä¸æ¥,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç¶æ:ã{task.TaskState}ã"); |
| | | } |
| | | |
| | | |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | BaseDal.UpdateData(task); |
| | | bool res = BaseDal.UpdateData(task); |
| | | if (!res) |
| | | { |
| | | return content = WebResponseContent.Instance.Error($"æ´æ°ä»»å¡ä¿¡æ¯å¤±è´¥,ä»»å¡å·:ã{task.TaskNum}ã"); |
| | | } |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"人工æå¨å°ä»»å¡ç¶æä»ã{oldState}ã跳转å°ã{task.TaskState}ã" : $"ç³»ç»èªå¨æµç¨ï¼ä»»å¡ç¶æä»ã{oldState}ã转å°ã{task.TaskState}ã"); |
| | | |
| | |
| | | /// </summary> |
| | | /// <param name="taskNum">ä»»å¡ç¼å·</param> |
| | | /// <returns>è¿åå¤çç»æ</returns> |
| | | public WebResponseContent StackCraneTaskCompleted(int taskNum) |
| | | /*public WebResponseContent StackCraneTaskCompleted(int taskNum) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}ã"); |
| | | |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) |
| | | if (task.TaskType == (int)TaskOutboundTypeEnum.Outbound && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) |
| | | { |
| | | List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); |
| | | if (!routers.Any()) return WebResponseContent.Instance.Error($"æªæ¾å°è®¾å¤è·¯ç±ä¿¡æ¯"); |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.NextAddress = routers.FirstOrDefault().ChildPosi; |
| | | task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | BaseDal.UpdateData(task); |
| | | content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}"); |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºåºåºå®æ"); |
| | | //todo 忥å°WMS |
| | | WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task); |
| | | HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>()); |
| | | //æä¸èèå¤ä¸ªåºåºå£ |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) |
| | | else if (task.TaskType == (int)TaskInboundTypeEnum.Inbound && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) |
| | | { |
| | | //todo |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); |
| | | task.TaskState = nextStatus; |
| | | task.TaskState = (int)TaskInStatusEnum.InFinish; |
| | | BaseDal.UpdateData(task); |
| | | content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}"); |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | BaseDal.UpdateData(task); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºå
¥åºå®æ"); |
| | | |
| | | WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task); |
| | | |
| | | HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>()); |
| | | BaseDal.DeleteData(task); |
| | | // _task_HtyService.AddTaskHty(task); éè¦æ·»å ç§»å
¥åå² |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å
¥åºå®æ"); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup && task.TaskState == (int)TaskRelocationStatusEnum.SC_RelocationFinish) |
| | | else if (task.TaskType == (int)TaskRelocationTypeEnum.Relocation) |
| | | { |
| | | int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskRelocationStatusEnum>(); |
| | | task.CurrentAddress = task.NextAddress; |
| | | task.NextAddress = string.Empty; |
| | | task.TaskState = nextStatus; |
| | | task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationFinish; |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | BaseDal.UpdateData(task); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"å åæºç§»åºå®æ"); |
| | | WMSTaskDTO WMStask = _mapper.Map<WMSTaskDTO>(task); |
| | | //todo è°ç¨WMSç§»åºå®æ |
| | | HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>()); |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OtherGroup) |
| | | { |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"ç§»åºå®æ"); |
| | | BaseDal.DeleteData(task); |
| | | content = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={task.TaskNum}"); |
| | | // _task_HtyService.AddTaskHty(task); éè¦æ·»å ç§»å
¥åå² |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | content = WebResponseContent.Instance.Error($"ä»»å¡å®æå¼å¸¸,ä»»å¡å·:ã{taskNum}ã"); |
| | | content = WebResponseContent.Instance.Error($"ä»»å¡å®æå¼å¸¸,ä»»å¡å·:ã{taskNum}ãï¼åå ï¼{ex.Message}"); |
| | | } |
| | | return content; |
| | | }*/ |
| | | |
| | | |
| | | public bool StackCraneTaskCompleted(int taskNum) |
| | | { |
| | | bool res; |
| | | |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) return false; |
| | | |
| | | // éªè¯ä»»å¡ç¶ææ¯å¦å
è®¸å®æ |
| | | if (!IsTaskStateValidForCompletion(task)) return false; |
| | | |
| | | // æ ¹æ®ä»»å¡ç±»åå¤ç |
| | | res = ProcessTaskCompletion(task); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | res = false; |
| | | } |
| | | |
| | | return res; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éªè¯ä»»å¡ç¶ææ¯å¦å
è®¸å®æ |
| | | /// </summary> |
| | | private bool IsTaskStateValidForCompletion(Dt_Task task) |
| | | { |
| | | return task.TaskType switch |
| | | { |
| | | (int)TaskOutboundTypeEnum.Outbound => task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting, |
| | | (int)TaskInboundTypeEnum.Inbound => task.TaskState == (int)TaskInStatusEnum.SC_InExecuting, |
| | | (int)TaskRelocationTypeEnum.Relocation => true, // ç§»åºä»»å¡æ²¡æç¹å®ç¶æè¦æ± |
| | | _ => false |
| | | }; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çä»»å¡å®æé»è¾ |
| | | /// </summary> |
| | | private bool ProcessTaskCompletion(Dt_Task task) |
| | | { |
| | | // æ´æ°ä»»å¡åºç¡ä¿¡æ¯ |
| | | UpdateTaskBaseInfo(task); |
| | | |
| | | bool result = task.TaskType switch |
| | | { |
| | | (int)TaskOutboundTypeEnum.Outbound => ProcessOutboundTask(task), |
| | | (int)TaskInboundTypeEnum.Inbound => ProcessInboundTask(task), |
| | | (int)TaskRelocationTypeEnum.Relocation => ProcessRelocationTask(task), |
| | | _ => throw new Exception($"æªç¥çä»»å¡ç±»å:ã{task.TaskType}ã") |
| | | }; |
| | | |
| | | // éç¥ä»»å¡å®æ |
| | | if (result == true) |
| | | { |
| | | NotifyTaskCompleted(task.TaskNum); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ´æ°ä»»å¡åºç¡ä¿¡æ¯ |
| | | /// </summary> |
| | | private void UpdateTaskBaseInfo(Dt_Task task) |
| | | { |
| | | task.ModifyDate = DateTime.Now; |
| | | task.Modifier = "System"; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çåºåºä»»å¡ |
| | | /// </summary> |
| | | private bool ProcessOutboundTask(Dt_Task task) |
| | | { |
| | | task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; |
| | | bool res = BaseDal.UpdateData(task); |
| | | //task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; |
| | | //BaseDal.UpdateData(task); |
| | | //// æ·»å åºåºåå²è®°å½ |
| | | //_taskHtyService.AddTaskHistory(task); |
| | | //_taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "èªå¨å®æ"); |
| | | //bool res = BaseDal.DeleteData(task); |
| | | return res; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çå
¥åºä»»å¡ |
| | | /// </summary> |
| | | private bool ProcessInboundTask(Dt_Task task) |
| | | { |
| | | task.TaskState = (int)TaskInStatusEnum.InFinish; |
| | | BaseDal.UpdateData(task); |
| | | |
| | | // æ·»å å
¥åºåå²è®°å½ |
| | | _taskHtyService.AddTaskHistory(task); |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "å
¥åºå®æ"); |
| | | |
| | | // å
¥åºå®æåå é¤ä»»å¡ |
| | | bool res = BaseDal.DeleteData(task); |
| | | |
| | | return res; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// å¤çç§»åºä»»å¡ |
| | | /// </summary> |
| | | private bool ProcessRelocationTask(Dt_Task task) |
| | | { |
| | | task.TaskState = (int)TaskRelocationStatusEnum.SC_RelocationFinish; |
| | | BaseDal.UpdateData(task); |
| | | |
| | | _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, "ç§»åºå®æ"); |
| | | //AddTaskHistory(task); |
| | | // ç§»åºå®æåå é¤ä»»å¡ |
| | | bool res = BaseDal.DeleteData(task); |
| | | // _task_HtyService.AddTaskHty(task); |
| | | |
| | | return res; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// éç¥ä»»å¡å®æ |
| | | /// </summary> |
| | | private void NotifyTaskCompleted(int taskNum) |
| | | { |
| | | try |
| | | { |
| | | var response = HttpHelperh.Get<WebResponseContent>($"{urlTaskCompleted}?TaskNum={taskNum}"); |
| | | if (!response.Status) |
| | | { |
| | | // è®°å½éç¥å¤±è´¥æ¥å¿ï¼ä½ä¸å½±å主æµç¨ |
| | | //_logger.Warn($"ä»»å¡å®æéç¥å¤±è´¥,ä»»å¡å·:ã{taskNum}ã,ååº:ã{response.Message}ã"); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½å¼å¸¸æ¥å¿ï¼ä½ä¸å½±å主æµç¨ |
| | | // _logger.Error($"ä»»å¡å®æéç¥å¼å¸¸,ä»»å¡å·:ã{taskNum}ã", ex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) |
| | | { |
| | | task.TaskState = (int)TaskOutStatusEnum.OutNew; |
| | | } |
| | | else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) |
| | | { |
| | | task.TaskState = (int)TaskInStatusEnum.InNew; |
| | | } |
| | | //todo |
| | | } |
| | |
| | | } |
| | | return content; |
| | | } |
| | | |
| | | public Dt_Task GetTaskIninfo(string Pallat) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.PalletCode == Pallat); |
| | | } |
| | | |
| | | public WebResponseContent UpdateTaskIninfo(string Pallat, string StationCode) |
| | | { |
| | | try |
| | | { |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == Pallat && x.SourceAddress == StationCode); |
| | | if (task != null) |
| | | { |
| | | task.TaskState = (int)TaskInStatusEnum.Line_InFinish; |
| | | BaseDal.UpdateData(task); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | |
| | | return WebResponseContent.Instance.Error(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(); |
| | | throw; |
| | | } |
| | | } |
| | | |
| | | |
| | | public Dt_Task QueryStationIsOccupiedOutTasks(string deviceNo, string LocaAddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (x.SourceAddress == LocaAddress || x.TargetAddress == LocaAddress), TaskOrderBy); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ ¹æ®æ·±åºä½åwmsç³è¯·å¤ææµ
åºä½æ¯å¦æè´§ï¼æ¯å¦éè¦è¿è¡ç§»åºæä½ |
| | | /// </summary> |
| | | /// <param name="palletCode">æçå·</param> |
| | | /// <param name="sourceAddress">èµ·å§å°å</param> |
| | | /// <returns></returns> |
| | | public Dt_Task RequestWMSTaskMovelibrary(Dt_Task _Task) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | |
| | | content = HttpHelperh.Get<WebResponseContent>($"{urlWMSMovelibraryTask}?TaskNum={_Task.TaskNum}"); |
| | | Dt_Task task = new Dt_Task(); |
| | | if (content.Status) |
| | | { |
| | | if (content.Data != null) |
| | | { |
| | | task = JsonConvert.DeserializeObject<Dt_Task>(content.Data.ToString()); |
| | | if (task.TaskNum != _Task.TaskNum) |
| | | { |
| | | task.Grade = 3; |
| | | task.TaskState = TaskRelocationStatusEnum.RelocationNew.ObjToInt(); |
| | | BaseDal.AddData(task); |
| | | return task; |
| | | } |
| | | else |
| | | { |
| | | return _Task; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | |
| | | } |
| | | |
| | | |
| | | public Dt_Task GetOutTaskInfo(string PLCaddress) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.TargetAddress == PLCaddress && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish, TaskOrderBy); |
| | | } |
| | | |
| | | public Dt_Task GetOutTaskInfo2(string PalletCode) |
| | | { |
| | | return BaseDal.QueryFirst(x => x.PalletCode == PalletCode && x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish, TaskOrderBy); |
| | | } |
| | | |
| | | public List<Dt_Task> QueryStackerCraneYKTasks(string deviceNo) |
| | | { |
| | | return BaseDal.QueryData(x => x.Roadway == deviceNo && x.TaskType == (int)TaskRelocationTypeEnum.Relocation && x.TaskState == (int)TaskRelocationStatusEnum.RelocationNew, TaskOrderBy); |
| | | |
| | | } |
| | | |
| | | public WebResponseContent WCSCancelinventory(int taskNum) |
| | | { |
| | | //æ¥è¯¢ä»»å¡ä¿¡æ¯ |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && (x.TaskState == TaskOutStatusEnum.OutNew.ObjToInt() || x.TaskState == TaskRelocationStatusEnum.RelocationNew.ObjToInt() || x.TaskState == TaskInStatusEnum.Line_InExecuting.ObjToInt())); |
| | | if (task == null) return WebResponseContent.Instance.Error($"æªæ¾å°è¯¥ä»»å¡ä¿¡æ¯,ä»»å¡å·:ã{taskNum}æç¶æä¸å¯¹ã"); |
| | | bool taskmsseg = BaseDal.DeleteData(task); |
| | | bool res = AddTaskHistory(task, "æå¨åæ¶"); |
| | | return taskmsseg && res ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error(); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// æ·»å åå²ä»»å¡è®°å½ï¼éææ¹æ³ï¼ |
| | | /// </summary> |
| | | /// <param name="task">ä»»å¡å¯¹è±¡</param> |
| | | /// <returns>æ¯å¦æ·»å æå</returns> |
| | | public bool AddTaskHistory(Dt_Task task, string operateType) |
| | | { |
| | | try |
| | | { |
| | | if (task == null) |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | // å建任å¡å岿å¡å®ä¾ |
| | | //var taskHtyService = App.GetService<ITaskHtyService>(); |
| | | //if (taskHtyService == null) |
| | | //{ |
| | | // return false; |
| | | //} |
| | | |
| | | // æ·»å åå²è®°å½ |
| | | bool result = _taskHtyService.AddTaskHistory(task, operateType); |
| | | |
| | | return result; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | // è®°å½å¼å¸¸æ¥å¿ |
| | | Console.WriteLine($"æ·»å åå²ä»»å¡è®°å½å¤±è´¥: {ex.Message}"); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// æå¨å®ææ¥å£ |
| | | /// </summary> |
| | | /// <param name="taskNum"></param> |
| | | /// <returns></returns> |
| | | /// <exception cref="NotImplementedException"></exception> |
| | | |
| | | public WebResponseContent WCSManualTaskCompleted(int taskNum) |
| | | { |
| | | //æ¥è¯¢ä»»å¡ä¿¡æ¯ |
| | | Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); |
| | | if (task == null) return WebResponseContent.Instance.OK(); |
| | | bool taskmsseg = BaseDal.DeleteData(task); |
| | | bool res = AddTaskHistory(task, "æå¨å®æ"); |
| | | return taskmsseg && res ? WebResponseContent.Instance.OK() : WebResponseContent.Instance.Error(); |
| | | } |
| | | |
| | | public bool GetYK(string sc) |
| | | { |
| | | Dt_Task dt_Task = BaseDal.QueryFirst(x => x.Roadway == sc && x.TaskType == (int)TaskRelocationTypeEnum.Relocation); |
| | | if (dt_Task != null) |
| | | { |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åå··éä»»å¡è¿åº¦ |
| | | /// </summary> |
| | | /// <param name="roadway">å··éç¼å·</param> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetRoadwayTaskProgress(string roadway) |
| | | { |
| | | try |
| | | { |
| | | // 1. å
¥åæ ¡éª |
| | | if (string.IsNullOrWhiteSpace(roadway)) |
| | | { |
| | | return WebResponseContent.Instance.Error("å··éç¼å·ä¸è½ä¸ºç©º"); |
| | | } |
| | | // 2. 䏿¬¡æ¥è¯¢ï¼é¿å
夿¬¡æ°æ®åº/å
åéå |
| | | List<Dt_Task> taskList = BaseDal.QueryData(x => x.Roadway == roadway).ToList(); |
| | | |
| | | int totalTasks = taskList.Count; |
| | | int inProgressTasks = 0; |
| | | int completedTasks = 0; |
| | | int cancelledTasks = 0; |
| | | int exceptionTasks = 0; |
| | | |
| | | foreach (var task in taskList) |
| | | { |
| | | switch ((TaskStatusEnum)task.TaskState) |
| | | { |
| | | case TaskStatusEnum.Finish: |
| | | completedTasks++; |
| | | break; |
| | | case TaskStatusEnum.Cancel: |
| | | cancelledTasks++; |
| | | break; |
| | | case TaskStatusEnum.Exception: |
| | | exceptionTasks++; |
| | | break; |
| | | default: |
| | | inProgressTasks++; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | var taskDetails = taskList.Select(t => new |
| | | { |
| | | taskNum = t.TaskNum, |
| | | taskType = t.TaskType, |
| | | taskState = t.TaskState, |
| | | taskStateName = GetTaskStateName(t.TaskState), |
| | | createDate = t.CreateDate, |
| | | modifyDate = t.ModifyDate, |
| | | sourceAddress = t.SourceAddress, |
| | | targetAddress = t.TargetAddress |
| | | }).ToList(); |
| | | |
| | | // 5. ç»ä¸è¿åç»æ |
| | | var progressInfo = new |
| | | { |
| | | roadway = roadway, |
| | | totalTasks, |
| | | inProgressTasks, |
| | | completedTasks, |
| | | cancelledTasks, |
| | | exceptionTasks, |
| | | tasks = taskDetails |
| | | }; |
| | | |
| | | return WebResponseContent.Instance.OK(data: progressInfo); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è·åå··éä»»å¡è¿åº¦å¤±è´¥ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åææå··éä»»å¡è¿åº¦ |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public WebResponseContent GetAllRoadwayTaskProgress() |
| | | { |
| | | try |
| | | { |
| | | // 1. 䏿¬¡æ§æ¥è¯¢æææ°æ®ï¼é¿å
夿¬¡æ¥è¯¢ï¼ |
| | | List<Dt_Task> allTasks = BaseDal.QueryData().ToList(); |
| | | |
| | | // 2. æå··éåç» + 䏿¬¡éåç»è®¡ææç¶æï¼æ§è½æåå·¨å¤§ï¼ |
| | | var progressList = allTasks |
| | | .GroupBy(t => t.Roadway) |
| | | .Select(group => |
| | | { |
| | | var roadway = group.Key; |
| | | var tasks = group.ToList(); |
| | | var totalTasks = tasks.Count; |
| | | int inProgress = 0, completed = 0, cancelled = 0, exception = 0; |
| | | |
| | | foreach (var task in tasks) |
| | | { |
| | | switch ((TaskStatusEnum)task.TaskState) |
| | | { |
| | | case TaskStatusEnum.Finish: |
| | | completed++; |
| | | break; |
| | | case TaskStatusEnum.Cancel: |
| | | cancelled++; |
| | | break; |
| | | case TaskStatusEnum.Exception: |
| | | exception++; |
| | | break; |
| | | default: |
| | | inProgress++; |
| | | break; |
| | | } |
| | | } |
| | | return new |
| | | { |
| | | roadway = roadway, |
| | | totalTasks = totalTasks, |
| | | inProgressTasks = inProgress, |
| | | completedTasks = completed, |
| | | cancelledTasks = cancelled, |
| | | exceptionTasks = exception |
| | | }; |
| | | }) |
| | | .ToList(); |
| | | return WebResponseContent.Instance.OK(data: progressList); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error($"è·åå··éä»»å¡è¿åº¦å¤±è´¥ï¼{ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// è·åä»»å¡ç¶æåç§° |
| | | /// </summary> |
| | | /// <param name="taskState">ä»»å¡ç¶æå¼</param> |
| | | /// <returns></returns> |
| | | private string GetTaskStateName(int taskState) |
| | | { |
| | | switch (taskState) |
| | | { |
| | | case (int)TaskStatusEnum.New: |
| | | return "æ°å»º"; |
| | | case (int)TaskStatusEnum.HT_Executing: |
| | | return "æåæºæ§è¡ä¸"; |
| | | case (int)TaskStatusEnum.SC_Execute: |
| | | return "å åæºå¾
æ§è¡"; |
| | | case (int)TaskStatusEnum.SC_Executing: |
| | | return "å åæºæ§è¡ä¸"; |
| | | case (int)TaskStatusEnum.SC_Finish: |
| | | return "å åæºå®æ"; |
| | | case (int)TaskStatusEnum.Line_Execute: |
| | | return "è¾é线å¾
æ§è¡"; |
| | | case (int)TaskStatusEnum.Line_Executing: |
| | | return "è¾é线æ§è¡ä¸"; |
| | | case (int)TaskStatusEnum.Line_Finish: |
| | | return "è¾éçº¿å®æ"; |
| | | case (int)TaskStatusEnum.RGV_NEW: |
| | | return "RGVæ°å»ºä»»å¡"; |
| | | case (int)TaskStatusEnum.RGV_Execute: |
| | | return "RGVå¾
æ§è¡"; |
| | | case (int)TaskStatusEnum.RGV_Takeing: |
| | | return "RGVåè´§ä¸"; |
| | | case (int)TaskStatusEnum.RGV_Executing: |
| | | return "RGVæ§è¡ä¸"; |
| | | case (int)TaskStatusEnum.RGV_WaitToExecute: |
| | | return "RGVå¾
ç»§ç»æ§è¡"; |
| | | case (int)TaskStatusEnum.RGV_Puting: |
| | | return "RGVæ¾è´§ä¸"; |
| | | case (int)TaskStatusEnum.RGV_Finish: |
| | | return "RGV宿"; |
| | | case (int)TaskStatusEnum.RGV_TakeError: |
| | | return "RGVåè´§åå
¥å¼å¸¸"; |
| | | case (int)TaskStatusEnum.Finish: |
| | | return "ä»»å¡å®æ"; |
| | | case (int)TaskStatusEnum.Pending: |
| | | return "ä»»å¡æèµ·"; |
| | | case (int)TaskStatusEnum.MesPending: |
| | | return "Mesåºåºæèµ·"; |
| | | case (int)TaskStatusEnum.Cancel: |
| | | return "ä»»å¡åæ¶"; |
| | | case (int)TaskStatusEnum.Exception: |
| | | return "ä»»å¡å¼å¸¸"; |
| | | default: |
| | | return "æªç¥ç¶æ"; |
| | | } |
| | | } |
| | | } |
| | | } |