From 91ead18d0e92b6e1ed916c5159f3431bf2071a56 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期五, 12 十二月 2025 13:59:40 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs |   90 +++++++++++++++++++++++++++++++++-----------
 1 files changed, 67 insertions(+), 23 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_InboundService/InboundOrderService.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_InboundService/InboundOrderService.cs"
index 72f08a3..9d1cce9 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_InboundService/InboundOrderService.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_InboundService/InboundOrderService.cs"
@@ -1,6 +1,7 @@
 锘縰sing AutoMapper;
 using SqlSugar;
 using System.Dynamic;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.OrderEnum;
@@ -33,6 +34,7 @@
 
         private IStockService _stockService;
         private readonly IMaterialUnitService _materialUnitService;
+        private readonly IMaterielInfoService _materielInfoService;
         private readonly IInboundOrderDetailService _inboundOrderDetailService;
         private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository;
         private readonly IRepository<Dt_StockInfoDetail> _stockDetailRepository;
@@ -42,7 +44,7 @@
         private readonly IRepository<Dt_StockInfo> _stockRepository;
         public IRepository<Dt_InboundOrder> Repository => BaseDal;
 
-        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository) : base(BaseDal)
+        public InboundOrderService(IRepository<Dt_InboundOrder> BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_Task> taskRepository, IStockService stockService, IInboundOrderDetailService inboundOrderDetailService, IMaterialUnitService materialUnitService, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_StockInfo> stockRepository, IRepository<Dt_LocationType> locationTypeRepository, IMaterielInfoService materielInfoService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -56,6 +58,7 @@
             _warehouseAreaRepository = warehouseAreaRepository;
             _stockRepository = stockRepository;
             _locationTypeRepository = locationTypeRepository;
+            _materielInfoService = materielInfoService;
         }
 
         public async Task<WebResponseContent> ReceiveInboundOrder(List<Dt_InboundOrder> models, int operateType)
@@ -85,17 +88,24 @@
                 {
                     if (BaseDal.QueryFirst(x => x.UpperOrderNo == model.UpperOrderNo) != null)
                     {
-                        return WebResponseContent.Instance.Error($"鍏ュ簱鍗曞彿閲嶅");
+                        return WebResponseContent.Instance.Error($"{model.UpperOrderNo}鍏ュ簱鍗曞彿閲嶅");
                     }
                 }
 
                 foreach (var model in models)
                 {
+                    var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList();
+                    var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList();
+
                     foreach (var item in model.Details)
                     {
                         var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
                         item.Unit = purchaseToStockResult.Unit;
                         item.OrderQuantity = purchaseToStockResult.Quantity;
+                        if (materielInfos.Any())
+                        {
+                            item.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "";
+                        }
                     }
                     if (model.OrderType != InOrderTypeEnum.AllocatInbound.ObjToInt())
                     {
@@ -133,13 +143,12 @@
                     List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>();
                     List<Dt_InboundOrderDetail> updateInboundOrderDetails = new List<Dt_InboundOrderDetail>();
                     List<int> detailIds = new List<int>();
+                    var materielCodes = model.Details.Select(x => x.MaterielCode).Distinct().ToList();
+                    var materielInfos = _materielInfoService.Db.Queryable<Dt_MaterielInfo>().Where(x => materielCodes.Contains(x.MaterielCode)).ToList();
+
                     foreach (var item in model.Details)
                     {
-                        if (string.IsNullOrEmpty(item.Barcode))
-                        {
-
-                        }
-                        else
+                        if (!string.IsNullOrEmpty(item.Barcode))
                         {
                             Dt_InboundOrderDetail? inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.Barcode == item.Barcode);
                             if (inboundOrderDetail == null)
@@ -162,11 +171,18 @@
                                 var purchaseToStockResult = await _materialUnitService.ConvertPurchaseToStockAsync(item.MaterielCode, item.BarcodeQty);
                                 inboundOrderDetail.Unit = purchaseToStockResult.Unit;
                                 inboundOrderDetail.OrderQuantity = purchaseToStockResult.Quantity;
-
+                                if (materielInfos.Any())
+                                {
+                                    inboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "";
+                                }
                                 inboundOrderDetails.Add(inboundOrderDetail);
                             }
                             else
                             {
+                                if (materielInfos.Any())
+                                {
+                                    inboundOrderDetail.MaterielName = materielInfos.FirstOrDefault(x => x.MaterielCode == item.MaterielCode)?.MaterielName ?? "";
+                                }
                                 inboundOrderDetail.lineNo = item.lineNo;
                                 inboundOrderDetail.MaterielCode = item.MaterielCode;
                                 inboundOrderDetail.SupplyCode = item.SupplyCode;
@@ -629,15 +645,19 @@
                 {
                     resultDTO.UniqueUnit = "";
                 }
-                var validDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(s => s.OrderNo == orderNo).ToList();
-                resultDTO.StockSumQuantity = orderDetail.Details.Sum(d => d.OrderQuantity);
-                resultDTO.StockCount = orderDetail.Details.Count;
-                if (validDetails.Any())
-                {
-                    resultDTO.StockSumQuantity -= validDetails.Sum(d => d.StockQuantity);
-                    // 鏄庣粏璁板綍鏁帮細绗﹀悎鏉′欢鐨勬湁鏁堣褰曟潯鏁�
-                    resultDTO.StockCount -= validDetails.Count;
-                }
+                var inbound =_inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo);
+                var inboundDetails = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.First().Id).ToList();
+                resultDTO.StockSumQuantity = inboundDetails.Where(x=>x.ReceiptQuantity==0).Sum(x=>x.OrderQuantity);
+                resultDTO.StockCount = inboundDetails.Where(x => x.ReceiptQuantity == 0).Count();
+                //var validDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>().Where(s => s.OrderNo == orderNo).ToList();
+                //resultDTO.StockSumQuantity = orderDetail.Details.Sum(d => d.OrderQuantity);
+                //resultDTO.StockCount = orderDetail.Details.Count;
+                //if (validDetails.Any())
+                //{
+                //    resultDTO.StockSumQuantity -= validDetails.Sum(d => d.StockQuantity);
+                //    // 鏄庣粏璁板綍鏁帮細绗﹀悎鏉′欢鐨勬湁鏁堣褰曟潯鏁�
+                //    resultDTO.StockCount -= validDetails.Count;
+                //}
                 return content.OK("", resultDTO);
             }
             catch (Exception ex)
