From 7501ef192740ad7f138d1dfb14924fe40aa3f49b Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期一, 20 四月 2026 21:00:46 +0800
Subject: [PATCH] 1

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs |  158 +++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 141 insertions(+), 17 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
index 6d656bb..d1ed81e 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundPickingService.cs"
@@ -36,6 +36,8 @@
 using WIDESEA_DTO.Allocate;
 using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
 using WIDESEA_IRecordService;
+using Microsoft.AspNetCore.Http;
+using MailKit.Net.Smtp;
 
 namespace WIDESEA_OutboundService
 {
@@ -2322,6 +2324,14 @@
             {
                 return WebResponseContent.Instance.Error("鏈壘鍒版弧瓒冲嚭搴撴潯浠剁殑鍑哄簱鍗�");
             }
+            if (outboundOrder.DepartmentCode == "铏氭嫙鍑哄叆搴撻攣瀹�")
+            {
+                return WebResponseContent.Instance.Error("璇ュ崟鎹彟涓�鍙扮數鑴戞鍦ㄨ繘琛岃櫄鎷熷嚭鍏ュ簱鎿嶄綔锛岃绋嶅悗鍐嶈瘯");
+            }
+            else
+            {
+                outboundOrder.DepartmentCode = "铏氭嫙鍑哄叆搴撻攣瀹�";
+            }
             if(outboundOrder.IsBatch == 0)
             {
                 return WebResponseContent.Instance.Error("璇ュ崟鎹笉灞炰簬鍒嗘壒鍥炰紶鍗曟嵁锛屼笉鍏佽铏氭嫙鍑哄叆搴�");
@@ -2332,12 +2342,25 @@
                 item.NoStockOutQty = 0;
                 item.documentsNO = "";
             }
+            _outboundOrderService.UpdateData(outboundOrder);
             _outboundOrderDetailService.UpdateData(outboundOrder.Details);
             return WebResponseContent.Instance.OK("鎴愬姛");
 
         }
 
