From 5b34a1458e74f8902d01ebd844c2954f554c9e74 Mon Sep 17 00:00:00 2001
From: xiazhengtongxue <133085197+xiazhengtongxue@users.noreply.github.com>
Date: 星期四, 30 四月 2026 11:05:37 +0800
Subject: [PATCH] 1

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs |   75 ++++++++++++++++++++++++++++++-------
 1 files changed, 60 insertions(+), 15 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
index dbe7256..192b2a5 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/Flows/OutboundTaskFlowService.cs
@@ -1,4 +1,4 @@
-锘縰sing Autofac;
+锘縰sing Masuit.Tools.Hardware;
 using Newtonsoft.Json;
 using Serilog;
 using System.Diagnostics.CodeAnalysis;
@@ -12,6 +12,7 @@
 using WIDESEAWCS_DTO;
 using WIDESEAWCS_DTO.Stock;
 using WIDESEAWCS_DTO.TaskInfo;
+using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob.Models;
@@ -29,9 +30,10 @@
         private readonly IRouterService _routerService;
         private readonly HttpClientHelper _httpClientHelper;
         private readonly IRobotTaskService _robotTaskService;
-        private readonly IComponentContext _componentContext;
+        private readonly ITaskRepository _taskRepository;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly ILogger _logger;
+        private Func<List<WMSTaskDTO>, WebResponseContent> _receiveWMSTaskFunc;
 
         /// <summary>
         /// 鍒濆鍖栧嚭搴撲换鍔℃祦绋嬫湇鍔°��
@@ -39,21 +41,33 @@
         /// <param name="routerService">璺敱鏈嶅姟銆�</param>
         /// <param name="httpClientHelper">WMS鎺ュ彛璋冪敤甯姪绫汇��</param>
         /// <param name="robotTaskService">鏈烘鎵嬩换鍔℃湇鍔°��</param>
-        /// <param name="componentContext">Autofac缁勪欢涓婁笅鏂囷紙鐢ㄤ簬寤惰繜瑙f瀽ITaskService浠ラ伩鍏嶅惊鐜緷璧栵級銆�</param>
-        public OutboundTaskFlowService(IRouterService routerService, HttpClientHelper httpClientHelper, IRobotTaskService robotTaskService, IComponentContext componentContext, IUnitOfWorkManage unitOfWorkManage, ILogger logger)
+        /// <param name="taskRepository">浠诲姟浠撳偍锛堢敤浜庡垹闄�/褰掓。浠诲姟锛夈��</param>
+        /// <param name="unitOfWorkManage">宸ヤ綔鍗曞厓绠$悊鍣ㄣ��</param>
+        /// <param name="logger">鏃ュ織璁板綍鍣ㄣ��</param>
+        public OutboundTaskFlowService(
+            IRouterService routerService,
+            HttpClientHelper httpClientHelper,
+            IRobotTaskService robotTaskService,
+            ITaskRepository taskRepository,
+            IUnitOfWorkManage unitOfWorkManage,
+            ILogger logger)
         {
             _routerService = routerService;
             _httpClientHelper = httpClientHelper;
             _robotTaskService = robotTaskService;
-            _componentContext = componentContext;
+            _taskRepository = taskRepository;
             _unitOfWorkManage = unitOfWorkManage;
             _logger = logger;
         }
 
         /// <summary>
-        /// 寤惰繜瑙f瀽ITaskService浠ラ伩鍏嶅惊鐜緷璧�
+        /// 璁剧疆鎺ユ敹WMS浠诲姟鐨勫鎵橈紙鐢盩askService鍦ㄦ瀯閫犲悗璋冪敤锛岄伩鍏嶅惊鐜緷璧栵級銆�
         /// </summary>
-        private ITaskService TaskService => _componentContext.Resolve<ITaskService>();
+        /// <param name="receiveWMSTaskFunc">鎺ユ敹WMS浠诲姟鐨勬柟娉曞鎵樸��</param>
+        public void SetReceiveWMSTaskDelegate(Func<List<WMSTaskDTO>, WebResponseContent> receiveWMSTaskFunc)
+        {
+            _receiveWMSTaskFunc = receiveWMSTaskFunc;
+        }
 
         /// <summary>
         /// 鎺ユ敹WMS浠诲姟鏃跺垵濮嬪寲鍑哄簱浠诲姟銆�
@@ -83,6 +97,7 @@
         /// <returns>鎺ㄨ繘缁撴灉銆�</returns>
         public WebResponseContent MoveToNextStatus([NotNull] Dt_Task task)
         {
+            WebResponseContent content = new WebResponseContent();
             if (task.TaskStatus >= (int)TaskOutStatusEnum.OutFinish)
                 return WebResponseContent.Instance.Error($"璇ヤ换鍔$姸鎬佷笉鍙烦杞埌涓嬩竴姝�,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟鐘舵��:銆恵task.TaskStatus}銆�");
 
@@ -92,12 +107,13 @@
 
             if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.Outbound)
             {
+                return WebResponseContent.Instance.OK();
                 return GetWMSOutboundTrayTask(task);
             }
 
             if (task.TaskStatus == (int)TaskOutStatusEnum.Line_OutFinish && task.TaskType == (int)TaskOutboundTypeEnum.OutEmpty)
             {
-                return _robotTaskService.GetWMSRobotTask(task);
+               return _robotTaskService.CreateLocalRobotTask(task);
                 //if (!content.Status)
                 //{
                 //    return content;
@@ -141,7 +157,7 @@
             task.Modifier = "System";
 
             // 閫氱煡WMS鍑哄簱瀹屾垚骞惰幏鍙栬繑鍥炵粨鏋�
-            return  NotifyWMSOutboundFinish(task);
+            return NotifyWMSOutboundFinish(task);
         }
 
         /// <summary>
