From 9f225bb1f1e26d25c1652d3e1ec2a8f239f69615 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期二, 18 三月 2025 10:41:29 +0800 Subject: [PATCH] 1 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs | 171 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 146 insertions(+), 25 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs" index 945fcd4..09bda15 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs" @@ -19,12 +19,17 @@ using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; +using WIDESEA_OutboundRepository; using WIDESEA_StockRepository; namespace WIDESEA_OutboundService { public partial class OutboundOrderDetailService : ServiceBase<Dt_OutboundOrderDetail, IOutboundOrderDetailRepository>, IOutboundOrderDetailService { + public override PageGridData<Dt_OutboundOrderDetail> GetPageData(PageDataOptions options) + { + return base.GetPageData(options); + } public WebResponseContent LockOutboundStock(int orderDetailId) { Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == orderDetailId); @@ -125,7 +130,22 @@ } return (true, "鎴愬姛"); } + public (List<Dt_StockInfo>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_OutboundOrder outboundOrder, List<StockSelectViewDTO> stockSelectViews) + { + List<Dt_StockInfo> outStocks = null; + List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetOutStockLockInfos(outboundOrder, outboundOrder.Details.First(), outStocks); + List<Dt_LocationInfo> locationInfos = _basicService.LocationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList()); + + return (outStocks, outStockLockInfos, locationInfos); + } + /// <summary> + /// 鍒嗛厤鍑哄簱搴撳瓨 + /// </summary> + /// <param name="outboundOrderDetail"></param> + /// <param name="stockSelectViews">鎸囧畾搴撳瓨</param> + /// <returns></returns> + /// <exception cref="Exception"></exception> public (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) AssignStockOutbound(Dt_OutboundOrderDetail outboundOrderDetail, List<StockSelectViewDTO> stockSelectViews) { (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews); @@ -135,16 +155,27 @@ decimal originalNeedQuantity = outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity; decimal needQuantity = originalNeedQuantity; + #region 鏍规嵁鎵樼洏鍙锋煡鎵惧簱瀛� + //List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList()); + #endregion - List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList()); - decimal assignQuantity = 0; - outStocks.ForEach(x => - { - x.Details.ForEach(v => - { - assignQuantity += v.StockQuantity - v.OutboundQuantity; - }); - }); + + + List<Dt_StockInfoDetail> outStockDetails = _stockService.StockInfoDetailService.GetStockInfosByBatchNoCodes(stockSelectViews); + + List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByIds(outStockDetails.Select(x => x.StockId).ToList()); + + decimal assignQuantity = outStocks.Count; + #region MyRegion + //decimal assignQuantity = 0; + //outStocks.ForEach(x => + //{ + // x.Details.ForEach(v => + // { + // assignQuantity += v.StockQuantity - v.OutboundQuantity; + // }); + //}); + #endregion outboundOrderDetail.LockQuantity += assignQuantity; outStocks.ForEach(x => @@ -155,27 +186,55 @@ }); }); needQuantity -= assignQuantity; + #region 鎸囧畾鍑哄簱鏁伴噺灏戜簬璁㈠崟鏁伴噺鑷姩鍒嗛厤婊¤冻鏉′欢搴撳瓨 + //if (outboundOrderDetail.OrderQuantity > outboundOrderDetail.LockQuantity) + //{ + // List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode); + // stockInfos = stockInfos.Where(x => !stockSelectViews.Select(v => v.PalletCode).Contains(x.PalletCode)).ToList(); + // List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, outboundOrderDetail.MaterielCode, needQuantity, out decimal residueQuantity); + // outboundOrderDetail.LockQuantity += needQuantity - residueQuantity; + // outStocks.AddRange(autoAssignStocks); + // outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOver.ObjToInt(); + // if (residueQuantity > 0) + // { + // outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOverPartial.ObjToInt(); + // } + //} + #endregion + + #region 鏈寚瀹氬簱瀛橈紝鑷姩鍒嗛厤搴撳瓨 if (outboundOrderDetail.OrderQuantity > outboundOrderDetail.LockQuantity) { - List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode); - stockInfos = stockInfos.Where(x => !stockSelectViews.Select(v => v.PalletCode).Contains(x.PalletCode)).ToList(); + List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(outboundOrderDetail.MaterielCode);//鑾峰彇鎵�鏈夊簱瀛� + + stockInfos = stockInfos.Where(x => !outStocks.Select(v => v.Id).Contains(x.Id)).ToList(); List<Dt_StockInfo> autoAssignStocks = _stockService.StockInfoService.GetOutboundStocks(stockInfos, outboundOrderDetail.MaterielCode, needQuantity, out decimal residueQuantity); outboundOrderDetail.LockQuantity += needQuantity - residueQuantity; outStocks.AddRange(autoAssignStocks); - outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOver.ObjToInt(); - if (residueQuantity > 0) - { - outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOverPartial.ObjToInt(); - } + //outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOver.ObjToInt(); + //if (residueQuantity > 0) + //{ + // outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.AssignOverPartial.ObjToInt(); + //} } + #endregion + outboundOrderDetail.OrderDetailStatus = outboundOrderDetail.OrderQuantity > outboundOrderDetail.LockQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.AssignOver.ObjToInt(); + + + //娣诲姞鍑哄簱鍒嗛厤璇︽儏 List<Dt_OutStockLockInfo> outStockLockInfos = _outStockLockInfoService.GetOutStockLockInfos(outboundOrder, outboundOrderDetail, outStocks); List<Dt_LocationInfo> locationInfos = _basicService.LocationInfoService.Repository.GetLocationInfos(outStocks.Select(x => x.LocationCode).ToList()); return (outStocks, outboundOrderDetail, outStockLockInfos, locationInfos); } - + /// <summary> + /// 鎸囧畾搴撳瓨閿佸畾搴撳瓨 + /// </summary> + /// <param name="orderDetailId"></param> + /// <param name="stockSelectViews"></param> + /// <returns></returns> public WebResponseContent LockOutboundStock(int orderDetailId, List<StockSelectViewDTO> stockSelectViews) { try @@ -183,7 +242,7 @@ Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == orderDetailId); (bool, string) checkResult = CheckSelectStockDeital(outboundOrderDetail, stockSelectViews); if (!checkResult.Item1) throw new Exception(checkResult.Item2); - + //鍒嗛厤鍑哄簱搴撳瓨 (List<Dt_StockInfo>, Dt_OutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = AssignStockOutbound(outboundOrderDetail, stockSelectViews); _unitOfWorkManage.BeginTran(); @@ -204,7 +263,11 @@ return WebResponseContent.Instance.Error(ex.Message); } } - + /// <summary> + /// 閿佸畾搴撳瓨//涓嶆寚瀹氬簱瀛橀攣瀹氬簱瀛� + /// </summary> + /// <param name="keys"></param> + /// <returns></returns> public WebResponseContent LockOutboundStock(int[] keys) { try @@ -248,31 +311,85 @@ return WebResponseContent.Instance.Error(ex.Message); } } - - public WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, List<Dt_OutboundOrderDetail> outboundOrderDetails, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.Lock, List<Dt_Task>? tasks = null) + /// <summary> + /// 閿佸畾鍑哄簱鍗曞簱瀛樻暟鎹慨鏀� + /// </summary> + /// <param name="stockInfos"></param> + /// <param name="outboundOrderDetails"></param> + /// <param name="outStockLockInfos"></param> + /// <param name="locationInfos"></param> + /// <param name="locationStatus"></param> + /// <param name="tasks"></param> + /// <returns></returns> + public WebResponseContent LockOutboundStockDataUpdate(List<Dt_StockInfo> stockInfos, List<Dt_OutboundOrderDetail> outboundOrderDetails, List<Dt_OutStockLockInfo> outStockLockInfos, List<Dt_LocationInfo> locationInfos, LocationStatusEnum locationStatus = LocationStatusEnum.OutLock, List<Dt_Task>? tasks = null) { try { - _stockService.StockInfoService.Repository.UpdateData(stockInfos); + #region 淇敼搴撳瓨鍜屽簱瀛樿鎯� List<Dt_StockInfoDetail> stockInfoDetails = new List<Dt_StockInfoDetail>(); foreach (var item in stockInfos) { + if (item.StockStatus != StockStatusEmun.绉诲簱涓�.ObjToInt()) + { + item.StockStatus = locationStatus == LocationStatusEnum.InStock + ? StockStatusEmun.宸插叆搴�.ObjToInt() : StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + item.Details.ForEach(x => + { + x.Status = item.StockStatus; + }); + } stockInfoDetails.AddRange(item.Details); } + _stockService.StockInfoService.Repository.UpdateData(stockInfos); _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetails); - BaseDal.UpdateData(outboundOrderDetails); + #endregion + #region 淇敼鍑哄簱鍗曞拰鍑哄簱鍗曡鎯� + List<Dt_OutboundOrder> outboundOrders = _outboundRepository.OutboundOrderRepository.GetStockInfos(outboundOrderDetails.Select(x => x.OrderId).ToList()); + + foreach (var item in outboundOrderDetails) + { + var outboundOrder = outboundOrders.Where(x => x.Id == item.OrderId).FirstOrDefault(); + outboundOrder.Details.RemoveAll(x => x.Id == item.Id); + outboundOrder.Details.Add(item); + outboundOrder.OrderStatus = outboundOrder.Details.FirstOrDefault + (x => x.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) != null + ? OutboundStatusEnum.鍑哄簱涓�.ObjToInt() : OutboundStatusEnum.鏈紑濮�.ObjToInt(); + //var outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == item.OrderId); + //if (!outboundOrders.Any(x => x.Id == item.OrderId)) + //{ + // var outboundOrder = _outboundRepository.OutboundOrderRepository.GetStockInfo(item.OrderId); + // if (outboundOrder != null) + // { + // outboundOrder.Details.RemoveAll(x => x.Id == item.Id); + // outboundOrder.Details.Add(item); + // outboundOrder.OrderStatus = outboundOrder.Details.FirstOrDefault + // (x => x.OrderDetailStatus != OrderDetailStatusEnum.New.ObjToInt()) != null + // ? OutboundStatusEnum.鍑哄簱涓�.ObjToInt() : OutboundStatusEnum.鏈紑濮�.ObjToInt(); + // outboundOrders.Add(outboundOrder); + // } + //} + } + _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrders); + BaseDal.UpdateData(outboundOrderDetails); + #endregion + + #region 娣诲姞鍑哄簱璇︽儏 List<Dt_OutStockLockInfo> addOutStockLockInfos = outStockLockInfos.Where(x => x.Id == 0).ToList(); if (addOutStockLockInfos != null && addOutStockLockInfos.Any()) { _outStockLockInfoService.Repository.AddData(addOutStockLockInfos); } + #endregion + + #region 淇敼鍑哄簱璇︽儏 List<Dt_OutStockLockInfo> updateOutStockLockInfos = outStockLockInfos.Where(x => x.Id > 0).ToList(); if (updateOutStockLockInfos != null && updateOutStockLockInfos.Any()) { _outStockLockInfoService.Repository.UpdateData(updateOutStockLockInfos); } - + #endregion + //娣诲姞璐т綅淇℃伅鍙樻洿 _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, locationStatus.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList()); _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, locationStatus); return WebResponseContent.Instance.OK(); @@ -299,7 +416,11 @@ } return (true, "鎴愬姛"); } - + /// <summary> + /// 鎾ら攢鍒嗛厤 + /// </summary> + /// <param name="orderDetailId"></param> + /// <returns></returns> public WebResponseContent RevokeLockOutboundStock(int orderDetailId) { Dt_OutboundOrderDetail outboundOrderDetail = BaseDal.QueryFirst(x => x.Id == orderDetailId); -- Gitblit v1.9.3