From e13f1fd3d25fe0449f1db6364ce9adc569baa669 Mon Sep 17 00:00:00 2001 From: hlb <894797954@qq.com> Date: Wed, 15 Nov 2023 09:25:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=9C=A8=E5=BA=93?= =?UTF-8?q?=E7=89=A9=E6=96=99=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/ModuleConsts.cs | 4 + .../Tnb.WarehouseMgr/WmsInStkMinService.cs | 106 ++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsInStkMinService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs index a267545b..d7dd9e09 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/ModuleConsts.cs @@ -191,4 +191,8 @@ public class ModuleConsts /// 模块标识-采购收货 /// public const string MODULE_WMSPURCHASE_ID = "29975280336405"; + /// + /// 模块标识-在库物料维护 + /// + public const string MODULE_WMSINSTKMIN_ID = "27124095468309"; } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStkMinService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStkMinService.cs new file mode 100644 index 00000000..cc8dc1bf --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStkMinService.cs @@ -0,0 +1,106 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Dtos.VisualDev; +using JNPF.Common.Extension; +using JNPF.EventBus; +using JNPF.Systems.Interfaces.System; +using JNPF.VisualDev; +using JNPF.VisualDev.Interfaces; +using SqlSugar; +using Tnb.BasicData.Entities; +using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.WarehouseMgr.Entities.Enums; +using Tnb.WarehouseMgr.Interfaces; + +namespace Tnb.WarehouseMgr + +{ + /// + /// 在库物料维护 + /// + [OverideVisualDev(ModuleConsts.MODULE_WMSINSTKMIN_ID)] + + public class WmsInStkMinService : BaseWareHouseService + { + private readonly ISqlSugarClient _db; + private readonly IRunService _runService; + private readonly IVisualDevService _visualDevService; + private readonly IWareHouseService _wareHouseService; + private readonly IBillRullService _billRullService; + private readonly IUserManager _userManager; + private readonly IEventPublisher _eventPublisher; + public WmsInStkMinService( + ISqlSugarRepository repository, + IRunService runService, + IVisualDevService visualDevService, + IWareHouseService wareHouseService, + IUserManager userManager, + IBillRullService billRullService, + IEventPublisher eventPublisher + ) + { + _db = repository.AsSugarClient(); + _runService = runService; + _visualDevService = visualDevService; + _wareHouseService = wareHouseService; + _userManager = userManager; + _billRullService = billRullService; + _eventPublisher = eventPublisher; + OverideFuncs.CreateAsync = WmsInStkMin; + } + + + + private async Task WmsInStkMin(VisualDevModelDataCrInput input) + { + + try + { + await _db.Ado.BeginTranAsync(); + //更新载具条码及状态 + WmsCarryCode wmsCarryCode = new() + { + org_id = _userManager.User.OrganizeId, + barcode = input.data[nameof(WmsCarryCode.barcode)]?.ToString(), + carry_id = input.data[nameof(WmsCarryCode.carry_id)]?.ToString(), + material_id = input.data[nameof(WmsCarryCode.material_id)]?.ToString(), + material_code = input.data[nameof(WmsCarryCode.material_code)]?.ToString(), + code_batch = input.data[nameof(WmsCarryCode.code_batch)]?.ToString(), + codeqty =input.data[nameof(WmsCarryCode.codeqty)].ParseToDecimal(), + is_out = 0, + location_id = input.data[nameof(WmsCarryCode.location_id)]?.ToString(), + location_code = input.data[nameof(WmsCarryCode.location_code)]?.ToString(), + unit_id = input.data[nameof(WmsCarryCode.unit_id)]?.ToString(), + warehouse_id = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID, + create_id = _userManager.UserId, + create_time = DateTime.Now + }; + if (wmsCarryCode.carry_id != null && wmsCarryCode.location_id != null) + { + await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = ((int)EnumCarryStatus.占用).ToString(), location_id = wmsCarryCode.location_id, location_code = wmsCarryCode.location_code }).Where(it => it.id == wmsCarryCode.carry_id).ExecuteCommandAsync(); + } + else { + await _db.Updateable().SetColumns(it => new WmsCarryH { carry_status = ((int)EnumCarryStatus.占用).ToString()}).Where(it => it.id == wmsCarryCode.carry_id).ExecuteCommandAsync(); + } + await _db.Insertable(wmsCarryCode).ExecuteCommandAsync(); + //更新库位数据 + if (wmsCarryCode.location_id != null) + { + await _db.Updateable().SetColumns(it => new BasLocation { is_use = ((int)EnumCarryStatus.占用).ToString() }).Where(it => it.id == wmsCarryCode.location_id).ExecuteCommandAsync(); + } + await _db.Ado.CommitTranAsync(); + } + catch (Exception) + { + await _db.Ado.RollbackTranAsync(); + throw; + } + finally + { + // 用JNPF的发布订阅模式发布消息 + await InvokeGenPretaskExcute(); + } + return Task.FromResult(true); + } + } +} From d606315f9492dd850978bb5b248a3f9e5cbee2fe Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Wed, 15 Nov 2023 10:16:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1=E3=80=81=E8=B0=83=E6=95=B4=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E4=BB=BB=E5=8A=A1=E5=8A=A8=E6=80=81=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6=202=E3=80=81LambdaExpressi?= =?UTF-8?q?onExtensions=20=E6=96=B0=E5=A2=9E=E8=A1=A8=E8=BE=BE=E5=BC=8F?= =?UTF-8?q?=E6=A0=91=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/WmsCheckTaskService.cs | 43 +++++++++++++------ .../Extension/LambdaExpressionExtensions.cs | 17 ++++++++ 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs index 951f5ab0..d00f1dc2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCheckTaskService.cs @@ -13,7 +13,6 @@ using JNPF.VisualDev.Interfaces; using Mapster; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; -using NPOI.SS.Formula.Functions; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.WarehouseMgr.Entities; @@ -112,12 +111,33 @@ namespace Tnb.WarehouseMgr areaIds = input.data[nameof(WmsCheckstockH.area_id)].ToObject(); } - filterExpable = checkType!.ToEnum() switch + Expression> filterExp = (a, b, c) => false; + switch (checkType?.ToEnum()) { - EnumCheckType.物料盘点 => filterExpable.AndIF(input.data.ContainsKey(nameof(WmsCarryCode.material_id)) && input.data[nameof(WmsCarryCode.material_id)] != null, (a, b, c) => b.material_id == input.data[nameof(WmsCarryCode.material_id)].ToString()), - EnumCheckType.批次盘点 => filterExpable.AndIF(areaIds?.Length > 0, (a, b, c) => areaIds.Contains(a.region_id)), - _ => filterExpable, - }; + case EnumCheckType.全库盘点: + { + filterExp = (a, b, c) => a.wh_id == input.data[nameof(WmsCheckstockH.warehouse_id)].ToString() + && a.is_type == ((int)EnumLocationType.存储库位).ToString() + && c.is_lock == 0; + } + break; + case EnumCheckType.物料盘点: + { + if (!input.data.ContainsKey(nameof(WmsCarryCode.material_id)) && input.data[nameof(WmsCarryCode.material_id)] != null) + { + filterExp = (a, b, c) => b.material_id == input.data[nameof(WmsCarryCode.material_id)].ToString(); + } + } + break; + case EnumCheckType.批次盘点: + { + if (areaIds?.Length > 0) + { + filterExp = (a, b, c) => areaIds.Contains(a.region_id); + } + } + break; + } var carryCodes = await _db.Queryable().InnerJoin((a, b) => a.id == b.location_id) .InnerJoin((a, b, c) => b.carry_id == c.id) @@ -320,22 +340,21 @@ namespace Tnb.WarehouseMgr _carryMap = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.carry_code); } - //var filterExpable = Expressionable.Create(); Expression> filterExp = (a, b, c) => false; switch (input.CheckType) { case EnumCheckType.全库盘点: { - filterExp.And((a, b, c) => a.wh_id == input.warehouse_id) - .And((a, b, c) => a.is_type == ((int)EnumLocationType.存储库位).ToString()) - .And((a, b, c) => c.is_lock == 0); + filterExp = (a, b, c) => a.wh_id == input.warehouse_id + && a.is_type == ((int)EnumLocationType.存储库位).ToString() + && c.is_lock == 0; } break; case EnumCheckType.物料盘点: { if (!input.material_id.IsNullOrWhiteSpace()) { - filterExp.And((a, b, c) => b.material_id == input.material_id); + filterExp = (a, b, c) => b.material_id == input.material_id; } } break; @@ -343,7 +362,7 @@ namespace Tnb.WarehouseMgr { if (input.regionIds?.Count > 0) { - filterExp.And((a, b, c) => input.regionIds.Contains(a.region_id)); + filterExp = (a, b, c) => input.regionIds.Contains(a.region_id); } } break; diff --git a/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs b/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs index b0b1b420..04ab917b 100644 --- a/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs +++ b/common/Tnb.Common/Extension/LambdaExpressionExtensions.cs @@ -59,6 +59,23 @@ namespace JNPF.Common.Extension return first.Compose(second, Expression.And); } + + /// + /// or扩展 + /// + /// + /// + /// + /// + public static Expression> Or(this Expression> first, Expression> second) + { + if (first.IsNull()) + { + first = second; + return first; + } + return first.Compose(second, Expression.Or); + } }