From 454b39d8f9d188a4f65448286a4b472a8bf7c9b0 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Thu, 15 Aug 2024 16:21:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0PC=E8=BD=BD=E5=85=B7=E7=89=A9?= =?UTF-8?q?=E6=96=99=E7=BB=91=E5=AE=9A=E8=AE=B0=E5=BD=95=E8=A1=A8=EF=BC=88?= =?UTF-8?q?=E8=BD=BD=E5=85=B7=E7=BB=91=E5=AE=9A=EF=BC=89=E3=80=81erp?= =?UTF-8?q?=E8=B0=83=E6=8B=A8=E8=AE=A2=E5=8D=95=E3=80=81=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Dto/ErpInputs/TransferOrderInput.cs | 80 +++++++++++++ .../Entity/WmsTransferOrderD.cs | 97 +++++++++++++++ .../Entity/WmsTransferOrderH.cs | 82 +++++++++++++ .../Tnb.WarehouseMgr/ErpToWmsService.cs | 110 ++++++++++++++++++ .../Tnb.WarehouseMgr/WareHouseService.cs | 2 +- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 60 +++++++--- .../Tnb.WarehouseMgr/WmsStockReportService.cs | 21 ++-- .../VisualDevModelDataService.cs | 2 +- 8 files changed, 431 insertions(+), 23 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs new file mode 100644 index 00000000..682b0448 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs +{ + public class TransferOrderInput + { + /// + /// 单号 + /// + public string? transfer_order { get; set; } + + /// + /// 部门编码 + /// + public string? dept_code { get; set; } + + /// + /// 业务员编码 + /// + public string? biller { get; set; } + + /// + /// 入库组织编号 + /// + public string? instockorg_code { get; set; } + + /// + /// 供货日期 + /// + public DateTime? ship_date { get; set; } + + /// + /// 主表pk + /// + public string? erp_pk { get; set; } + + public List details { get; set; } + } + public class TransferOrderInputDetail + { + /// + /// 行号 + /// + public string? lineno { get; set; } + + /// + /// 物品代码 + /// + public string? material_code { get; set; } + + /// + /// 单位代码 + /// + public string? unit_code { get; set; } + + /// + /// 采购数量 + /// + public decimal? qty { get; set; } + + /// + /// 批次 + /// + public string? code_batch { get; set; } + + /// + /// 交货日期 + /// + public DateTime? delivery_date { get; set; } + + /// + /// 子表主键 + /// + public string erp_line_pk { get; set; } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs new file mode 100644 index 00000000..958f5d16 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs @@ -0,0 +1,97 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 调拨订单(子表) +/// +[SugarTable("wms_transfer_order_d")] +public partial class WmsTransferOrderD : BaseEntity +{ + public WmsTransferOrderD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 主表id + /// + public string? bill_id { 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; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 物料id + /// + public string? material_id { get; set; } + + /// + /// 物料编码 + /// + public string? material_code { get; set; } + + /// + /// 物料名称 + /// + public string? material_name { get; set; } + + /// + /// 规格型号 + /// + public string? material_specification { get; set; } + + /// + /// 单位 + /// + public string? unit { get; set; } + + /// + /// 批号 + /// + public string? batchno { get; set; } + + /// + /// 数量 + /// + public decimal? qty { 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/WmsTransferOrderH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs new file mode 100644 index 00000000..bdfc9d82 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs @@ -0,0 +1,82 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Entity; + +/// +/// 调拨订单 +/// +[SugarTable("wms_transfer_order_h")] +public partial class WmsTransferOrderH : BaseEntity +{ + public WmsTransferOrderH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { 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 string? org_id { get; set; } + + /// + /// 单号 + /// + public string? bill_code { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 部门编码 + /// + public string? dept_code { get; set; } + + /// + /// 业务员编码 + /// + public string? biller { get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 7e49f8ff..31f21d2d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -946,6 +946,116 @@ namespace Tnb.WarehouseMgr } } + /// + /// 调拨订单 + /// + [HttpPost, NonUnify, AllowAnonymous] + public async Task TransferOrder(TransferOrderInput input) + { + LoggerErp2Mes.LogInformation($"【TransferOrder】ERP传入数据:{JsonConvert.SerializeObject(input)}"); + var db = _repository.AsSugarClient(); + + if (string.IsNullOrEmpty(input.erp_pk)) + { + _LoggerErp2Mes.LogWarning($"【TransferOrder】主表主键不能为空!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"主表主键不能为空!"); + } + + int count_erp_line_pk = input.details.Where(r => string.IsNullOrEmpty(r.erp_line_pk)).Count(); + if (count_erp_line_pk > 0) + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】子表主键不能为空!"); + throw new AppFriendlyException($@"子表主键不能为空!", 500); + } + + var wmsTransferOrdersDistinct = input.details.Select(r => new + { + material_id = r.material_code, + code_batch = r.code_batch, + }).Distinct(); + if (wmsTransferOrdersDistinct.Count() < input.details.Count) + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】表体存在物料和批号重复的明细!"); + throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); + } + + try + { + await db.Ado.BeginTranAsync(); + WmsTransferOrderH wmsTransferOrderH = new WmsTransferOrderH(); + string Code = await _billRuleService.GetBillNumber("WmsTransferOrder"); + + wmsTransferOrderH.bill_code = Code; + wmsTransferOrderH.erp_bill_code = input.transfer_order; + wmsTransferOrderH.biller = input.biller; + wmsTransferOrderH.dept_code = input.dept_code; + wmsTransferOrderH.erp_pk = input.erp_pk; + wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId; + wmsTransferOrderH.create_time = DateTime.Now; + wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId; + await db.Insertable(wmsTransferOrderH).ExecuteCommandAsync(); + + + List wmsTransferOrderDs = new List(); + foreach (var detail in input.details) + { + WmsTransferOrderD wmsTransferOrderD = new WmsTransferOrderD(); + + wmsTransferOrderD.bill_id = wmsTransferOrderD.id; + wmsTransferOrderD.unit = detail.unit_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) + { + wmsTransferOrderD.unit = erpExtendField.EnCode; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOrder】表体明细中单位{detail.unit_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); + } + + + wmsTransferOrderD.qty = detail.qty; + wmsTransferOrderD.batchno = detail.code_batch; + wmsTransferOrderD.erp_line_pk = detail.erp_line_pk; + wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId; + wmsTransferOrderD.create_time = DateTime.Now; + wmsTransferOrderD.lineno = detail.lineno; + + var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); + if (material != null) + { + wmsTransferOrderD.material_id = material.id; + wmsTransferOrderD.material_code = material.code; + wmsTransferOrderD.material_name = material.name; + wmsTransferOrderD.material_specification = material.material_specification; + } + + wmsTransferOrderDs.Add(wmsTransferOrderD); + } + + await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync(); + + await db.Ado.CommitTranAsync(); + + LoggerErp2Mes.LogInformation($"【TransferOrder】成功生成单据:{Code}"); + return await ToApiResult(HttpStatusCode.OK, "成功"); + } + catch (Exception ex) + { + LoggerErp2Mes.LogError($"【TransferOrder】{ex.Message}"); + LoggerErp2Mes.LogError($"【TransferOrder】{ex.StackTrace}"); + await db.Ado.RollbackTranAsync(); + return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message); + } + finally + { + + } + } + + + 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 ae11a9a0..c848cc61 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -2339,7 +2339,7 @@ namespace Tnb.WarehouseMgr } // 三四号电梯出货 暂存仓到三楼电梯以及一楼电梯出库任务发type5 - if ((doubleCarryRunElevators.Contains(dis.device_id) && dis.endlocation_code.Contains("DT")) || doubleCarryRunElevatorsF1Code.Contains(dis.startlocation_code)) + if ((dis.startlocation_code.Contains("CPOutstockCache") && dis.endlocation_code.Contains("DT")) || doubleCarryRunElevatorsF1Code.Contains(dis.startlocation_code)) { reqBody.type = (int)EnumTaskChainType.电梯载两托货; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 018755a3..2d74bd06 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -308,7 +308,6 @@ namespace Tnb.WarehouseMgr db = dbConn; try { - WmsCarryH? carry = await db.Queryable().SingleAsync(it => it.carry_code == input.carrycode); if (carry == null) { @@ -316,6 +315,18 @@ namespace Tnb.WarehouseMgr } List WmsCarryCodes = new List(); + + 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 = carry.location_id; + wmsCarrybindH.location_code = carry.location_code; + + List wmsCarrybindCodes = new List(); + foreach (var detail in input.details) { var WmsCarryCode = detail.Adapt(); @@ -325,10 +336,18 @@ 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(); + } if (rows == 0) { throw new Exception($"物料列表为空,不能提交绑定,可能的原因;1.需要检查扫码设置(新PDA) 2.未扫到有效的二维码 详细信息:接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!"); @@ -378,18 +397,33 @@ namespace Tnb.WarehouseMgr if (carry != null && subCarry != null) { // 插入子载具绑定记录 - //VisualDevModelDataCrInput visualDevModelCrInput = new() { data = new Dictionary() }; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_id)] = input.carry_id; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.carry_code)] = input.carry_code; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_id)] = input.membercarry_id; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.membercarry_code)] = input.membercarry_code; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.type)] = 0; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.carrystd_id)] = carry.carrystd_id; - ////visualDevModelCrInput.data[nameof(WmsCarrybindH.create_id)] = input.create_id; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.create_time)] = DateTime.Now; - //visualDevModelCrInput.data[nameof(WmsCarrybindH.loc)] = 1; - //VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleConsts.MODULE_WMSCARRYBIND_ID, true); - //await _runService.Create(templateEntity, visualDevModelCrInput); + + WmsCarrybindH wmsCarrybindH = new WmsCarrybindH(); + wmsCarrybindH.carry_id = carry.id; + wmsCarrybindH.carry_code = carry.carry_code; + wmsCarrybindH.membercarry_id = input.membercarry_id; + wmsCarrybindH.membercarry_code = input.membercarry_code; + wmsCarrybindH.create_id = input.create_id; + wmsCarrybindH.create_time = DateTime.Now; + wmsCarrybindH.org_id = WmsWareHouseConst.AdministratorOrgId; + wmsCarrybindH.location_id = carry.location_id; + wmsCarrybindH.location_code = carry.location_code; + + List wmsCarrybindCodes = new List(); + + List WmsCarryCodes = db.Queryable().Where(r => r.carry_id == input.membercarry_id).ToList(); + foreach (var detail in WmsCarryCodes) + { + var wmsCarrybindCode = detail.Adapt(); + wmsCarrybindCode.membercarry_id = input.membercarry_id; + wmsCarrybindCode.membercarry_code = input.membercarry_code; + wmsCarrybindCode.carrybind_id = wmsCarrybindH.id; + wmsCarrybindCode.org_id = WmsWareHouseConst.AdministratorOrgId; + wmsCarrybindCodes.Add(wmsCarrybindCode); + } + await db.Insertable(wmsCarrybindH).ExecuteCommandAsync(); + await db.Insertable(wmsCarrybindCodes).ExecuteCommandAsync(); + WmsCarryD wmsCarryD = new() { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs index 7016f16f..540761f6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsStockReportService.cs @@ -46,7 +46,7 @@ namespace Tnb.WarehouseMgr material_specification = JObject.Parse(input.queryJson).Value(nameof(WmsCarryCode.material_specification)); } - IEnumerable result; + List result = new List(); if (string.IsNullOrEmpty(supplier_code)) { List items = await _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id) @@ -76,12 +76,14 @@ namespace Tnb.WarehouseMgr List carryCodes = await _db.Queryable().ToListAsync(); var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch }, x => x); - result = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch }).Select(itGroup => + var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch }); + foreach (var itGroup in group) { _ = storeMap.TryGetValue(itGroup.Key, out WmsStockReportH? stockReport); List curCarryCodes = carryCodes.FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id && x.code_batch == itGroup.Key.code_batch); + stockReport.codeqty = 0; curCarryCodes.ForEach(x => { stockReport.codeqty += x.codeqty; @@ -102,8 +104,9 @@ namespace Tnb.WarehouseMgr // stockReport.codeqty += x.codeqty; //}); - return stockReport; - }); + //return stockReport; + result.Add(stockReport); + } } else { @@ -134,19 +137,21 @@ namespace Tnb.WarehouseMgr List carryCodes = await _db.Queryable().ToListAsync(); var storeMap = items.DistinctBy(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }).ToDictionary(x => new { x.warehouse_id, x.material_id, x.code_batch, x.supplier_code }, x => x); - - result = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code }).Select(itGroup => + + var group = items.GroupBy(g => new { g.warehouse_id, g.material_id, g.code_batch, g.supplier_code }); + foreach (var itGroup in group) { _ = storeMap.TryGetValue(itGroup.Key, out WmsStockReportH? stockReport); List curCarryCodes = carryCodes.Adapt>().FindAll(x => x.warehouse_id == itGroup.Key.warehouse_id && x.material_id == itGroup.Key.material_id && x.code_batch == itGroup.Key.code_batch && x.supplier_code == itGroup.Key.supplier_code); + stockReport.codeqty = 0; curCarryCodes.ForEach(x => { stockReport.codeqty += x.codeqty; }); - return stockReport; - }); + result.Add(stockReport); + } } diff --git a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs index 180ec555..0a48095a 100644 --- a/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs +++ b/visualdev/Tnb.VisualDev/VisualDevModelDataService.cs @@ -500,7 +500,7 @@ namespace JNPF.VisualDev foreach (JObject row in respBodyList) { Dictionary keyValuePairs = new Dictionary(); - foreach (JProperty jProperty in firstRow.Properties()) + foreach (JProperty jProperty in row.Properties()) { keyValuePairs.Add(jProperty.Name, jProperty.Value); }