From 733e63cb362f17aea4a1020654fa348a0d0c1f06 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 24 二月 2025 00:08:59 +0800
Subject: [PATCH] 优化入库逻辑,优化直接出库逻辑,优化移库任务逻辑

---
 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs |   61 ++++++++++++++++++++++++++++++
 1 files changed, 60 insertions(+), 1 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
index d7ef4d1..a952f2f 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderDetailService.cs"
@@ -35,7 +35,7 @@
 
         public IOutboundOrderDetailRepository Repository => BaseDal;
 
-        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IBasicService basicService,  IRecordService recordService, IOutboundRepository outboundRepository, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
+        public OutboundOrderDetailService(IOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IStockService stockService, IBasicService basicService, IRecordService recordService, IOutboundRepository outboundRepository, IOutStockLockInfoService outStockLockInfoService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _stockService = stockService;
@@ -44,5 +44,64 @@
             _outboundRepository = outboundRepository;
             _outStockLockInfoService = outStockLockInfoService;
         }
+
+        public (List<Dt_StockInfo>, List<Dt_OutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_OutboundOrder) AssignStockOutbound(List<Dt_OutboundOrderDetail> outboundOrderDetails)
+        {
+            if (outboundOrderDetails.GroupBy(x => x.OrderId).Count() > 1)
+            {
+                throw new Exception($"璇峰嬁鍚屾椂鎿嶄綔澶氫釜鍗曟嵁鏄庣粏");
+            }
+            Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId);
+            List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
+            List<string> LocationCodes = new List<string>();
+            List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+            List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+            foreach (var item in outboundOrderDetails)
+            {
+                var StockSelectViews = BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId, (a, b) => new StockSelectViewDTO
+                {
+                    LocationCode = a.LocationCode,
+                    MaterielCode = b.MaterielCode,
+                    MaterielName = b.MaterielName,
+                    PalletCode = a.PalletCode,
+                    UseableQuantity = b.StockQuantity,
+                    BatchNo = b.BatchNo,
+                    InDate = a.InDate
+                }, a => a.StockStatus == StockStatusEmun.宸插叆搴�.ObjToInt(), b => b.Status == StockStatusEmun.宸插叆搴�.ObjToInt() && b.MaterielCode == item.MaterielCode, x => true).GroupBy(x => x.LocationCode).Select(x => new StockSelectViewDTO
+                {
+                    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
+                    MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
+                    MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
+                    //PalletCode = string.Join(",", x.Select(x => x.PalletCode).ToList()),
+                    PalletCode = x.Select(x => x.PalletCode).ToList().Aggregate((i, j) => i + "," + j),
+                    UseableQuantity = x.Sum(x => x.UseableQuantity),
+                    BatchNo = x.FirstOrDefault()?.BatchNo ?? "",
+                    InDate = x.FirstOrDefault()?.InDate
+                }).ToList();
+                if (StockSelectViews.Count < 1) throw new Exception($"鏈壘鍒板彲鍒嗛厤搴撳瓨");
+                StockSelectViewDTO? stockSelectView = StockSelectViews.Where(x => x.UseableQuantity == item.OrderQuantity)?.OrderBy(x => x.InDate).First();
+                if (stockSelectView == null)
+                {
+                    throw new Exception($"鏈壘鍒板彲鍒嗛厤搴撳瓨");
+                }
+                item.LockQuantity = stockSelectView.UseableQuantity;
+                item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                List<Dt_StockInfo> dt_StockInfos = _stockService.StockInfoService.Repository.QueryData(x => x.LocationCode == stockSelectView.LocationCode);
+                dt_StockInfos.ForEach(x =>
+                {
+                    x.StockStatus = StockStatusEmun.鍑哄簱涓�.ObjToInt();
+                });
+                outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                outStockLockInfos.AddRange(_outStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, dt_StockInfos, BatchNo: stockSelectView.BatchNo));
+                outStocks.AddRange(dt_StockInfos);
+                LocationCodes.Add(stockSelectView.LocationCode);
+            }
+            locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(LocationCodes));
+            locationInfos.ForEach(x =>
+            {
+                x.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt();
+            });
+            return (outStocks, outboundOrderDetails, outStockLockInfos, locationInfos, outboundOrder);
+        }
     }
 }

--
Gitblit v1.9.3