diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index b006d4e0..f2bf728a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -26,6 +26,7 @@ namespace Tnb.WarehouseMgr private readonly ISqlSugarClient _db; private readonly IDictionaryDataService _dictionaryDataService; private readonly IUserManager _userManager; + private static Dictionary _dicBillCodes = new(); public WmsInStockService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, IUserManager userManager) { _db = repository.AsSugarClient(); @@ -66,6 +67,11 @@ namespace Tnb.WarehouseMgr { await _db.Ado.BeginTranAsync(); + if (_dicBillCodes.Count < 1) + { + _dicBillCodes = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.bill_code); + } + var inStockDetails = await _db.Queryable().Where(it => input.BillIds.Contains(it.bill_id)).ToListAsync(); if (inStockDetails?.Count > 0) { @@ -78,9 +84,9 @@ namespace Tnb.WarehouseMgr if (inStockDetails[i].pr_qty.HasValue && minPacking.HasValue && minPacking.Value > 0) { - var mod = (int)(inStockDetails[i].pr_qty.Value % minPacking.Value); - codeNum = (int)(mod > 0 ? inStockDetails[i].pr_qty / minPacking.Value + 1 : inStockDetails[i].pr_qty / minPacking.Value); - if (inStockDetails[i].pr_qty.Value > minPacking.Value) + var mod = (int)(inStockDetails[i].pr_qty!.Value % minPacking.Value); + codeNum = (int)(mod > 0 ? inStockDetails[i].pr_qty!.Value / minPacking.Value + 1 : inStockDetails[i].pr_qty!.Value / minPacking.Value); + if (inStockDetails[i].pr_qty!.Value > minPacking.Value) { for (int j = 0; j < codeNum; j++) { @@ -101,7 +107,7 @@ namespace Tnb.WarehouseMgr wmsTempCodes.Add(barCode); } } - else if (inStockDetails[i].pr_qty.Value <= minPacking.Value) + else if (inStockDetails[i].pr_qty!.Value <= minPacking.Value) { WmsTempCode barCode = await CreateInstock(inStockDetails[i], i + 1); wmsTempCodes.Add(barCode); @@ -131,7 +137,6 @@ namespace Tnb.WarehouseMgr private async Task CreateInstock(WmsInstockD detail, int no) { - var instock = await _db.Queryable().SingleAsync(it => it.id == detail.bill_id); WmsTempCode barCode = new(); barCode.org_id = detail.org_id; barCode.material_id = detail.material_id; @@ -139,12 +144,12 @@ namespace Tnb.WarehouseMgr var code = $"{detail.material_code}{detail.code_batch}{no.ToString().PadLeft(4, '0')}"; barCode.barcode = code; barCode.code_batch = detail.code_batch; - barCode.codeqty = detail.pr_qty.Value; + barCode.codeqty = detail.pr_qty!.Value; barCode.unit_id = detail.unit_id; barCode.is_lock = 0; barCode.is_end = "0"; barCode.require_id = detail.bill_id; - barCode.require_code = instock?.bill_code; + barCode.require_code = _dicBillCodes.ContainsKey(detail.bill_id) ? _dicBillCodes[detail.bill_id]?.ToString() : ""; barCode.create_id = _userManager.UserId; barCode.create_time = DateTime.Now; return barCode;