From e1dd1dc9ba7135e3d64a65587d6c1be2c3e18c5a Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 25 六月 2025 11:01:22 +0800
Subject: [PATCH] 提交最新优化代码

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs |  256 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 254 insertions(+), 2 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs"
index a34d6f6..6c21a1a 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/TakeStockOrderService.cs"
@@ -16,6 +16,13 @@
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Core.Helper;
 using Microsoft.AspNetCore.Mvc.RazorPages;
+using WIDESEA_External.ERPService;
+using WIDESEA_InboundRepository;
+using WIDESEA_IStockRepository;
+using WIDESEA_Common.StockEnum;
+using WIDESEA_Core.Enums;
+using WIDESEA_External.Model;
+using SqlSugar;
 
 namespace WIDESEA_InboundService
 {
@@ -24,10 +31,18 @@
         public ITakeStockOrderRepository Repository => BaseDal;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IBasicRepository _basicRepository;
-        public TakeStockOrderService(ITakeStockOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository) : base(BaseDal)
+        private readonly IInvokeERPService _invokeERPService;
+        private readonly ITakeStockOrderDetailRepository _takeStockOrderDetailRepository;
+        private readonly IStockInfoRepository _stockInfoRepository;
+        private readonly IStockInfoDetailRepository _stockInfoDetailRepository;
+        public TakeStockOrderService(ITakeStockOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository,IInvokeERPService invokeERPService,ITakeStockOrderDetailRepository takeStockOrderDetailRepository,IStockInfoRepository stockInfoRepository,IStockInfoDetailRepository stockInfoDetailRepository) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _basicRepository = basicRepository;
+            _invokeERPService = invokeERPService;
+            _takeStockOrderDetailRepository= takeStockOrderDetailRepository;
+            _stockInfoRepository= stockInfoRepository;
+            _stockInfoDetailRepository= stockInfoDetailRepository;
         }
         /// <summary>
         /// 鏂板
@@ -88,12 +103,249 @@
             }
             return content;
         }
+        /// <summary>
+        /// 閫氳繃鐩樼偣鍗曞彿+妗嗗彿鑾峰彇鐩樼偣淇℃伅璇︽儏
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
+        public WebResponseContent GetTakeDetailInfo(SaveModel saveModel)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                string? orderNo = saveModel.MainData["orderNo"].ToString();
+                string? takePalletCode = saveModel.MainData["takePalletCode"].ToString();
+                Dt_TakeStockOrderDetail takeStockOrderDetail=new Dt_TakeStockOrderDetail();
+                if (!string.IsNullOrEmpty(orderNo) && !string.IsNullOrEmpty(takePalletCode))
+                {
+                    //鑾峰彇鐩樼偣鏄庣粏
+                    takeStockOrderDetail = BaseDal.Db.Queryable<Dt_TakeStockOrder, Dt_TakeStockOrderDetail>((master, detail) => master.Id == detail.TakeStockId)
+                    .Where((master, detail) => master.OrderNo == orderNo && detail.TakePalletCode== takePalletCode)
+                    .Select((master, detail) => detail).First();
+                    if (takeStockOrderDetail==null)
+                    {
+                        return content.Error($"鐩樼偣鍗晎orderNo}涓湭鎵惧埌{takePalletCode}鐩樼偣鏄庣粏");
+                    }
+                    if (takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+                    {
+                        return content.Error($"鐩樼偣鍗晎orderNo}涓湭鎵惧埌{takePalletCode}鍙洏鐘舵��");
+                    }
+                    Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode== takePalletCode && x.StockStatus==StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt()).Includes(x=>x.Details).First();
+                    if (stockInfo == null)
+                    {
+                        return content.Error($"鏈壘鍒皗takePalletCode}鐩樼偣搴撳瓨鐘舵��");
+                    }
+                    content.OK(data: takeStockOrderDetail);
+                }
+                else
+                {
+                    return content.Error("璇锋眰淇℃伅涓虹┖");
+                }
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鐩樼偣鎿嶄綔
+        /// </summary>
+        /// <param name="saveModel"></param>
+        /// <returns></returns>
         public WebResponseContent MatPicking(SaveModel saveModel)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-