-    public WebResponseContent BarcodeValidate(NoStockOutModel noStockOut)
+        public WebResponseContent MovePickingOrders(string outOrder)
+        {
+            Dt_OutboundOrder outboundOrder = Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == outOrder).First();
+            if (outboundOrder.DepartmentCode == "铏氭嫙鍑哄叆搴撻攣瀹�")
+            {
+                outboundOrder.DepartmentCode = "";
+            }
+            _outboundOrderService.UpdateData(outboundOrder);
+            return WebResponseContent.Instance.OK("鎴愬姛");
+
+        }
+
+        public WebResponseContent BarcodeValidate(NoStockOutModel noStockOut)
     {
         try
         {
@@ -2362,17 +2385,17 @@
             var detailLists = new List<Dt_InboundOrderDetail>();
             var matchedDetail = inboundOrder.Details.FirstOrDefault(detail =>
                 detail.Barcode == noStockOut.barCode &&
-                detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
+                detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()&& detail.ReceiptQuantity == 0);
 
             if (matchedDetail == null)
             {
                 matchedDetail = inboundOrder.Details.FirstOrDefault(detail =>
                     detail.OutBoxbarcodes == noStockOut.barCode &&
-                    detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt());
+                    detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() && detail.ReceiptQuantity == 0);
 
                 if (matchedDetail == null)
                 {
-                    return WebResponseContent.Instance.Error($"鍦ㄩ噰璐崟 {noStockOut.inOder} 涓湭鎵惧埌鏉$爜涓� {noStockOut.barCode} 鐨勬槑缁嗐��");
+                    return WebResponseContent.Instance.Error($"鍦ㄩ噰璐崟 {noStockOut.inOder} 涓湭鎵惧埌鏉$爜涓� {noStockOut.barCode} 鐨勫彲鍑哄簱鏄庣粏銆�");
                 }
                 else
                 {
@@ -2381,7 +2404,7 @@
                     {
                         if (detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt() &&
                             !string.IsNullOrEmpty(detail.Barcode) &&
-                            detail.OutBoxbarcodes == noStockOut.barCode)
+                            detail.OutBoxbarcodes == noStockOut.barCode && detail.OrderQuantity > detail.NoStockOutQty)
                         {
                             detailLists.Add(detail);
                         }
@@ -2395,6 +2418,10 @@
                     detailLists.Add(matchedDetail);
                 }
             }
+                if (!detailLists.Any())
+                {
+                    return WebResponseContent.Instance.Error("璇ユ潯鐮佸凡缁忔病鏈夊彲鍑哄簱鏁伴噺");
+                }
                 var outDetails = new List<Dt_OutboundOrderDetail>();
                 // 閬嶅巻姣忎釜鍏ュ簱鏄庣粏
                 foreach (var item in detailLists)
@@ -2419,7 +2446,6 @@
                     {
                         return WebResponseContent.Instance.Error($"鍦ㄥ嚭搴撳崟涓湭鎵惧埌鐗╂枡{item.MaterielCode}鐨勫彲鍑哄簱鏄庣粏");
                     }
-
                     // 閬嶅巻绗﹀悎鏉′欢鐨勫嚭搴撴槑缁嗭紝閫愯鍒嗛厤鏁伴噺
                     foreach (var outDetail in eligibleOutDetails)
                     {
@@ -2703,12 +2729,58 @@
         {
             try
             {
+
                 Dt_OutboundOrder outboundOrder = _inboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.UpperOrderNo == noStockOutSubmit.OutOderSubmit && x.OrderStatus != OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt()).Includes(x => x.Details).First();
                 if (outboundOrder == null)
                 {
                     return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟锛歿noStockOutSubmit.OutOderSubmit}");
                 }
-                
+
+                // 1. 绛涢�夊嚭鏈鎻愪氦鏉$爜鍏宠仈鐨勫嚭搴撴槑缁�
+                List<Dt_OutboundOrderDetail> outboundOrderDetail2 = outboundOrder.Details
+                    .Where(x => !string.IsNullOrWhiteSpace(x.documentsNO)
+                        && noStockOutSubmit.BarCodeSubmit.Any(barcode =>
+                            x.documentsNO.IndexOf(barcode, StringComparison.OrdinalIgnoreCase) >= 0))
+                    .ToList();
+
+                HashSet<string> existBarcodes = new HashSet<string>();
+
+                foreach (var detail in outboundOrderDetail2)
+                {
+                    try
+                    {
+                        // 鍙嶅簭鍒楀寲鏄庣粏閲岀殑鏉$爜鍒楄〃
+                        var barcodesInDoc = JsonConvert.DeserializeObject<List<Barcodes>>(detail.documentsNO);
+                        if (barcodesInDoc == null) continue;
+
+                        // 鎶婃潯鐮佸姞鍏ュ幓閲嶉泦鍚�
+                        foreach (var b in barcodesInDoc)
+                        {
+                            if (!string.IsNullOrEmpty(b.Barcode))
+                                existBarcodes.Add(b.Barcode.Trim());
+                        }
+                    }
+                    catch { }
+                }
+
+                // 3. 鍓嶇鎻愪氦鐨勬潯鐮� 鈫� 鍘婚噸
+                HashSet<string> submitBarcodes = new HashSet<string>(
+                    noStockOutSubmit.BarCodeSubmit
+                        .Where(b => !string.IsNullOrEmpty(b))
+                        .Select(b => b.Trim())
+                );
+
+                // 4. 鎵惧嚭銆愭彁浜や簡锛屼絾绯荤粺閲屼笉瀛樺湪銆戠殑鏉$爜
+                var missingBarcodes = submitBarcodes.Except(existBarcodes).ToList();
+
+                // 5. 濡傛灉鏈夌己澶� 鈫� 鎷︽埅鎶ラ敊
+                if (missingBarcodes.Any())
+                {
+                    return WebResponseContent.Instance.Error(
+                        $"鏁版嵁寮傚父锛屼互涓嬫潯鐮佸湪鍑哄簱鍗曚腑鏈壘鍒版垨宸茶娓呯┖锛歿string.Join(",", missingBarcodes)}"
+                    );
+                }
+
                 List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
 
                 Dictionary<int, List<string>> orderIdBarCodeDict = new Dictionary<int, List<string>>();
@@ -2962,19 +3034,45 @@
 
                     var response = NoStockOutresponseModel(inboundOrder, 3, null, allocatefeedmodel);
 
-                    if (response != null && response.IsSuccess)
+                    if (response != null && response.IsSuccess && response.Data.Code == "200")
                     {
                         _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
                             .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
-                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱涓�.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 3 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 0 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
                     }
                     else
                     {
                         _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 })
                             .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus =2})
-                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱涓�.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 4 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 0 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
                         return content.Error("鍥炰紶MES澶辫触");
                     }
                 }
@@ -2999,18 +3097,44 @@
                     }
                     var response = NoStockOutresponseModel(inboundOrder, 3, feedmodel);
 
-                    if (response != null && response.IsSuccess)
+                    if (response != null && response.IsSuccess && response.Data.Code == "200")
                     {
                         _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 1 })
                             .Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
-                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 1 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱涓�.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 3 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 0 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
                     }
                     else
                     {
                         _inboundOrderRepository.Db.Updateable<Dt_InboundOrderDetail>().SetColumns(it => new Dt_InboundOrderDetail { ReturnToMESStatus = 2 }).Where(it => it.OrderId == inboundOrder.Id && barCodeList.Contains(it.Barcode)).ExecuteCommand();
-                        _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 })
-                            .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 2 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else if (inboundOrder.OrderStatus == InOrderStatusEnum.鍏ュ簱涓�.ObjToInt())
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 4 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
+                        else
+                        {
+                            _inboundOrderRepository.Db.Updateable<Dt_InboundOrder>().SetColumns(it => new Dt_InboundOrder { ReturnToMESStatus = 0 })
+                                .Where(it => it.Id == inboundOrder.Id).ExecuteCommand();
+                        }
                         return content.Error("鍥炰紶MES澶辫触");
                     }
                 }

--
Gitblit v1.9.3