From 5af11cc200dd5ebe474b9c0475883b0e6d1e3759 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期三, 11 三月 2026 10:00:49 +0800
Subject: [PATCH] 重构整个项目:改进代码质量和架构

---
 Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |   57 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 39 insertions(+), 18 deletions(-)

diff --git a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 4b23b23..54429f5 100644
--- a/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/Code/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -8,7 +8,8 @@
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
-using WIDESEA_DTO;
+using WIDESEA_Core.Core;
+using WIDESEA_DTO.GradingMachine;
 using WIDESEA_DTO.Task;
 using WIDESEA_IBasicService;
 using WIDESEA_IStockService;
@@ -24,6 +25,7 @@
         private readonly ILocationInfoService _locationInfoService;
         private readonly HttpClientHelper _httpClientHelper;
         private readonly IConfiguration _configuration;
+        private readonly RoundRobinService _roundRobinService;
 
         public IRepository<Dt_Task> Repository => BaseDal;
 
@@ -42,13 +44,15 @@
             IStockInfoService stockInfoService,
             ILocationInfoService locationInfoService,
             HttpClientHelper httpClientHelper,
-            IConfiguration configuration) : base(BaseDal)
+            IConfiguration configuration,
+            RoundRobinService roundRobinService) : base(BaseDal)
         {
             _mapper = mapper;
             _stockInfoService = stockInfoService;
             _locationInfoService = locationInfoService;
             _httpClientHelper = httpClientHelper;
             _configuration = configuration;
+            _roundRobinService = roundRobinService;
         }
 
         #region WCS閫昏緫澶勭悊
@@ -381,20 +385,37 @@
         }
 
         /// <summary>
-        /// 鏍规嵁宸烽亾纭畾鐩爣鍦板潃
+        /// 鏍规嵁宸烽亾纭畾鐩爣鍦板潃锛堟敮鎸佸鍑哄簱鍙h疆璇級
         /// </summary>
-        private string DetermineTargetAddress(string roadway, Dictionary<string, string> addressMap)
+        private string DetermineTargetAddress(string roadway, Dictionary<string, List<string>> addressMap)
         {
             if (string.IsNullOrWhiteSpace(roadway))
-                return "10080"; // 榛樿鍦板潃
+                return "10080";
 
+            // 鏌ユ壘鍖归厤鐨勫贩閬撳墠缂�
+            string matchedPrefix = null;
             foreach (var kvp in addressMap)
             {
                 if (roadway.Contains(kvp.Key))
-                    return kvp.Value;
+                {
+                    matchedPrefix = kvp.Key;
+                    break;
+                }
             }
 
-            return "10080"; // 榛樿鍦板潃
+            if (matchedPrefix == null)
+                return "10080";
+
+            var addresses = addressMap[matchedPrefix];
+            if (addresses == null || addresses.Count == 0)
+                return "10080";
+
+            // 鍗曚釜鍦板潃锛岀洿鎺ヨ繑鍥�
+            if (addresses.Count == 1)
+                return addresses[0];
+
+            // 澶氫釜鍦板潃锛屼娇鐢ㄨ疆璇㈡湇鍔�
+            return _roundRobinService.GetNextAddress(matchedPrefix, addresses);
         }
 
         /// <summary>
@@ -473,8 +494,8 @@
 
                 // 4. 鑾峰彇閰嶇疆鐨勭洰鏍囧湴鍧�鏄犲皠
                 var targetAddressMap = _configuration.GetSection("AutoOutboundTask:TargetAddresses")
-                    .Get<Dictionary<string, string>>()
-                    ?? new Dictionary<string, string>();
+                    .Get<Dictionary<string, List<string>>>()
+                    ?? new Dictionary<string, List<string>>();
 
                 // 5. 鎵归噺鍒涘缓浠诲姟
                 var taskList = new List<Dt_Task>();
@@ -498,7 +519,7 @@
                         TaskType = TaskTypeEnum.Outbound.GetHashCode(),
                         TaskStatus = TaskStatusEnum.New.GetHashCode(),
                         Grade = 1,
-                        TaskNum = 0,  // 浣跨敤 0 璁╂暟鎹簱鑷姩鐢熸垚浠诲姟鍙�
+                        TaskNum = await BaseDal.GetTaskNo(),
                         Creater = "system_auto"
                     };
                     taskList.Add(task);
@@ -519,7 +540,7 @@
                         {
                             var wmstaskDto = _mapper.Map<WMSTaskDTO>(task);
                             _httpClientHelper.Post<WebResponseContent>(
-                                "http://logistics-service/api/logistics/notifyoutbound",
+                                "http://localhost:9292/api/Task/ReceiveTask",
                                 JsonSerializer.Serialize(wmstaskDto));
                         }
                         catch (Exception ex)
@@ -545,7 +566,7 @@
         /// <summary>
         /// 鍫嗗灈鏈哄彇鏀捐揣瀹屾垚鍚庣墿娴侀�氱煡鍖栨垚鍒嗗鏌滃畬鎴愪俊鍙�
         /// </summary>
-        public async Task<WebResponseContent> InOrOutCompletedAsync(InputDto input)
+        public async Task<WebResponseContent> InOrOutCompletedAsync(GradingMachineInputDto input)
         {
             WebResponseContent content = new WebResponseContent();
             if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode))
@@ -560,7 +581,7 @@
                 {
                     var location = await _locationInfoService.GetLocationInfoAsync(input.LocationCode);
 
-                    OutPutDto outPutDto = new OutPutDto()
+                    OutputDto outPutDto = new OutputDto()
                     {
                         LocationCode = input.LocationCode,
                         PalletCode = input.PalletCode,
@@ -571,7 +592,7 @@
                 }
                 else
                 {
-                    OutPutDto outPutDto = new OutPutDto()
+                    OutputDto outPutDto = new OutputDto()
                     {
                         LocationCode = input.LocationCode,
                         PalletCode = input.PalletCode,
@@ -594,7 +615,7 @@
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<WebResponseContent> SendLocationStatusAsync(InputDto input)
+        public async Task<WebResponseContent> SendLocationStatusAsync(GradingMachineInputDto input)
         {
             WebResponseContent content = new WebResponseContent();
             if (string.IsNullOrWhiteSpace(input.LocationCode))
@@ -631,7 +652,7 @@
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<WebResponseContent> RequestOutboundAsync(InputDto input)
+        public async Task<WebResponseContent> RequestOutboundAsync(GradingMachineInputDto input)
         {
             WebResponseContent content = new WebResponseContent();
             if (string.IsNullOrWhiteSpace(input.LocationCode) || string.IsNullOrWhiteSpace(input.PalletCode))
@@ -690,7 +711,7 @@
         /// </summary>
         /// <param name="input"></param>
         /// <returns></returns>
-        public async Task<WebResponseContent> GetPalletCodeCellAsync(InputDto input)
+        public async Task<WebResponseContent> GetPalletCodeCellAsync(GradingMachineInputDto input)
         {
             WebResponseContent content = new WebResponseContent();
             if (string.IsNullOrWhiteSpace(input.PalletCode) || string.IsNullOrWhiteSpace(input.LocationCode))
@@ -704,7 +725,7 @@
                 {
                     return content.Error("鏈壘鍒板搴旂殑鎵樼洏");
                 }
-                var outPutDtos = stockInfo.Details.Select(x => new OutPutDto()
+                var outPutDtos = stockInfo.Details.Select(x => new OutputDto()
                 {
                     LocationCode = input.LocationCode,
                     PalletCode = input.PalletCode,

--
Gitblit v1.9.3