From 2de09bec5cc05bf875543fa8956167ca7db73021 Mon Sep 17 00:00:00 2001
From: 刘磊 <1161824510@qq.com>
Date: 星期三, 25 六月 2025 11:36:44 +0800
Subject: [PATCH] 合并

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs |  671 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 564 insertions(+), 107 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
index ab8eec4..0bc4bf0 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Dt_TaskService.cs"
@@ -2,13 +2,18 @@
 using MailKit.Search;
 using Mapster;
 using Masuit.Tools;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using System.Diagnostics;
+using System.Reflection.Emit;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
+using WIDESEA_Common;
 using WIDESEA_Core.Const;
 using WIDESEA_DTO.WMS;
 using WIDESEA_IServices;
 using WIDESEA_IStoragIntegrationServices;
+using WIDESEA_Model.Models;
+using WIDESEA_StorageBasicRepository;
 using WIDESEAWCS_BasicInfoRepository;
 using WIDESEAWCS_Model.Models;
 using WIDESEAWCS_QuartzJob.Models;
@@ -32,6 +37,11 @@
     private readonly IDt_WheelsStock_htyRepository _WheelsStock_HtyRepository;
     private readonly IDt_InWheels_mes_htyRepository _InWheels_Mes_HtyRepository;
     private readonly IDt_CacheInfoRepository _CacheInfoRepository;
+    private readonly IDt_OutWheels_htyRepository _OutWheels_HtyRepository;
+    private readonly IDt_InZdp_mesRepository _InZdp_MesRepository;
+    private readonly IDt_InZdp_mes_htyRepository _InZdp_Mes_HtyRepository; 
+    private readonly IDt_ZdpStockRepository _ZdpStockRepository;
+    private readonly IDt_ZdpStock_htyRepository _ZdpStock_HtyRepository;
 
     public Dt_TaskService(IDt_TaskRepository BaseDal,
                                 IUnitOfWorkManage unitOfWorkManage,
@@ -49,7 +59,12 @@
                                 IDt_WheelsStockRepository wheelsStockRepository,
                                 IDt_WheelsStock_htyRepository wheelsStock_HtyRepository,
                                 IDt_InWheels_mes_htyRepository inWheels_Mes_HtyRepository,
-                                IDt_CacheInfoRepository cacheInfoRepository) : base(BaseDal)
+                                IDt_OutWheels_htyRepository dt_OutWheels_HtyRepository,
+                                IDt_CacheInfoRepository cacheInfoRepository,
+                                IDt_InZdp_mesRepository inZdp_MesRepository,
+                                IDt_InZdp_mes_htyRepository inZdp_Mes_HtyRepository,
+                                IDt_ZdpStockRepository zdpStockRepository,
+                                IDt_ZdpStock_htyRepository dt_ZdpStock_HtyRepository) : base(BaseDal)
 
     {
         _unitOfWorkManage = unitOfWorkManage;
@@ -64,7 +79,12 @@
         _WheelsStockRepository = wheelsStockRepository;
         _WheelsStock_HtyRepository = wheelsStock_HtyRepository;
         _InWheels_Mes_HtyRepository = inWheels_Mes_HtyRepository;
+        _OutWheels_HtyRepository = dt_OutWheels_HtyRepository;
         _CacheInfoRepository = cacheInfoRepository;
+        _InZdp_MesRepository = inZdp_MesRepository;
+        _InZdp_Mes_HtyRepository = inZdp_Mes_HtyRepository;
+        _ZdpStockRepository = zdpStockRepository;
+        _ZdpStock_HtyRepository = dt_ZdpStock_HtyRepository;
     }
 
     #region 澶栭儴鎺ュ彛鏂规硶
@@ -103,6 +123,39 @@
 
     #endregion 绉诲簱浠诲姟瀹屾垚
 
+    #region 鍒跺姩鐩樼Щ搴撲换鍔″畬鎴�
+
+    /// <summary>
+    /// 绉诲簱浠诲姟瀹屾垚
+    /// </summary>
+    /// <param name="saveModel">浠诲姟鏁版嵁鍚堥泦</param>
+    /// <returns>杩斿洖缁撴灉闆�</returns>
+    public async Task<WebResponseContent> CompleteZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            // 鏇存柊璐т綅鍜屽簱瀛樹俊鎭�
+            (Dt_ZdpStock updateStock, DtLocationInfo locationInForm, DtLocationInfo locationInfoTo) = UpdateZdpStockLocation(stock,task);
+            var taskHty = CreateHistoricalTask(task);
+            LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "绉诲簱浠诲姟瀹屾垚", $"璐т綅鍦板潃锛歿task.TargetAddress},淇敼鍚庡簱瀛樻暟鎹細{JsonConvert.SerializeObject(updateStock)}锛屽師鍏堣揣浣嶆暟鎹細{locationInForm}");
+
+            // 鎵ц鏁版嵁搴撲簨鍔�
+            bool isResult = await ZdpExecuteTransaction(updateStock, taskHty, locationInForm, locationInfoTo, task.TaskId);
+            if (isResult)
+                content.OK("绉诲簱浠诲姟瀹屾垚鎴愬姛");
+            else
+                content.Error("绉诲簱浠诲姟瀹屾垚澶辫触");
+        }
+        catch (Exception err)
+        {
+            Console.WriteLine(err.Message.ToString());
+        }
+        return content;
+    }
+
+    #endregion 绉诲簱浠诲姟瀹屾垚
+
     #region 鍏ュ簱浠诲姟瀹屾垚
 
     /// <summary>
