From 1ff9f4e6ba64ebad9ccf0367d6d23c75cc27dd27 Mon Sep 17 00:00:00 2001 From: 肖洋 <cathay_xy@163.com> Date: 星期日, 22 十二月 2024 18:47:16 +0800 Subject: [PATCH] 重构任务处理方法,改用异步方式处理新任务,优化事件通知逻辑 --- Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs | 164 +++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 117 insertions(+), 47 deletions(-) diff --git a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs index c962f62..9ba2a5b 100644 --- a/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs +++ b/Code Management/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs @@ -1,5 +1,4 @@ -锘� -using AutoMapper; +锘縰sing AutoMapper; using HslCommunication; using Mapster; using Microsoft.AspNetCore.Components.Routing; @@ -76,60 +75,110 @@ /// <returns>杩斿洖澶勭悊缁撴灉</returns> public WebResponseContent ReceiveWMSTask([NotNull] List<WMSTaskDTO> taskDTOs) { + // 鍒涘缓涓�涓猈ebResponseContent瀵硅薄鐢ㄤ簬瀛樺偍杩斿洖缁撴灉 WebResponseContent content = new WebResponseContent(); try { + // 鍒涘缓涓�涓狣t_Task绫诲瀷鐨勫垪琛ㄧ敤浜庡瓨鍌ㄨ浆鎹㈠悗鐨勪换鍔℃暟鎹� List<Dt_Task> tasks = new List<Dt_Task>(); + // 閬嶅巻浼犲叆鐨刉MSTaskDTO鍒楄〃 foreach (var item in taskDTOs) { + // 鏌ヨ鏁版嵁搴撲腑鏄惁瀛樺湪鐩稿悓浠诲姟缂栧彿鎴栨墭鐩樼爜鐨勪换鍔★紝濡傛灉瀛樺湪鍒欒烦杩囧綋鍓嶅惊鐜� if (BaseDal.QueryFirst(x => x.TaskNum == item.TaskNum || x.PalletCode == item.PalletCode) != null) { continue; } + // 灏哤MSTaskDTO瀵硅薄鏄犲皠涓篋t_Task瀵硅薄 Dt_Task task = _mapper.Map<Dt_Task>(item); + // 璁剧疆浠诲姟鐨勫垱寤鸿�呬负"WMS" task.Creater = "WMS"; + // 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄嚭搴撲换鍔� if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { - List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress); - if (routers.Count > 0) + // 鍒ゆ柇浠诲姟鐩爣鍦板潃鍜岃矾寰勬槸鍚︽弧瓒崇壒瀹氭潯浠� + if (task.TargetAddress == "002-021-001" && task.Roadway.Contains("JZ") && task.TaskType == (int)TaskOutboundTypeEnum.OutTray) { + // 璁剧疆浠诲姟鐘舵�佷负鍑哄簱鏂板缓 task.TaskState = (int)TaskOutStatusEnum.OutNew; + // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃 task.CurrentAddress = item.SourceAddress; - task.NextAddress = routers.FirstOrDefault().ChildPosi; + // 璁剧疆涓嬩竴涓湴鍧�涓虹洰鏍囧湴鍧� + task.NextAddress = item.TargetAddress; } else { - routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); + // 鏌ヨ涓嬩竴涓矾鐢� + List<Dt_Router> routers = _routerService.QueryNextRoutes(item.RoadWay, item.TargetAddress); if (routers.Count > 0) { - task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; + // 璁剧疆浠诲姟鐘舵�佷负鍑哄簱鏂板缓 + task.TaskState = (int)TaskOutStatusEnum.OutNew; + // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃 task.CurrentAddress = item.SourceAddress; + // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆 task.NextAddress = routers.FirstOrDefault().ChildPosi; + } + else + { + // 鏌ヨ浠庢簮鍦板潃鍒扮洰鏍囧湴鍧�鐨勮矾鐢� + routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); + if (routers.Count > 0) + { + // 璁剧疆浠诲姟鐘舵�佷负鍑哄簱瀹屾垚 + task.TaskState = (int)TaskOutStatusEnum.SC_OutFinish; + // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃 + task.CurrentAddress = item.SourceAddress; + // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆 + task.NextAddress = routers.FirstOrDefault().ChildPosi; + } } } } + // 鍒ゆ柇浠诲姟绫诲瀷鏄惁涓哄叆搴撲换鍔� else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) { - List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); - if (routers.Count > 0) + // 鍒ゆ柇婧愬湴鍧�鏄惁涓嶇瓑浜�"1359-4" + if (task.SourceAddress != "1359-4") { - task.TaskState = (int)TaskInStatusEnum.InNew; - task.CurrentAddress = item.SourceAddress; - task.NextAddress = routers.FirstOrDefault().ChildPosi; + // 鏌ヨ浠庢簮鍦板潃鍒扮洰鏍囧湴鍧�鐨勮矾鐢� + List<Dt_Router> routers = _routerService.QueryNextRoutes(item.SourceAddress, item.TargetAddress); + if (routers.Count > 0) + { + // 璁剧疆浠诲姟鐘舵�佷负鍏ュ簱鏂板缓 + task.TaskState = (int)TaskInStatusEnum.InNew; + // 璁剧疆褰撳墠鍦板潃涓烘簮鍦板潃 + task.CurrentAddress = item.SourceAddress; + // 璁剧疆涓嬩竴涓湴鍧�涓虹涓�涓瓙浣嶇疆 + task.NextAddress = routers.FirstOrDefault().ChildPosi; + } + } + else + { + // 璁剧疆褰撳墠鍦板潃涓�"002-021-001" + task.CurrentAddress = "002-021-001"; + // 璁剧疆涓嬩竴涓湴鍧�涓虹洰鏍囧湴鍧� + task.NextAddress = item.TargetAddress; } } + // 灏嗚浆鎹㈠悗鐨勪换鍔℃坊鍔犲埌浠诲姟鍒楄〃涓� tasks.Add(task); } + // 灏嗕换鍔″垪琛ㄦ坊鍔犲埌鏁版嵁搴撲腑 BaseDal.AddData(tasks); + // 娣诲姞浠诲姟鎵ц璇︽儏 _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟"); + // 璁剧疆杩斿洖缁撴灉涓烘垚鍔� content = WebResponseContent.Instance.OK("鎴愬姛"); } catch (Exception ex) { + // 鎹曡幏寮傚父骞惰缃繑鍥炵粨鏋滀负閿欒淇℃伅 content = WebResponseContent.Instance.Error($"浠诲姟鎺ユ敹閿欒,閿欒淇℃伅:{ex.Message}"); } + // 杩斿洖缁撴灉 return content; } @@ -150,14 +199,16 @@ return content.OK("褰撳墠鎵樼洏瀛樺湪浠诲姟"); } - 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) + var wmsIpAddrss = string.Empty; + var stationManager = _stationManagerRepository.QueryFirst(x => x.stationChildCode == sourceAddress); + if (stationManager.stationType == 5) { - throw new InvalidOperationException("WMS IP 鏈厤缃�"); + wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestInBoundTaskNG); } - var wmsIpAddrss = wmsBase + requestTask; + else + { + wmsIpAddrss = GetIpAddress(SysConfigKeyConst.WMSIP_BASE, SysConfigKeyConst.RequestTask); + } var result = await HttpHelper.PostAsync(wmsIpAddrss, new { Position = sourceAddress, PalletCode = palletCode }.ToJsonString()); content = JsonConvert.DeserializeObject<WebResponseContent>(result); @@ -202,7 +253,7 @@ /// <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) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -213,7 +264,7 @@ /// <returns></returns> public Dt_Task QueryNextConveyorLineTask(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.NextAddress == currentAddress, TaskOrderBy); + return BaseDal.QueryFirst(x => ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.InNew) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.SC_OutFinish)) && x.NextAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -224,7 +275,7 @@ /// <returns></returns> public Dt_Task QueryBarCodeConveyorLineTask(string Barcode, 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 && x.PalletCode == Barcode, TaskOrderBy); + 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 && x.PalletCode == Barcode, TaskOrderBy); } /// <summary> @@ -249,11 +300,16 @@ return BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.CurrentAddress == currentAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InFinish || x.TaskState == (int)TaskOutStatusEnum.Line_OutFinish), TaskOrderBy); } + /// <summary> + /// 鏍规嵁鎵樼洏鍙枫�佸綋鍓嶅湴鍧�鏌ヨ浠诲姟 + /// </summary> + /// <param name="taskNum">浠诲姟鍙�</param> + /// <param name="currentAddress">褰撳墠鍦板潃</param> + /// <returns></returns> public Dt_Task QueryBarcodeTask(string barcode, string currentAddress) { return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.CurrentAddress == currentAddress, TaskOrderBy); } - /// <summary> /// 鏍规嵁浠诲姟鍙枫�佸綋鍓嶅湴鍧�鏌ヨ杈撻�佺嚎鏂板缓鐨勪换鍔� @@ -275,7 +331,7 @@ public Dt_Task? QuertStackerCraneTask(string deviceNo, TaskTypeGroup? taskTypeGroup = null) { if (taskTypeGroup == null) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.InboundGroup) return BaseDal.QueryFirst(x => x.Roadway == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish, TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) @@ -292,9 +348,9 @@ public Dt_Task QueryStackerCraneTask(string deviceNo, string currentAddress = "") { if (string.IsNullOrEmpty(currentAddress)) - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); else - return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && (TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish || TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew), TaskOrderBy); + return BaseDal.QueryFirst(x => x.Roadway == deviceNo && x.CurrentAddress == currentAddress && ((TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskInStatusEnum.Line_InFinish) || (TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew)), TaskOrderBy); } /// <summary> @@ -323,6 +379,21 @@ 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); + } + + /// <summary> + /// 鏍规嵁璁惧缂栧彿銆佹帓闄ょ殑浠诲姟銆佸綋鍓嶅湴鍧�鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鍑哄簱绫诲瀷鐨勬柊澧炵殑鎵�鏈変换鍔� + /// </summary> + /// <param name="deviceNo">璁惧缂栧彿</param> + /// <param name="excludedTaskId">鎺掗櫎鐨勪换鍔�</param> + /// <param name="currentAddress">褰撳墠鍦板潃</param> + /// <returns>杩斿洖浠诲姟瀹炰綋瀵硅薄锛屽彲鑳戒负null</returns> + public List<Dt_Task> QueryAllOutboundTasks(string deviceNo, string currentAddress = "") + { + if (string.IsNullOrEmpty(currentAddress)) + return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew, TaskOrderBy); + else + return BaseDal.QueryData(x => x.Roadway == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskOutStatusEnum.OutNew && x.CurrentAddress == currentAddress, TaskOrderBy); } /// <summary> @@ -441,8 +512,8 @@ if (task.TaskState == (int)TaskInStatusEnum.Line_InFinish) { - #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 + // TODO: 璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 // 鍒涘缓璇锋眰瀵硅薄 var taskDto = new RequestTaskDto() @@ -478,12 +549,11 @@ task.CurrentAddress = task.NextAddress; task.NextAddress = taskResult.TargetAddress; task.TargetAddress = task.NextAddress; - #endregion + #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 } else if (task.TaskState == (int)TaskInStatusEnum.SC_InFinish) { - task.ModifyDate = DateTime.Now; task.Modifier = "System"; @@ -510,7 +580,8 @@ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, App.User.UserId > 0 ? $"浜哄伐鎵嬪姩灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戣烦杞埌銆恵task.TaskState}銆�" : $"绯荤粺鑷姩娴佺▼锛屼换鍔$姸鎬佷粠銆恵oldState}銆戣浆鍒般�恵task.TaskState}銆�"); - #region 鏇存柊浠诲姟鐘舵�� + #region 鏇存柊浠诲姟鐘舵�� + // 鑾峰彇WMSip鍦板潃 var config = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); var wmsBase = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.WMSIP_BASE)?.ConfigValue; @@ -523,7 +594,8 @@ var result = HttpHelper.PostAsync(wmsIpAddress, new { TaskNum = task.TaskNum, TaskState = task.TaskState }.ToJsonString()).Result; content = JsonConvert.DeserializeObject<WebResponseContent>(result); - #endregion + + #endregion 鏇存柊浠诲姟鐘舵�� content = WebResponseContent.Instance.OK(); } @@ -583,6 +655,7 @@ if (task == null) return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅,浠诲姟鍙�:銆恵taskNum}銆�"); #region WMS鍚屾浠诲姟瀹屾垚 + var keys = new Dictionary<string, object>() { {"taskNum", taskNum} @@ -609,7 +682,8 @@ } } task.ExceptionMessage += " " + content.Message; - #endregion + + #endregion WMS鍚屾浠诲姟瀹屾垚 if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup && task.TaskState == (int)TaskOutStatusEnum.SC_OutExecuting) { @@ -647,7 +721,6 @@ _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskId, $"鍫嗗灈鏈哄嚭搴撳畬鎴�"); } - //鏆備笉鑰冭檻澶氫釜鍑哄簱鍙� } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup && task.TaskState == (int)TaskInStatusEnum.SC_InExecuting) @@ -676,21 +749,6 @@ { throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵taskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�"); } - - - #region 鏇存柊浠诲姟鐘舵�� - - //var updateTask = config.FirstOrDefault(x => x.ConfigKey == SysConfigKeyConst.UpdateTask)?.ConfigValue; - //if (wmsBase == null || updateTask == null) - //{ - // 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(); } catch (Exception ex) { @@ -798,5 +856,17 @@ { return BaseDal.QueryFirst(x => x.PalletCode == barcode && x.NextAddress == nextAddress && (x.TaskState == (int)TaskInStatusEnum.Line_InExecuting || x.TaskState == (int)TaskOutStatusEnum.Line_OutExecuting), TaskOrderBy); } + + private string GetIpAddress(string baseIp, string name) + { + var configz = _sys_ConfigService.GetConfigsByCategory(CateGoryConst.CONFIG_SYS_IPAddress); + var wcsBasez = configz.Where(x => x.ConfigKey == baseIp).FirstOrDefault()?.ConfigValue; + var address = configz.Where(x => x.ConfigKey == name).FirstOrDefault()?.ConfigValue; + if (wcsBasez == null || address == null) + { + throw new InvalidOperationException("WMS IP 鏈厤缃�"); + } + return wcsBasez + address; + } } } \ No newline at end of file -- Gitblit v1.9.3