From 7d6602ad12c80c91256644f034555dcd8bf30ef8 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Mon, 24 Jun 2024 13:01:42 +0800 Subject: [PATCH] =?UTF-8?q?bug=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/PrdMoTaskService.cs | 2 +- ...alTransferCallRackToProductionLineInput.cs | 5 +++ .../Tnb.WarehouseMgr/WareHouseService.cs | 6 +-- .../WmsMaterialTransferService.cs | 45 +++++++++++++++++-- .../WmsPDAScanInStockService.cs | 7 ++- .../Tnb.WarehouseMgr/WmsPrdInstockHService.cs | 41 +++++++++-------- 6 files changed, 79 insertions(+), 27 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index af8f4428..2b710c5e 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -2014,7 +2014,7 @@ namespace Tnb.ProductionMgr }); Log.Information($"生产入库参数:${JsonConvert.SerializeObject(wmsPrdInstockInput)}"); - Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result2 = await _wmsPrdInstockHService.PrdInstock(wmsPrdInstockInput); + Tnb.WarehouseMgr.Entities.Dto.Outputs.Result result2 = await _wmsPrdInstockHService.PrdInstock(wmsPrdInstockInput, _db); if (result2 != null) { Log.Information($"生产入库接口返回参数:${JsonConvert.SerializeObject(result2)}"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs index ad81aa62..4aac91ab 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/MaterialTransferCallRackToProductionLineInput.cs @@ -23,5 +23,10 @@ /// 终点库位 /// public string? endlocation_id { get; set; } + + /// + /// 载具 + /// + public string? carry_code { get; set; } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 84b18fff..0fe1b6b4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -76,9 +76,9 @@ namespace Tnb.WarehouseMgr private readonly IRunService _runService; public static SemaphoreSlim s_floor2CreatePretask = new(1); - public SemaphoreSlim s_taskCommonCreatePretask = new(1); - public SemaphoreSlim s_taskGenPreTask = new(1); - public SemaphoreSlim s_GenTaskExecute = new(1); + public static SemaphoreSlim s_taskCommonCreatePretask = new(1); + public static SemaphoreSlim s_taskGenPreTask = new(1); + public static SemaphoreSlim s_GenTaskExecute = new(1); public Func AddUnExecuteTask { get; set; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index 57f66fb1..17adefae 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -37,6 +37,7 @@ using Aop.Api.Domain; using Senparc.Weixin.Work.AdvancedAPIs.OaDataOpen; using NPOI.SS.Formula.Functions; using Org.BouncyCastle.Asn1.X509; +using Tnb.ProductionMgr.Entities; namespace Tnb.WarehouseMgr { @@ -548,12 +549,48 @@ namespace Tnb.WarehouseMgr Logger.LogWarning($"【CallRackToProductionLine】不存在工位id为{input.workstation_id}的工位!"); throw new AppFriendlyException($"不存在工位id为{input.workstation_id}的工位!", 500); } - WmsCarryH wmsCarryH = _db.Queryable().Where(r => r.work_station == organizeEntity.EnCode).First(); + //WmsCarryH wmsCarryH = _db.Queryable().Where(r => r.work_station == organizeEntity.EnCode).First(); + //if (wmsCarryH == null) + //{ + // Logger.LogWarning($"【CallRackToProductionLine】不存在工位为{organizeEntity.EnCode}的料架号!"); + // throw new AppFriendlyException($"不存在工位为{organizeEntity.EnCode}的料架号!", 500); + //} + + WmsCarryH wmsCarryH = _db.Queryable().Where(r => r.carry_code == input.carry_code).First(); if (wmsCarryH == null) { - Logger.LogWarning($"【CallRackToProductionLine】不存在工位为{organizeEntity.EnCode}的料架号!"); - throw new AppFriendlyException($"不存在编码为{organizeEntity.EnCode}的料架号!", 500); + Logger.LogWarning($"【CallRackToProductionLine】不存在料架号为{input.carry_code}的料架!"); + throw new AppFriendlyException($"【CallRackToProductionLine】不存在料架号为{input.carry_code}的料架!", 500); } + + // 获取产线 + OrganizeEntity organizeEntityCX = _db.Queryable().Where(r => r.Id == organizeEntity.ParentId).First(); + if (organizeEntityCX == null) + { + Logger.LogWarning($"【CallRackToProductionLine】基础资料错误!工位{organizeEntity.EnCode}的上级产线不存在,请检查!"); + throw new AppFriendlyException($"【CallRackToProductionLine】基础资料错误!工位{organizeEntity.EnCode}的上级产线不存在,请检查!", 500); + } + + if (organizeEntityCX.Category != "workline") + { + Logger.LogWarning($"【CallRackToProductionLine】基础资料错误!工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}不属于产线类型,请检查!"); + throw new AppFriendlyException($"【CallRackToProductionLine】基础资料错误!工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}不属于产线类型,请检查!", 500); + } + + // 获取任务单 + + List organizeEntityCXs = _db.Queryable().Where(r => r.workline_code == organizeEntityCX.EnCode).ToList(); + if (organizeEntityCXs.Count > 1) + { + Logger.LogWarning($"【CallRackToProductionLine】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!"); + throw new AppFriendlyException($"【CallRackToProductionLine】工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单不唯一,请检查!", 500); + } + if (organizeEntityCXs.Count == 0) + { + Logger.LogWarning($"【CallRackToProductionLine】未找到工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单,请检查!"); + throw new AppFriendlyException($"【CallRackToProductionLine】未找到工位{organizeEntity.EnCode}的上级{organizeEntityCX.EnCode}对应的进行中的任务单,请检查!", 500); + } + PrdMoTask prdMoTask = organizeEntityCXs.First(); //if (string.IsNullOrEmpty(wmsCarryH.work_station)) //{ // Logger.LogWarning($"【CallRackToProductionLine】此料架目标工位为空!{input.carry_code}"); @@ -588,6 +625,8 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput.carry_code = wmsCarryH.carry_code; commonCreatePretaskInput.task_type = ""; commonCreatePretaskInput.biz_type = "FloorCallMaterial"; + commonCreatePretaskInput.require_id = prdMoTask.id; + commonCreatePretaskInput.require_code = prdMoTask.mo_task_code; var res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput); if (res.code != JNPF.Common.Enums.HttpStatusCode.OK) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs index dec1e478..1e0d2d0f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAScanInStockService.cs @@ -628,12 +628,17 @@ namespace Tnb.WarehouseMgr catch (AggregateException ex) { Console.WriteLine("【ScanInStockByRedis】 AggregateException" + ex.Message); + Logger.LogInformation($"【ScanInStockByRedis】 AggregateException" + ex.Message); _dbScanInStockByRedis = _dbScanInStockByRedis.CopyNew(); await _dbScanInStockByRedis.Ado.RollbackTranAsync(); throw; } - catch (Exception) + catch (Exception ex) { + Logger.LogInformation($"【ScanInStockByRedis】 八工位扫到码发送入库请求发生异常:{ex.Message}"); + if (ex.Message.Contains("Connection is busy")) + _dbScanInStockByRedis = _dbScanInStockByRedis.CopyNew(); + await _dbScanInStockByRedis.Ado.RollbackTranAsync(); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index 31bdfec7..6dbe05c5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -54,14 +54,17 @@ namespace Tnb.WarehouseMgr /// /// /// - public async Task PrdInstock(WmsPrdInstockInput input) + public async Task PrdInstock(WmsPrdInstockInput input, ISqlSugarClient dbConn = null) { Logger.LogInformation($"【PrdInstock】传入参数 {JsonConvert.SerializeObject(input)}"); + var db = _db; + if (dbConn != null) + db = dbConn; try { - await _db.Ado.BeginTranAsync(); + await db.Ado.BeginTranAsync(); - WmsPrdInstockH prdInstockH = _db.Queryable().Where(r => r.prd_bill_code == input.prd_bill_code).First(); + WmsPrdInstockH prdInstockH = db.Queryable().Where(r => r.prd_bill_code == input.prd_bill_code).First(); string prd_instock_code_id = ""; string type = ""; @@ -85,7 +88,7 @@ namespace Tnb.WarehouseMgr wmsPrdInstockH.type = input.type; //wmsPrdInstockH.status = WmsWareHouseConst.BILLSTATUS_ADD_ID; - await _db.Insertable(wmsPrdInstockH).ExecuteCommandAsync(); + await db.Insertable(wmsPrdInstockH).ExecuteCommandAsync(); prd_instock_code_id = wmsPrdInstockH.id; type = input.type; @@ -94,7 +97,7 @@ namespace Tnb.WarehouseMgr { prd_instock_code_id = prdInstockH.id; - await _db.Updateable(r => new WmsPrdInstockH + await db.Updateable(r => new WmsPrdInstockH { pqty = input.pqty, rqty = input.rqty @@ -135,9 +138,9 @@ namespace Tnb.WarehouseMgr }); } - await _db.Insertable(WmsPrdInstockDs).ExecuteCommandAsync(); + await db.Insertable(WmsPrdInstockDs).ExecuteCommandAsync(); - await _db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync(); + await db.Insertable(WmsPrdInstockCodes).ExecuteCommandAsync(); foreach (WmsPrdInstockD wmsPrdInstockD in WmsPrdInstockDs) { @@ -150,7 +153,7 @@ namespace Tnb.WarehouseMgr } BasLocation endLocation = endLocations[0]; - BasLocation startLocation = _db.Queryable().Where(r => r.id == wmsPrdInstockD.startlocation_id).First(); + BasLocation startLocation = db.Queryable().Where(r => r.id == wmsPrdInstockD.startlocation_id).First(); if (startLocation == null) { throw new AppFriendlyException("系统中找不到起点ID的库位信息", 500); @@ -165,8 +168,8 @@ namespace Tnb.WarehouseMgr Logger.LogInformation($"【PrdInstock】注塑车间生产提报"); // 注塑线边库到2,4输送线 // 根据ZSSSXCTU01 ZSSSXCTU02任务数平均分配任务 - endlocation_ssx = await _db.Queryable().Where(r => new string[2] { "32624148726549", "32624157608981" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); - await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); + endlocation_ssx = await db.Queryable().Where(r => new string[2] { "32624148726549", "32624157608981" }.Contains(r.id)).OrderBy("is_lock, task_nums, location_code").FirstAsync(); + await db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => endlocation_ssx.id == it.id).ExecuteCommandAsync(); // ZSSSXCTU01 对应 SSX-011-002 if (endlocation_ssx.location_code == "ZSSSXCTU01") @@ -179,7 +182,7 @@ namespace Tnb.WarehouseMgr startlocation_id_ssx = "32609093546005"; } - WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); // 生成到输送线任务 CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput(); @@ -191,7 +194,7 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput1.biz_type = ""; commonCreatePretaskInput1.require_id = wmsPrdInstockD.id; commonCreatePretaskInput1.isExcuteMission = false; - Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1); + Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1, db); if (res1.code != HttpStatusCode.OK) { throw new Exception($"注塑车间生成到输送线的任务失败 {res1.msg}"); @@ -208,7 +211,7 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); if (res2.code != HttpStatusCode.OK) { throw new Exception($"注塑车间生成到中储仓的任务失败 {res2.msg}"); @@ -217,7 +220,7 @@ namespace Tnb.WarehouseMgr else if (type == "25019172714005") { Logger.LogInformation($"【PrdInstock】挤出车间生产提报"); - WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); // 生成到中储仓任务 CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); @@ -230,7 +233,7 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); if (res2.code != HttpStatusCode.OK) { throw new Exception($"挤出车间生成到中储仓的任务失败 {res2.msg}"); @@ -239,7 +242,7 @@ namespace Tnb.WarehouseMgr else if (type == "25019191681045") { Logger.LogInformation($"【PrdInstock】包装车间生产提报"); - WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + WmsCarryH wmsCarryH = await db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); // 生成到中储仓任务 CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); @@ -252,7 +255,7 @@ namespace Tnb.WarehouseMgr commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2, db); if (res2.code != HttpStatusCode.OK) { throw new Exception($"包装车间生成到中储仓的任务失败 {res2.msg}"); @@ -262,13 +265,13 @@ namespace Tnb.WarehouseMgr } - await _db.Ado.CommitTranAsync(); + await db.Ado.CommitTranAsync(); } catch (Exception ex) { Logger.Error(ex.Message); Logger.Error(ex.StackTrace); - await _db.Ado.RollbackTranAsync(); + await db.Ado.RollbackTranAsync(); return await ToApiResult(HttpStatusCode.InternalServerError, ex.Message); } finally