@@ -648,16 +668,16 @@
 
         public WebResponseContent UndoPalletGroup(string palletCode, string barcode = "")
         {
-            
+
             if (string.IsNullOrWhiteSpace(palletCode))
             {
                 return WebResponseContent.Instance.Error("鎵樼洏鍙蜂笉鑳戒负绌�");
             }
 
-            
+
             try
             {
-                _unitOfWorkManage.BeginTran(); 
+                _unitOfWorkManage.BeginTran();
 
                 // 2. 鏌ヨ鎵樼洏搴撳瓨涓昏褰曪紙閬垮厤鏃犳暟鎹姏寮傚父锛�
                 var stock = _stockRepository.Db.Queryable<Dt_StockInfo>()
@@ -681,8 +701,10 @@
                         return WebResponseContent.Instance.Error($"鎵樼洏{palletCode}涓嬫湭鎵惧埌鏉$爜{barcode}鐨勬槑缁嗚褰�");
                     }
 
+                    ResetInboundOrderStatus(new List<string> { targetDetail.OrderNo }, new List<string> { targetDetail.Barcode });
                     // 鍒犻櫎鎸囧畾鏄庣粏
                     _stockDetailRepository.DeleteData(targetDetail);
+
 
                     // 閲嶆柊鏌ヨ鍓╀綑鏄庣粏锛堜繚璇佹暟鎹噯纭�э級
                     var remainingDetails = _stockDetailRepository.Db.Queryable<Dt_StockInfoDetail>()
@@ -732,7 +754,7 @@
             }
             catch (Exception ex)
             {
-                _unitOfWorkManage.RollbackTran(); 
+                _unitOfWorkManage.RollbackTran();
                 return WebResponseContent.Instance.Error($"鎵樼洏鎾ら攢澶辫触锛歿ex.Message}");
             }
         }
@@ -748,8 +770,13 @@
 
                 if (inboundOrder == null) continue;
 
-                inboundOrder.OrderStatus = 0;
-                _inboundOrderRepository.UpdateData(inboundOrder);
+                bool isSingleBarcode = barcodes != null && barcodes.Count == 1;
+                if (!isSingleBarcode)
+                {
+                    // 闈炲崟涓潯鐮侊紙鏁村崟/澶氫釜鏉$爜锛夛細閲嶇疆涓昏〃鐘舵�佷负0
+                    inboundOrder.OrderStatus = 0;
+                    _inboundOrderRepository.UpdateData(inboundOrder);
+                }
 
                 // 閲嶇疆鍏ュ簱鍗曟槑缁嗙姸鎬�
                 if (inboundOrder.Details == null || !inboundOrder.Details.Any()) continue;
@@ -770,6 +797,10 @@
         public override PageGridData<Dt_InboundOrder> GetPageData(PageDataOptions options)
         {
             string wheres = ValidatePageOptions(options);
+
+            string pattern = @"inboundOrderNo like '[^']+'\s*and\s*";
+            wheres = Regex.Replace(wheres, pattern, "", RegexOptions.IgnoreCase);
+
             //鑾峰彇鎺掑簭瀛楁
             Dictionary<string, SqlSugar.OrderByType> orderbyDic = GetPageDataSort(options, TProperties);
             List<OrderByModel> orderByModels = new List<OrderByModel>();
@@ -854,5 +885,18 @@
         //    return new PageGridData<Dt_InboundOrder>();
         //}
 
+        public WebResponseContent UnPalletGroupBarcode(string orderNo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            var inbound = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == orderNo).First();
+            if(inbound == null)
+            {
+                return content.Error();
+            }
+
+            var details = _inboundOrderDetailRepository.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.OrderId == inbound.Id && x.ReceiptQuantity == 0).ToList();
+
+            return content.OK(data:details);
+        }
     }
 }

--
Gitblit v1.9.3