From 0888719b39875b44dfd1d3028780b5018b2ad10c Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Sun, 17 Dec 2023 20:30:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=BA=93=E7=94=B3=E8=AF=B7=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9D=A1=E7=A0=81=E6=89=93=E5=8D=B0=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 1 + .../Tnb.WarehouseMgr/DevServBase`1.cs | 2 +- .../Tnb.WarehouseMgr/WmsInStockService.cs | 92 +++++++++++++++++-- .../Tnb.API.Entry/Configurations/Cache.json | 2 +- 4 files changed, 85 insertions(+), 12 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index b964c72d..b05f307c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -328,6 +328,7 @@ namespace Tnb.WarehouseMgr catch (Exception ex) { tcs.SetException(ex); + throw ex; Logger.Error("条码打印时出现错误", ex); } finally diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DevServBase`1.cs b/WarehouseMgr/Tnb.WarehouseMgr/DevServBase`1.cs index b89a6fb9..0367f680 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DevServBase`1.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DevServBase`1.cs @@ -80,7 +80,7 @@ namespace Tnb.WarehouseMgr .InnerJoin((a, b, c) => b.location_code == c.endlocation_code || b.location_code == c.startlocation_code) .Where(whereExpable.ToExpression()) .WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName) - //.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName) + .WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName) .Select((a, b, c) => new WmsElevatorH { bill_code = c.bill_code, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index a9a17487..53035e22 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -1,4 +1,5 @@ -using JNPF.Common.Core.Manager; +using System.Diagnostics.CodeAnalysis; +using JNPF.Common.Core.Manager; using JNPF.Common.Extension; using JNPF.Common.Filter; using JNPF.Common.Security; @@ -87,7 +88,7 @@ namespace Tnb.WarehouseMgr /// /// [HttpPost] - public async Task BarCodePrint(BarCodePrintInput input) + public async Task BarCodePrint(BarCodePrintInput input) { if (input == null) { @@ -98,9 +99,10 @@ namespace Tnb.WarehouseMgr { throw new ArgumentException($"parameter {nameof(input.BillIds)} not be null or zero"); } - + List barcodes = new(); try { + await _db.Ado.BeginTranAsync(); if (_dicBillCodes.Count < 1) @@ -111,6 +113,7 @@ namespace Tnb.WarehouseMgr List inStockDetails = await _db.Queryable().Where(it => input.BillIds.Contains(it.bill_id)).ToListAsync(); if (inStockDetails?.Count > 0) { + List wmsTempCodes = new(); for (int i = 0; i < inStockDetails.Count; i++) { @@ -152,20 +155,71 @@ namespace Tnb.WarehouseMgr wmsTempCodes.Add(barCode); } } - int row = await _db.Insertable(wmsTempCodes).ExecuteCommandAsync(); - if (row > 0) + int row = 0; + List<(string requireId, string barcode)> multi = wmsTempCodes.Select(x => (x.require_id, x.barcode)).ToList(); + var printedTempCodes = await _db.Queryable().Where(it => multi.Select(x => x.requireId).Contains(it.require_id) && multi.Select(x => x.barcode).Contains(it.barcode)).ToListAsync(); + if (printedTempCodes?.Count > 0) { - _ = await _db.Updateable().SetColumns(it => new WmsInstockH { print_status = WmsWareHouseConst.BARCODE_PRINT_STATUS_COMPLETE_ID }).Where(it => input.BillIds.Contains(it.id)).ExecuteCommandAsync(); + var instocks = await _db.Queryable().Where(it => it.print_status == WmsWareHouseConst.BARCODE_PRINT_STATUS_COMPLETE_ID && printedTempCodes.Select(x => x.require_id).Contains(it.id)).ToListAsync(); + if (instocks?.Count > 0) + { + wmsTempCodes = wmsTempCodes.Except(printedTempCodes, new CustomEqualityComparer()).ToList(); + } + if (wmsTempCodes?.Count > 0) + row = await _db.Insertable(wmsTempCodes).ExecuteCommandAsync(); + wmsTempCodes = wmsTempCodes.Concat(printedTempCodes).ToList(); } - } + else + { + row = await _db.Insertable(wmsTempCodes).ExecuteCommandAsync(); + } + _ = await _db.Updateable().SetColumns(it => new WmsInstockH { print_status = WmsWareHouseConst.BARCODE_PRINT_STATUS_COMPLETE_ID }).Where(it => input.BillIds.Contains(it.id)).ExecuteCommandAsync(); + barcodes = wmsTempCodes?.Select(x => x.barcode).ToList() ?? Enumerable.Empty().ToList(); + } + if (barcodes?.Count > 0) + { + base.BarCodePrint(barcodes, 1); + } await _db.Ado.CommitTranAsync(); } catch (Exception) { await _db.Ado.RollbackTranAsync(); } + return barcodes; } + /* /// + /// 条码打印 + /// + /// + /// + [HttpPost] + public Task BarCodePrint() + { + try + { + if (barcodes?.Count > 0) + { + base.BarCodePrint(barcodes, 1); + barcodes.Clear(); + } + else + { + throw new AppFriendlyException("没有可打印的条码", 500); + } + } + catch (AppFriendlyException ex) + { + throw ex; + } + catch (Exception) + { + throw new AppFriendlyException("打印失败", 500); + } + return Task.CompletedTask; + }*/ + private Task CreateInstock(WmsInstockD detail, int no) { @@ -177,8 +231,8 @@ namespace Tnb.WarehouseMgr material_code = detail.material_code, barcode = code, code_batch = detail.code_batch, - material_specification= detail.material_specification, - container_no =detail.container_no, + material_specification = detail.material_specification, + container_no = detail.container_no, codeqty = detail.pr_qty!.Value, unit_id = detail.unit_id, is_lock = 0, @@ -463,7 +517,7 @@ namespace Tnb.WarehouseMgr } //生成载具条码记录 List carryCodes = preTaskUpInput.PreTaskHandleCodes.Adapt>(); - + carryCodes.ForEach(x => { x.id = SnowflakeIdHelper.NextId(); @@ -538,4 +592,22 @@ namespace Tnb.WarehouseMgr } } + + public class CustomEqualityComparer : EqualityComparer + { + public bool Equals(WmsTempCode? x, WmsTempCode? y) + { + // 判断两个对象是否相等的逻辑 + return x?.barcode == y?.barcode && x?.require_id == y?.require_id; + } + + public int GetHashCode([DisallowNull] WmsTempCode obj) + { + // 使用多个属性来计算哈希码 + int hashCode = obj.barcode?.GetHashCode() ?? 0; + hashCode = (hashCode * 397) ^ obj.require_id.GetHashCode(); + return hashCode; + } + + } } diff --git a/apihost/Tnb.API.Entry/Configurations/Cache.json b/apihost/Tnb.API.Entry/Configurations/Cache.json index 75b416ac..dadb1be5 100644 --- a/apihost/Tnb.API.Entry/Configurations/Cache.json +++ b/apihost/Tnb.API.Entry/Configurations/Cache.json @@ -1,7 +1,7 @@ { "Cache": { "CacheType": "RedisCache", //MemoryCache - "ip": "192.168.11.109", + "ip": "localhost", "port": 6379, "password": "05jWEoJa8v", "RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0"