From 93ec15196294abce031a86e24f4cee643b3b1c8a Mon Sep 17 00:00:00 2001
From: yangpeixing <yangpeixing@hnkhzn.com>
Date: 星期四, 22 一月 2026 15:45:29 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |  431 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 412 insertions(+), 19 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
index 405b670..1e5a5e8 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -889,6 +889,158 @@
                             }
                         }
                     }
+                    else if (warehouse.WarehouseCode.Contains("DW") || warehouse.WarehouseCode.Contains("YS"))
+                    {
+                        Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
+                        //Dt_InboundOrderDetail? inboundOrderDetail = null;
+                        //鍑哄簱鍏ュ簱閫昏緫
+                        if (task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
+                        {
+                            int lastStatus = dt_LocationInfo.LocationStatus;
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                            // 鏍规嵁鎵樼洏鏄庣粏鑾峰彇瀵瑰簲鐨勫叆搴撳崟鏄庣粏
+                            List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
+
+                            // 澶勭悊澶氫釜搴撳瓨鏄庣粏鐨勬儏鍐�
+                            foreach (var stockDetail in dt_StockInfo.Details)
+                            {
+                                if (!string.IsNullOrEmpty(stockDetail.OrderNo))
+                                {
+                                    var detail = inboundOrder.Details.FirstOrDefault(x => x.LinId == stockDetail.LinId && x.BatchNo == stockDetail.BatchNo);
+
+                                    if (detail != null && !inboundOrderDetails.Any(x => x.Id == detail.Id))
+                                    {
+                                        inboundOrderDetails.Add(detail);
+                                    }
+                                }
+                            }
+                            if (!inboundOrderDetails.Any())
+                            {
+                                return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑鍏ュ簱鍗曟槑缁�");
+                            }
+                            // 鏇存柊鍏ュ簱鍗曟槑缁嗙姸鎬�
+                            foreach (var inboundOrderDetail in inboundOrderDetails)
+                            {
+                                // 妫�鏌ヨ鏄庣粏鏄惁宸插叏閮ㄥ叆搴�
+                                decimal totalStockQuantity = dt_StockInfo.Details
+                                    .Where(x => x.LinId == inboundOrderDetail.LinId && x.BatchNo == inboundOrderDetail.BatchNo)
+                                    .Sum(x => x.StockQuantity);
+
+                                decimal orderQuantity = Convert.ToDecimal(inboundOrderDetail.OrderQuantity);
+                                decimal receiptQuantity = Convert.ToDecimal(inboundOrderDetail.ReceiptQuantity);
+                                decimal overInQuantity = Convert.ToDecimal(inboundOrderDetail.OverInQuantity);
+
+                                // 鏇存柊鏀惰揣鏁伴噺
+                                inboundOrderDetail.OverInQuantity = totalStockQuantity += overInQuantity;
+
+                                // 妫�鏌ユ槸鍚﹀叏閮ㄥ畬鎴�
+                                if (inboundOrderDetail.OverInQuantity == inboundOrderDetail.OrderQuantity)
+                                {
+                                    inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                                }
+                                else
+                                {
+                                    inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Inbounding.ObjToInt();
+                                }
+                            }
+                            ///鏇存柊搴撳瓨鐘舵��
+                            dt_StockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                            // 鏇存柊搴撳瓨鏄庣粏鐘舵��
+                            dt_StockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
+                            try
+                            {
+                                _unitOfWorkManage.BeginTran();
+
+                                // 鏇存柊浠诲姟鐘舵��
+                                UpdateTaskStatus(task);
+
+                                // 鏇存柊璐т綅鐘舵��
+                                UpdateLocationStatus(dt_LocationInfo, lastStatus);
+
+                                // 鏇存柊搴撳瓨淇℃伅
+                                UpdateStockInfo(dt_StockInfo);
+
+                                // 娣诲姞璁板綍
+                                AddRecords(task, dt_StockInfo, dt_LocationInfo, lastStatus);
+
+                                // 鏇存柊鍏ュ簱鍗曟槑缁�
+                                if (inboundOrderDetails.Any())
+                                {
+                                    BaseDal.Db.Updateable(inboundOrderDetails).ExecuteCommand();
+
+                                    // 妫�鏌ュ叆搴撳崟鏄惁鍏ㄩ儴瀹屾垚
+                                    bool allCompleted = inboundOrder.Details.All(x =>
+                                        x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+
+                                    if (allCompleted)
+                                    {
+                                        inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt();
+                                    }
+                                    else
+                                    {
+                                        inboundOrder.OrderStatus = InboundStatusEnum.鍏ュ簱涓�.ObjToInt();
+                                    }
+                                }
+
+                                // 鏇存柊鍏ュ簱鍗�
+                                UpdateInboundOrder(inboundOrder, inboundOrderDetails.FirstOrDefault());
+
+                                // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
+                                if (inboundOrderDetails.Any(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) && inboundOrder.System.Equals("ERP"))
+                                {
+                                    if(inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+                                    {
+                                        bool allCompleted = inboundOrder.Details.All(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+                                        if (allCompleted)
+                                        {
+                                            foreach (var detail in inboundOrder.Details)
+                                            {
+                                                FeedBackInboundERP(inboundOrder.UpperOrderNo, detail.LinId);
+                                            }
+                                        }
+                                    }
+                                }
+                                if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
+                                {
+                                    //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
+                                }
+                                else if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
+                                {
+                                    SendAllocateInfoToWMS(task, inboundOrder, dt_StockInfo);
+                                }
+
+                                _unitOfWorkManage.CommitTran();
+                                return WebResponseContent.Instance.OK();
+                            }
+                            catch (Exception ex)
+                            {
+                                _unitOfWorkManage.RollbackTran();
+                                throw new Exception($"鍏ュ簱澶勭悊澶辫触锛歿ex.Message}", ex);
+                            }
+
+                        }
+                        if (task.TaskType == TaskTypeEnum.SurplusReturn.ObjToInt() || task.TaskType == TaskTypeEnum.ReverseIn.ObjToInt())
+                        {
+                            return ReturnInbound(task, dt_StockInfo, dt_LocationInfo);
+                        }
+                        if (task.TaskType == TaskTypeEnum.InInventory.ObjToInt())
+                        {
+                            int lastStatus = dt_LocationInfo.LocationStatus;
+                            dt_LocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                            dt_StockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
+                            // 鏇存柊搴撳瓨鏄庣粏鐘舵��
+                            dt_StockInfo.Details.ForEach(x => x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt());
+                            _unitOfWorkManage.BeginTran();
+                            UpdateTaskStatus(task);
+                            UpdateLocationStatus(dt_LocationInfo, lastStatus);
+                            UpdateStockInfo(dt_StockInfo);
+                            AddRecords(task, dt_StockInfo, dt_LocationInfo, lastStatus);
+                            _unitOfWorkManage.CommitTran();
+                            return WebResponseContent.Instance.OK();
+
+                        }
+
+                    }
                     else
                     {
                         Dt_InboundOrder? inboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == dt_StockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First();
@@ -987,7 +1139,7 @@
             int lastStatus, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDetail)
         {
             // 鏇存柊鍏ュ簱鍗曟槑缁嗙姸鎬�
-            UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
+               UpdateInboundOrderDetails(stockInfo, inboundOrder, ref inboundOrderDetail);
             ///鏇存柊搴撳瓨鐘舵��
             stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt();
             // 鏇存柊搴撳瓨鏄庣粏鐘舵��
@@ -1010,21 +1162,21 @@
                 AddRecords(task, stockInfo, locationInfo, lastStatus);
 
                 // 鏇存柊鍏ュ簱鍗�
-                UpdateInboundOrder(inboundOrder, inboundOrderDetail);
+                    UpdateInboundOrder(inboundOrder, inboundOrderDetail);
 
-                // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
-                if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && inboundOrder.System.Equals("ERP"))
-                {
-                    FeedBackInboundERP(inboundOrder.UpperOrderNo, inboundOrderDetail.LinId);
+                    // 鍗曟嵁鏁伴噺鍏ㄩ儴涓婃灦瀹屾垚锛屽鐞哤MS鍥炰紶
+                    if (inboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && inboundOrder.System.Equals("ERP"))
+                    {
+                            FeedBackInboundERP(inboundOrder.UpperOrderNo, inboundOrderDetail.LinId);
+                        }
+                    if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
+                    {
+                        //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
                 }
-                if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
-                {
-                    //SendInboundInfoToWMS(task, inboundOrder, stockInfo);
-                }
-                else if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
-                {
-                    SendAllocateInfoToWMS(task, inboundOrder, stockInfo);
-                }
+                    else if (inboundOrder.OrderStatus == InboundStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && inboundOrder.OrderType == 2 && inboundOrder.System.Equals("SMOM"))
+                    {
+                        SendAllocateInfoToWMS(task, inboundOrder, stockInfo);
+                    }
 
                 _unitOfWorkManage.CommitTran();
                 return WebResponseContent.Instance.OK();
@@ -1786,6 +1938,42 @@
                             return WebResponseContent.Instance.Error($"澶勭悊澶辫触: {ex.Message}");
                         }
                     }
+                    else if(warehouse.WarehouseCode.Contains("DW") || warehouse.WarehouseCode.Contains("YS"))
+                    {
+                        Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+                        .Where(x => x.OrderNo == task.OrderNo)
+                        .Includes(x => x.Details)
+                        .First();
+
+                        if (inboundOrder == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+
+                        List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
+                        foreach(var detail in stockInfo.Details)
+                        {
+                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
+                           .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo).First();
+                            outboundOrderDetails.Add(outboundOrderDetail);
+                        }
+
+                        for(var i = 0; i<outboundOrderDetails.Count; i++)
+                        {
+                            if (outboundOrderDetails[i].LocationName != null && outboundOrderDetails[i].LocationName != "")
+                            {
+                                foreach (var detail in stockInfo.Details)
+                                {
+                                    Dt_OutboundOrderDetail newOutboundOrderDetail = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrderDetail>()
+                                   .Where(x => x.OrderId == inboundOrder.Id && x.BatchNo == detail.BatchNo && x.LocationName == stockInfo.LocationCode)
+                                   .First();
+                                    outboundOrderDetails[i] = newOutboundOrderDetail;
+                                }
+                            }
+                        }
+
+                        if (outboundOrderDetails == null) return WebResponseContent.Instance.Error("鏈壘鍒板嚭搴撳崟淇℃伅");
+                        DWANDYSUpdateOutboundOrderDetails(stockInfo, inboundOrder, ref outboundOrderDetails);
+                        // 3. 鎵ц鏍稿績鍑哄簱閫昏緫
+                        return DWANDYSExecuteOutboundLogic(task, stockInfo, locationInfo, outboundOrderDetails, inboundOrder);
+                    }
                     else
                     {
                         Dt_OutboundOrder inboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
@@ -1879,8 +2067,10 @@
                 _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
 
                 // 鏇存柊搴撳瓨鐘舵�� 鍥炲簱鍗�
-                AddRetrueOrder(stockInfo, inboundOrder);
 
+                 AddRetrueOrder(stockInfo, inboundOrder);
+     
+                   
                 // 鍖哄垎鍗曟嵁鏁版嵁鏉ユ簮鏇存柊璐т綅鐘舵��
                 if (inboundOrder.System == null)
                 {
@@ -1938,6 +2128,82 @@
                 throw;
             }
         }
+
+        private WebResponseContent DWANDYSExecuteOutboundLogic(Dt_Task task, Dt_StockInfo stockInfo,
+          Dt_LocationInfo locationInfo, List<Dt_OutboundOrderDetail> outboundOrderDetails, Dt_OutboundOrder inboundOrder)
+        {
+            try
+            {
+                _unitOfWorkManage.BeginTran();
+                ///鏇存柊鍑哄簱鍗�
+                _outboundService.OutboundOrderService.Repository.UpdateData(inboundOrder);
+                // 鏇存柊鍑哄簱璁㈠崟璇︽儏
+                _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+
+                // 鏇存柊搴撳瓨鐘舵�� 鍥炲簱鍗�
+                if (locationInfo.RoadwayNo.Contains("DW") || locationInfo.RoadwayNo.Contains("YS"))
+                {
+                    AddDWANDYSRetrueOrder(stockInfo, inboundOrder);
+                }
+
+                // 鍖哄垎鍗曟嵁鏁版嵁鏉ユ簮鏇存柊璐т綅鐘舵��
+                if (inboundOrder.System == null)
+                {
+                    return WebResponseContent.Instance.Error("鍑哄簱鍗曟暟鎹簮涓虹┖");
+                }
+                if (!inboundOrder.System.Equals("SMOM"))
+                {
+                    UpdateLocationStatus(locationInfo);
+                }
+                // 澶勭悊浠诲姟瀹屾垚
+                CompleteTask(task);
+
+                // 娣诲姞鐘舵�佸彉鏇磋褰�
+                AddStatusChangeRecord(task, stockInfo, locationInfo);
+
+                // 鏍规嵁璁㈠崟绫诲瀷澶勭悊涓嶅悓閫昏緫
+
+                var outboundOrder = _outboundService.OutboundOrderService.Db.Queryable<Dt_OutboundOrder>()
+                    .Where(x => x.OrderNo == inboundOrder.OrderNo).First();
+                foreach(var outboundOrderDetail in outboundOrderDetails)
+                {
+                    var outDetail = _outboundService.OutboundOrderDetailService.Db.Queryable<Dt_OutboundOrderDetail>()
+                   .Where(x => x.OrderId == outboundOrder.Id && x.BatchNo == outboundOrderDetail.BatchNo).First();
+                    string path = "http://fr.mankun.com:8080/webroot/decision/view/report?viewlet=fr-report\\SMOM/Product/Produce/OutBoundDetileReport.cpt&op=write&format=pdf";
+                    string fullPath = AppDomain.CurrentDomain.BaseDirectory;
+                    var url = Path.Combine(fullPath, "wwwroot", "Reports");
+                    string savePath = Path.Combine(url, "鏈鍑哄簱.pdf");
+
+
+                    if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt() && inboundOrder.System.Equals("ERP"))
+                    {
+                        FeedBackOutERP(outboundOrder.OrderNo, outboundOrderDetail.LinId);
+                        DownloadReport(path, savePath, outboundOrderDetail.Id);
+                    }
+                    ///鍗曟嵁瀹屾垚鎺ㄩ�丼MOM绯荤粺
+                    if (outboundOrder.OrderStatus == OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && inboundOrder.System.Equals("SMOM"))
+                    {
+                        var stockInfoDetail = stockInfo.Details.FirstOrDefault();
+                        ProcessNormalOutbound(task, stockInfo, outboundOrder, outDetail);
+                        //DownloadReport(path, savePath, outboundOrderDetails.Id);
+                        //printTest(savePath);
+                        //SendNormalOutboundToWMS(task, outboundOrder, stockInfoDetail, outDetail);
+                    }
+
+                    if (outboundOrder.OrderType == 240) // 鐩樼偣鍑哄簱
+                    {
+                        // 鐩樼偣鍑哄簱鐗规畩澶勭悊閫昏緫
+                    }
+                }
+                _unitOfWorkManage.CommitTran();
+                return WebResponseContent.Instance.OK();
+            }
+            catch
+            {
+                _unitOfWorkManage.RollbackTran();
+                throw;
+            }
+        }
         private void UpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder, ref Dt_OutboundOrderDetail inboundOrderDetail)
         {
             int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
@@ -1964,6 +2230,46 @@
             {
                 inboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
             }
+        }
+
+        //浣庢俯銆佽嵂姘�
+        private void DWANDYSUpdateOutboundOrderDetails(Dt_StockInfo stockInfo, Dt_OutboundOrder inboundOrder, ref List<Dt_OutboundOrderDetail> inboundOrderDetails)
+        {
+            List<Dt_OutboundOrderDetail> newOutboundOrderDetails = inboundOrderDetails;
+            int overCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
+            foreach (var newOutboundOrderDetail in newOutboundOrderDetails)
+            {
+                string BatchNo = newOutboundOrderDetail.BatchNo;
+                //inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == stockInfo.Details.FirstOrDefault()?.BatchNo&&x.LPNNo==stockInfo.PalletCode);
+
+                foreach (var item in stockInfo.Details)
+                {
+                    if (newOutboundOrderDetail == null) continue;
+
+                    if (newOutboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()) continue;
+
+                    if (newOutboundOrderDetail.BatchNo == item.BatchNo)
+                    {
+                        newOutboundOrderDetail.OverOutQuantity += item.OutboundQuantity;
+
+                        if (newOutboundOrderDetail.OverOutQuantity == newOutboundOrderDetail.OrderQuantity)
+                        {
+                            newOutboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                            overCount++;
+                        }
+                        else if (newOutboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt())
+                        {
+                            newOutboundOrderDetail.OrderDetailStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                            inboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                        }
+                    }
+                }
+                if (inboundOrder.Details.Count() == overCount)
+                {
+                    inboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                }
+            }
+  
         }
 
         private void DeleteAndMoveIntoHtStockStatus(Dt_StockInfo stockInfo)
@@ -2228,8 +2534,7 @@
         private void AddRetrueOrder(Dt_StockInfo stockInfo, Dt_OutboundOrder outboundOrder)
         {
             Dt_StockInfoDetail stockInfoDetail = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
-           .Where(x => x.StockId == stockInfo.Id)
-           .First();
+           .Where(x => x.StockId == stockInfo.Id).First();
             if (stockInfoDetail == null)
             {
                 throw new Exception("寤虹珛鍥炲簱鍗曟椂锛屾湭鎵惧埌璇ュ簱瀛樹俊鎭�");
@@ -2289,6 +2594,95 @@
                     DeleteAndMoveIntoHtStockStatus(stockInfo);
                 }
             }
+
+
+        }
+
+        //浣庢俯銆佽嵂姘村洖搴撳崟
+        private void AddDWANDYSRetrueOrder(Dt_StockInfo stockInfo, Dt_OutboundOrder outboundOrder)
+        {
+
+            List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Db.Queryable<Dt_StockInfoDetail>()
+           .Where(x => x.StockId == stockInfo.Id).ToList();
+
+            Dt_ReturnOrder? lastReturnOrder = null; 
+            foreach (var stockInfoDetail in stockInfoDetails)
+            {
+                if (stockInfoDetail == null)
+                {
+                    throw new Exception("寤虹珛鍥炲簱鍗曟椂锛屾湭鎵惧埌璇ュ簱瀛樹俊鎭�");
+                }
+                if (outboundOrder.OrderType == OrderTypeEnum.鍙嶆嫞鍑哄簱鍗�.ObjToInt())
+                {
+                    Dt_ReturnOrder returnOrder = _returnOrderRepository.QueryFirst(x => x.LPNNo == stockInfo.PalletCode && x.LocationCode == stockInfo.LocationCode && x.OrderStatus == InOrderStatusEnum.鏈紑濮�.ObjToInt());
+                    if (returnOrder == null)
+                    {
+                        throw new Exception("鍙嶆嫞鍑哄簱鍚庯紝鏈壘鍒板搴斿弽鎷e洖搴撳崟淇℃伅");
+                    }
+                    stockInfo.LocationCode = "";
+                    stockInfo.StockStatus = StockStatusEmun.鍙嶆嫞鍏ュ簱.ObjToInt();
+                    stockInfo.Remark = "鍙嶆嫞鍏ュ簱";
+                    stockInfoDetail.OutboundQuantity = 0;
+                    stockInfoDetail.StockQuantity += returnOrder.OrderQuantity;
+                    stockInfoDetail.OrderNo = returnOrder.OrderNo;
+                }
+                else
+                {
+                    bool allowCompeted = stockInfo.Details.All(x => x.StockQuantity == x.OutboundQuantity);
+                    if (allowCompeted)
+                    {
+                        DeleteAndMoveIntoHtStockStatus(stockInfo);
+                    }
+                    else
+                    {
+                        decimal returnQuantity = stockInfoDetail.StockQuantity - stockInfoDetail.OutboundQuantity;
+                        if (returnQuantity > 0)
+                        {
+                            Dt_ReturnOrder returnOrder = new Dt_ReturnOrder
+                            {
+                                MaterielCode = stockInfoDetail.MaterielCode,
+                                MaterielName = stockInfoDetail.MaterielName,
+                                BatchNo = stockInfoDetail.BatchNo,
+                                OrderQuantity = returnQuantity,
+                                ReceiptQuantity = returnQuantity,
+                                OrderStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(),
+                                LinId = stockInfoDetail.LinId,
+                                LPNNo = stockInfo.PalletCode,
+                                Creater = "LK",
+                                CreateDate = DateTime.Now,
+                                OrderType = OrderTypeEnum.浣欐枡鍥炲簱鍗�.ObjToInt(),
+                                System = "WMS",
+                                Remark = stockInfoDetail.BatchNo
+                            };
+                            if(lastReturnOrder != null)
+                            {
+                                lastReturnOrder.Remark = lastReturnOrder.Remark + $", {returnOrder.BatchNo}";
+                                _returnOrderRepository.UpdateData(lastReturnOrder);
+                            }
+                            if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
+                            {
+                                returnOrder.LocationCode = stockInfo.LocationCode;
+                            }
+                            _unitOfWorkManage.BeginTran();
+                            if(lastReturnOrder == null)
+                            {
+                                _returnOrderRepository.AddData(returnOrder);
+                                lastReturnOrder = returnOrder;
+                            }
+                            stockInfo.LocationCode = "";
+                            stockInfo.StockStatus = StockStatusEmun.浣欐枡閫�搴�.ObjToInt();
+                            stockInfo.Remark = "浣欐枡閫�搴�";
+                            stockInfoDetail.OutboundQuantity = 0;
+                            stockInfoDetail.StockQuantity = returnQuantity;
+                            stockInfoDetail.OrderNo = lastReturnOrder.OrderNo;
+                            _stockService.StockInfoService.Repository.UpdateData(stockInfo);
+                            _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetail);
+                            _unitOfWorkManage.CommitTran();
+                        }
+                    }
+                }
+            }
+
 
         }
 
@@ -2363,8 +2757,7 @@
                         var matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode && x.BatchNo == outboundDetail.BatchNo);
                         if (matchedStockDetail == null)
                         {
-                            matchedStockDetail = stockInfoDetails.FirstOrDefault(x =>
-               x.MaterielCode == outboundDetail.MaterielCode);
+                            matchedStockDetail = stockInfoDetails.FirstOrDefault(x =>x.MaterielCode == outboundDetail.MaterielCode);
 
                             if (matchedStockDetail == null)
                             {

--
Gitblit v1.9.3