@@ -118,7 +171,17 @@
         {
 
             // 鑾峰彇MES淇℃伅鍜岀洰鏍囦綅缃俊鎭�
-            var mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
+            Dt_InWheels_mes mes_Wheels = null;
+            Dt_InZdp_mes mes_Zdp = null;
+            Dt_WheelsStock wheelsStock = null;
+            Dt_ZdpStock zdpStock = null;
+
+            if (task.TaskType== (int)TaskInboundTypeEnum.InBrake)
+                mes_Zdp = await _InZdp_MesRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode);
+            else
+                mes_Wheels = await _InWheels_MesRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
+            
+
             var locationInf = await _locationRepository.QueryFirstAsync(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
 
             int lastStatus = locationInf.LocationStatus;
@@ -128,39 +191,85 @@
             // 鍒涘缓鍘嗗彶浠诲姟瀹炰緥妯″瀷
             var taskHty = CreateHistoricalTask(task);
 
-            // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷
-            Dt_WheelsStock wheelsStock = new Dt_WheelsStock
+            if(task.TaskType == (int)TaskInboundTypeEnum.InBrake)
             {
-                Wheels_ldtm = mes_Wheels.Wheels_ldtm,
-                CreateDate = DateTime.Now,
-                Creater = task.Creater,
-                Wheels_Type = mes_Wheels.Wheels_Type,
-                Wheels_gkcc = mes_Wheels.Wheels_gkcc,
-                WheelsProps = mes_Wheels.WheelsProps,
-                Wheels_CarNo = mes_Wheels.Wheels_CarNo,
-                Wheels_CarType = mes_Wheels.Wheels_CarType,
-                Wheels_ldxh = mes_Wheels.Wheels_ldxh,
-                Wheels_code = mes_Wheels.Wheels_code,
-                Wheels_InDate = mes_Wheels.Wheels_InDate,
-                Wheels_level = mes_Wheels.Wheels_level,
-                Wheels_Location = task.TargetAddress,
-                Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld,
-                Wheels_Num = mes_Wheels.Wheels_Num,
-                Wheels_psj = mes_Wheels.Wheels_psj,
-                Wheels_CurrentStatue = 1,
-                Wheels_mttype = mes_Wheels.Wheels_mttype,
-                Wheels_ljz = mes_Wheels.Wheels_ljz,
-                Wheels_ldh = mes_Wheels.Wheels_ldh,
-                //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum,
-                Wheels_ygljz = mes_Wheels.Wheels_ygljz,
-                Wheels_gkzja = mes_Wheels.Wheels_gkzja,
-                Wheels_gkzjb = mes_Wheels.Wheels_gkzjb,
-                Wheels_gkzjc = mes_Wheels.Wheels_gkzjc,
+                // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷
+                zdpStock = new Dt_ZdpStock
+                {
+                    Zdp_code= mes_Zdp.Zdp_code,
+                    Zdp_ZPH = mes_Zdp.Zdp_ZPH,
+                    Zdp_CurrentStatue = 1,
+                    Zdp_Location = task.TargetAddress,
+                    Zdp_chexing= mes_Zdp.Zdp_chexing,
+                    Zdp_neworold = mes_Zdp.Zdp_neworold,
+                    Zdp_POS = mes_Zdp.Zdp_POS,
+                    Zdp_LSXH = mes_Zdp.Zdp_LSXH,
+                    Zdp_MAT = mes_Zdp.Zdp_MAT,
+                    Zdp_SITE = mes_Zdp.Zdp_SITE,
+                    Zdp_GKA1 = mes_Zdp.Zdp_GKA1,
+                    Zdp_GKA2 = mes_Zdp.Zdp_GKA2,
+                    Zdp_GKA3 = mes_Zdp.Zdp_GKA3,
+                    Zdp_GKA = mes_Zdp.Zdp_GKA,
+                    Zdp_GKB1 = mes_Zdp.Zdp_GKB1,
+                    Zdp_GKB2 = mes_Zdp.Zdp_GKB2,
+                    Zdp_GKB3 = mes_Zdp.Zdp_GKB3,
+                    Zdp_GKB = mes_Zdp.Zdp_GKB,
+                    Zdp_GKC1 = mes_Zdp.Zdp_GKC1,
+                    Zdp_GKC2 = mes_Zdp.Zdp_GKC2,
+                    Zdp_GKC3 = mes_Zdp.Zdp_GKC3,
+                    Zdp_GKC = mes_Zdp.Zdp_GKC,
+                    Zdp_GKJZ = mes_Zdp.Zdp_GKJZ,
+                    Zdp_LSCSYMH = mes_Zdp.Zdp_LSCSYMH,
+                    Zdp_LMCSYMH = mes_Zdp.Zdp_LMCSYMH,
+                    Zdp_rksj = mes_Zdp.Zdp_rksj,
+                    CreateDate = DateTime.Now,
+                    Creater = task.Creater,
+                };
+            }
+            else
+            {
+                // 鏍规嵁鍒涘缓搴撳瓨瀹炰緥妯″瀷
+                 wheelsStock = new Dt_WheelsStock
+                {
+                    Wheels_ldtm = mes_Wheels.Wheels_ldtm,
+                    CreateDate = DateTime.Now,
+                    Creater = task.Creater,
+                    Wheels_Type = mes_Wheels.Wheels_Type,
+                    Wheels_gkcc = mes_Wheels.Wheels_gkcc,
+                    WheelsProps = mes_Wheels.WheelsProps,
+                    Wheels_CarNo = mes_Wheels.Wheels_CarNo,
+                    Wheels_CarType = mes_Wheels.Wheels_CarType,
+                    Wheels_ldxh = mes_Wheels.Wheels_ldxh,
+                    Wheels_code = mes_Wheels.Wheels_code,
+                    Wheels_InDate = mes_Wheels.Wheels_InDate,
+                    Wheels_level = mes_Wheels.Wheels_level,
+                    Wheels_Location = task.TargetAddress,
+                    Wheels_NewOrOld = mes_Wheels.Wheels_NewOrOld,
+                    Wheels_Num = mes_Wheels.Wheels_Num,
+                    Wheels_psj = mes_Wheels.Wheels_psj,
+                    Wheels_CurrentStatue = 1,
+                    Wheels_mttype = mes_Wheels.Wheels_mttype,
+                    Wheels_ljz = mes_Wheels.Wheels_ljz,
+                    Wheels_ldh = mes_Wheels.Wheels_ldh,
+                    //Wheels_SequenceNum = mes_Wheels.Wheels_SequenceNum,
+                    Wheels_ygljz = mes_Wheels.Wheels_ygljz,
+                    Wheels_gkzja = mes_Wheels.Wheels_gkzja,
+                    Wheels_gkzjb = mes_Wheels.Wheels_gkzjb,
+                    Wheels_gkzjc = mes_Wheels.Wheels_gkzjc,
+                };
+            }
 
-            };
-
-            // 鎵ц鏁版嵁搴撲簨鍔�
-            bool isResult = await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels);
+            // 鎵ц鏁版嵁搴撲簨鍔DPExecuteTransaction
+            bool isResult = false;
+            if (task.TaskType == (int)TaskInboundTypeEnum.InBrake)
+            {
+                isResult = await ZDPExecuteTransaction(zdpStock, taskHty, locationInf, task.TaskId, mes_Zdp);
+            }
+            else
+            {
+                isResult=await ExecuteTransaction(wheelsStock, taskHty, locationInf, task.TaskId, mes_Wheels);
+            }
+            
             if (isResult)
             {
                 _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(locationInf, lastStatus, (int)StatusChangeTypeEnum.AutomaticStorage, task.TaskNum);
@@ -188,6 +297,8 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
+            if(stock ==null) return content.Error("浠诲姟瀹屾垚澶辫触锛屾湭鎵惧埌褰撳墠搴撳瓨淇℃伅锛屽垹闄ゅけ璐�");
+
             // 鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵��
             (var loc, var tas) = UpdateStockAndTaskStatus(stock, task);
             var taskHty = task.Adapt<Dt_Task_Hty>();
@@ -198,6 +309,35 @@
             stockInfo_Hty.FinishWheelDate = DateTime.Now;
             stockInfo_Hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
 
+            Dt_OutWheels_hty Outwheels_hty = new Dt_OutWheels_hty
+            {
+                Wheels_code = stock.Wheels_code,
+                Wheels_Type = stock.Wheels_Type == "1"?"杞�":"鐩�",
+                Wheels_Num = stock.Wheels_Num,
+                CreateDate = DateTime.Now,
+                Creater = App.User.UserName == null ? "admin" : App.User.UserName,
+                WheelsProps = stock.WheelsProps,
+                Wheels_CarNo = stock.Wheels_CarNo,
+                Wheels_CarType = stock.Wheels_CarType,
+                Wheels_ldxh = stock.Wheels_ldxh,
+                Wheels_ldtm = stock.Wheels_ldtm,
+                Wheels_InDate = stock.Wheels_InDate,
+                Wheels_level = stock.Wheels_level,
+                Wheels_NewOrOld = stock.Wheels_NewOrOld,
+                Wheels_psj = stock.Wheels_psj,
+                Wheels_gkcc = stock.Wheels_gkcc,
+                Wheels_gkzja = stock.Wheels_gkzja,
+                Wheels_gkzjb = stock.Wheels_gkzjb,
+                Wheels_gkzjc = stock.Wheels_gkzjc,
+                Wheels_ldh = stock.Wheels_ldh,
+                Wheels_ljz = stock.Wheels_ljz,
+                Wheels_mttype = stock.Wheels_mttype,
+                //Wheels_SequenceNum = "",
+                Wheels_ygljz = stock.Wheels_ygljz,
+            };
+
+
+
             // 浜嬪姟澶勭悊
             await _unitOfWorkManage.UseTranAsync(async () =>
             {
@@ -206,6 +346,89 @@
                 //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId);                         //鍒犻櫎浠诲姟
                 var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;                        //鍔犲叆鍘嗗彶浠诲姟
                 var isStockHtyAdd = await _WheelsStock_HtyRepository.AddDataAsync(stockInfo_Hty);           //鍔犲叆鍘嗗彶搴撳瓨
+
+                var isoutWheelsHtyAdd = await _OutWheels_HtyRepository.AddDataAsync(Outwheels_hty);         //娣诲姞杞﹁疆鍑哄簱淇℃伅
+            });
+
+            return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark);
+        }
+        catch (Exception err)
+        {
+            LogFactory.GetLog("浠诲姟瀹屾垚").Error(true, $"绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}");
+            return content.Error(err.Message);
+        }
+    }
+
+    private (DtLocationInfo, Dt_Task) UpdateStockAndTaskStatus( Dt_Task task)
+    {
+        var location = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
+        int lastStatus = location.LocationStatus;
+        location.LocationStatus = (int)LocationEnum.Free;
+        task.TaskState = (int)TaskOutStatusEnum.OutFinish;
+        //task.CurrentAddress = task.NextAddress;
+        //task.NextAddress = task.TargetAddress;
+
+        _locationStatusChangeRecordRepository.AddLocationStatusChangeRecord(location, lastStatus, (int)StatusChangeTypeEnum.AutomaticDelivery, task.TaskNum);
+
+        LogFactory.GetLog("浠诲姟瀹屾垚").Info(true, "鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵��");
+        return (location, task);
+    }
+    #endregion
+
+    #region 鍒跺姩鐩樺嚭搴撲换鍔″畬鎴�
+    public async Task<WebResponseContent> CompleteOutZdpTaskAsync(Dt_Task task, Dt_ZdpStock stock)
+    {
+        WebResponseContent content = new WebResponseContent();
+        try
+        {
+            if (stock == null) return content.Error("浠诲姟瀹屾垚澶辫触锛屾湭鎵惧埌褰撳墠搴撳瓨淇℃伅锛屽垹闄ゅけ璐�");
+
+            // 鏇存柊搴撲綅鐘舵�佷笌浠诲姟鐘舵��
+            (var loc, var tas) = UpdateStockAndTaskStatus(task);
+            var taskHty = task.Adapt<Dt_Task_Hty>();
+            taskHty.FinishTime = DateTime.Now;
+            taskHty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
+
+            Dt_ZdpStock_hty stockInfo_Hty = stock.Adapt<Dt_ZdpStock_hty>();
+            stockInfo_Hty.FinishDate = DateTime.Now;
+            stockInfo_Hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
+
+            Dt_OutZdp_hty Outwheels_hty = new Dt_OutZdp_hty
+            {
+                Zdp_code = stock.Zdp_code,
+                Zdp_ZPH = stock.Zdp_ZPH,
+                Zdp_Location = stock.Zdp_Location,
+                Zdp_chexing = stock.Zdp_chexing,
+                Zdp_neworold = stock.Zdp_neworold,
+                Zdp_POS = stock.Zdp_POS,
+                Zdp_LSXH = stock.Zdp_LSXH,
+                Zdp_MAT = stock.Zdp_MAT,
+                Zdp_SITE = stock.Zdp_SITE,
+                Zdp_GKA1 = stock.Zdp_GKA1,
+                Zdp_GKA2 = stock.Zdp_GKA2,
+                Zdp_GKA3 = stock.Zdp_GKA3,
+                Zdp_GKA = stock.Zdp_GKA,
+                Zdp_GKB1 = stock.Zdp_GKB1,
+                Zdp_GKB2 = stock.Zdp_GKB2,
+                Zdp_GKB3 = stock.Zdp_GKB3,
+                Zdp_GKB = stock.Zdp_GKB,
+                Zdp_GKC1 = stock.Zdp_GKC1,
+                Zdp_GKC2 = stock.Zdp_GKC2,
+                Zdp_GKC3 = stock.Zdp_GKC3,
+                Zdp_GKC = stock.Zdp_GKC,
+                Zdp_GKJZ = stock.Zdp_GKJZ,
+                Zdp_LSCSYMH = stock.Zdp_LSCSYMH,
+                Zdp_rksj = stock.Zdp_rksj,
+            };
+
+            // 浜嬪姟澶勭悊
+            await _unitOfWorkManage.UseTranAsync(async () =>
+            {
+                var isStockUpdated = await _ZdpStockRepository.DeleteDataByIdAsync(stock.Zdp_ID);     //鍒犻櫎搴撳瓨
+                var isLocationUpdate = await _locationRepository.UpdateDataAsync(loc);                      //鏇存柊搴撲綅
+                //var isTaskUpdated = await BaseDal.DeleteDataByIdAsync(task.TaskId);                         //鍒犻櫎浠诲姟
+                var isTaskAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;                        //鍔犲叆鍘嗗彶浠诲姟
+                var isStockHtyAdd = await _ZdpStock_HtyRepository.AddDataAsync(stockInfo_Hty);           //鍔犲叆鍘嗗彶搴撳瓨
             });
 
             return content.OK("浠诲姟瀹屾垚鎴愬姛", task.Remark);
@@ -258,7 +481,9 @@
 
 
         // 楠岃瘉搴撳瓨鏄惁瀛樺湪
-        var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num == task.PalletCode);
+        var stock = await _WheelsStockRepository.QueryFirstNavAsync(x => x.Wheels_Num.Contains(task.PalletCode) && x.Wheels_Location==task.SourceAddress);
+        var ZdpStock = await _ZdpStockRepository.QueryFirstNavAsync(x => x.Zdp_code == task.PalletCode && x.Zdp_Location == task.SourceAddress);
+        
 
         // 鏍规嵁浠诲姟绫诲瀷璋冪敤鐩稿簲鐨勫畬鎴愪换鍔℃柟娉�
         switch (task.TaskType)
@@ -270,13 +495,19 @@
                 return await CompleteInboundTaskAsync(task);
 
             case (int)TaskOutboundTypeEnum.Outbound:
-            case (int)TaskOutboundTypeEnum.OutBrake:
             case (int)TaskOutboundTypeEnum.OutWheels:
                 LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍑哄簱浠诲姟", "");
                 return await CompleteStackTaskAsync(task, stock);
 
+            case (int)TaskOutboundTypeEnum.OutBrake:
+                LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "鍒跺姩鐩樺嚭搴撲换鍔�", "");
+                return await CompleteOutZdpTaskAsync(task, ZdpStock);
+
             case (int)TaskRelocationTypeEnum.Relocation:
