From a3014a01e07619105d597d0c51cf195217b0806f Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期二, 29 七月 2025 10:47:01 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  205 ++++++++++++++++++++++++++++++++++----------------
 1 files changed, 139 insertions(+), 66 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 9cc9396..f96becc 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -90,7 +90,7 @@
         private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
         public ITaskRepository Repository => BaseDal;
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IMaterielInfoService materielInfoService, IInboundOrderDetail_HtyService inboundOrderDetail_HtyService, IOutboundOrder_HtyService outboundOrder_HtyService, IOutboundOrderDetail_HtyService outboundOrderDetail_HtyService, IInboundOrder_HtyService inboundOrder_HtyService, IStockRepository stockRepository, IInboundOrderDetailService inboundOrderDetailService, IBasicService basicService, IOutboundService outboundService, IInboundService inboundService, IRecordService recordService, IStockService stockService, ITask_HtyService taskHtyService, ILocationInfoService locationInfoService, IOutboundOrderDetailRepository outboundOrderDetailRepository, IBasicRepository basicRepository, IStockInfoDetailRepository stockInfoDetailRepository, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal)
         {
             _mapper = mapper;
             _stockRepository = stockRepository;
@@ -111,6 +111,7 @@
             _outboundOrderDetailRepository = outboundOrderDetailRepository;
             _basicRepository = basicRepository;
             _stockInfoDetailRepository = stockInfoDetailRepository;
+            _palletTypeInfoRepository = palletTypeInfoRepository;
         }
 
         public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
@@ -484,11 +485,11 @@
                 UpdateInboundOrder(inboundOrder, inboundOrderDetail);
 
                 // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
-                if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
-                {
-                    var stockInfoDetail = stockInfo.Details.FirstOrDefault();
-                    SendInboundInfoToWMS(task, inboundOrder, stockInfo);
-                }
+                //if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                //{
+                //    var stockInfoDetail = stockInfo.Details.FirstOrDefault();
+                //    SendInboundInfoToWMS(task, inboundOrder, stockInfo);
+                //}
 
                 _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
