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