-                return await CompleteTransferTaskAsync(task, stock);
+                if (stock != null)
+                    return await CompleteTransferTaskAsync(task, stock);
+                else
+                    return await CompleteZdpTaskAsync(task, ZdpStock);
 
             default:
                 return content.Error("浠诲姟绫诲瀷涓嶅瓨鍦�");
@@ -402,75 +633,164 @@
         WebResponseContent content = new WebResponseContent();
         try
         {
+            List<Dt_WheelsStock> WheelList = new List<Dt_WheelsStock>();
+            List<Dt_ZdpStock> ZdpStockList = new List<Dt_ZdpStock>();
+            List<Dt_Task> TaskList = new List<Dt_Task>();
+            List<DtLocationInfo> Locationslist = new List<DtLocationInfo>();
+            List<WMSTaskDTO> WMSTaskDTOdata = new List<WMSTaskDTO>();
+
+
             string palletCode = saveModel.MainData["palletCode"].ToString();
             string station = saveModel.MainData["station"].ToString();
+            string outtype = saveModel.MainData["outtype"].ToString();  //1涓烘寚瀹氳溅杞嚭搴擄紝2涓烘寚瀹氬埗鍔ㄧ洏鍑哄簱
 
-            // 鏌ヨ搴撳瓨淇℃伅
-            var stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == palletCode);
-            if (stockInfo == null)
+            List<string> palletCodes = JsonConvert.DeserializeObject<List<string>>(palletCode);     //鎶婃墭鐩樻潯鐮佹樉绀�
+
+            List<DtLocationInfo> locationinfoData = _locationRepository.QueryData(x => x.LocationStatus == 2);  //鏌ユ壘鍏ㄩ儴搴撲綅
+            if (outtype == "2")
             {
-                return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�");
+                List<Dt_ZdpStock> stocktData = _ZdpStockRepository.QueryData(x => x.Zdp_CurrentStatue == 1);  //鏌ユ壘鍏ㄩ儴鍦ㄥ簱鐨勫簱瀛�
+                foreach (var item in palletCodes)
+                {
+                    Dt_ZdpStock zdpInfo = _ZdpStockRepository.QueryFirst(x => x.Zdp_code == item);
+                    if (zdpInfo == null) return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�");
+                    zdpInfo.Zdp_CurrentStatue = 4;
+                    string Location = zdpInfo.Zdp_Location;
+                   
+                    var locationst = locationinfoData.FirstOrDefault(x => x.LocationCode == Location);
+                    if (locationst.LocationStatus != (int)LocationEnum.InStock && locationst.EnalbeStatus != 1) return content.Error($"搴撲綅寮傚父,璇锋鏌ヤ竴涓嬪簱浣�,搴撳瓨鏉$爜锛歿item}锛屽簱浣嶅彿锛歿Location}");
+
+                    locationst.LocationStatus = (int)LocationEnum.InStockDisable;
+
+                    var task = BaseDal.QueryFirst(x => x.PalletCode == item);
+                    if (task != null)
+                    {
+                        return content.Error($"銆恵item}銆戝凡瀛樺湪浠诲姟");
+                    }
+
+
+                    CheckInfo checkInfo = new CheckInfo()
+                    {
+                        CarType = zdpInfo.Zdp_chexing ,
+                        MTType ="0" ,    //鍒跺姩鐩樻病鏈夊姩鎷栧睘鎬�
+
+                        //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
+                        CheckType = outtype,
+
+                        HubLevel = "0" ,
+                        CLTM =zdpInfo.Zdp_code,
+                        IsCheck = true,
+                        Standards = zdpInfo.Zdp_neworold 
+                    };
+
+                    task = new Dt_Task
+                    {
+                        CarType = zdpInfo.Zdp_chexing,
+                        wheels_gkcc =  zdpInfo.Zdp_GKJZ,
+                        WheelsNewOrOld = zdpInfo.Zdp_neworold,
+                        WheelsLX = "",
+                        Grade = 1,
+                        Roadway = "SC1",
+                        TargetAddress = station,
+                        Dispatchertime = DateTime.Now,
+                        MaterialNo = "",
+                        NextAddress = "2010",
+                        OrderNo = null,
+                        PalletCode =  zdpInfo.Zdp_code,
+                        wheels_mttype =  "" ,
+                        SourceAddress = zdpInfo.Zdp_Location,
+                        CurrentAddress =zdpInfo.Zdp_Location,
+                        TaskState = (int)TaskOutStatusEnum.OutNew,
+                        TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels,
+                        TaskNum = BaseDal.GetTaskNo().Result,
+                        Creater = "System",
+                        CreateDate = DateTime.Now,
+                        TaskId = 0,
+                        task_bak1 = JsonConvert.SerializeObject(checkInfo),
+                        Towhereabouts = station,
+                    };
+
+                    // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄
+                    var taskDTO = CreateTaskDTO(task);
+
+                    WMSTaskDTOdata.Add(taskDTO);
+                    Locationslist.Add(locationst);
+                    TaskList.Add(task);
+                    ZdpStockList.Add(zdpInfo);
+                }
+            }
+            else
+            {
+                List<Dt_WheelsStock> stocktData = _WheelsStockRepository.QueryData(x => x.Wheels_CurrentStatue == 1);  //鏌ユ壘鍏ㄩ儴鍦ㄥ簱鐨勫簱瀛�
+                foreach (var item in palletCodes)
+                {
+                    Dt_WheelsStock stockInfo = _WheelsStockRepository.QueryFirst(x => x.Wheels_code == item);
+                    if (stockInfo == null) return content.Error("鏈煡璇㈠埌瀵瑰簲鐨勫簱瀛樹俊鎭�");
+                    stockInfo.Wheels_CurrentStatue = 4;
+                    string Location = stockInfo.Wheels_Location;
+                    var locationst = locationinfoData.Where(x => x.LocationCode== stockInfo.Wheels_Location).FirstOrDefault();
+                    if (locationst.LocationStatus == (int)LocationEnum.Lock) return content.Error("搴撲綅閿佸畾,璇峰厛瑙i攣鍚庡啀鎸囧畾鍑哄簱");
+
+                    locationst.LocationStatus = (int)LocationEnum.InStockDisable;
+
+                    var task = BaseDal.QueryFirst(x => x.PalletCode == item);
+                    if (task != null)
+                    {
+                        return content.Error($"銆恵item}銆戝凡瀛樺湪浠诲姟");
+                    }
+
+                    CheckInfo checkInfo = new CheckInfo()
+                    {
+                        CarType = stockInfo.Wheels_CarType,
+                        MTType = stockInfo.Wheels_mttype,    //鍒跺姩鐩樻病鏈夊姩鎷栧睘鎬�
+
+                        //CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
+                        CheckType = outtype,
+
+                        HubLevel = stockInfo.Wheels_level.Contains("绛夌骇") ? stockInfo.Wheels_level.Replace("绛夌骇", "") : "0",
+                        CLTM = stockInfo.Wheels_Num,
+                        IsCheck = true,
+                        Standards = stockInfo.Wheels_NewOrOld
+                    };
+
+
+                    task = new Dt_Task
+                    {
+                        CarType =  stockInfo.Wheels_CarType,
+                        wheels_gkcc = stockInfo.Wheels_gkcc,
+                        WheelsNewOrOld =  stockInfo.Wheels_NewOrOld,
+                        WheelsLX = outtype == "2" ? "" : stockInfo.Wheels_ldxh,
+                        Grade = 1,
+                        Roadway = "SC1",
+                        TargetAddress = station,
+                        Dispatchertime = DateTime.Now,
+                        MaterialNo = "",
+                        NextAddress = "2010",
+                        OrderNo = null,
+                        PalletCode =  stockInfo.Wheels_Num,
+                        wheels_mttype = stockInfo.Wheels_mttype,
+                        SourceAddress =stockInfo.Wheels_Location,
+                        CurrentAddress =  stockInfo.Wheels_Location,
+                        TaskState = (int)TaskOutStatusEnum.OutNew,
+                        TaskType = outtype == "2" ? (int)TaskOutboundTypeEnum.OutBrake : (int)TaskOutboundTypeEnum.OutWheels,
+                        TaskNum = BaseDal.GetTaskNo().Result,
+                        Creater = "System",
+                        CreateDate = DateTime.Now,
+                        TaskId = 0,
+                        task_bak1 = JsonConvert.SerializeObject(checkInfo),
+                        Towhereabouts = station,
+                    };
+
+                    // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄
+                    var taskDTO = CreateTaskDTO(task);
+
+                    WMSTaskDTOdata.Add(taskDTO);
+                    Locationslist.Add(locationst);
+                    TaskList.Add(task);
+                    WheelList.Add(stockInfo);
+                }
             }
 
