From c455612b03e6ecac994884dde5b5f4bc4909c181 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期二, 11 三月 2025 17:12:52 +0800
Subject: [PATCH] 1
---
项目代码/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutboundOrderDetailService.cs | 163 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 138 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..d124e6a 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);
@@ -126,6 +131,13 @@
return (true, "鎴愬姛");
}
+ /// <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 +147,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 +178,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 +234,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 +255,11 @@
return WebResponseContent.Instance.Error(ex.Message);
}
}
-
+ /// <summary>
+ /// 閿佸畾搴撳瓨//涓嶆寚瀹氬簱瀛橀攣瀹氬簱瀛�
+ /// </summary>
+ /// <param name="keys"></param>
+ /// <returns></returns>
public WebResponseContent LockOutboundStock(int[] keys)
{
try
@@ -248,31 +303,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 +408,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