@@ -178,14 +194,14 @@
                     _unitOfWorkManage.BeginTran(() =>
                     {
                         // 鍏堝垹闄ゆ湰鍦板嚭搴撲换鍔★紝閬垮厤鎵樼洏鍙峰敮涓�閿啿绐�
-                        bool isDeleted = TaskService.Repository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
+                        bool isDeleted = _taskRepository.DeleteAndMoveIntoHty(task, OperateTypeEnum.鑷姩瀹屾垚);
                         if (!isDeleted)
                         {
                             return content.Error($"鍒犻櫎鏈湴鍑哄簱浠诲姟澶辫触,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�");
                         }
 
-                        // 璋冪敤ReceiveWMSTask鍒涘缓鏈湴鍏ュ簱浠诲姟
-                        var receiveResult = TaskService.ReceiveWMSTask(new List<WMSTaskDTO> { inboundTaskDto });
+                        // 璋冪敤ReceiveWMSTask濮旀墭鍒涘缓鏈湴鍏ュ簱浠诲姟
+                        var receiveResult = _receiveWMSTaskFunc(new List<WMSTaskDTO> { inboundTaskDto });
                         if (!receiveResult.Status)
                         {
                             return content.Error($"鍒涘缓鏈湴鍏ュ簱浠诲姟澶辫触: {receiveResult.Message}");
@@ -226,7 +242,10 @@
             if (wMSTask == null)
                 return WebResponseContent.Instance.Error($"鑾峰彇WMS绯荤粺绌烘墭鐩樺嚭搴撲换鍔″け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,鎵樼洏鍙�:銆恵task.PalletCode}銆�,閿欒淇℃伅:銆怶MS鏈繑鍥炴湁鏁堜换鍔℃暟鎹��");
 
-            return WebResponseContent.Instance.OK("鎴愬姛", new List<WMSTaskDTO> { wMSTask });
+            if (_receiveWMSTaskFunc(new List<WMSTaskDTO> { wMSTask }).Status)
+                return WebResponseContent.Instance.OK("鎴愬姛");
+
+            return WebResponseContent.Instance.Error("鎺ユ敹WMS浠诲姟澶辫触");
         }
 
         /// <summary>
@@ -235,10 +254,36 @@
         /// <param name="task">浠诲姟瀹炰綋銆�</param>
         /// <returns>鍚屾缁撴灉銆�</returns>
         private WebResponseContent UpdateWMSTaskStatus(Dt_Task task)
-        {
+        {
+            DateTime startTime = DateTime.Now;
+            // 澶勭悊鍑哄簱瀹屾垚鐘舵�佺殑鐗规畩鍚屾
+            if (task.TaskStatus == (int)TaskOutStatusEnum.SC_OutFinish)
+            {
+                string OutboundFinishKey = nameof(ConfigKey.OutboundFinishTaskAsync);
+                var requestDto = new CreateTaskDto()
+                {
+                    PalletCode = task.PalletCode,
+                    SourceAddress = task.SourceAddress,
+                    TargetAddress = task.TargetAddress,
+                    Roadway = task.Roadway,
+                    TaskType = task.TaskType,
+                }.ToJson();
+
+                var resultFinish = _httpClientHelper.Post<WebResponseContent>(OutboundFinishKey, requestDto);
+                if (!resultFinish.IsSuccess || !resultFinish.Data.Status)
+                {
+                    QuartzLogHelper.LogError(_logger, $"璋冪敤WMS鎺ュ彛澶辫触,鎺ュ彛:銆恵resultFinish}銆�,璇锋眰鍙傛暟:銆恵requestDto}銆�,閿欒淇℃伅:銆恵resultFinish.Data?.Message}銆�", "OutboundTaskFlowService");
+                    return WebResponseContent.Instance.Error($"璋冪敤WMS鎺ュ彛鏇存柊浠诲姟鐘舵�佸け璐�,浠诲姟鍙�:銆恵task.TaskNum}銆�,閿欒淇℃伅:銆恵resultFinish.Data?.Message}銆�");
+                }
+
+                QuartzLogHelper.LogInfo(_logger, $"璋冪敤WMS鎺ュ彛鎴愬姛,鎺ュ彛:銆恵OutboundFinishKey}銆�,鍝嶅簲鏁版嵁:銆恵resultFinish.Data?.Data}銆�,鑰楁椂:{(DateTime.Now - startTime).TotalMilliseconds}ms", "OutboundTaskFlowService");
+
+                return WebResponseContent.Instance.OK();
+            }
+         
             string configKey = nameof(ConfigKey.UpdateTaskByStatus);
             string requestParam = new UpdateTaskDto { Id = task.TaskNum, NewStatus = task.TaskStatus, NextAddress = task.NextAddress, CurrentAddress = task.CurrentAddress }.ToJson();
-            DateTime startTime = DateTime.Now;
+            
 
             var result = _httpClientHelper.Post<WebResponseContent>(
                 configKey,

--
Gitblit v1.9.3