-            if (stockInfo.Wheels_CurrentStatue != 1) return content.Error("鎸囧畾澶辫触锛氬綋鍓嶇姸鎬佷笉鍏佽鎸囧畾鍑哄簱");
-
-            stockInfo.Wheels_CurrentStatue = 4;
-
-            //鏌ヨ搴撲綅鏄惁閿佸畾锛�
-            var location = _locationRepository.QueryFirst(x => x.LocationCode == stockInfo.Wheels_Location);
-
-            if (location.LocationStatus == (int)LocationEnum.Lock) return content.Error("搴撲綅閿佸畾,璇峰厛瑙i攣鍚庡啀鎸囧畾鍑哄簱");
-
-            location.LocationStatus = (int)LocationEnum.InStockDisable;
-
-            var task = BaseDal.QueryFirst(x => x.PalletCode == palletCode);
-            if (task != null)
-            {
-                return content.Error($"銆恵palletCode}銆戝凡瀛樺湪浠诲姟");
-            }
-
-            CheckInfo checkInfo = new CheckInfo()
-            {
-                CarType = stockInfo.Wheels_CarType,
-                MTType = stockInfo.Wheels_mttype,
-                CheckType = stockInfo.Wheels_Type == "1" ? "1" : "2",
-                HubLevel = stockInfo.Wheels_level.Contains("绛夌骇") ? stockInfo.Wheels_level.Replace("绛夌骇", "") : "0",
-                CLTM = stockInfo.Wheels_Num,
-                IsCheck = true,
-                Standards = stockInfo.Wheels_NewOrOld
-            };
-
-            // var stationInfo = _stationManagerRepository.QueryFirst(x => x.stationChildCode == station);
-
-            // 鍒涘缓骞舵坊鍔犱换鍔″埌鏁版嵁搴�
-            task = new Dt_Task
-            {
-                CarType = stockInfo.Wheels_CarType,
-                wheels_gkcc = stockInfo.Wheels_gkcc,
-                WheelsNewOrOld = stockInfo.Wheels_NewOrOld,
-                WheelsLX = stockInfo.Wheels_ldxh,
-                Grade = 1,
-                Roadway = "SC1",
-                TargetAddress = station,
-                Dispatchertime = DateTime.Now,
-                MaterialNo = "",
-                NextAddress = "2010",
-                OrderNo = null,
-                PalletCode = stockInfo.Wheels_Num,
-                wheels_mttype = stockInfo.Wheels_mttype,
-                SourceAddress = stockInfo.Wheels_Location,
-                CurrentAddress = stockInfo.Wheels_Location,
-                TaskState = (int)TaskOutStatusEnum.OutNew,
-                TaskType = (int)TaskOutboundTypeEnum.OutWheels,
-                TaskNum = BaseDal.GetTaskNo().Result,
-                Creater = "System",
-                CreateDate = DateTime.Now,
-                TaskId = 0,
-                task_bak1 = JsonConvert.SerializeObject(checkInfo)
-            };
-
-            // 鍒涘缓浠诲姟浼犺緭鐢ㄧ殑DTO瀵硅薄
-            var taskDTO = CreateTaskDTO(task);
 
             // 鑾峰彇WMS IP鍦板潃鐢ㄤ簬鍙戦�佷换鍔¤姹�
             var wmsIpAddress = GetWCSIpReceiveTask();
