From 5b2265e68c0a493c52ea336f77f8dbcd7655d34a Mon Sep 17 00:00:00 2001
From: 肖洋 <cathay_xy@163.com>
Date: 星期五, 22 十一月 2024 10:20:59 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/HuaYiZhongHeng/BaiBuLiKu

---
 Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs |  182 +++++++++++++++++++++++++++++++++------------
 1 files changed, 134 insertions(+), 48 deletions(-)

diff --git a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
index 01a3727..0fb68e6 100644
--- a/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
+++ b/Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs
@@ -13,7 +13,7 @@
 
 namespace WIDESEA_StorageOutTaskServices;
 
-public class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
+public partial class Dt_TaskService : ServiceBase<Dt_Task, IDt_TaskRepository>, IDt_TaskService
 {
     private readonly LogFactory LogFactory = new LogFactory();
     private readonly IUnitOfWorkManage _unitOfWorkManage;
@@ -170,7 +170,7 @@
     private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus(DtStockInfo stock, Dt_Task task)
     {
         var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
-        var details = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id);
+        //var details = _stockInfoDetailRepository.QueryData(x => x.StockId == stock.Id);
 
         location.LocationStatus = (int)LocationEnum.Free;
         task.TaskState = (int)TaskOutStatusEnum.OutFinish;
@@ -844,7 +844,7 @@
             if (task == null)
                 return content.Error("鏈壘鍒颁换鍔�");
 
-            if (taskState == (int)TaskOutStatusEnum.Line_OutFinish || taskState == (int)TaskOutStatusEnum.SC_OutFinish)
+            if (taskState == (int)TaskOutStatusEnum.Line_OutFinish || taskState == (int)TaskInStatusEnum.SC_InFinish)
             {
                 var taskHty = CreateHistoricalTask(task);
                 await _unitOfWorkManage.UseTranAsync(async () =>
@@ -1135,12 +1135,13 @@
     /// <param name="taskHty">鍘嗗彶浠诲姟瀵硅薄</param>
     /// <param name="taskId">浠诲姟ID</param>
     /// <returns></returns>
-    private async Task<bool> ExecuteTransaction(DtStockInfo stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId)
+    private async Task<bool> ExecuteTransaction(DtStockInfo stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId, DtBoxingInfo boxingInfo = null)
     {
         _unitOfWorkManage.BeginTran();
         try
         {
             var isUpdateStock = true;
+            var isDeleteBoxing = true;
             if (taskHty.TaskType == (int)TaskTypeEnum.Outbound)
             {
                 // 鏇存柊搴撳瓨
@@ -1150,6 +1151,9 @@
             {
                 // 娣诲姞搴撳瓨
                 isUpdateStock = await _stockInfoRepository.AddDataNavAsync(stock);
+                isDeleteBoxing = await _boxingInfoRepository.Db.DeleteNav<DtBoxingInfo>(x => x.Id == boxingInfo.Id)
+                   .Include(x => x.BoxingInfoDetails)
+                   .ExecuteCommandAsync();
             }
 
 
@@ -1164,7 +1168,7 @@
             var isTaskDelete = await Delete(taskId);
 
             // 鎻愪氦鎴栧洖婊氫簨鍔�
-            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc)
+            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc && isDeleteBoxing)
             {
                 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"浜嬪姟澶勭悊瀹屾垚,鎻愪氦浜嬪姟銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊鎴栨坊鍔犲簱瀛橈細{isUpdateStock},淇敼绉诲簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLoc}");
                 _unitOfWorkManage.CommitTran();
@@ -1179,7 +1183,7 @@
         }
         catch (Exception err)
         {
-            LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"绉诲簱浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�");
+            LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�");
             _unitOfWorkManage.RollbackTran();
             throw; // 鎶涘嚭寮傚父浠ヤ究澶栭儴鎹曡幏
         }
@@ -1195,46 +1199,140 @@
     /// <param name="task">浠诲姟瀹炰緥</param>
     /// <param name="content">鍝嶅簲鍐呭</param>
     /// <returns></returns>
+    //private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
+    //{
+    //    // 鍒涘缓WebResponseContent瀵硅薄
+    //    WebResponseContent content = new WebResponseContent();
+    //    // 瀹氫箟鍙橀噺
+    //    string toAddress;
+    //    int taskState;
+    //    string original = task.CurrentAddress;
+    //    DtLocationInfo location = new DtLocationInfo();
+    //    int beforeStatus = 0;
+
+    //    // 澶勭悊鍏ュ簱浠诲姟
+    //    location = await GetLocationDistributeAsync(task.Roadway);
+    //    toAddress = location.LocationCode;
+    //    taskState = (int)TaskInStatusEnum.Line_InFinish;
+    //    beforeStatus = location.LocationStatus;
+
+    //    // 鏇存柊璐т綅淇℃伅
+    //    location.LocationStatus = (int)LocationEnum.Lock;
+
+    //    // 鏇存柊浠诲姟淇℃伅
+    //    task.CurrentAddress = input.Position;
+    //    task.TargetAddress = toAddress;
+    //    task.NextAddress = toAddress;
+    //    task.TaskState = taskState;
+
+    //    // 寮�濮嬩簨鍔�
+    //    _unitOfWorkManage.BeginTran();
+    //    // 瀹氫箟鍙橀噺
+    //    bool isUpdateLo = true;
+    //    bool isUpdateChange = true;
+
+    //    // 灏濊瘯鏇存柊浠诲姟
+    //    bool isResult = await BaseDal.UpdateDataAsync(task);
+    //    bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, original, input.Position, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
+
+    //    // 鍒涘缓LocationChangeRecordDto瀵硅薄
+    //    LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
+    //    {
+    //        // 璁剧疆鍙橀噺
+    //        AfterStatus = location.LocationStatus,
+    //        BeforeStatus = beforeStatus,
+    //        TaskNum = task.TaskNum.Value,
+    //        LocationId = location.Id,
+    //        LocationCode = location.LocationCode,
+    //        ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
+    //    };
+    //    // 鏇存柊浣嶇疆鐘舵��
+    //    isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
+    //    isUpdateLo = await _locationRepository.UpdateDataAsync(location);
+
+    //    if (isResult && isUpdateLo && isTaskDetail)
+    //    {
+    //        // 鎻愪氦浜嬪姟
+    //        _unitOfWorkManage.CommitTran();
+    //        content.OK(data: task);
+    //    }
+    //    else
+    //    {
+    //        // 鍥炴粴浜嬪姟
+    //        _unitOfWorkManage.RollbackTran();
+    //        content.Error("鏇存柊浠诲姟澶辫触");
+    //    }
+    //    return content;
+    //}
+
+    // 鏇存柊浠诲姟璐т綅
+
     private async Task<WebResponseContent> UpdateExistingTask(RequestTaskDto input, Dt_Task task)
     {
-        // 鍒涘缓WebResponseContent瀵硅薄
-        WebResponseContent content = new WebResponseContent();
-        // 瀹氫箟鍙橀噺
-        string toAddress;
-        int taskState;
-        string original = task.CurrentAddress;
-        DtLocationInfo location = new DtLocationInfo();
-        int beforeStatus = 0;
+        if (task == null)
+        {
+            return new WebResponseContent().Error("浠诲姟瀵硅薄涓虹┖");
+        }
 
-        // 澶勭悊鍏ュ簱浠诲姟
-        location = await GetLocationDistributeAsync(task.Roadway);
-        toAddress = location.LocationCode;
-        taskState = (int)TaskInStatusEnum.Line_InFinish;
-        beforeStatus = location.LocationStatus;
+        try
+        {
+            // 鍒涘缓WebResponseContent瀵硅薄
+            var content = new WebResponseContent();
 
-        // 鏇存柊璐т綅淇℃伅
-        location.LocationStatus = (int)LocationEnum.Lock;
+            // 鑾峰彇鐩爣鍦板潃鍜屾洿鏂颁换鍔$姸鎬�
+            var location = await GetLocationDistributeAsync(task.Roadway);
+            if (location == null)
+            {
+                return content.Error("鏃犳硶鑾峰彇璐т綅淇℃伅");
+            }
 
-        // 鏇存柊浠诲姟淇℃伅
+            string toAddress = location.LocationCode;
+            int taskState = (int)TaskInStatusEnum.Line_InFinish;
+            int beforeStatus = location.LocationStatus;
+
+            // 鏇存柊璐т綅淇℃伅
+            location.LocationStatus = (int)LocationEnum.Lock;
+
+            // 鏇存柊浠诲姟淇℃伅
+            MapTaskProperties(task, input, toAddress, taskState);
+
+            // 寮�濮嬩簨鍔�
+            var isResult = await UpdateTaskAsync(task, location, beforeStatus);
+            if (!isResult)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return content.Error("鏇存柊浠诲姟澶辫触");
+            }
+
+            // 鎻愪氦浜嬪姟
+            _unitOfWorkManage.CommitTran();
+            return content.OK(data: task);
+        }
+        catch (Exception ex)
+        {
+            // 鍥炴粴浜嬪姟
+            _unitOfWorkManage.RollbackTran();
+            // 杩欓噷鍙互娣诲姞鏃ュ織璁板綍
+            return new WebResponseContent().Error($"鏇存柊浠诲姟鏃跺彂鐢熼敊璇�: {ex.Message}");
+        }
+    }
+
+    private void MapTaskProperties(Dt_Task task, RequestTaskDto input, string toAddress, int taskState)
+    {
         task.CurrentAddress = input.Position;
         task.TargetAddress = toAddress;
         task.NextAddress = toAddress;
         task.TaskState = taskState;
+    }
 
-        // 寮�濮嬩簨鍔�
-        _unitOfWorkManage.BeginTran();
-        // 瀹氫箟鍙橀噺
-        bool isUpdateLo = true;
-        bool isUpdateChange = true;
-
-        // 灏濊瘯鏇存柊浠诲姟
+    // 淇敼浠诲姟
+    private async Task<bool> UpdateTaskAsync(Dt_Task task, DtLocationInfo location, int beforeStatus)
+    {
         bool isResult = await BaseDal.UpdateDataAsync(task);
-        bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, original, input.Position, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
+        bool isTaskDetail = await _taskExecuteDetailRepository.AddDetailAsync(task, false, TaskDescription.GetTaskUpdateDescription(task.PalletCode, task.CurrentAddress, task.TargetAddress, TaskInStatusEnum.Line_InFinish.GetIntegralRuleTypeEnumDesc()));
 
-        // 鍒涘缓LocationChangeRecordDto瀵硅薄
         LocationChangeRecordDto changeRecordDto = new LocationChangeRecordDto()
         {
-            // 璁剧疆鍙橀噺
             AfterStatus = location.LocationStatus,
             BeforeStatus = beforeStatus,
             TaskNum = task.TaskNum.Value,
@@ -1242,23 +1340,11 @@
             LocationCode = location.LocationCode,
             ChangeType = (int)StatusChangeTypeEnum.AutomaticStorage,
         };
-        // 鏇存柊浣嶇疆鐘舵��
-        isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
-        isUpdateLo = await _locationRepository.UpdateDataAsync(location);
 
-        if (isResult && isUpdateLo && isTaskDetail)
-        {
-            // 鎻愪氦浜嬪姟
-            _unitOfWorkManage.CommitTran();
-            content.OK(data: task);
-        }
-        else
-        {
-            // 鍥炴粴浜嬪姟
-            _unitOfWorkManage.RollbackTran();
-            content.Error("鏇存柊浠诲姟澶辫触");
-        }
-        return content;
+        bool isUpdateChange = _locationStatusChangeRecordRepository.AddStatusChangeRecord(changeRecordDto);
+        bool isUpdateLo = await _locationRepository.UpdateDataAsync(location);
+
+        return isResult && isUpdateLo && isTaskDetail;
     }
 
     /// <summary>

--
Gitblit v1.9.3