From 97872f92ffbfda292d00339bc46714e5c3cd88c9 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Thu, 1 Aug 2024 01:01:14 +0800 Subject: [PATCH] =?UTF-8?q?erp=E5=8E=9F=E6=9D=90=E6=96=99=E8=B0=83?= =?UTF-8?q?=E6=8B=A8=E3=80=81=E5=A7=94=E5=A4=96=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 9 +- .../Consts/WmsWareHouseConst.cs | 8 +- ...stockInput.cs => TransferOutstockInput.cs} | 7 +- .../Entity/WmsOutsourceD.cs | 9 +- .../Entity/WmsOutsourceH.cs | 12 +- .../Entity/WmsOutsourceOrderD.cs | 126 ++++++++ .../Entity/WmsOutsourceOrderH.cs | 122 ++++++++ .../Entity/WmsRawmatTransferinstockD.cs | 5 + .../Tnb.WarehouseMgr/ErpToWmsService.cs | 120 ++++---- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 6 +- .../Tnb.WarehouseMgr/WmsInStockService.cs | 269 +++++++++--------- .../WmsPDAScanInStockService.cs | 25 +- 12 files changed, 510 insertions(+), 208 deletions(-) rename WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/{RawMatTransferInstockInput.cs => TransferOutstockInput.cs} (92%) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderH.cs diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 030463d9..b1a35715 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -466,6 +466,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA input.data.Add("material_specification", WmsCarryCode.material_specification!);//规格型号 input.data.Add("container_no", WmsCarryCode.container_no!);//箱号 input.data.Add("material_id", WmsCarryCode.material_id); + input.data.Add("物料条码", WmsCarryCode.barcode); input.data.Add("id", null); _wmsPDAScanInStock.ScanInStockByRedis(input).Wait(); } @@ -661,7 +662,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA if (items.Count < 1) { - LoggerF2KTPsupplement.LogWarning($"【YCLInternalTransfer】 没有可以出库的空载具"); + LoggerF2KTPsupplement.LogWarning($"【YCLInternalTransfer】 没有可以出库的载具"); return; } @@ -2470,10 +2471,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BGWCarrySupplementtimer = new Timer(BGWCarrySupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); // 供料叠盘机空托盘自动入库 - YCLGLDPJInstocktimer = new Timer(YCLGLDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); + YCLGLDPJInstocktimer = new Timer(YCLGLDPJInstock, null, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(30)); // 外协叠盘机空托盘自动入库 - YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); + YCLWXDPJInstocktimer = new Timer(YCLWXDPJInstock, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(30)); // 二楼上升降机 Floor2UpMachinecodetimer = new Timer(Floor2UpMachinecode, null, TimeSpan.Zero, TimeSpan.FromSeconds(20)); @@ -2497,7 +2498,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); - YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.Zero, TimeSpan.FromSeconds(180)); + YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185)); return Task.CompletedTask; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index ef469a45..f5ce65ac 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -399,10 +399,15 @@ public const string SYNC_STATUS__SYNCFAILED = "26191354152229"; /// - /// 单据类型-来料入库单 + /// 单据类型-来料入库单(采购) /// public const string BILLTYPE_MATERIALINSTOCK_ID = "25103338755861"; + /// + /// 单据类型-原材料委外入库单 + /// + public const string BILLTYPE_OUTSOURCEINSTOCK_ID = "35910170390037"; + /// /// 单据类型-生产入库单 /// @@ -418,7 +423,6 @@ /// 单据类型-委外收货 /// public const string BILLTYPE_OUTSOURCE_ID = "35882444276245"; - /// /// 单据类型-原材料调拨入库 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/RawMatTransferInstockInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs similarity index 92% rename from WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/RawMatTransferInstockInput.cs rename to WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs index a024fe1e..51b84b39 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/RawMatTransferInstockInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOutstockInput.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs { - public class RawMatTransferInstockInput + public class TransferOutstockInput { /// /// 单号 @@ -28,6 +28,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? outstockorg_code { get; set; } + /// + /// 入库仓库编号 + /// + public string? warehouse_instock { get; set; } + /// /// 凭证日期 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs index f404538c..998a77f7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceD.cs @@ -7,7 +7,7 @@ namespace Tnb.WarehouseMgr.Entities.Entity; /// /// 委外订单表子表 /// -[SugarTable("wms_outsource_order_d")] +[SugarTable("wms_outsource_d")] public partial class WmsOutsourceD : BaseEntity { public WmsOutsourceD() @@ -40,7 +40,7 @@ public partial class WmsOutsourceD : BaseEntity public string? unit { get; set; } /// - /// 采购数量 + /// 委外数量 /// public decimal? outsource_quantity { get; set; } @@ -114,9 +114,4 @@ public partial class WmsOutsourceD : BaseEntity /// public DateTime? modify_time { get; set; } - /// - /// erp_line_pk - /// - public string? erp_line_pk { get; set; } - } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs index d9dad8c0..4cc02641 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceH.cs @@ -7,7 +7,7 @@ namespace Tnb.WarehouseMgr.Entities.Entity; /// /// 委外订单 /// -[SugarTable("wms_outsource_order_h")] +[SugarTable("wms_outsource_h")] public partial class WmsOutsourceH : BaseEntity { public WmsOutsourceH() @@ -104,16 +104,6 @@ public partial class WmsOutsourceH : BaseEntity /// public string? f_flowid { get; set; } - /// - /// erp_pk - /// - public string? erp_pk { get; set; } - - /// - /// erp_bill_code - /// - public string? erp_bill_code { get; set; } - /// /// 供货日期 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs new file mode 100644 index 00000000..bb20b1b3 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderD.cs @@ -0,0 +1,126 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 委外订单表子表 +/// +[SugarTable("wms_outsource_order_d")] +public partial class WmsOutsourceOrderD : BaseEntity +{ + public WmsOutsourceOrderD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 主表id + /// + public string? fk_wms_outsource_order_id { get; set; } + + /// + /// 物料id + /// + public string? matcode_id { get; set; } + + /// + /// 物料编号 + /// + public string? matcode { get; set; } + + /// + /// 物料描述 + /// + public string? matspecification { get; set; } + + /// + /// 单位 + /// + public string? unit { get; set; } + + /// + /// 委外数量 + /// + public decimal? outsource_quantity { get; set; } + + /// + /// 实收数量 + /// + public decimal? actual_quantity { get; set; } + + /// + /// 库存地点ID + /// + public string? stock_location_id { get; set; } + + /// + /// 库存地点 + /// + public string? stock_location { get; set; } + + /// + /// 批次 + /// + public string? code_batch { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 扩展字段 + /// + public string? extras { get; set; } + + /// + /// 交货日期 + /// + public string? delivery_date { get; set; } + + /// + /// 净价 + /// + public string? net_price { get; set; } + + /// + /// 货币 + /// + public string? currency { get; set; } + + /// + /// 工厂 + /// + public string? factory { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// erp_line_pk + /// + public string? erp_line_pk { get; set; } + + /// + /// 行号 + /// + public string? lineno { get; set; } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderH.cs new file mode 100644 index 00000000..b6826d73 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsOutsourceOrderH.cs @@ -0,0 +1,122 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 委外订单 +/// +[SugarTable("wms_outsource_order_h")] +public partial class WmsOutsourceOrderH : BaseEntity +{ + public WmsOutsourceOrderH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 委外订单号 + /// + public string? outsource_order { get; set; } + + /// + /// 联系人 + /// + public string? contact_person { get; set; } + + /// + /// 电话 + /// + public string? tel { get; set; } + + /// + /// 供应商ID + /// + public string? supplier_id { get; set; } + + /// + /// 供应商编号 + /// + public string? supplier_code { get; set; } + + /// + /// 供应商名称 + /// + public string? supplier_name { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 扩展字段 + /// + public string? extras { get; set; } + + /// + /// 时间戳 + /// + public string? time_stamp { get; set; } + + /// + /// 单据类型 + /// + public string? document_type { get; set; } + + /// + /// 凭证日期 + /// + public string? certificate_date { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// erp_pk + /// + public string? erp_pk { get; set; } + + /// + /// erp_bill_code + /// + public string? erp_bill_code { get; set; } + + /// + /// 供货日期 + /// + public DateTime? ship_date { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs index 747ec96a..148e4630 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferinstockD.cs @@ -119,4 +119,9 @@ public partial class WmsRawmatTransferinstockD : BaseEntity /// public string? erp_line_pk { get; set; } + /// + /// 行号 + /// + public string? lineno { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index c3634a89..fc3fe93a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -370,6 +370,7 @@ namespace Tnb.WarehouseMgr wmsPurchaseOrderD.create_id = WmsWareHouseConst.ErpUserId; wmsPurchaseOrderD.create_time = DateTime.Now; wmsPurchaseOrderD.actual_quantity = 0; + wmsPurchaseOrderD.lineno = detail.lineno; var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); if (material != null) @@ -437,8 +438,8 @@ namespace Tnb.WarehouseMgr try { await db.Ado.BeginTranAsync(); - WmsOutsourceH wmsOutsourceOrderH = new WmsOutsourceH(); - string Code = await _billRuleService.GetBillNumber("Purchase"); + WmsOutsourceOrderH wmsOutsourceOrderH = new WmsOutsourceOrderH(); + string Code = await _billRuleService.GetBillNumber("WmsOutsourceOrder"); wmsOutsourceOrderH.outsource_order = Code; wmsOutsourceOrderH.erp_bill_code = input.outsource_order; @@ -460,10 +461,10 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsOutsourceOrderH).ExecuteCommandAsync(); - List wmsOutsourceOrderDs = new List(); + List wmsOutsourceOrderDs = new List(); foreach (var detail in input.details) { - WmsOutsourceD wmsOutsourceOrderD = new WmsOutsourceD(); + WmsOutsourceOrderD wmsOutsourceOrderD = new WmsOutsourceOrderD(); wmsOutsourceOrderD.fk_wms_outsource_order_id = wmsOutsourceOrderH.id; wmsOutsourceOrderD.matcode = detail.material_code; @@ -476,7 +477,7 @@ namespace Tnb.WarehouseMgr wmsOutsourceOrderD.create_id = WmsWareHouseConst.ErpUserId; wmsOutsourceOrderD.create_time = DateTime.Now; wmsOutsourceOrderD.actual_quantity = 0; - + wmsOutsourceOrderD.lineno = detail.lineno; var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); if (material != null) { @@ -797,24 +798,31 @@ namespace Tnb.WarehouseMgr } /// - /// 原材料调拨入库单 + /// 调拨出库单同步 /// [HttpPost, NonUnify, AllowAnonymous] - public async Task RawmatTransferInstock(RawMatTransferInstockInput input) + public async Task TransferOutstock(TransferOutstockInput input) { - LoggerErp2Mes.LogInformation($"【RawMatTransferInstock】ERP传入数据:{JsonConvert.SerializeObject(input)}"); + LoggerErp2Mes.LogInformation($"【TransferOutstock】ERP传入数据:{JsonConvert.SerializeObject(input)}"); var db = _repository.AsSugarClient(); if (string.IsNullOrEmpty(input.erp_pk)) { - _LoggerErp2Mes.LogWarning($"【RawMatTransferInstock】主表主键不能为空!"); + _LoggerErp2Mes.LogWarning($"【TransferOutstock】主表主键不能为空!"); return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!"); } + BasWarehouse warehouse_instock = await db.Queryable().Where(r => r.whcode == input.warehouse_instock).FirstAsync(); + if (warehouse_instock == null) + { + _LoggerErp2Mes.LogWarning($"【MaterialTransfer】无法查询到入库仓库{input.warehouse_instock}的档案记录!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到入库仓库{input.warehouse_instock}的档案记录!"); + } + int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count(); if (count_erp_line_pk > 0) { - _LoggerErp2Mes.LogWarning($@"【RawMatTransferInstock】子表主键不能为空!"); + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】子表主键不能为空!"); throw new AppFriendlyException($@"子表主键不能为空!", 500); } @@ -825,66 +833,76 @@ namespace Tnb.WarehouseMgr }).Distinct(); if (wmsPurchaseOrdersDistinct.Count() < input.details.Count) { - _LoggerErp2Mes.LogWarning($@"【RawMatTransferInstock】表体存在物料和批号重复的明细!"); + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表体存在物料和批号重复的明细!"); throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); } try { await db.Ado.BeginTranAsync(); - WmsRawmatTransferinstockH wmsRawmatTransferinstockH = new WmsRawmatTransferinstockH(); - string Code = await _billRuleService.GetBillNumber("RawMatTransferInstock"); - - wmsRawmatTransferinstockH.bill_code = Code; - wmsRawmatTransferinstockH.erp_bill_code = input.outsource_order; - wmsRawmatTransferinstockH.contact_person = input.contact_person; - wmsRawmatTransferinstockH.tel = input.tel; - wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code; - wmsRawmatTransferinstockH.erp_pk = input.erp_pk; - wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId; - wmsRawmatTransferinstockH.create_time = DateTime.Now; - - await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync(); - - - List wmsRawmatTransferinstockDs = new List(); - foreach (var detail in input.details) + string Code = ""; + switch (warehouse_instock.id) { - WmsRawmatTransferinstockD msRawmatTransferinstockD = new WmsRawmatTransferinstockD(); + case WmsWareHouseConst.WAREHOUSE_YCL_ID: + { + WmsRawmatTransferinstockH wmsRawmatTransferinstockH = new WmsRawmatTransferinstockH(); + Code = await _billRuleService.GetBillNumber("WmsRawMatTransferInstock"); - msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id; - msRawmatTransferinstockD.matcode = detail.material_code; - msRawmatTransferinstockD.unit = detail.unit_code; - msRawmatTransferinstockD.qty = detail.qty; - msRawmatTransferinstockD.stock_location = detail.stock_location; - msRawmatTransferinstockD.code_batch = detail.code_batch; - msRawmatTransferinstockD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss"); - msRawmatTransferinstockD.erp_line_pk = detail.erp_line_pk; - msRawmatTransferinstockD.create_id = WmsWareHouseConst.ErpUserId; - msRawmatTransferinstockD.create_time = DateTime.Now; - msRawmatTransferinstockD.actual_qty = 0; + wmsRawmatTransferinstockH.bill_code = Code; + wmsRawmatTransferinstockH.erp_bill_code = input.outsource_order; + wmsRawmatTransferinstockH.contact_person = input.contact_person; + wmsRawmatTransferinstockH.tel = input.tel; + wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code; + wmsRawmatTransferinstockH.erp_pk = input.erp_pk; + wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId; + wmsRawmatTransferinstockH.create_time = DateTime.Now; - var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); - if (material != null) - { - msRawmatTransferinstockD.matcode_id = material.id; - msRawmatTransferinstockD.matspecification = material.material_specification; - } + await db.Insertable(wmsRawmatTransferinstockH).ExecuteCommandAsync(); - wmsRawmatTransferinstockDs.Add(msRawmatTransferinstockD); + + List wmsRawmatTransferinstockDs = new List(); + foreach (var detail in input.details) + { + WmsRawmatTransferinstockD msRawmatTransferinstockD = new WmsRawmatTransferinstockD(); + + msRawmatTransferinstockD.bill_id = wmsRawmatTransferinstockH.id; + msRawmatTransferinstockD.matcode = detail.material_code; + msRawmatTransferinstockD.unit = detail.unit_code; + msRawmatTransferinstockD.qty = detail.qty; + msRawmatTransferinstockD.stock_location = detail.stock_location; + msRawmatTransferinstockD.code_batch = detail.code_batch; + msRawmatTransferinstockD.delivery_date = detail.delivery_date.Value.ToString("yyyy-MM-dd HH:mm:ss"); + msRawmatTransferinstockD.erp_line_pk = detail.erp_line_pk; + msRawmatTransferinstockD.create_id = WmsWareHouseConst.ErpUserId; + msRawmatTransferinstockD.create_time = DateTime.Now; + msRawmatTransferinstockD.actual_qty = 0; + msRawmatTransferinstockD.lineno = detail.lineno; + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + msRawmatTransferinstockD.matcode_id = material.id; + msRawmatTransferinstockD.matspecification = material.material_specification; + } + + wmsRawmatTransferinstockDs.Add(msRawmatTransferinstockD); + } + + await db.Insertable(wmsRawmatTransferinstockDs).ExecuteCommandAsync(); + + break; + } } - await db.Insertable(wmsRawmatTransferinstockDs).ExecuteCommandAsync(); await db.Ado.CommitTranAsync(); - LoggerErp2Mes.LogInformation($"【RawMatTransferInstock】成功生成单据:{Code}"); + LoggerErp2Mes.LogInformation($"【TransferOutstock】成功生成单据:{Code}"); return await ToApiResult(HttpStatusCode.OK, "成功"); } catch (Exception ex) { - LoggerErp2Mes.LogError($"【RawMatTransferInstock】{ex.Message}"); - LoggerErp2Mes.LogError($"【RawMatTransferInstock】{ex.StackTrace}"); + LoggerErp2Mes.LogError($"【TransferOutstock】{ex.Message}"); + LoggerErp2Mes.LogError($"【TransferOutstock】{ex.StackTrace}"); await db.Ado.RollbackTranAsync(); return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index fa462e07..fee6a9e7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -177,9 +177,9 @@ namespace Tnb.WarehouseMgr } var WmsTempCodes = await _db.Queryable().Where(it => input.details.Select(r => r.barcode).Contains(it.barcode)).ToListAsync(); - if (WmsTempCodes.DistinctBy(r => r.required_type).Count() == 1) + if (WmsTempCodes.DistinctBy(r => r.required_type).Count() != 1) { - throw new Exception($"不能绑定多个不同类型单据打印的条码!:{string.Join(',', WmsTempCodes.DistinctBy(r => r.required_type))}"); + throw new Exception($"不能绑定多个不同类型单据打印的条码!:{string.Join(',', WmsTempCodes.DistinctBy(r => r.required_type).Select(r => r.barcode).ToList())}"); } List WmsCarryCodes = new List(); @@ -323,7 +323,7 @@ namespace Tnb.WarehouseMgr } await db.Ado.CommitTranAsync(); - Logger.LogError($"【CarryBind】 {input.membercarry_code}成功绑定到{input.carry_code}"); + Logger.LogInformation($"【CarryBind】 {input.membercarry_code}成功绑定到{input.carry_code}"); } else { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs index 53b4c9ef..8d513b5d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInStockService.cs @@ -293,138 +293,153 @@ namespace Tnb.WarehouseMgr ArgumentNullException.ThrowIfNull(nameof(instock)); } - if (instock.sync_status != WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC) + // 采购入库 + if (instock.bill_type == WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID) { - //如果是自动单据,需要回更上层系统 - Dictionary pars = new() { { nameof(WmsInstockH.source_id), instock?.source_id ?? string.Empty } }; - dynamic callBackRes = await _prdInstockService.SyncInstock(pars); - instock!.sync_status = callBackRes == true ? WmsWareHouseConst.SYNC_STATUS__SYNCCOMPLETE : WmsWareHouseConst.SYNC_STATUS__SYNCFAILED; - _ = await _db.Updateable(instock).UpdateColumns(it => it.sync_status).ExecuteCommandAsync(); - } - List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); - if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) - { - instock.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; - } - else - { - //任务没有结束,更新状态为工作中 - instock.status = WmsWareHouseConst.BILLSTATUS_ON_ID; - } - _ = await _db.Updateable(instock).UpdateColumns(it => it.status).ExecuteCommandAsync(); - - - - WmsTempCode wmsTempCode = await _db.Queryable() - .LeftJoin((a,b)=>a.barcode==b.barcode) - .Where((a,b) => a.carry_code == input.wmsDistaskH.carry_code) - .Select((a,b)=>b) - .FirstAsync(); - - string purchaseDId = wmsTempCode?.require_id ?? ""; - WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x=>x.id==purchaseDId); - string purchaseHId = wmsPurchaseD?.bill_id ?? ""; - WmsPurchaseH wmsPurchaseH = await _db.Queryable().SingleAsync(x=>x.id==purchaseHId); - string wmsPurchaseOrderHId = wmsPurchaseH?.erp_bill_code ?? ""; - WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x=>x.id==wmsPurchaseOrderHId); - WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x=>x.fk_wms_purchase_order_id==wmsPurchaseOrderHId); - - List materialIds = allInstockDetails.Select(x=>x.material_id).Distinct().ToList(); - List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); - List unitDatas = await _db.Queryable() - .LeftJoin((x, y) => x.Id == y.DictionaryTypeId) - .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode)) - .Select((x,y)=>y) - .ToListAsync(); - - List tableIds = new List(); - tableIds.Add(_userManager.UserId); - tableIds.Add(WmsWareHouseConst.AdministratorOrgId); - tableIds.Add(instock.warehouse_id); - tableIds.AddRange(materialIds); - tableIds.Add(instock.supplier_id); - tableIds.AddRange(unitDatas.Select(x=>x.Id).ToList()); - - List erpExtendFields = await _db.Queryable().Where(x=>tableIds.Contains(x.table_id)).ToListAsync(); - string erpCreateId = erpExtendFields.Find(x=>x.table_id==instock.create_id)?.user_id ?? ""; - ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId)); - string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - - List> requestData = new List>(); - Dictionary erpRequestData = new Dictionary(); - erpRequestData.Add("approver",erpCreateId); - erpRequestData.Add("billmaker",erpCreateId); - erpRequestData.Add("bitinbill",false); - erpRequestData.Add("cgeneralhid",null); - erpRequestData.Add("corpoid",erpOrg.corpoid); - erpRequestData.Add("corpvid",erpOrg.corpvid); - erpRequestData.Add("creationtime",nowStr); - erpRequestData.Add("creator",erpCreateId); - erpRequestData.Add("ctrantypeid",wmsPurchaseH?.transaction_type ?? ""); - erpRequestData.Add("cvendorid",erpExtendFields.Find(x=>x.table_id==instock.supplier_id)?.supplier_id ?? ""); - erpRequestData.Add("cvendorvid",erpExtendFields.Find(x=>x.table_id==instock.supplier_id)?.supplier_vid ?? ""); - erpRequestData.Add("cwarehouseid",erpExtendFields.Find(x=>x.table_id==instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取 - erpRequestData.Add("dbilldate",nowStr); - erpRequestData.Add("dmakedate",nowStr); - erpRequestData.Add("fbillflag",2); - erpRequestData.Add("fbuysellflag",2); - erpRequestData.Add("ntotalnum",allInstockDetails.Sum(x=>x.qty)); - erpRequestData.Add("pk_org",erpOrg.pk_org); - erpRequestData.Add("pk_org_v",erpOrg.pk_org_v); - erpRequestData.Add("pk_group",erpOrg.pk_group); - erpRequestData.Add("vbillcode",null); - erpRequestData.Add("vtrantypecode",null); - - List> erpRequestDataDetails = new List>(); - foreach(WmsInstockD item in allInstockDetails) - { - erpRequestDataDetails.Add(new Dictionary() + if (instock.sync_status != WmsWareHouseConst.SYNC_STATUS_NONEEDSYNC) { - ["castunitid"] = erpExtendFields.Find(x=>x.table_id==(unitDatas.Find(x=>x.EnCode==item.unit_id)?.Id ?? ""))?.cunitid ?? "", - ["cbodytranstypecode"] = wmsPurchaseH?.transaction_type ?? "", - ["cbodywarehouseid"] = erpExtendFields.Find(x=>x.table_id==instock.warehouse_id)?.cotherwhid ?? "", - ["cgeneralbid"] = "", - ["cgeneralhid"] = "", - ["cmaterialoid"] = erpExtendFields.Find(x=>x.table_id==item.material_id)?.cmaterialoid ?? "", - ["cmaterialvid"] = erpExtendFields.Find(x=>x.table_id==item.material_id)?.cmaterialvid ?? "", - ["corpoid"] = erpOrg.corpoid, - ["corpvid"] = erpOrg.corpvid, - ["crowno"] = (allInstockDetails.FindIndex(x=>x.id==item.id)+1) * 10, - ["cunitid"] = erpExtendFields.Find(x=>x.table_id==(unitDatas.Find(x=>x.EnCode==item.unit_id)?.Id ?? ""))?.cunitid ?? "", - ["cvendorid"] = erpExtendFields.Find(x=>x.table_id==instock.supplier_id)?.supplier_id ?? "", - ["cvendorvid"] = erpExtendFields.Find(x=>x.table_id==instock.supplier_id)?.supplier_vid ?? "", - ["dbizdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), - ["nnum"] = item.qty, - ["nshouldnum"] = item.pr_qty, - ["pk_creqwareid"] = erpExtendFields.Find(x=>x.table_id==instock.warehouse_id)?.cotherwhid ?? "", - ["pk_group"] = erpOrg.pk_group, - ["pk_org"] = erpOrg.pk_org, - ["pk_org_v"] = erpOrg.pk_org_v, - ["pseudocolumn"] = (allInstockDetails.FindIndex(x=>x.id==item.id)+1) * 10, - ["vbatchcode"] = item.code_batch, - ["csourcebillhid"] = wmsPurchaseOrderH?.erp_pk ?? "", - ["csourcebillbid"] = wmsPurchaseOrderDs?.erp_line_pk ?? "", - ["vsourcebillcode"] = wmsPurchaseOrderH?.erp_bill_code ?? "", - ["lineno"] = wmsPurchaseOrderDs?.lineno ?? "", - ["vfree1"] = erpExtendFields.Find(x=>x.table_id==instock.supplier_id)?.supplier_id ?? "", - - }); + //如果是自动单据,需要回更上层系统 + Dictionary pars = new() { { nameof(WmsInstockH.source_id), instock?.source_id ?? string.Empty } }; + dynamic callBackRes = await _prdInstockService.SyncInstock(pars); + instock!.sync_status = callBackRes == true ? WmsWareHouseConst.SYNC_STATUS__SYNCCOMPLETE : WmsWareHouseConst.SYNC_STATUS__SYNCFAILED; + _ = await _db.Updateable(instock).UpdateColumns(it => it.sync_status).ExecuteCommandAsync(); + } + List allInstockDetails = await _db.Queryable().Where(it => it.bill_id == input.requireId).ToListAsync(); + if (allInstockDetails.All(x => x.line_status == WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)) + { + instock.status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID; + } + else + { + //任务没有结束,更新状态为工作中 + instock.status = WmsWareHouseConst.BILLSTATUS_ON_ID; + } + _ = await _db.Updateable(instock).UpdateColumns(it => it.status).ExecuteCommandAsync(); + + + + WmsTempCode wmsTempCode = await _db.Queryable() + .LeftJoin((a, b) => a.barcode == b.barcode) + .Where((a, b) => a.carry_id == input.wmsDistaskH.carry_id) + .Select((a, b) => b) + .FirstAsync(); + + string purchaseDId = wmsTempCode?.require_id ?? ""; + WmsPurchaseD wmsPurchaseD = await _db.Queryable().SingleAsync(x => x.id == purchaseDId); + string purchaseHId = wmsPurchaseD?.bill_id ?? ""; + WmsPurchaseH wmsPurchaseH = await _db.Queryable().SingleAsync(x => x.id == purchaseHId); + string wmsPurchaseOrderHId = wmsPurchaseH?.erp_bill_code ?? ""; + WmsPurchaseOrderH wmsPurchaseOrderH = await _db.Queryable().SingleAsync(x => x.id == wmsPurchaseOrderHId); + WmsPurchaseOrderD wmsPurchaseOrderDs = await _db.Queryable().FirstAsync(x => x.fk_wms_purchase_order_id == wmsPurchaseOrderHId); + + List materialIds = allInstockDetails.Select(x => x.material_id).Distinct().ToList(); + List unitCodes = allInstockDetails.Select(x => x.unit_id).Distinct().ToList(); + List unitDatas = await _db.Queryable() + .LeftJoin((x, y) => x.Id == y.DictionaryTypeId) + .Where((x, y) => x.EnCode == DictConst.MeasurementUnit && unitCodes.Contains(y.EnCode)) + .Select((x, y) => y) + .ToListAsync(); + + List tableIds = new List(); + tableIds.Add(_userManager.UserId); + tableIds.Add(WmsWareHouseConst.AdministratorOrgId); + tableIds.Add(instock.warehouse_id); + tableIds.AddRange(materialIds); + tableIds.Add(instock.supplier_id); + tableIds.AddRange(unitDatas.Select(x => x.Id).ToList()); + + List erpExtendFields = await _db.Queryable().Where(x => tableIds.Contains(x.table_id)).ToListAsync(); + string erpCreateId = erpExtendFields.Find(x => x.table_id == instock.create_id)?.user_id ?? ""; + ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (WmsWareHouseConst.AdministratorOrgId)); + string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); + + List> requestData = new List>(); + Dictionary erpRequestData = new Dictionary(); + erpRequestData.Add("approver", erpCreateId); + erpRequestData.Add("billmaker", erpCreateId); + erpRequestData.Add("bitinbill", false); + erpRequestData.Add("cgeneralhid", null); + erpRequestData.Add("corpoid", erpOrg.corpoid); + erpRequestData.Add("corpvid", erpOrg.corpvid); + erpRequestData.Add("creationtime", nowStr); + erpRequestData.Add("creator", erpCreateId); + erpRequestData.Add("ctrantypeid", wmsPurchaseH?.transaction_type ?? ""); + erpRequestData.Add("cvendorid", erpExtendFields.Find(x => x.table_id == instock.supplier_id)?.supplier_id ?? ""); + erpRequestData.Add("cvendorvid", erpExtendFields.Find(x => x.table_id == instock.supplier_id)?.supplier_vid ?? ""); + erpRequestData.Add("cwarehouseid", erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "");//类型视图里取 + erpRequestData.Add("dbilldate", nowStr); + erpRequestData.Add("dmakedate", nowStr); + erpRequestData.Add("fbillflag", 2); + erpRequestData.Add("fbuysellflag", 2); + erpRequestData.Add("ntotalnum", allInstockDetails.Sum(x => x.qty)); + erpRequestData.Add("pk_org", erpOrg.pk_org); + erpRequestData.Add("pk_org_v", erpOrg.pk_org_v); + erpRequestData.Add("pk_group", erpOrg.pk_group); + erpRequestData.Add("vbillcode", null); + erpRequestData.Add("vtrantypecode", null); + + List> erpRequestDataDetails = new List>(); + foreach (WmsInstockD item in allInstockDetails) + { + erpRequestDataDetails.Add(new Dictionary() + { + ["castunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", + ["cbodytranstypecode"] = wmsPurchaseH?.transaction_type ?? "", + ["cbodywarehouseid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", + ["cgeneralbid"] = "", + ["cgeneralhid"] = "", + ["cmaterialoid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialoid ?? "", + ["cmaterialvid"] = erpExtendFields.Find(x => x.table_id == item.material_id)?.cmaterialvid ?? "", + ["corpoid"] = erpOrg.corpoid, + ["corpvid"] = erpOrg.corpvid, + ["crowno"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, + ["cunitid"] = erpExtendFields.Find(x => x.table_id == (unitDatas.Find(x => x.EnCode == item.unit_id)?.Id ?? ""))?.cunitid ?? "", + ["cvendorid"] = erpExtendFields.Find(x => x.table_id == instock.supplier_id)?.supplier_id ?? "", + ["cvendorvid"] = erpExtendFields.Find(x => x.table_id == instock.supplier_id)?.supplier_vid ?? "", + ["dbizdate"] = instock.create_time.ToString("yyyy-MM-dd HH:mm:ss"), + ["nnum"] = item.qty, + ["nshouldnum"] = item.pr_qty, + ["pk_creqwareid"] = erpExtendFields.Find(x => x.table_id == instock.warehouse_id)?.cotherwhid ?? "", + ["pk_group"] = erpOrg.pk_group, + ["pk_org"] = erpOrg.pk_org, + ["pk_org_v"] = erpOrg.pk_org_v, + ["pseudocolumn"] = (allInstockDetails.FindIndex(x => x.id == item.id) + 1) * 10, + ["vbatchcode"] = item.code_batch, + ["csourcebillhid"] = wmsPurchaseOrderH?.erp_pk ?? "", + ["csourcebillbid"] = wmsPurchaseOrderDs?.erp_line_pk ?? "", + ["vsourcebillcode"] = wmsPurchaseOrderH?.erp_bill_code ?? "", + ["lineno"] = wmsPurchaseOrderDs?.lineno ?? "", + ["vfree1"] = erpExtendFields.Find(x => x.table_id == instock.supplier_id)?.supplier_id ?? "", + + }); + } + erpRequestData.Add("PurchaseInBodyVODtl", erpRequestDataDetails); + requestData.Add(erpRequestData); + + ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); + thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); + thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; + thirdWebapiRecord.name = "采购入库"; + thirdWebapiRecord.method = "POST"; + thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN + "uapws/rest/purchaseIn/save"; + thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); + thirdWebapiRecord.create_time = DateTime.Now; + thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? ""); + await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); } - erpRequestData.Add("PurchaseInBodyVODtl",erpRequestDataDetails); - requestData.Add(erpRequestData); + // 委外入库 + else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID) + { + + } + // 调拨入库 + else if (instock.bill_type == WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID) + { + + } + - ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); - thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); - thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; - thirdWebapiRecord.name = "采购入库"; - thirdWebapiRecord.method = "POST"; - thirdWebapiRecord.url = WmsWareHouseConst.BIP_DOMAIN+"uapws/rest/purchaseIn/save"; - thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); - thirdWebapiRecord.create_time = DateTime.Now; - thirdWebapiRecord.remark = "采购收货单号:" + (wmsPurchaseH?.bill_code ?? ""); - await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); - } await _db.Ado.CommitTranAsync(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs index 0cd90e38..dd690e25 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs @@ -392,7 +392,28 @@ namespace Tnb.WarehouseMgr var whId = input.data.ContainsKey(nameof(WmsPurchaseH.warehouse_id)) ? input.data[nameof(WmsPurchaseH.warehouse_id)] : "1"; var billCode = input.data.ContainsKey(nameof(WmsPurchaseH.bill_code)) ? input.data[nameof(WmsPurchaseH.bill_code)] : null; - + string bill_type = ""; + string required_type = (await _dbScanInStockByRedis.Queryable().FirstAsync(it => it.barcode == input.data["物料条码"])).required_type; + switch (required_type) + { + case WmsWareHouseConst.BILLTYPE_PURCHASE_ID: + { + bill_type = WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID; + break; + } + case WmsWareHouseConst.BILLTYPE_OUTSOURCE_ID: + { + bill_type = WmsWareHouseConst.BILLTYPE_OUTSOURCEINSTOCK_ID; + break; + } + case WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID: + { + bill_type = WmsWareHouseConst.BILLTYPE_RAWMATTRANSFERINSTOCK_ID; + break; + } + } + + WmsInstockH instock = new() { id = SnowflakeIdHelper.NextId(), @@ -401,7 +422,7 @@ namespace Tnb.WarehouseMgr carry_id = carry?.id ?? string.Empty, location_id = loc?.id ?? string.Empty, bill_code = _billRullService.GetBillNumber(WmsWareHouseConst.WMS_INSTOCK_ENCODE).GetAwaiter().GetResult(), - bill_type = WmsWareHouseConst.BILLTYPE_MATERIALINSTOCK_ID, + bill_type = bill_type, biz_type = WmsWareHouseConst.BIZTYPE_WMSINSTOCK_ID, bill_date = DateTime.Today, warehouse_id = whId?.ToString() ?? "1",