From e354b5938f49ac90b237289923dcde923d22daf5 Mon Sep 17 00:00:00 2001
From: heshaofeng <heshaofeng@hnkhzn.com>
Date: 星期四, 20 十一月 2025 09:08:27 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs | 163 +++++++++++++-----------------------------------------
1 files changed, 40 insertions(+), 123 deletions(-)
diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
index 826d45a..3fa61d7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
@@ -1,9 +1,12 @@
锘縰sing Microsoft.Extensions.Logging;
+using SqlSugar;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Stock;
using WIDESEA_IBasicService;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
@@ -64,13 +67,14 @@
// 鎸夌墿鏂欏拰鎵规鍒嗙粍澶勭悊
var groupDetails = outboundOrderDetails
- .GroupBy(x => new { x.MaterielCode, x.BatchNo })
+ .GroupBy(x => new { x.MaterielCode, x.BatchNo ,x.SupplyCode})
.Select(x => new
{
MaterielCode = x.Key.MaterielCode,
BatchNo = x.Key.BatchNo,
+ SupplyCode = x.Key.SupplyCode,
Details = x.ToList(),
- TotalNeedQuantity = x.Sum(v => v.OrderQuantity - v.OverOutQuantity - v.LockQuantity)
+ TotalNeedQuantity = x.Sum(v => v.OrderQuantity - v.OverOutQuantity - v.LockQuantity-v.MoveQty)
})
.Where(x => x.TotalNeedQuantity > 0)
.ToList();
@@ -80,7 +84,7 @@
var needQuantity = item.TotalNeedQuantity;
// 鑾峰彇鍙敤搴撳瓨锛堟寜鍏堣繘鍏堝嚭鎺掑簭锛�
- List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(item.MaterielCode, item.BatchNo);
+ List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.GetUseableStocks(item.MaterielCode, item.BatchNo,item.SupplyCode);
if (!stockInfos.Any())
{
throw new Exception($"鐗╂枡[{item.MaterielCode}]鎵规[{item.BatchNo}]鏈壘鍒板彲鍒嗛厤搴撳瓨");
@@ -107,7 +111,7 @@
}
/// <summary>
- /// 鎸夊厛杩涘厛鍑哄師鍒欏垎閰嶉攣瀹氭暟閲忓埌鍚勪釜鏄庣粏 - 淇鐗堟湰
+ /// 鎸夊厛杩涘厛鍑哄師鍒欏垎閰嶉攣瀹氭暟閲忓埌鍚勪釜鏄庣粏
/// </summary>
private void DistributeLockQuantityByFIFO(
List<Dt_OutboundOrderDetail> details,
@@ -118,7 +122,7 @@
{
// 鎸夊厛杩涘厛鍑烘帓搴忓嚭搴撳崟鏄庣粏锛堝亣璁惧厛鍒涘缓鐨勬槑缁嗛渶瑕佷紭鍏堟弧瓒筹級
var sortedDetails = details
- .Where(d => d.OrderQuantity - d.OverOutQuantity - d.LockQuantity > 0) // 鍙鐞嗚繕闇�瑕佸垎閰嶇殑鏁伴噺
+ .Where(d => d.OrderQuantity - d.OverOutQuantity - d.LockQuantity -d.MoveQty> 0) // 鍙鐞嗚繕闇�瑕佸垎閰嶇殑鏁伴噺
.OrderBy(x => x.Id)
.ToList();
@@ -128,7 +132,7 @@
var allocatedStockDetails = assignStocks
.SelectMany(x => x.Details)
.Where(x => stockAllocations.ContainsKey(x.Id))
- .OrderBy(x => x.ProductionDate)
+ .OrderBy(x => x.CreateDate)
.ThenBy(x => x.StockId)
.ToList();
@@ -201,123 +205,6 @@
}
}
-
-/// <summary>
- /// 鍒涘缓鍑哄簱閿佸畾淇℃伅
- /// </summary>
- private void CreateOutStockLockInfos(Dt_OutboundOrder outboundOrder,List<Dt_OutboundOrderDetail> details,
- List<Dt_StockInfo> assignStocks,List<Dt_OutStockLockInfo> outStockLockInfos)
- {
- foreach (var stock in assignStocks)
- {
- // 鑾峰彇璇ュ簱瀛樹腑鐩稿叧鐗╂枡鐨勫彲鐢ㄦ潯鐮佷俊鎭�
- var stockDetails = stock.Details
- .Where(x => details.Any(d => d.MaterielCode == x.MaterielCode) &&
- x.StockQuantity > x.OutboundQuantity)
- .OrderBy(x => x.ProductionDate) // 鍏堣繘鍏堝嚭
- .ToList();
- if (!stockDetails.Any()) continue;
-
- var stockAssignQuantity = stockDetails.Sum(x => x.OutboundQuantity);
-
-
- // 鏌ユ壘杩欎釜搴撳瓨宸茬粡鍒嗛厤鐨勬暟閲�
- var existingAssign = outStockLockInfos
- .Where(x => x.StockId == stock.Id &&
- details.Any(d => d.Id == x.OrderDetailId))
- .Sum(x => x.AssignQuantity);
-
- var availableAssign = stockAssignQuantity - existingAssign;
-
- if (availableAssign <= 0) continue;
-
- // 鎸夊厛杩涘厛鍑哄師鍒欏垎閰嶆潯鐮�
- var barcodeAllocation = AllocateBarcodes(stockDetails, availableAssign);
-
-
- // 鍒嗛厤缁欏悇涓槑缁�
- foreach (var detail in details.Where(d => d.LockQuantity > 0))
- {
- var alreadyAssigned = outStockLockInfos
- .Where(x => x.OrderDetailId == detail.Id && x.StockId == stock.Id)
- .Sum(x => x.AssignQuantity);
-
- var canAssign = Math.Min(detail.LockQuantity - alreadyAssigned, availableAssign);
-
- if (canAssign > 0)
- {
- // 涓鸿繖涓垎閰嶇‘瀹氭潯鐮�
- var (barcode, barcodeQuantity) = GetBarcodeForAllocation(barcodeAllocation, canAssign);
-
- var lockInfo = _outStockLockInfoService.GetOutStockLockInfo(
- outboundOrder, detail, stock, canAssign, barcode);
- outStockLockInfos.Add(lockInfo);
-
- availableAssign -= canAssign;
-
- // 鏇存柊鏉$爜鍒嗛厤璁板綍
- UpdateBarcodeAllocation(barcodeAllocation, barcode, barcodeQuantity);
- }
-
- if (availableAssign <= 0) break;
- }
- }
- }
-
- /// <summary>
- /// 鎸夊厛杩涘厛鍑哄師鍒欏垎閰嶆潯鐮�
- /// </summary>
- private Dictionary<string, decimal> AllocateBarcodes(List<Dt_StockInfoDetail> stockDetails, decimal totalQuantity)
- {
- var allocation = new Dictionary<string, decimal>();
- decimal remainingQuantity = totalQuantity;
-
- foreach (var detail in stockDetails.OrderBy(x => x.ProductionDate))
- {
- if (remainingQuantity <= 0) break;
-
- decimal available = detail.StockQuantity - detail.OutboundQuantity;
- decimal allocate = Math.Min(available, remainingQuantity);
-
- allocation[detail.Barcode] = allocate;
- remainingQuantity -= allocate;
- }
-
- return allocation;
- }
-
- /// <summary>
- /// 涓哄垎閰嶈幏鍙栧悎閫傜殑鏉$爜
- /// </summary>
- private (string barcode, decimal quantity) GetBarcodeForAllocation(Dictionary<string, decimal> barcodeAllocation, decimal requiredQuantity)
- {
- foreach (var (barcode, quantity) in barcodeAllocation)
- {
- if (quantity >= requiredQuantity)
- {
- return (barcode, requiredQuantity);
- }
- }
-
- // 濡傛灉鍗曚釜鏉$爜鏁伴噺涓嶈冻锛屼娇鐢ㄧ涓�涓潯鐮�
- var first = barcodeAllocation.First();
- return (first.Key, Math.Min(first.Value, requiredQuantity));
- }
-
- /// <summary>
- /// 鏇存柊鏉$爜鍒嗛厤璁板綍
- /// </summary>
- private void UpdateBarcodeAllocation(Dictionary<string, decimal> barcodeAllocation, string barcode, decimal usedQuantity)
- {
- if (barcodeAllocation.ContainsKey(barcode))
- {
- barcodeAllocation[barcode] -= usedQuantity;
- if (barcodeAllocation[barcode] <= 0)
- {
- barcodeAllocation.Remove(barcode);
- }
- }
- }
/// <summary>
/// 鍑哄簱搴撳瓨鍒嗛厤鍚庯紝鏇存柊鏁版嵁搴撴暟鎹�
/// </summary>
@@ -372,5 +259,35 @@
}
}
+
+
+ public override PageGridData<Dt_OutboundOrderDetail> GetPageData(PageDataOptions options)
+ {
+ //var pageGridData = base.GetPageData(options);
+
+ ISugarQueryable<Dt_OutboundOrderDetail> sugarQueryable1 = BaseDal.Db.Queryable<Dt_OutboundOrderDetail>();
+ if (!string.IsNullOrEmpty(options.Wheres))
+ {
+
+ List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+ int totalCount = 0;
+ if (searchParametersList.Count > 0)
+ {
+ {
+ SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_InboundOrderDetail.OrderId).FirstLetterToLower());
+ if (searchParameters != null)
+ {
+ sugarQueryable1 = sugarQueryable1.Where(x => x.OrderId== searchParameters.Value.ObjToInt());
+ var dataList = sugarQueryable1.ToPageList(options.Page, options.Rows, ref totalCount);
+ return new PageGridData<Dt_OutboundOrderDetail>(totalCount, dataList);
+ }
+ }
+
+
+ }
+ }
+ return new PageGridData<Dt_OutboundOrderDetail> ();
+ }
+
}
}
--
Gitblit v1.9.3