From fd150f18049ce057f1c04ea788987adaef4e2b12 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Fri, 23 Aug 2024 16:04:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E6=A2=AF=E6=97=A5=E5=BF=97=E4=BC=98?= =?UTF-8?q?=E5=8C=96erp=E5=90=8C=E6=AD=A5=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 | 20 +++- .../Dto/ErpInputs/TransferOrderInput.cs | 11 ++- .../Entity/WmsRawmatTransferoutstockD.cs | 5 + .../Entity/WmsRawmatTransferoutstockH.cs | 9 +- .../Entity/WmsTransferOrderD.cs | 5 + .../Entity/WmsTransferOrderH.cs | 10 ++ .../Entity/WmsTransferOutstockD.cs | 5 + .../Entity/WmsTransferOutstockH.cs | 9 +- .../Tnb.WarehouseMgr/ErpToWmsService.cs | 98 +++++++++++++------ .../Tnb.WarehouseMgr/WareHouseService.cs | 79 ++++++++------- .../WmsPDAExceptionCompleteService.cs | 4 + 11 files changed, 173 insertions(+), 82 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index fa133181..05997d4e 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -473,7 +473,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA input.data.Add("material_id", WmsCarryCode.material_id); input.data.Add("物料条码", WmsCarryCode.barcode); input.data.Add("id", null); - _wmsPDAScanInStock.ScanInStockByRedis(input).Wait(); + _wmsPDAScanInStock.ScanInStockByRedis(input, db_Scantimer).Wait(); } else { @@ -484,10 +484,19 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } } } + catch (ObjectDisposedException ex) + { + LoggerBGWCarrySupplement.LogError($"【ScanInStock】 数据库连接异常:{ex.Message}"); + LoggerBGWCarrySupplement.LogError($"【ScanInStock】 数据库连接异常:{ex.StackTrace}"); + if (ex.Source == "Npgsql") + db_Scantimer = _repository.AsSugarClient().CopyNew(); + } catch (Exception ex) { Console.WriteLine("【ScanInStock】" + ex.Message); LoggerBGWCarrySupplement.LogError($"【ScanInStock】 八工位扫到码发送入库请求发生异常:{ex}"); + // 数据库连接断开时会报错 + try { await db_Scantimer.Ado.RollbackTranAsync(); } catch { }; } finally { @@ -1949,8 +1958,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsDistaskHs[0].device_id = e.device_id; wmsDistaskHs[1].device_id = e.device_id; } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯"); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); } // 一托货 else if (group.Count() == 1) @@ -1964,8 +1974,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { wmsDistaskHs[0].device_id = e.device_id; } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯"); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); } } else @@ -1980,8 +1991,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { wmsDistaskHs[0].device_id = e.device_id; } - LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯"); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}"); await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + LoggerElevatorTask.Information($"【GenTaskExecute】呼叫电梯 {e.elevator_code}执行完成"); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs index cead5fcd..f44f7d34 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/ErpInputs/TransferOrderInput.cs @@ -24,11 +24,6 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// public string? biller { get; set; } - /// - /// 出库仓库 - /// - public string? warehouse_outstock { get; set; } - /// /// 入库组织编号 /// @@ -88,5 +83,11 @@ namespace Tnb.WarehouseMgr.Entities.Dto.ErpInputs /// 子表主键 /// public string erp_line_pk { get; set; } + + /// + /// 出库仓库 + /// + public string? warehouse_outstock { get; set; } + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs index e7afc73e..14141502 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockD.cs @@ -99,4 +99,9 @@ public partial class WmsRawmatTransferoutstockD : BaseEntity /// public string? lineno { get; set; } + /// + /// erp仓库类型 + /// + public string erp_wh_type { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs index 3dfdcd42..1b9fab5a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsRawmatTransferoutstockH.cs @@ -125,8 +125,13 @@ public partial class WmsRawmatTransferoutstockH : BaseEntity public string? transfer_order_id { get; set; } /// - /// erp仓库类型 + /// 入库组织id /// - public string erp_wh_type { get; set; } + public string? instockorg_id { get; set; } + + /// + /// 入库组织编号 + /// + public string? instockorg_code { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs index 958f5d16..ffb4892c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderD.cs @@ -94,4 +94,9 @@ public partial class WmsTransferOrderD : BaseEntity /// public string? lineno { get; set; } + + /// + /// erp仓库类型 + /// + public string erp_wh_type { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs index df4c9d95..7a208c38 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOrderH.cs @@ -88,4 +88,14 @@ public partial class WmsTransferOrderH : BaseEntity /// erp仓库类型 /// public string erp_wh_type { get; set; } + + /// + /// 入库组织id + /// + public string? instockorg_id { get; set; } + + /// + /// 入库组织编号 + /// + public string? instockorg_code { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs index 55dd1028..aa3d6881 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockD.cs @@ -144,4 +144,9 @@ public partial class WmsTransferOutstockD : BaseEntity /// public string? lineno { get; set; } + /// + /// erp仓库类型 + /// + public string erp_wh_type { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs index dc4195c8..0fd1eeb2 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsTransferOutstockH.cs @@ -110,7 +110,12 @@ public partial class WmsTransferOutstockH : BaseEntity public string? transfer_order_id { get; set; } /// - /// erp仓库类型 + /// 入库组织id /// - public string erp_wh_type { get; set; } + public string? instockorg_id { get; set; } + + /// + /// 入库组织编号 + /// + public string? instockorg_code { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index 593e1c6a..16e836bb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Linq; + using System.Text; using Aop.Api.Domain; using JNPF.Common.Enums; @@ -1088,7 +1087,18 @@ namespace Tnb.WarehouseMgr wmsRawmatTransferinstockH.erp_bill_code = input.transfer_order; wmsRawmatTransferinstockH.contact_person = input.contact_person; wmsRawmatTransferinstockH.tel = input.tel; - wmsRawmatTransferinstockH.outstockorg_code = input.outstockorg_code; + + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_code).FirstAsync(); + if (org_erpExtendField != null) + { + wmsRawmatTransferinstockH.outstockorg_id = org_erpExtendField.pk_org_v; + wmsRawmatTransferinstockH.outstockorg_code = org_erpExtendField.pk_org; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500); + } wmsRawmatTransferinstockH.erp_pk = input.erp_pk; wmsRawmatTransferinstockH.create_id = WmsWareHouseConst.ErpUserId; wmsRawmatTransferinstockH.create_time = DateTime.Now; @@ -1146,7 +1156,17 @@ namespace Tnb.WarehouseMgr wmsTransferInstockH.bill_code = Code; wmsTransferInstockH.erp_bill_code = input.transfer_order; - wmsTransferInstockH.outstockorg_code = input.outstockorg_code; + var org_erpExtendField = await db.Queryable().Where(a => a.pk_org == input.outstockorg_code).FirstAsync(); + if (org_erpExtendField != null) + { + wmsTransferInstockH.outstockorg_id = org_erpExtendField.pk_org_v; + wmsTransferInstockH.outstockorg_code = org_erpExtendField.pk_org; + } + else + { + _LoggerErp2Mes.LogWarning($@"【TransferOutstock】表头明细中组织{input.outstockorg_code}在wms系统中未找到!"); + throw new AppFriendlyException($@"表头明细中组织{input.outstockorg_code}在wms系统中未找到!", 500); + } wmsTransferInstockH.incoming_ware = warehouse_instock.id; wmsTransferInstockH.org_id = WmsWareHouseConst.AdministratorOrgId; wmsTransferInstockH.erp_pk = input.erp_pk; @@ -1255,22 +1275,7 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"表体存在物料和批号重复的明细!", 500); } - WmsErpWarehouserelaH wmsErpWarehouserelaH = await db.Queryable().Where(r => r.erp_warehousecode == input.warehouse_outstock).FirstAsync(); - if (wmsErpWarehouserelaH == null) - { - _LoggerErp2Mes.LogWarning($@"【TransferOrder】不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!"); - throw new AppFriendlyException($@"不存在erp仓库类型{input.warehouse_outstock}对应wms系统的映射关系!", 500); - } - - string warehouse_outstock_code = wmsErpWarehouserelaH.wms_warehousecode; - - BasWarehouse warehouse_outstock = await db.Queryable().Where(r => r.whcode == warehouse_outstock_code).FirstAsync(); - if (warehouse_outstock == null) - { - _LoggerErp2Mes.LogWarning($"【TransferOrder】无法查询到出库仓库{warehouse_outstock_code}的档案记录!"); - return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{warehouse_outstock_code}的档案记录!"); - } - + await db.Ado.BeginTranAsync(); WmsTransferOrderH wmsTransferOrderH = new WmsTransferOrderH(); string Code = await _billRuleService.GetBillNumber("WmsTransferOrder"); @@ -1283,7 +1288,6 @@ namespace Tnb.WarehouseMgr wmsTransferOrderH.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOrderH.create_time = DateTime.Now; wmsTransferOrderH.org_id = WmsWareHouseConst.AdministratorOrgId; - wmsTransferOrderH.erp_wh_type = input.warehouse_outstock; var _erpExtendField = await db.Queryable().InnerJoin((a, b) => a.table_id == b.Id) .Where((a, b) => a.transaction_type_id == input.transaction_type).Select((a, b) => b).FirstAsync(); @@ -1322,6 +1326,7 @@ namespace Tnb.WarehouseMgr wmsTransferOrderD.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOrderD.create_time = DateTime.Now; wmsTransferOrderD.lineno = detail.lineno; + wmsTransferOrderD.erp_wh_type = detail.warehouse_outstock; var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); if (material != null) @@ -1337,7 +1342,37 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsTransferOrderDs).ExecuteCommandAsync(); - if (warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_YCL_ID) + Dictionary dic_WmsErpWarehouseidrelaH = await db.Queryable() + .LeftJoin((a, b) => a.wms_warehousecode == b.whcode) + .Select((a, b) => new + { + a.erp_warehousecode, + b.id, + b.whcode + }) + .ToDictionaryAsync(k => k.erp_warehousecode, v => v.id); + foreach (var key in dic_WmsErpWarehouseidrelaH.Keys) + { + if (dic_WmsErpWarehouseidrelaH[key] == null) + { + _LoggerErp2Mes.LogWarning($"【TransferOrder】无法查询到出库仓库{key}的档案记录!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"无法查询到出库仓库{key}的档案记录!"); + } + } + Dictionary dic_WmsErpWarehousecoderelaH = await db.Queryable() + .LeftJoin((a, b) => a.wms_warehousecode == b.whcode) + .Select((a, b) => new + { + a.erp_warehousecode, + b.id, + b.whcode + }) + .ToDictionaryAsync(k => k.erp_warehousecode, v => v.whcode); + + List details_WAREHOUSE_YCL_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList(); + List details_WAREHOUSE_CP_ID = input.details.Where(r => dic_WmsErpWarehouseidrelaH[r.warehouse_outstock].ToString() == WmsWareHouseConst.WAREHOUSE_YCL_ID).ToList(); + + if (details_WAREHOUSE_YCL_ID.Count > 0) { WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = new WmsRawmatTransferoutstockH(); string code = await _billRuleService.GetBillNumber("RawmatTransferoutstock"); @@ -1346,15 +1381,14 @@ namespace Tnb.WarehouseMgr wmsRawmatTransferoutstockH.create_time = DateTime.Now; wmsRawmatTransferoutstockH.biller = input.biller; wmsRawmatTransferoutstockH.dept_code = input.dept_code; - wmsRawmatTransferoutstockH.warehouse_code = warehouse_outstock.whcode; + wmsRawmatTransferoutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_YCL_ID[0].warehouse_outstock].ToString(); wmsRawmatTransferoutstockH.erp_pk = input.erp_pk; - wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.bill_code; + wmsRawmatTransferoutstockH.transfer_order_id = wmsTransferOrderH.id; wmsRawmatTransferoutstockH.issuance_status = "0"; wmsRawmatTransferoutstockH.transaction_type = _erpExtendField.EnCode; wmsRawmatTransferoutstockH.org_id = WmsWareHouseConst.AdministratorOrgId; - wmsRawmatTransferoutstockH.erp_wh_type = input.warehouse_outstock; List wmsRawmatTransferoutstockDs = new List (); - foreach (var detail in input.details) + foreach (var detail in details_WAREHOUSE_YCL_ID) { WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = new WmsRawmatTransferoutstockD(); wmsRawmatTransferoutstockD.bill_id = wmsRawmatTransferoutstockH.id; @@ -1370,6 +1404,7 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($@"表体明细中单位{detail.unit_code}在wms系统中未找到!", 500); } + wmsRawmatTransferoutstockD.erp_wh_type = detail.warehouse_outstock; wmsRawmatTransferoutstockD.qty = detail.qty; wmsRawmatTransferoutstockD.code_batch = detail.code_batch; wmsRawmatTransferoutstockD.erp_line_pk = detail.erp_line_pk; @@ -1392,22 +1427,22 @@ namespace Tnb.WarehouseMgr await db.Insertable(wmsRawmatTransferoutstockH).ExecuteCommandAsync(); await db.Insertable(wmsRawmatTransferoutstockDs).ExecuteCommandAsync(); } - else if(warehouse_outstock.id == WmsWareHouseConst.WAREHOUSE_CP_ID) + if(details_WAREHOUSE_CP_ID.Count > 0) { + WmsTransferOutstockH wmsTransferOutstockH = new WmsTransferOutstockH(); string code = await _billRuleService.GetBillNumber("WmsTransferOutstock"); wmsTransferOutstockH.bill_code = code; wmsTransferOutstockH.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOutstockH.create_time = DateTime.Now; - wmsTransferOutstockH.warehouse_code = warehouse_outstock.whcode; + wmsTransferOutstockH.warehouse_code = dic_WmsErpWarehousecoderelaH[details_WAREHOUSE_CP_ID[0].warehouse_outstock].ToString(); wmsTransferOutstockH.erp_pk = input.erp_pk; - wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.bill_code; + wmsTransferOutstockH.transfer_order_id = wmsTransferOrderH.id; wmsTransferOutstockH.issuance_status = "0"; wmsTransferOutstockH.transaction_type = _erpExtendField.EnCode; wmsTransferOutstockH.org_id = WmsWareHouseConst.AdministratorOrgId; - wmsTransferOutstockH.erp_wh_type = input.warehouse_outstock; List wmsTransferOutstockDs = new List(); - foreach (var detail in input.details) + foreach (var detail in details_WAREHOUSE_CP_ID) { WmsTransferOutstockD wmsTransferOutstockD = new WmsTransferOutstockD(); wmsTransferOutstockD.bill_id = wmsTransferOutstockH.id; @@ -1432,6 +1467,7 @@ namespace Tnb.WarehouseMgr wmsTransferOutstockD.create_id = WmsWareHouseConst.ErpUserId; wmsTransferOutstockD.create_time = DateTime.Now; wmsTransferOutstockD.lineno = detail.lineno; + wmsTransferOutstockD.erp_wh_type = detail.warehouse_outstock; var material = await db.Queryable().Where(p => p.code == detail.material_code).FirstAsync(); if (material != null) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 797baceb..06f550b9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -2228,33 +2228,34 @@ namespace Tnb.WarehouseMgr int doorStatus = -1; bool closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(devName, 4); //向电梯发送前门关门指令 - Logger.Information($"关门结果:{closeDoorRes}"); + Logger.Information($"{devName.Match(@"\d+")}#梯 关门结果:{closeDoorRes}"); do { doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus); - Logger.Information($"当前门状态:{doorStatus}"); + Logger.Information($"{devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); await Task.Delay(1000); } while (doorStatus != 4); - Logger.Information($"当前门状态:{doorStatus}"); + Logger.Information($"结束判断 {devName.Match(@"\d+")}#梯 当前门状态:{doorStatus}"); int floor = await GetRealFloor(devName, disTask.end_floor); //电梯任务手动执行任务状态上报 (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); - Logger.Information($"目标楼层:{floor} 当前楼层:{tuple.floorNo}"); + Logger.Information($"{devName.Match(@"\d+")}#梯 目标楼层:{floor} 当前楼层:{tuple.floorNo}"); - Logger.Information($"开始呼梯 {devName}到{floor}"); + Logger.Information($"{devName.Match(@"\d+")}#梯 开始呼梯 {devName}到{floor}"); //发送到目标楼的指令 dynamic result = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); do { tuple = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); + Logger.Information($"{devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); await Task.Delay(1000); } while (tuple.sysStatus != 3 || tuple.runStatus != 0 || floor != tuple.floorNo); - Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); + Logger.Information($"结束判断 {devName.Match(@"\d+")}#梯 sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},当前楼层floorNo:{tuple.floorNo},目标楼层disTask.end_floor={floor}"); if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) { @@ -2275,7 +2276,7 @@ namespace Tnb.WarehouseMgr }; await TaskComplate(tcUpInput); - Logger.Information("电梯任务执行完成"); + Logger.Information($"{devName.Match(@"\d+")}#梯 电梯任务执行完成"); } } @@ -2472,34 +2473,36 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task TaskComplate(TaskCompleUpInput input) { + var db = _db.CopyNew(); try { - Logger.Information($"【TaskComplate】 开始执行TaskComplate"); - await _db.Ado.BeginTranAsync(); + Logger.Information($"【TaskComplate】 开始执行TaskComplate {JsonConvert.SerializeObject(input)}"); + + await db.Ado.BeginTranAsync(); //更新任务执行表,单据状态为 完成 - _ = await _db.Updateable().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID, act_end_date = DateTime.Now }).Where(it => input.disTaskIds.Contains(it.id)).ExecuteCommandAsync(); - List disTasks = await _db.Queryable().InnerJoin((a, b) => a.carry_id == b.id).Where(a => input.disTaskIds.Contains(a.id)).Select((a, b) => new WmsDistaskH { carry_status = b.carry_status }, true).ToListAsync(); + _ = await db.Updateable().SetColumns(it => new WmsDistaskH { status = WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID, act_end_date = DateTime.Now }).Where(it => input.disTaskIds.Contains(it.id)).ExecuteCommandAsync(); + List disTasks = await db.Queryable().InnerJoin((a, b) => a.carry_id == b.id).Where(a => input.disTaskIds.Contains(a.id)).Select((a, b) => new WmsDistaskH { carry_status = b.carry_status }, true).ToListAsync(); Logger.Information($"【TaskComplate】 disTasks 值 {JsonConvert.SerializeObject(disTasks)}"); if (disTasks?.Count > 0) { // 更新预任务申请表,单据状态为 已完成 List preTaskIds = disTasks.Select(x => x.pretask_id).ToList(); - _ = await _db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); + _ = await db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); //更新电梯任务数量 - _ = await _db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1}).Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ExecuteCommandAsync(); + _ = await db.Updateable().SetColumns(it => new WmsElevatorH { task_nums = it.task_nums - 1}).Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ExecuteCommandAsync(); // 更新任务数量 - _ = await _db.Updateable().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Select(x => x.endlocation_code).Contains(it.location_code)).ExecuteCommandAsync(); + _ = await db.Updateable().SetColumns(it => new BasLocation { task_nums = it.task_nums - 1 }).Where(it => disTasks.Select(x => x.endlocation_code).Contains(it.location_code)).ExecuteCommandAsync(); //更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位 List<(string carry_id, string carry_status, string endlocation_id, string endlocation_code)> multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList(); - Dictionary locWhIdMap = await _db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id); - Dictionary locTypeMap = await _db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.is_type); + Dictionary locWhIdMap = await db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id); + Dictionary locTypeMap = await db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.is_type); List carryIts = new(); List carryCodeIts = new(); List locIts = new(); @@ -2517,11 +2520,11 @@ namespace Tnb.WarehouseMgr }; string endLocId = multiList[i].endlocation_id; - WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == carry.id).FirstAsync(); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == carry.id).FirstAsync(); // 同步料架下的载具位置 if (wmsCarryH != null && wmsCarryH.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID) { - List carrys = _db.Queryable() + List carrys = db.Queryable() .InnerJoin((a, b) => a.membercarry_id == b.id).Where((a, b) => a.carry_id == carry.id).Select((a, b) => b).ToList(); carrys.ForEach(r => { @@ -2531,7 +2534,7 @@ namespace Tnb.WarehouseMgr }); } - List carrycodes = _db.Queryable().Where(r => r.carry_id == carry.id).ToList(); + List carrycodes = db.Queryable().Where(r => r.carry_id == carry.id).ToList(); carrycodes.ForEach(r => { r.warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : ""; @@ -2563,12 +2566,12 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - _ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code, it.instock_time }).ExecuteCommandAsync(); + _ = await db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code, it.instock_time }).ExecuteCommandAsync(); Logger.Information($"【TaskComplate】 更新载具 {JsonConvert.SerializeObject(carryIts)}"); //更新条码的库位和仓库信息 - _ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).ExecuteCommandAsync(); + _ = await db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).ExecuteCommandAsync(); //更新库位信息,使用状态为 使用,锁定状态为未锁定 - _ = await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync(); + _ = await db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync(); Logger.Information($"【TaskComplate】 更新库位 {JsonConvert.SerializeObject(locIts)}"); /* var loginType= _userManager?.LoginType ?? "web"; Log.Information($"_userManager.LoginType={loginType}"); @@ -2580,7 +2583,7 @@ namespace Tnb.WarehouseMgr addOutinStockDetailInput.disTask = dt; 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); + await _wmsOutinStockDetailService.AddOutinStockDetail(addOutinStockDetailInput, db); #region todo 移到service中 // 销售出库 @@ -2589,12 +2592,12 @@ namespace Tnb.WarehouseMgr // TODO 一楼工位放货完成后更新出库明细的实际出库数量 if (dt.start_floor == 1 && dt.end_floor == 1) { - WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync(); - await _db.Updateable().SetColumns(r => r.purchase_prqty == r.purchase_prqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); + WmsCarryCode wmsCarryCode = await db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync(); + await db.Updateable().SetColumns(r => r.purchase_prqty == r.purchase_prqty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); CarryCodeUnbindInput carryCodeUnbindInput = new CarryCodeUnbindInput(); carryCodeUnbindInput.carry_id = dt.carry_id; - await _wmsCarryUnbindService.CarryCodeUnbind(carryCodeUnbindInput, _db); + await _wmsCarryUnbindService.CarryCodeUnbind(carryCodeUnbindInput, db); } } // 成品调拨入库 @@ -2602,14 +2605,14 @@ namespace Tnb.WarehouseMgr { if (dt.start_floor == 3 && dt.end_floor == 3) { - WmsCarryCode wmsCarryCode = await _db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync(); - await _db.Updateable().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); + WmsCarryCode wmsCarryCode = await db.Queryable().Where(r => r.carry_id == dt.carry_id).FirstAsync(); + await db.Updateable().SetColumns(r => r.qty == r.qty + wmsCarryCode.codeqty).Where(r => r.id == dt.require_id).ExecuteCommandAsync(); } } // 二楼物料呼叫任务结束后清空工位信息 else if (dt.biz_type == "FloorCallMaterial") { - await _db.Updateable().SetColumns(r => new WmsCarryH + await db.Updateable().SetColumns(r => new WmsCarryH { work_station = "" }).Where(r => r.id == dt.carry_id).ExecuteCommandAsync(); @@ -2619,11 +2622,11 @@ namespace Tnb.WarehouseMgr } else if (dt.biz_type == "erp_qtrk") { - WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable().SingleAsync(x=>x.id==dt.source_id); - List wmsMaterialTransferDs = await _db.Queryable().Where(x=>x.bill_id==dt.source_id).ToListAsync(); + WmsMaterialTransfer wmsMaterialTransfer = await db.Queryable().SingleAsync(x=>x.id==dt.source_id); + List wmsMaterialTransferDs = await db.Queryable().Where(x=>x.bill_id==dt.source_id).ToListAsync(); List materialIds = wmsMaterialTransferDs.Select(x=>x.material_id).Distinct().ToList(); List unitCodes = wmsMaterialTransferDs.Select(x => x.unit_id).Distinct().ToList(); - List unitDatas = await _db.Queryable() + 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) @@ -2636,7 +2639,7 @@ namespace Tnb.WarehouseMgr ids.AddRange(materialIds); ids.AddRange(unitDatas.Select(x=>x.Id).ToList()); - List erpExtendFields = await _db.Queryable().Where(x=>ids.Contains(x.table_id)).ToListAsync(); + List erpExtendFields = await db.Queryable().Where(x=>ids.Contains(x.table_id)).ToListAsync(); string erpCreateId = erpExtendFields.Find(x=>x.table_id==wmsMaterialTransfer.create_id)?.user_id ?? ""; ErpExtendField erpOrg = erpExtendFields.Find(x => x.table_id == (wmsMaterialTransfer.org_id ?? WmsWareHouseConst.AdministratorOrgId)); string nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); @@ -2691,7 +2694,7 @@ namespace Tnb.WarehouseMgr erpRequestData.Add("dtls",erpRequestDataDetails); requestData.Add(erpRequestData); - BasFactoryConfig config = await _db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL); + BasFactoryConfig config = await db.Queryable().FirstAsync(x => x.enabled == 1 && x.key == FactoryConfigConst.BIPURL); ThirdWebapiRecord thirdWebapiRecord = new ThirdWebapiRecord(); thirdWebapiRecord.id = SnowflakeIdHelper.NextId(); thirdWebapiRecord.third_name = WmsWareHouseConst.BIP; @@ -2702,11 +2705,11 @@ namespace Tnb.WarehouseMgr thirdWebapiRecord.request_data = JsonConvert.SerializeObject(requestData); thirdWebapiRecord.create_time = DateTime.Now; - await _db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); + await db.Insertable(thirdWebapiRecord).ExecuteCommandAsync(); } #endregion - List disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); + List disTaskCodes = await db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, require_code = dt.require_code!, source_id = dt.source_id! , source_code = dt.source_code!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList(), bill_code = dt.bill_code!,area_code= dt.area_code!,wmsDistaskH = dt! @@ -2728,7 +2731,7 @@ namespace Tnb.WarehouseMgr } } Logger.Information($"【TaskComplate】 任务操作完成提交事务 {string.Join(",", input.disTaskIds)}"); - await _db.Ado.CommitTranAsync(); + await db.Ado.CommitTranAsync(); Logger.Information($"【TaskComplate】 任务操作完成 {string.Join(",", input.disTaskIds)}"); } @@ -2736,7 +2739,7 @@ namespace Tnb.WarehouseMgr { Logger.Error($"任务结束失败", ex); Logger.Error($"任务结束失败堆栈异常", ex); - await _db.Ado.RollbackTranAsync(); + await db.Ado.RollbackTranAsync(); throw; } finally diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAExceptionCompleteService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAExceptionCompleteService.cs index d9b388c1..65481655 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAExceptionCompleteService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAExceptionCompleteService.cs @@ -3,6 +3,9 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Interfaces; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using SqlSugar; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Dto.Inputs; @@ -44,6 +47,7 @@ namespace Tnb.WarehouseMgr try { + Logger.LogWarning($"【ExceptionComplete】 {JsonConvert.SerializeObject(input)}"); await _db.Ado.BeginTranAsync(); TaskCompleUpInput taskCompleUpInput = new(); List list = new();