+                int id = saveModel.MainData["id"].ObjToInt();
+                decimal stockNum =saveModel.MainData["num"].ObjToDecimal();
+                if (stockNum<0)
+                {
+                    return content.Error("鐩樹簭涓嶈兘涓鸿礋");
+                }
+                if (id>0)
+                {
+                    //鑾峰彇鐩樼偣璇︽儏
+                    Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetailRepository.QueryFirst(x=>x.Id== id);
+                    if (takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.鐩樼偣鍑哄簱瀹屾垚.ObjToInt())
+                    {
+                        return content.Error("闈炲彲鐩樼偣鐘舵��");
+                    }
+                    Dt_TakeStockOrder takeStockOrder = BaseDal.Db.Queryable<Dt_TakeStockOrder>().Where(x => x.Id == takeStockOrderDetail.TakeStockId).Includes(x => x.Details).First();
+                    if (takeStockOrder.TakeStockStatus != TakeStockStatusEnum.鐩樼偣涓�.ObjToInt())
+                    {
+                        return content.Error("闈炲彲鐩樼偣鐘舵��");
+                    }
+                    //鑾峰彇搴撳瓨
+                    Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == takeStockOrderDetail.TakePalletCode && x.StockStatus == StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt()).Includes(x => x.Details).First();
+                    List<Dt_StockInfoDetail> addStockDetails = new List<Dt_StockInfoDetail>();
+                    List<Dt_StockInfoDetail> delStockDetails = new List<Dt_StockInfoDetail>();
+                    List<Dt_StockInfoDetail> updateStockDetails = new List<Dt_StockInfoDetail>();
+                    if (stockInfo == null || stockInfo.Details.Count<=0 || stockInfo.Details==null)
+                    {
+                        return content.Error("鏈壘鍒板簱瀛�");
+                    }
+                    takeStockOrderDetail.Qty = (float)stockNum;
+                    takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.鐩樼偣瀹屾垚.ObjToInt();
+                    int stockCount=stockInfo.Details.Count;
+                    //鍒ゆ柇鏄惁鐩樿耽杩樻槸鐩樹簭
+                    if (takeStockOrderDetail.SysQty< takeStockOrderDetail.Qty) //鐩樿耽
+                    {
+                        //float stockMaxQty = stockInfo.Details.Max(x => x.StockQuantity);
+                        //float stockMinQty = stockInfo.Details.Min(x => x.StockQuantity);
+                        Dt_StockInfoDetail? addstockInfoDetail = stockInfo.Details?.FirstOrDefault();
+                        addstockInfoDetail.Id = 0;
+                        addstockInfoDetail.StockQuantity = (takeStockOrderDetail.Qty - takeStockOrderDetail.SysQty);
+                        addStockDetails.Add(addstockInfoDetail);
+                    }
+                    else if (takeStockOrderDetail.Qty==0) //鐩樹簭
+                    {
+                        delStockDetails.AddRange(stockInfo.Details);
+                    }
+                    else if(takeStockOrderDetail.SysQty > takeStockOrderDetail.Qty) //鐩樹簭
+                    {
+                        decimal totalQty = (takeStockOrderDetail.SysQty - takeStockOrderDetail.Qty).ObjToDecimal();
+                        while (totalQty>0)
+                        {
+                            Dt_StockInfoDetail addstockInfoDetail=stockInfo.Details.OrderByDescending(x => x.Id).FirstOrDefault();
+                            decimal stockQty = addstockInfoDetail.StockQuantity.ObjToDecimal();
+                            if (stockQty < totalQty)
+                            {
+                                delStockDetails.Add(addstockInfoDetail);
+                                stockInfo.Details.Remove(addstockInfoDetail);
+                                totalQty -= stockQty;
+                            }
+                            else if (stockQty >= totalQty)
+                            {
+                                stockQty-=totalQty;
+                                if (stockQty==0)
+                                {
+                                    delStockDetails.Add(addstockInfoDetail);
+                                    stockInfo.Details.Remove(addstockInfoDetail);
+                                }
+                                else
+                                {
+                                    addstockInfoDetail.StockQuantity = (float)stockQty;
+                                    updateStockDetails.Add(addstockInfoDetail);
+                                    stockInfo.Details.Remove(addstockInfoDetail);
+                                }
+                                totalQty = 0;
+                            }
+                            
+                        }
+                    }
+                    List<Dt_TakeStockOrderDetail> takeStockOrderDetails=new List<Dt_TakeStockOrderDetail>();
+                    Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseId==takeStockOrder.WarehouseId);
+                    List<Dt_TakeStockOrderDetail> overTakeStockOrderDetails = takeStockOrder.Details.Where(x => x.TakeDetalStatus == TakeStockDetailStatusEnum.鐩樼偣瀹屾垚.ObjToInt()).ToList();
+                    if ((overTakeStockOrderDetails.Count + 1) == takeStockOrder.Details.Count)
+                    {
+                        takeStockOrder.TakeStockStatus = TakeStockStatusEnum.鐩樼偣瀹屾垚.ObjToInt();
+                        takeStockOrderDetails.AddRange(overTakeStockOrderDetails);
+                        takeStockOrderDetails.Add(takeStockOrderDetail);
+                    }
+                    //鏁版嵁鎿嶄綔
+                    _unitOfWorkManage.BeginTran();
+                    if (stockCount== delStockDetails.Count)
+                    {
+                        _stockInfoRepository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    }
+                    else
+                    {
+                        stockInfo.StockStatus = StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt();
+                        _stockInfoRepository.UpdateData(stockInfo);
+                        if (stockInfo.Details!=null && stockInfo.Details.Count>0)
+                        {
+                            stockInfo.Details.ForEach(x =>
+                            {
+                                x.Status = StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt();
+                            });
+                        }
+                    }
+                    if (delStockDetails.Count>0)
+                    {
+                        _stockInfoDetailRepository.DeleteAndMoveIntoHty(delStockDetails, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    }
+                    if (addStockDetails.Count>0)
+                    {
+                        addStockDetails.ForEach(x =>
+                        {
+                            x.Status = StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt();
+                        });
+                        _stockInfoDetailRepository.AddData(addStockDetails);
+                    }
+                    if (updateStockDetails.Count>0)
+                    {
+                        updateStockDetails.ForEach(x =>
+                        {
+                            x.Status = StockStatusEmun.鐩樼偣搴撳瓨瀹屾垚.ObjToInt();
+                        });
+                        _stockInfoDetailRepository.UpdateData(updateStockDetails);
+                    }
+                    _takeStockOrderDetailRepository.UpdateData(takeStockOrderDetail);
+                    BaseDal.UpdateData(takeStockOrder);
+                    //鎻愪氦ERP閫昏緫
+                    //if (takeStockOrder.TakeStockStatus== TakeStockStatusEnum.鐩樼偣瀹屾垚.ObjToInt())
+                    //{
+                    //    ERPTakeStockModel eRPTakeStock = new ERPTakeStockModel()
+                    //    {
+                    //        Way = 1,
+                    //        UniqueTag = takeStockOrder.Id.ToString(),
+                    //        Code = takeStockOrder.OrderNo,
+                    //        FiscalPeriotime = takeStockOrder.CreateDate.ToString("yyyy-MM-dd"),
+                    //        Name=takeStockOrder.OrderNo,
+                    //        WarehouseCode= warehouse.WarehouseCode,
+                    //        Createuser=takeStockOrder.Creater,
+                    //        Createtime= takeStockOrder.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"),
+                    //        Details=new List<TakeDetailsItem>()
+                    //    };
+                    //    foreach (var item in takeStockOrderDetails)
+                    //    {
+                    //        TakeDetailsItem takeDetailsItem = new TakeDetailsItem()
+                    //        {
+                    //            MaterialsCode=item.MaterielCode,
+                    //            LocationCode=item.LocationCode,
+                    //            Lotno=item.BatchNo,
+                    //            Sysqty=item.SysQty.ObjToDecimal(),
+                    //            Qty=item.Qty.ObjToDecimal()
+                    //        };
+                    //        eRPTakeStock.Details.Add(takeDetailsItem);
+                    //    }
+                    //    string response = _invokeERPService.InvokeTakeStockApi(eRPTakeStock);
+                    //    ErpRequestContent erpRequestContent = response.DeserializeObject<ErpRequestContent>();
+                    //    if (erpRequestContent.res != 1)
+                    //    {
+                    //        throw new Exception("鍚屾ERP澶辫触,閿欒淇℃伅:" + erpRequestContent.Data);
+                    //    }
+                    //}
+                    _unitOfWorkManage.CommitTran();
+                    content.OK("鐩樼偣鎴愬姛");
+                }
+                else
+                {
+                    return content.Error("璇锋眰淇℃伅涓虹┖");
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        public WebResponseContent DisEnableTakeOrder(int id)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                //鑾峰彇鐩樼偣鍗�
+                Dt_TakeStockOrder takeStockOrder = BaseDal.QueryFirst(x=>x.Id==id);
+                if (takeStockOrder!=null)
+                {
+                    takeStockOrder.TakeStockStatus = TakeStockStatusEnum.鐩樼偣鍏抽棴.ObjToInt();
+                    BaseDal.UpdateData(takeStockOrder);
+                    content.OK("鍏抽棴鐩樼偣鎴愬姛!");
+                }
             }
             catch (Exception ex)
             {

--
Gitblit v1.9.3