From e8066daef0f24a88ee90b17a959f224e15f20ef8 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Mon, 12 Aug 2024 17:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=9F=E6=9D=90=E6=96=99=E4=BB=93=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E9=87=87=E8=B4=AD/=E5=A7=94=E5=A4=96/=E8=B0=83?= =?UTF-8?q?=E6=8B=A8=E6=9D=A1=E7=A0=81=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E3=80=81=E8=BD=BD=E5=85=B7=E7=BB=91=E5=AE=9A=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=AF=E7=94=A8=E3=80=81=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E6=B5=81=E6=B0=B4=E6=8F=92=E5=85=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/Inputs/AddOutinStockDetailInput.cs | 3 +- .../Entity/WmsOutsourceD.cs | 5 ++ .../Entity/WmsPurchaseD.cs | 5 ++ .../Entity/WmsRawmatTransferinstockD.cs | 4 ++ .../Tnb.WarehouseMgr/ErpToWmsService.cs | 3 - .../Tnb.WarehouseMgr/WareHouseService.cs | 7 +- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 71 +++++++++++++++++++ .../WmsMaterialTransferService.cs | 6 ++ .../WmsOutinStockDetailService.cs | 15 ++-- 9 files changed, 106 insertions(+), 13 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/AddOutinStockDetailInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/AddOutinStockDetailInput.cs index 1b8c38e7..0735bf8f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/AddOutinStockDetailInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/AddOutinStockDetailInput.cs @@ -9,6 +9,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Inputs public class AddOutinStockDetailInput { public WmsDistaskH disTask { get; set; } - public string? warehouse_id { get; set; } + public string? start_warehouse_id { get; set; } + public string? end_warehouse_id { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs index 998a77f7..f9a0df57 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs @@ -114,4 +114,9 @@ public partial class WmsOutsourceD : BaseEntity /// public DateTime? modify_time { get; set; } + /// + /// 已绑定数量 + /// + public decimal? bind_qty { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs index 8d197b24..e0203850 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPurchaseD.cs @@ -118,4 +118,9 @@ public partial class WmsPurchaseD : BaseEntity /// erp到货单子表pk /// public string erp_arriveorder_b_pk { get;set; } + + /// + /// 已绑定数量 + /// + public decimal? bind_qty { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs index 148e4630..753f4daf 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs @@ -124,4 +124,8 @@ public partial class WmsRawmatTransferinstockD : BaseEntity /// public string? lineno { get; set; } + /// + /// 已绑定数量 + /// + public decimal? bind_qty { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 6ac0fc87..7e49f8ff 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -884,7 +884,6 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync(); - List wmsRawmatTransferinstockDs = new List(); foreach (var detail in input.details) { @@ -893,7 +892,6 @@ namespace Tnb.WarehouseMgr msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id; msRawmatTransferinstockD.matcode = detail.material_code; - var erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id).Where((a, b) => a.cunitid == detail.unit_code).Select((a, b) => b).FirstAsync(); if (erpExtendField != null) { @@ -948,7 +946,6 @@ namespace Tnb.WarehouseMgr } } - protected Task ToApiResult(HttpStatusCode statusCode, string msg) { Entities.Dto.Outputs.Result result = new() diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 47d10cda..ae11a9a0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -1049,7 +1049,7 @@ namespace Tnb.WarehouseMgr Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}"); var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); Logger.Information($"SsxControlLOAD:{str}"); - Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); + //Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); } } else if (action == "UNLOAD")//放货 @@ -1067,7 +1067,7 @@ namespace Tnb.WarehouseMgr Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}"); var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); Logger.Information($"SsxControlUNLOAD:{str}"); - Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); + //Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); } } @@ -2556,7 +2556,8 @@ namespace Tnb.WarehouseMgr { AddOutinStockDetailInput addOutinStockDetailInput = new AddOutinStockDetailInput(); addOutinStockDetailInput.disTask = dt; - addOutinStockDetailInput.warehouse_id = carryCodeIts[0].warehouse_id; + addOutinStockDetailInput.start_warehouse_id = locWhIdMap.ContainsKey(dt.startlocation_id) ? locWhIdMap[dt.startlocation_id].ToString() : ""; + addOutinStockDetailInput.end_warehouse_id = locWhIdMap.ContainsKey(dt.endlocation_id) ? locWhIdMap[dt.endlocation_id].ToString() : ""; await _wmsOutinStockDetailService.AddOutinStockDetail(addOutinStockDetailInput, _db); #region todo 移到service中 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index ba9b8ffe..018755a3 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -23,6 +23,7 @@ using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.WarehouseMgr.Entities.Dto.Outputs; +using Tnb.WarehouseMgr.Entities.Entity; using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Interfaces; @@ -188,7 +189,67 @@ namespace Tnb.WarehouseMgr throw new Exception($"不能绑定多个不同类型单据打印的条码!:{string.Join(',', WmsTempCodes.DistinctBy(r => r.required_type).Select(r => r.barcode).ToList())}"); } + var bill_group = WmsTempCodes.GroupBy(r => new { r.require_id, r.required_type }); + foreach (var group in bill_group) + { + string required_type = group.Key.required_type; + switch (required_type) + { + case WmsWareHouseConst.BILLTYPE_PURCHASE_ID: + { + decimal? sum = input.details.Where(r => group.Select(r => r.barcode).Contains(r.barcode)).Select(r => r.codeqty).Sum(); + WmsPurchaseD wmsPurchaseD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); + decimal? bind_qty = wmsPurchaseD.bind_qty ?? 0; + if (sum + bind_qty > wmsPurchaseD.purchase_arriveqty) + { + throw new Exception($"托盘{input.carrycode} 物料{wmsPurchaseD.material_code} 当前绑定数量为{sum} 剩余可绑定数量为{(wmsPurchaseD.purchase_arriveqty - bind_qty).ParseToFloat()}!"); + } + wmsPurchaseD.bind_qty = sum + bind_qty; + await _db.Updateable(wmsPurchaseD).ExecuteCommandAsync(); + break; + } + case WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID: + { + decimal? sum = group.Select(r => r.codeqty).Sum(); + WmsOutsourceD wmsOutsourceD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); + decimal? bind_qty = wmsOutsourceD.bind_qty ?? 0; + if (sum + bind_qty > wmsOutsourceD.actual_quantity) + { + throw new Exception($"托盘{input.carrycode} 物料{wmsOutsourceD.matcode} 当前绑定数量为{sum} 剩余可绑定数量为{wmsOutsourceD.actual_quantity - bind_qty}!"); + } + wmsOutsourceD.bind_qty = sum + bind_qty; + await _db.Updateable(wmsOutsourceD).ExecuteCommandAsync(); + break; + } + case WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID: + { + decimal? sum = group.Select(r => r.codeqty).Sum(); + WmsRawmatTransferinstockD wmsRawmatTransferinstockD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); + decimal? bind_qty = wmsRawmatTransferinstockD.bind_qty ?? 0; + if (sum + bind_qty > wmsRawmatTransferinstockD.actual_qty) + { + throw new Exception($"托盘{input.carrycode} 物料{wmsRawmatTransferinstockD.matcode} 当前绑定数量为{sum} 剩余可绑定数量为{wmsRawmatTransferinstockD.actual_qty - bind_qty}!"); + } + wmsRawmatTransferinstockD.bind_qty = sum + bind_qty; + await _db.Updateable(wmsRawmatTransferinstockD).ExecuteCommandAsync(); + break; + } + } + } + + WmsCarrybindH wmsCarrybindH = new WmsCarrybindH(); + wmsCarrybindH.carry_id = carry.id; + wmsCarrybindH.carry_code = carry.carry_code; + wmsCarrybindH.create_id = input.create_id; + wmsCarrybindH.create_time = DateTime.Now; + wmsCarrybindH.org_id = WmsWareHouseConst.AdministratorOrgId; + wmsCarrybindH.location_id = WmsWareHouseConst.LOCATION_YCLBGWDRK; + wmsCarrybindH.location_code = "YCLBGWDRK"; + List WmsCarryCodes = new List(); + + List wmsCarrybindCodes = new List(); + foreach (var detail in input.details) { var WmsCarryCode = detail.Adapt(); @@ -199,10 +260,19 @@ namespace Tnb.WarehouseMgr WmsCarryCode.create_id = input.create_id; WmsCarryCode.create_time = DateTime.Now; WmsCarryCodes.Add(WmsCarryCode); + + var wmsCarrybindCode = detail.Adapt(); + wmsCarrybindCode.carrybind_id = wmsCarrybindH.id; + wmsCarrybindCodes.Add(wmsCarrybindCode); } int rows = 0; if (WmsCarryCodes.Count > 0) + { rows = await _db.Insertable(WmsCarryCodes).ExecuteCommandAsync(); + await _db.Insertable(wmsCarrybindH).ExecuteCommandAsync(); + await _db.Insertable(wmsCarrybindCodes).ExecuteCommandAsync(); + } + await _db.Updateable().SetColumns(r => new WmsCarryH { @@ -214,6 +284,7 @@ namespace Tnb.WarehouseMgr { throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!"); } + } catch (PostgresException ex) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index 14dc182d..b7bfb44a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -1868,6 +1868,12 @@ namespace Tnb.WarehouseMgr Logger.LogWarning($"【RackInstock】料架不能为空!{input.carry_code}"); throw new AppFriendlyException($"【RackInstock】料架不能为空!{input.carry_code}!", 500); } + if (wmsCarryH.carry_status != "0") + { + Logger.LogWarning($"【RackInstock】料架为非空闲状态,不能退回缓存仓!{input.carry_code}"); + throw new AppFriendlyException($"【RackInstock】料架为非空闲状态,不能退回缓存仓!{input.carry_code}!", 500); + } + // 找到未占用且未锁定的库位 ISugarQueryable rackEndLocations = diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutinStockDetailService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutinStockDetailService.cs index 66cfa4ad..b5642724 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsOutinStockDetailService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsOutinStockDetailService.cs @@ -71,7 +71,7 @@ namespace Tnb.WarehouseMgr } case WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID: { - type = "转移"; + type = "出库"; break; } } @@ -123,7 +123,10 @@ namespace Tnb.WarehouseMgr //await db.Ado.BeginTranAsync(); WmsOutinStockDetail wmsOutinStockDetail = new WmsOutinStockDetail(); - wmsOutinStockDetail.warehouse_id = input.warehouse_id; + if (type == "入库") + wmsOutinStockDetail.warehouse_id = input.end_warehouse_id; + else if (type == "出库") + wmsOutinStockDetail.warehouse_id = input.start_warehouse_id; wmsOutinStockDetail.carry_id = input.disTask.carry_id; wmsOutinStockDetail.carry_code = input.disTask.carry_code; wmsOutinStockDetail.create_id = GetUserIdByTask(); @@ -179,12 +182,12 @@ namespace Tnb.WarehouseMgr int rows = await db.Insertable(wmsOutinStockDetail).ExecuteCommandAsync(); if (rows == 0) { - throw new Exception($"插入入库明细失败!"); + throw new Exception($"插入出入库明细失败!"); } rows = await db.Insertable(wmsOutinStockCodes).ExecuteCommandAsync(); if (rows == 0) { - throw new Exception($"插入入库明细条码失败!"); + throw new Exception($"插入出入库明细条码失败!"); } await db.Ado.CommitTranAsync(); } @@ -193,14 +196,14 @@ namespace Tnb.WarehouseMgr ////await db.Ado.RollbackTranAsync(); Logger.LogError(ex.Message); Logger.LogError(ex.StackTrace); - throw new AppFriendlyException($"插入入库明细失败 {ex.Message}", 500); + //throw new AppFriendlyException($"插入出入库明细失败 {ex.Message}", 500); } catch (Exception ex) { //await db.Ado.RollbackTranAsync(); Logger.LogError(ex.Message); Logger.LogError(ex.StackTrace); - throw new AppFriendlyException($"插入入库明细失败 {ex.Message}", 500); + //throw new AppFriendlyException($"插入出入库明细失败 {ex.Message}", 500); } finally {