From d8db1698c125618c1b5f62b009204ddc5d4eed5a Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 19 三月 2025 20:34:08 +0800
Subject: [PATCH] 成品代码更新....

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs |  158 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 1 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
index d0811af..7effb11 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderService.cs"
@@ -1,21 +1,28 @@
 锘縰sing AutoMapper;
+using Castle.Core.Resource;
 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using WIDESEA_Common.OrderEnum;
+using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.WareHouseEnum;
 using WIDESEA_Core;
 using WIDESEA_Core.BaseRepository;
 using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO.ERP;
+using WIDESEA_External.ERPService;
+using WIDESEA_External.Model;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IBasicService;
 using WIDESEA_IOutboundRepository;
 using WIDESEA_IOutboundService;
 using WIDESEA_IRecordService;
+using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
 using WIDESEA_Model.Models;
 
@@ -26,14 +33,22 @@
         private readonly IUnitOfWorkManage _unitOfWorkManage;
         private readonly IBasicRepository _basicRepository;
         private readonly IMapper _mapper;
+        private readonly IStockRepository _stockRepository;
+        private readonly IOutboundRepository _outboundRepository;
+        private readonly IOutboundOrderService _outboundOrderService;
+        private readonly IInvokeERPService _invokeERPService; 
 
         public IProOutOrderRepository Repository => BaseDal;
 
-        public ProOutOrderService(IProOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper) : base(BaseDal)
+        public ProOutOrderService(IProOutOrderRepository BaseDal, IUnitOfWorkManage unitOfWorkManage, IBasicRepository basicRepository, IMapper mapper, IStockRepository stockRepository, IOutboundRepository outboundRepository, IOutboundOrderService outboundOrderService,IInvokeERPService invokeERPService) : base(BaseDal)
         {
             _unitOfWorkManage = unitOfWorkManage;
             _basicRepository = basicRepository;
             _mapper = mapper;
+            _stockRepository = stockRepository;
+            _outboundRepository = outboundRepository;
+            _outboundOrderService = outboundOrderService;
+            _invokeERPService = invokeERPService;
         }
         /// <summary>
         /// 鎺ユ敹ERP鎴愬搧鍑哄簱鍗�
@@ -70,6 +85,7 @@
                     return content.Error($"鍑哄簱鍗曞彿{outOrderDTO.OrderNo}宸插瓨鍦�!");
                 }
                 Dt_Warehouse warehouse=null;
+                List<Dt_CustomerInfo> customerInfos = _basicRepository.CustomerInfoRepository.QueryData();
                 if (outOrderDTO.OType==1 && string.IsNullOrEmpty(outOrderDTO.WaType))
                 {
                     warehouse = _basicRepository.WarehouseRepository.QueryFirst(x=>x.WarehouseCode==WarehouseEnum.HA71.ToString());
@@ -81,6 +97,12 @@
                 List<Dt_ProOutOrderDetail> proOutOrderDetails = new List<Dt_ProOutOrderDetail>();
                 foreach (var item in outOrderDTO.OrderDetails)
                 {
+                    //鍒ゆ柇瀹㈡埛鏄惁瀛樺湪
+                    Dt_CustomerInfo? customerInfo = customerInfos.Where(x=>x.Code== item.Customer).FirstOrDefault();
+                    if (customerInfo==null) 
+                    {
+                        return content.Error($"瀹㈡埛{item.Customer}涓嶅瓨鍦�!");
+                    }
                     proOutOrderDetails.Add(_mapper.Map<Dt_ProOutOrderDetail>(item));
                 }
                 Dt_ProOutOrder  proOutOrder= new Dt_ProOutOrder()
@@ -136,5 +158,139 @@
             }
             return content;
         }