@@ -478,19 +798,25 @@
             {
                 throw new InvalidOperationException("WMS IP 鏈厤缃�");
             }
-
-            var tasks = new List<WMSTaskDTO>() { taskDTO };
             // 鍙戦�佷换鍔¤姹傚埌WMS
-            var result = HttpHelper.Post(wmsIpAddress, tasks.ToJsonString());
+            var result = HttpHelper.Post(wmsIpAddress, WMSTaskDTOdata.ToJsonString());
             content = JsonConvert.DeserializeObject<WebResponseContent>(result);
             if (content.Status)
             {
                 // 娣诲姞浠诲姟鍒版暟鎹簱
-                BaseDal.AddData(task);
+                BaseDal.AddData(TaskList);
                 // 鏇存柊搴撲綅浣嶇疆鐘舵�佷负涓嶅彲鐢�
-                _locationRepository.UpdateData(location);
-                _WheelsStockRepository.UpdateData(stockInfo);
+                _locationRepository.UpdateData(Locationslist);
+                if (outtype == "2")
+                {
+                    _ZdpStockRepository.UpdateData(ZdpStockList);
+                }
+                else
+                {
+                    _WheelsStockRepository.UpdateData(WheelList);
+                }
             }
+
         }
         catch (Exception ex)
         {
@@ -747,9 +1073,32 @@
         return (stock, fromLocation, toLocation);
     }
 