@@ -503,36 +504,76 @@
         private WebResponseContent ProcessAllocateInbound(Dt_Task task, Dt_StockInfo stockInfo, Dt_LocationInfo locationInfo,
             int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
         {
-            // 濡傛灉鏄渶鍚庝竴鏉℃槑缁�
-            if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+            //// 濡傛灉鏄渶鍚庝竴鏉℃槑缁�
+            //if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+            //{
+            //    try
+            //    {
+            //        _unitOfWorkManage.BeginTran();
+
+            //        // 澶勭悊璋冩嫧鍏ュ簱鍗�
+            //        ProcessAllocateInboundOrder(inboundOrder, inboundOrderDetail);
+
+            //        // 鑾峰彇鐩稿叧搴撳瓨淇℃伅
+            //        var relatedStockInfo = _stockService.StockInfoService.Repository
+            //            .QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
+
+            //        // 鍙戦�佽皟鎷ㄤ俊鎭埌WMS
+            //        SendAllocateInfoToWMS(task, inboundOrder, relatedStockInfo);
+
+            //        _unitOfWorkManage.CommitTran();
+            //    }
+            //    catch
+            //    {
+            //        _unitOfWorkManage.RollbackTran();
+            //        throw;
+            //    }
+            //}
+
+            //// 娣诲姞鍘嗗彶璁板綍
+            //AddInboundOrderDetailHistory(inboundOrderDetail);
+
+            //return WebResponseContent.Instance.OK();
+            // 鏇存柊鍏ュ簱鍗曟槑缁嗙姸鎬�
+            UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
+
+            // 鏇存柊搴撳瓨鏄庣粏鐘舵��
+            stockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
+
+            try
             {
-                try
-                {
-                    _unitOfWorkManage.BeginTran();
+                _unitOfWorkManage.BeginTran();
 
-                    // 澶勭悊璋冩嫧鍏ュ簱鍗�
-                    //ProcessAllocateInboundOrder(inboundOrder, inboundOrderDetail);
+                // 鏇存柊浠诲姟鐘舵��
+                UpdateTaskStatus(task);
 
-                    // 鑾峰彇鐩稿叧搴撳瓨淇℃伅
-                    var relatedStockInfo = _stockService.StockInfoService.Repository
-                        .QueryData(x => x.BatchNo == inboundOrderDetail.BatchNo);
+                // 鏇存柊璐т綅鐘舵��
+                UpdateLocationStatus(locationInfo, lastStatus);
 
-                    // 鍙戦�佽皟鎷ㄤ俊鎭埌WMS
-                    SendAllocateInfoToWMS(task, inboundOrder, relatedStockInfo);
+                // 鏇存柊搴撳瓨淇℃伅
+                UpdateStockInfo(stockInfo);
 
-                    _unitOfWorkManage.CommitTran();
-                }
-                catch
-                {
-                    _unitOfWorkManage.RollbackTran();
-                    throw;
-                }
+                // 娣诲姞璁板綍
+                AddRecords(task, stockInfo, locationInfo, lastStatus);
+
+                // 鏇存柊鍏ュ簱鍗�
+                UpdateInboundOrder(inboundOrder, inboundOrderDetail);
+
+                // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
+                //if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                //{
+                //    var stockInfoDetail = stockInfo.Details.FirstOrDefault();
+                //    SendInboundInfoToWMS(task, inboundOrder, stockInfo);
+                //}
+
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
             }
-
-            // 娣诲姞鍘嗗彶璁板綍
-            AddInboundOrderDetailHistory(inboundOrderDetail);
-
-            return WebResponseContent.Instance.OK();
+            catch
+            {
+                _unitOfWorkManage.RollbackTran();
+                throw;
+            }
         }
 
         #region Helper Methods
@@ -602,8 +643,17 @@
         private void SendInboundInfoToWMS(Dt_Task task, Dt_InboundOrder inboundOrder, Dt_StockInfo stockInfo)
         {
 
-            List<Dt_StockInfoDetail> dt_StockInfo = _stockInfoDetailRepository.QueryData(x => x.BatchNo == stockInfo.BatchNo).ToList();
-            if (dt_StockInfo.Count == 0) return;
+
+            List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == task.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo)).ToList();
+            //var dt_StockInfo = _stockRepository.StockInfoRepository.QueryData(x => x.Id == stockInfo.Id).ToList();
+            //List<Dt_StockInfo> StockInfos = new List<Dt_StockInfo>();
+            //foreach (var item in dt_StockInfo)
+            //{
+            //    Dt_StockInfo StockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == item.Id).Includes(x => x.Details).First();
+            //    StockInfos.Add(StockInfo);
+            //}
+
+            if (StockInfos.Count == 0) throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
             var houseInboundPassBack = new HouseInboundPassBack
             {
                 ApiType = "AsnController",
@@ -616,21 +666,21 @@
             {
                 new data.data1
                 {
-                    AsnNo = task.OrderNo,
-                    InWarehouse = task.Roadway,
+                    AsnNo = inboundOrder.OrderNo,
+                    //InWarehouse = task.Roadway,
                     TransactionCode = inboundOrder.TransactionCode,
                     InoutType = inboundOrder.OrderType,
                     OrderType = inboundOrder.InoutType,
                     // 閬嶅巻鎵�鏈夊簱瀛樻槑缁嗭紝娣诲姞鍒� DetailList
-                    DetailList = dt_StockInfo.Select(d => new data.data1.Inbound
+                    DetailList = StockInfos.Select(d => new data.data1.Inbound
                     {
-                        LinId = d.LinId,
-                        MaterielCode = d.MaterielCode,
-                        OrderQuantity = d.StockQuantity,
+                        LinId = d.Details.FirstOrDefault()?.LinId?? "",
+                        MaterielCode = d.Details.FirstOrDefault()?.MaterielCode?? "",
+                        OrderQuantity = d.Details.FirstOrDefault().StockQuantity,
                         BatchNo = d.BatchNo,
-                        LPNNo = task.PalletCode,
-                        FinishQty = d.StockQuantity,
-                        LocationName = task.TargetAddress
+                        LPNNo = d.PalletCode,
+                        FinishQty = d.Details.FirstOrDefault().StockQuantity,
+                        LocationName = d.LocationCode
                     }).ToList()
                 }
             }
@@ -845,10 +895,10 @@
 
             foreach (var lockInfo in outStockLockInfos)
             {
-                var detail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == lockInfo.OrderDetailId);
+                var detail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == lockInfo.BatchNo);
                 if (detail != null)
                 {
-                    detail.OverOutQuantity = detail.LockQuantity;
+                    detail.OverOutQuantity = lockInfo.OriginalQuantity;
                     if (detail.LockQuantity == detail.OrderQuantity)
                     {
                         detail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
@@ -884,11 +934,11 @@
 
                 // 鏍规嵁璁㈠崟绫诲瀷澶勭悊涓嶅悓閫昏緫
                 var outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
-                    .Where(x => x.LPNNo == stockInfo.PalletCode).First();
+                    .Where(x => x.BatchNo == outboundOrderDetails.FirstOrDefault().BatchNo).First();
                 var outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
                     .Where(x => x.Id == outDetail.OrderId).Includes(x => x.Details).First();
 
-                if (outboundOrder.OrderType == 1) // 鏅�氬嚭搴�
+                if (outboundOrder.OrderType == 1) // 鏅�氬嚭搴� && outDetail.OrderDetailStatus = OutboundStatusEnum.鍑哄簱瀹屾垚
                 {
                     ProcessNormalOutbound(task, stockInfo, outboundOrder, outDetail);
                 }
@@ -946,9 +996,23 @@
             var stockInfoDetail = _stockRepository.StockInfoDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
                 .Where(x => x.StockId == stockInfo.Id).First();
 
-            if (outboundOrder.Details.Count == 1)
+            if (outboundOrder.OrderStatus == OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
             {
-                MoveOutboundOrderToHistory(outboundOrder);
+                var history = new Dt_OutboundOrder_Hty
+                {
+                    OrderStatus = outboundOrder.OrderStatus,
+                    CreateType = outboundOrder.CreateType,
+                    UpperOrderNo = outboundOrder.UpperOrderNo,
+                    OrderNo = outboundOrder.OrderNo,
+                    OutWareHouse = outboundOrder.OutWareHouse,
+                    TransactionCode = outboundOrder.TransactionCode,
+                    InoutType = outboundOrder.InoutType,
+                    OrderType = outboundOrder.OrderType,
+                    Creater = "WMS",
+                    CreateDate = DateTime.Now,
+                };
+                _outboundOrder_HtyService.AddData(history);
+                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
             }
 
             MoveOutboundDetailToHistory(outDetail);
@@ -967,7 +1031,21 @@
 
             if (outboundOrder.Details.Count == 1)
             {
-                MoveOutboundOrderToHistory(outboundOrder);
+                var history = new Dt_OutboundOrder_Hty
+                {
+                    OrderStatus = outboundOrder.OrderStatus,
+                    CreateType = outboundOrder.CreateType,
+                    UpperOrderNo = outboundOrder.UpperOrderNo,
+                    OrderNo = outboundOrder.OrderNo,
+                    OutWareHouse = outboundOrder.OutWareHouse,
+                    TransactionCode = outboundOrder.TransactionCode,
+                    InoutType = outboundOrder.InoutType,
+                    OrderType = outboundOrder.OrderType,
+                    Creater = "WMS",
+                    CreateDate = DateTime.Now,
+                };
+                _outboundOrder_HtyService.AddData(history);
+                _outboundService.OutboundOrderService.DeleteData(outboundOrder);
             }
 
             MoveOutboundDetailToHistory(outDetail);
@@ -979,24 +1057,6 @@
             DeleteStockInfo(stockInfo);
         }
 
-        private void MoveOutboundOrderToHistory(Dt_OutboundOrder outboundOrder)
-        {
-            var history = new Dt_OutboundOrder_Hty
-            {
-                OrderStatus = outboundOrder.OrderStatus,
-                CreateType = outboundOrder.CreateType,
-                UpperOrderNo = outboundOrder.UpperOrderNo,
-                OrderNo = outboundOrder.OrderNo,
-                OutWareHouse = outboundOrder.OutWareHouse,
-                TransactionCode = outboundOrder.TransactionCode,
-                InoutType = outboundOrder.InoutType,
-                OrderType = outboundOrder.OrderType,
-                Creater = "WMS",
-                CreateDate = DateTime.Now,
-            };
-            _outboundOrder_HtyService.AddData(history);
-            _outboundService.OutboundOrderService.DeleteData(outboundOrder);
-        }
 
         private void MoveOutboundDetailToHistory(Dt_OutboundOrderDetail outDetail)
         {
@@ -1018,6 +1078,19 @@
         private void SendNormalOutboundToWMS(Dt_Task task, Dt_OutboundOrder outboundOrder,
             Dt_StockInfoDetail stockInfoDetail, Dt_OutboundOrderDetail outDetail)
         {
+
+
+            List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.WarehouseId == task.WarehouseId).Includes(x => x.Details).Where(x => x.Details.Any(v => v.OrderNo == outboundOrder.OrderNo)).ToList();
+            //var dt_StockInfo = _stockRepository.StockInfoRepository.QueryData(x => x.Id == stockInfo.Id).ToList();
+            //List<Dt_StockInfo> StockInfos = new List<Dt_StockInfo>();
+            //foreach (var item in dt_StockInfo)
+            //{
+            //    Dt_StockInfo StockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == item.Id).Includes(x => x.Details).First();
+            //    StockInfos.Add(StockInfo);
+            //}
+
+            if (StockInfos.Count == 0) throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
+
             var passBack = new HouseoutboundPassBack
             {
                 ApiType = "ShippingOrderController",

--
Gitblit v1.9.3