From 3fb6bfc7d068cafa47906eb6f22d8e2989426f32 Mon Sep 17 00:00:00 2001 From: 陈勇 <chenyong@hnkhzn.com> Date: 星期二, 19 十一月 2024 09:03:17 +0800 Subject: [PATCH] 合并 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 212 +++++++++++++++++++++++++--------------------------- 1 files changed, 102 insertions(+), 110 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs index 830c4ce..95ef445 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs @@ -1,34 +1,18 @@ -锘�#region << 鐗� 鏈� 娉� 閲� >> - -/*---------------------------------------------------------------- - * 鍛藉悕绌洪棿锛歐IDESEAWCS_TaskInfoService - * 鍒涘缓鑰咃細鑳$搴� - * 鍒涘缓鏃堕棿锛�2024/8/2 16:13:36 - * 鐗堟湰锛歏1.0.0 - * 鎻忚堪锛� - * - * ---------------------------------------------------------------- - * 淇敼浜猴細 - * 淇敼鏃堕棿锛� - * 鐗堟湰锛歏1.0.1 - * 淇敼璇存槑锛� - * - *----------------------------------------------------------------*/ - -#endregion << 鐗� 鏈� 娉� 閲� >> - +锘� using AutoMapper; using HslCommunication; using Newtonsoft.Json; using SqlSugar; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; +using WIDESEAWCS_Common; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_DTO.WMS; +using WIDESEAWCS_ISystemServices; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; @@ -42,13 +26,14 @@ private readonly IRouterService _routerService; private readonly ITaskExecuteDetailService _taskExecuteDetailService; private readonly ITaskExecuteDetailRepository _taskExecuteDetailRepository; + private readonly ISys_ConfigService _sys_ConfigService; private readonly IMapper _mapper; private Dictionary<string, OrderByType> _taskOrderBy = new() - { - {nameof(Dt_Task.Grade),OrderByType.Desc }, - {nameof(Dt_Task.CreateDate),OrderByType.Asc}, - }; + { + {nameof(Dt_Task.Grade), OrderByType.Desc }, + {nameof(Dt_Task.CreateDate), OrderByType.Asc}, + }; public Dictionary<string, OrderByType> TaskOrderBy { get { return _taskOrderBy; } set { _taskOrderBy = value; } } @@ -57,12 +42,13 @@ public List<int> TaskOutboundTypes => typeof(TaskOutboundTypeEnum).GetEnumIndexList(); - public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IMapper mapper, ISys_ConfigService sys_ConfigService) : base(BaseDal) { _routerService = routerService; _taskExecuteDetailService = taskExecuteDetailService; _taskExecuteDetailRepository = taskExecuteDetailRepository; _mapper = mapper; + _sys_ConfigService = sys_ConfigService; } /// <summary> @@ -87,7 +73,6 @@ if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress); - //鏆備笉鑰冭檻澶氳矾寰� if (routers.Count > 0) { task.TaskState = (int)TaskOutStatusEnum.OutNew; @@ -98,7 +83,6 @@ else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); - //鏆備笉鑰冭檻澶氳矾寰� if (routers.Count > 0) { task.TaskState = (int)TaskInStatusEnum.InNew; @@ -127,66 +111,42 @@ /// <param name="palletCode">鎵樼洏鍙�</param> /// <param name="sourceAddress">璧峰鍦板潃</param> /// <returns></returns> - public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress) + public async Task<WebResponseContent> RequestWMSTask(string palletCode, string sourceAddress) { WebResponseContent content = new WebResponseContent(); try { - #region 璇锋眰鍏ュ簱浠诲姟宸烽亾 - // TODO: 璋冪敤鎺ュ彛鑾峰彇涓嬩竴涓湴鍧� - // 鍒涘缓璇锋眰瀵硅薄 - RequestTaskDto request = new RequestTaskDto() + var hasTask = await BaseDal.QueryFirstAsync(x => x.PalletCode == palletCode); + if (hasTask != null) { - Position = sourceAddress, - PalletCode = palletCode, - }; + return content.Error("褰撳墠鎵樼洏瀛樺湪浠诲姟"); + } - // 鍙戦�佽姹傚苟绛夊緟鍝嶅簲 - var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestTaskAsync", request.ToJsonString()).Result; + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var requestTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.RequestTask)?.ConfigValue; + if (wmsBase == null || requestTask == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddrss = wmsBase + requestTask; - // 鍙嶅簭鍒楀寲鍝嶅簲鍐呭 + var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode }.ToJsonString()); content = JsonConvert.DeserializeObject<WebResponseContent>(result); - WMSTaskDTO task = new WMSTaskDTO(); - // 妫�鏌ョ姸鎬佸苟杩斿洖 if (!content.Status) { - task = new WMSTaskDTO() - { - TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")), - Grade = 1, - PalletCode = palletCode, - RoadWay = "CHSC01", - SourceAddress = sourceAddress, - TargetAddress = "1020", - TaskState = (int)TaskOutStatusEnum.Line_OutExecuting, - Id = 0, - TaskType = (int)TaskOutboundTypeEnum.Outbound - }; - - Dt_Task task1 = _mapper.Map<Dt_Task>(task); - task1.CurrentAddress = task.SourceAddress; - task1.NextAddress = "1020"; - BaseDal.AddData(task1); - return content.OK(); - } - else - { - // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁 - task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); - // 澶勭悊浠诲姟骞惰繑鍥炵粨鏋� - content = ReceiveWMSTask(new List<WMSTaskDTO> { task }); + // wms澶辫触杩斿洖鍘籒G鍙d换鍔� + return content; } - - - #endregion + var task = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); + return ReceiveWMSTask(new List<WMSTaskDTO> { task }); } catch (Exception ex) { - content = WebResponseContent.Instance.Error(ex.Message); + return WebResponseContent.Instance.Error(ex.Message); } - return content; } /// <summary> @@ -335,7 +295,7 @@ WebResponseContent content = new WebResponseContent(); try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { @@ -367,7 +327,7 @@ /// <param name="status">浠诲姟鐘舵��</param> public void UpdateTaskStatus(int taskNum, int status) { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return; task.TaskState = status; task.ModifyDate = DateTime.Now; @@ -383,7 +343,7 @@ WebResponseContent content = new WebResponseContent(); try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); return UpdateTaskStatusToNext(task); } @@ -407,22 +367,19 @@ int oldState = task.TaskState; if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { - if (task.TaskState >= (int)TaskOutStatusEnum.OutFinish) - { - return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�"); - } - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); task.TaskState = nextStatus; + + if (task.TaskState == (int)TaskOutStatusEnum.Line_OutFinish) + { + task.ModifyDate = DateTime.Now; + task.Modifier = "System"; + BaseDal.DeleteData(task); + } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { - if (task.TaskState >= (int)TaskInStatusEnum.InFinish) - { - return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�"); - } - int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskInStatusEnum>(); task.TaskState = nextStatus; @@ -432,14 +389,24 @@ #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 // TODO: 璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 // 鍒涘缓璇锋眰瀵硅薄 - RequestTaskDto taskDto = new RequestTaskDto() + var taskDto = new RequestTaskDto() { Position = task.NextAddress, PalletCode = task.PalletCode, }; + // 鑾峰彇WMSip鍦板潃 + var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBasez = configz.Where(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE).FirstOrDefault()?.ConfigValue; + var requestLocation = configz.Where(x => x.ConfigKey == SysConfigKeyConst.RequestLocation).FirstOrDefault()?.ConfigValue; + if (wmsBasez == null || requestLocation == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddrss = wmsBasez + requestLocation; + // 鍙戦�佽姹傚苟绛夊緟鍝嶅簲 - var abc = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/RequestLocationTaskAsync", taskDto.ToJsonString()).Result; + var abc = HttpHelper.PostAsync(wmsIpAddrss, taskDto.ToJsonString()).Result; if (abc == null) return content.Error(); // 鍙嶅簭鍒楀寲鍝嶅簲鍐呭 @@ -450,13 +417,21 @@ return content; // 鍙嶅簭鍒楀寲浠诲姟鏁版嵁 - WMSTaskDTO taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); + var taskResult = JsonConvert.DeserializeObject<WMSTaskDTO>(content.Data.ToString()); task.CurrentAddress = task.NextAddress; task.NextAddress = taskResult.TargetAddress; task.TargetAddress = task.NextAddress; #endregion + } + else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish) + { + + task.ModifyDate = DateTime.Now; + task.Modifier = "System"; + + BaseDal.DeleteData(task); } } else @@ -476,12 +451,17 @@ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskState}銆�" : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�"); #region 鏇存柊浠诲姟鐘舵�� - object request = new + // 鑾峰彇WMSip鍦板潃 + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTask)?.ConfigValue; + if (wmsBase == null || updateTask == null) { - TaskNum = task.TaskNum, - TaskState = task.TaskState - }; - var result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result; + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddress = wmsBase + updateTask; + + var result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; content = JsonConvert.DeserializeObject<WebResponseContent>(result); #endregion @@ -504,13 +484,13 @@ { try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress); if (task == null) throw new Exception($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); string oldCurrentPos = task.CurrentAddress; string oldNextPos = task.NextAddress; - List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); + var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); if (!routers.Any()) throw new Exception($"鏈壘鍒拌澶囪矾鐢变俊鎭�"); task.CurrentAddress = task.NextAddress; @@ -539,12 +519,12 @@ WebResponseContent content = new WebResponseContent(); try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var 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) { - List<Dt_Router> routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); + var routers = _routerService.QueryNextRoutes(task.NextAddress, task.TargetAddress); if (!routers.Any()) return WebResponseContent.Instance.Error($"鏈壘鍒拌澶囪矾鐢变俊鎭�"); int nextStatus = task.TaskState.GetNextNotCompletedStatus<TaskOutStatusEnum>(); @@ -569,8 +549,6 @@ task.Modifier = "System"; BaseDal.UpdateData(task); _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄叆搴撳畬鎴�"); - - } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) { @@ -587,19 +565,34 @@ #region WMS鍚屾浠诲姟瀹屾垚 var keys = new Dictionary<string, object>() + { + {"taskNum", taskNum} + }; + // 鑾峰彇WMSip鍦板潃 + var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; + var completeTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue; + if (wmsBase == null || completeTask == null) { - {"taskNum", taskNum} - }; - var result = HttpHelper.GetAsync($"http://127.0.0.1:5000/api/Task/CompleteTaskAsync", keys).Result; + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + var wmsIpAddress = wmsBase + completeTask; + + var result = HttpHelper.GetAsync(wmsIpAddress, keys).Result; content = JsonConvert.DeserializeObject<WebResponseContent>(result); #endregion + + #region 鏇存柊浠诲姟鐘舵�� - object request = new + + var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.CompleteTask)?.ConfigValue; + if (wmsBase == null || updateTask == null) { - TaskNum = task.TaskNum, - TaskState = task.TaskState - }; - result = HttpHelper.PostAsync("http://127.0.0.1:5000/api/Task/UpdateTaskStatus", request.ToJsonString()).Result; + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + wmsIpAddress = wmsBase + updateTask; + + result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; content = JsonConvert.DeserializeObject<WebResponseContent>(result); #endregion //content = WebResponseContent.Instance.OK(); @@ -621,14 +614,14 @@ WebResponseContent content = new WebResponseContent(); try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); if (task.TaskState != (int)TaskInStatusEnum.InPending && task.TaskState != (int)TaskOutStatusEnum.OutPending) { return content = WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙仮澶�,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskState}銆�"); } - Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); + var taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.IsNormal, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); if (taskExecuteDetail != null) { task.TaskState = taskExecuteDetail.TaskState; @@ -643,7 +636,6 @@ { task.TaskState = (int)TaskInStatusEnum.InNew; } - //todo } task.ExceptionMessage = string.Empty; @@ -668,14 +660,14 @@ /// <returns>杩斿洖澶勭悊缁撴灉</returns> public WebResponseContent RollbackTaskStatusToLast(int taskNum) { - WebResponseContent content = new(); + WebResponseContent content = new WebResponseContent(); try { - Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + var task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); int oldState = task.TaskState; - Dt_TaskExecuteDetail taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); + var taskExecuteDetail = _taskExecuteDetailRepository.QueryFirst(x => x.TaskId == task.TaskId && x.TaskState < task.TaskState && x.TaskState > 0, new Dictionary<string, OrderByType> { { nameof(Dt_TaskExecuteDetail.TaskDetailId), OrderByType.Desc } }); if (taskExecuteDetail != null) { task.TaskState = taskExecuteDetail.TaskState; -- Gitblit v1.9.3