-    #region 鎵ц鏁版嵁搴撲簨鍔�
     /// <summary>
-    /// 鎵ц鏁版嵁搴撲簨鍔�
+    /// 鍒跺姩鐩樻洿鏂板簱瀛樹綅缃�
+    /// </summary>
+    /// <param name="stock"></param>
+    /// <param name="task"></param>
+    /// <returns></returns>
+    private (Dt_ZdpStock, DtLocationInfo, DtLocationInfo) UpdateZdpStockLocation(Dt_ZdpStock stock, Dt_Task task)
+    {
+        //淇敼鏉ユ簮搴撲綅鍜� 鐩爣搴撲綅鐘舵��
+        var fromLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.SourceAddress && x.RoadwayNo == task.Roadway);
+        fromLocation.LocationStatus = (int)LocationEnum.Free;
+        var toLocation = _locationRepository.QueryFirst(x => x.LocationCode == task.TargetAddress && x.RoadwayNo == task.Roadway);
+        toLocation.LocationStatus = (int)LocationEnum.InStock;
+
+        // 灏嗗簱瀛樹綅缃缃负鐩爣浣嶇疆
+        stock.Zdp_Location = task.TargetAddress;
+
+        // 杩斿洖鏇存柊鍚庣殑搴撳瓨鍜屼綅缃俊鎭�
+        return (stock, fromLocation, toLocation);
+    }
+
+
+
+    #region 杞﹁疆鎵ц鏁版嵁搴撲簨鍔�
+    /// <summary>
+    /// 杞﹁疆鎵ц鏁版嵁搴撲簨鍔�
     /// </summary>
     /// <param name="stock">搴撳瓨瀵硅薄</param>
     /// <param name="taskHty">鍘嗗彶浠诲姟瀵硅薄</param>