+        /// <summary>
+        /// 鎴愬搧鍑哄緟鍙戣揣鍖�(骞冲簱)+鍚屾ERP鍑哄簱
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent OutProductPK(string[] OutPKCodes,string ProOutNo)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                if (OutPKCodes.IsNullOrEmpty())
+                {
+                    return content.Error("涓嶈兘涓虹┖");
+                }
+                Dt_ProOutOrder proOutOrder = _outboundRepository.ProOutOrderRepository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == ProOutNo).Includes(x => x.Details).First();
+                if (proOutOrder == null)
+                {
+                    return content.Error($"鍑哄簱鍗晎ProOutNo}涓嶅瓨鍦�");
+                }
+                if (proOutOrder.ProOrderStatus==OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt())
+                {
+                    return content.Error($"鍑哄簱鍗晎ProOutNo}宸插畬鎴�");
+                }
+                string? userName = App.User.UserName;//GSWMS
+                //鑾峰彇鎵�鏈夊绠辩殑鏁版嵁
+                List<Dt_ProStockInfo> AllproStockInfos = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>()
+                    .Where(x => OutPKCodes.Contains(x.PalletCode) && x.StockStatus == StockStatusEmun.骞冲簱鍏ュ簱瀹屾垚.ObjToInt())
+                    .Includes(x => x.proStockInfoDetails).ToList();
+                List<Dt_ProStockInfo> proStockInfos = new List<Dt_ProStockInfo>();
+                List<Dt_ProStockInfoDetail> proStockInfoDetails=new List<Dt_ProStockInfoDetail>();
+                List<Dt_Warehouse> warehouses = _basicRepository.WarehouseRepository.QueryData(x => x.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString());
+                foreach (var item in OutPKCodes)
+                {
+                    //鑾峰彇搴撳瓨
+                    Dt_ProStockInfo? proStockInfo = AllproStockInfos.Where(x => x.PalletCode == item).FirstOrDefault();
+                    if (proStockInfo == null)
+                    {
+                        return content.Error($"鏈壘鍒皗item}搴撳瓨");
+                    }
+                    Dt_Warehouse? dt_Warehouse = warehouses.Where(x=>x.WarehouseId== proStockInfo.WarehouseId).FirstOrDefault();
+                    if (dt_Warehouse==null)
+                    {
+                        return content.Error($"澶栫鍙穥item},涓嶅睘浜庢垚鍝佷粨");
+                    }
+                    if (proStockInfo.ShipmentOrder!= proOutOrder.ProOutOrderNo)
+                    {
+                        return content.Error($"澶栫鍙穥item},涓嶅睘浜庡嚭搴撹鍗晎proOutOrder.ProOutOrderNo}");
+                    }
+                    proStockInfos.Add(proStockInfo);
+                    proStockInfoDetails.AddRange(proStockInfo.proStockInfoDetails);
+                }
+                
+                if (proOutOrder.Details.Sum(x=>x.LockQtyPcs-x.OverQtyPcs)< proStockInfoDetails.Sum(x=>x.StockPcsQty))
+                {
+                    return content.Error($"鍑哄簱鏁伴噺{proStockInfoDetails.Sum(x => x.StockPcsQty)}>鎵�鍓╄鍗曟暟閲弡proOutOrder.Details.Sum(x => x.LockQtyPcs - x.OverQtyPcs)}");
+                }
+                List<StockOutItemsItem> stockOutItems = new List<StockOutItemsItem>();
+                List<Dt_ProOutOrderDetail> proOutOrderDetails = proOutOrder.Details.Where(x=> proStockInfoDetails.Select(x=>x.SaleOrder).Contains(x.SaleOrder) && proStockInfoDetails.Select(x=>x.ProductCode).Contains(x.PCode) && proStockInfoDetails.Select(x => x.ProductVersion).Contains(x.PVer)).ToList();
+                if (proOutOrderDetails==null || proOutOrderDetails.Count<=0)
+                {
+                    return content.Error("瀵瑰簲鍑哄簱璁㈠崟鏄庣粏涓虹┖");
+                }
+                foreach (var item in proStockInfoDetails)
+                {
+                    //鑾峰彇瀵瑰簲鏄庣粏澶勭悊鍑哄簱鏁版嵁
+                    Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrderDetails.Where(x => x.SaleOrder == item.SaleOrder && x.PVer == item.ProductVersion && x.PCode == item.ProductCode).FirstOrDefault();
+                    if (proOutOrderDetail==null)
+                    {
+                        return content.Error("鏈壘鍒板搴斿嚭搴撹鍗曟槑缁�");
+                    }
+                    proOutOrderDetail.OverQtyPcs += item.StockPcsQty;
+                    if (proOutOrderDetail.OverQtyPcs> proOutOrderDetail.QtyPcs)
+                    {
+                        return content.Error($"鍑哄簱璁㈠崟鏄庣粏琛寋proOutOrderDetail.RowId},婧㈠嚭{proOutOrderDetail.QtyPcs - proOutOrderDetail.OverQtyPcs}");
+                    }
+                    if (proOutOrderDetail.OverQtyPcs == proOutOrderDetail.QtyPcs)
+                    {
+                        proOutOrderDetail.ProOrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
+                    }
+                    StockOutItemsItem outItemsItem = new StockOutItemsItem()
+                    {
+                        PartNum=item.ProductCode,
+                        Rev=item.ProductVersion,
+                        SoNumber=item.SaleOrder,
+                        BatchNumber=item.BagNo,
+                        QtyPcs=item.StockPcsQty,
+                        QtySet=item.SETQty
+                    };
+                    stockOutItems.Add(outItemsItem);
+                }
+                int OldOverCount = proOutOrder.Details.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                int AddOverCount = proOutOrderDetails.Where(x => x.ProOrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                if (proOutOrder.Details.Count== (OldOverCount + AddOverCount))
+                {
+                    proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                }
+                Dt_Warehouse warehouse = warehouses.Where(x => x.WarehouseId == proOutOrder.WarehouseId).FirstOrDefault();
+                //澶勭悊搴撳瓨鏁版嵁鍜屼笂浼燛RP
+                _unitOfWorkManage.BeginTran();
+                _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfos, OperateTypeEnum.鑷姩瀹屾垚);
+                _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfoDetails, OperateTypeEnum.鑷姩瀹屾垚);
+                _outboundRepository.ProOutOrderDetailRepository.UpdateData(proOutOrderDetails);
+                BaseDal.UpdateData(proOutOrder);
+                //鎴愬搧搴撳瓨璁板綍鍙樺姩寰呭姞鍏�
+                ERPProOutOrderModel proOutOrderModel = new ERPProOutOrderModel()
+                {
+                    Way = 1,
+                    StockOutCode = _outboundOrderService.CreateCodeByRule(nameof(RuleCodeEnum.ProOutCOdeRule)),
+                    ConfirmedUserNo=userName,
+                    AssignUserNo=userName,
+                    WarehouseCode=warehouse.WarehouseCode,
+                    ShipDate=DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    DeliverplanCode=proOutOrder.ProOutOrderNo,
+                    Remark=proOutOrder.Remark,
+                    StockOutItems= stockOutItems
+                };
+                string response = _invokeERPService.InvokeProOutApi(proOutOrderModel);
+                ErpRequestContent erpRequestContent= response.DeserializeObject<ErpRequestContent>();
+                if (erpRequestContent.res==1)
+                {
+                    _unitOfWorkManage.CommitTran();
+                    content.OK();
+                }
+                else
+                {
+                    throw new Exception(erpRequestContent.Data);
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3