@@ -812,6 +1161,71 @@
     }
     #endregion
 
+    #region 鍒跺姩鐩樻墽琛屾暟鎹簱浜嬪姟
+    /// <summary>
+    ///  鍒跺姩鐩樻墽琛屾暟鎹簱浜嬪姟
+    /// </summary>
+    /// <param name="stock">搴撳瓨瀵硅薄</param>
+    /// <param name="taskHty">鍘嗗彶浠诲姟瀵硅薄</param>
+    /// <param name="taskId">浠诲姟ID</param>
+    /// <returns></returns>
+    private async Task<bool> ZDPExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo locationInfo, int taskId, Dt_InZdp_mes inZdp_Mes = null)
+    {
+        _unitOfWorkManage.BeginTran();
+        try
+        {
+            var isUpdateStock = false;
+            var isDeleteWheelsMes = false;
+
+
+            // 娣诲姞搴撳瓨
+            isUpdateStock = _ZdpStockRepository.AddData(stock) > 0;
+            if (inZdp_Mes != null)
+            {
+                isDeleteWheelsMes = _InZdp_MesRepository.DeleteData(inZdp_Mes);
+
+                var InZdp_mes_hty = inZdp_Mes.Adapt<Dt_InZdp_mes_hty>();
+
+                InZdp_mes_hty.Zdp_CurrentStatue = "2";
+                InZdp_mes_hty.FinishDate = DateTime.Now;
+                InZdp_mes_hty.OperateType = (int)OperateTypeEnum.鑷姩瀹屾垚;
+
+                _InZdp_Mes_HtyRepository.AddData(InZdp_mes_hty);
+            }
+
+
+            // 娣诲姞鍘嗗彶浠诲姟
+            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
+
+            // 淇敼绉诲簱鍓嶈揣浣嶇姸鎬�
+            var isUpdateLoc = _locationRepository.UpdateData(locationInfo);
+
+            // 鍒犻櫎浠诲姟鏁版嵁
+            var isTaskDelete = await Delete(taskId);
+
+            // 鎻愪氦鎴栧洖婊氫簨鍔�
+            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLoc && isDeleteWheelsMes)
+            {
+                LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"浜嬪姟澶勭悊瀹屾垚,鎻愪氦浜嬪姟銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊鎴栨坊鍔犲簱瀛橈細{isUpdateStock},淇敼鍏ュ簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLoc}");
+                _unitOfWorkManage.CommitTran();
+                return true;
+            }
+            else
+            {
+                LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"鏁版嵁澶勭悊澶辫触,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊搴撳瓨锛歿isUpdateStock},淇敼鍏ュ簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLoc}");
+                _unitOfWorkManage.RollbackTran();
+                return false;
+            }
+        }
+        catch (Exception err)
+        {
+            LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�");
+            _unitOfWorkManage.RollbackTran();
+            throw; // 鎶涘嚭寮傚父浠ヤ究澶栭儴鎹曡幏
+        }
+    }
+    #endregion
+
     #region 绉诲簱浠诲姟浜嬪姟
 
     private async Task<bool> ExecuteTransaction(Dt_WheelsStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
@@ -855,6 +1269,49 @@
 
     #endregion MyRegion
 
+    #region 鍒跺姩鐩樼Щ搴撲换鍔′簨鍔�
+
+    private async Task<bool> ZdpExecuteTransaction(Dt_ZdpStock stock, Dt_Task_Hty taskHty, DtLocationInfo fromLocation, DtLocationInfo toLocation, int taskId)
+    {
+        _unitOfWorkManage.BeginTran();
+        try
+        {
+            var isUpdateStock = _ZdpStockRepository.UpdateData(stock);
+
+            // 娣诲姞鍘嗗彶浠诲姟
+            var isTaskHtyAdd = await _task_HtyRepository.AddDataAsync(taskHty) > 0;
+
+            // 淇敼绉诲簱鍓嶈揣浣嶇姸鎬�
+            var isUpdateLocF = _locationRepository.UpdateData(fromLocation);
+            var isUpdateLocT = _locationRepository.UpdateData(toLocation);
+
+            // 鍒犻櫎浠诲姟鏁版嵁
+            var isTaskDelete = await Delete(taskId);
+
+            // 鎻愪氦鎴栧洖婊氫簨鍔�
+            if (isUpdateStock && isTaskHtyAdd && isTaskDelete && isUpdateLocF && isUpdateLocT)
+            {
+                LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"浜嬪姟澶勭悊瀹屾垚,鎻愪氦浜嬪姟銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊鎴栨坊鍔犲簱瀛橈細{isUpdateStock},淇敼绉诲簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLocF}");
+                _unitOfWorkManage.CommitTran();
+                return true;
+            }
+            else
+            {
+                LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, "浠诲姟瀹屾垚", $"鏁版嵁澶勭悊澶辫触,璇锋鏌ユ暟鎹槸鍚︽纭�,鏁版嵁鍥炴粴銆傛坊鍔犲巻鍙蹭换鍔★細{isTaskHtyAdd},鍒犻櫎浠诲姟鏁版嵁锛歿isTaskDelete},鏇存柊搴撳瓨锛歿isUpdateStock},淇敼绉诲簱鍓嶈揣浣嶇姸鎬侊細{isUpdateLocF}");
+                _unitOfWorkManage.RollbackTran();
+                return false;
+            }
+        }
+        catch (Exception err)
+        {
+            LogFactory.GetLog("浠诲姟瀹屾垚").InfoFormat(true, $"浠诲姟瀹屾垚,绯荤粺寮傚父锛屽紓甯镐俊鎭細{err.Message}", "鏃犲弬鏁�");
+            _unitOfWorkManage.RollbackTran();
+            throw new Exception(err.Message); // 鎶涘嚭寮傚父浠ヤ究澶栭儴鎹曡幏
+        }
+    }
+
+    #endregion MyRegion
+
     #region 浠诲姟璇锋眰鏂规硶
 
 

--
Gitblit v1.9.3