From 71e83874bf14fec4c60a875461f64b23adeb247c Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Fri, 14 Jun 2024 17:06:57 +0800 Subject: [PATCH] bug --- .../Tnb.ProductionMgr/PrdMoTaskService.cs | 2 +- .../Tnb.ProductionMgr/RedisBackGround.cs | 35 ++-- .../Consts/WmsWareHouseConst.cs | 2 +- .../IWareHouseService.cs | 8 +- .../Tnb.WarehouseMgr/WareHouseService.cs | 116 +++++++++++- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 178 +++++++++--------- .../Tnb.WarehouseMgr/WmsDeliveryService.cs | 9 +- .../WmsMaterialTransferService.cs | 4 +- .../Tnb.WarehouseMgr/WmsPrdInstockHService.cs | 119 +++++++++--- .../Tnb.API.Entry/Configurations/Cache.json | 4 +- .../Configurations/ConnectionStrings.json | 4 +- 11 files changed, 334 insertions(+), 147 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index b6f0b0d0..734cd923 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -1922,7 +1922,7 @@ namespace Tnb.ProductionMgr wmsPrdInstockInput.planqty = prdMoTask.scheduled_qty.Value; wmsPrdInstockInput.pqty = input.reported_qty; wmsPrdInstockInput.rqty = 0; - wmsPrdInstockInput.type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + wmsPrdInstockInput.type = prdMo.mo_type; wmsPrdInstockInput.create_id = report.create_id; wmsPrdInstockInput.prdInstockDs = new List(); wmsPrdInstockInput.prdInstockDs.Add(new WmsPrdInstockDInput() diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 311d07f3..dce07bc8 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -7,6 +7,7 @@ using System.Security.Cryptography.X509Certificates; using System.Security.Policy; using System.Text; using System.Text.RegularExpressions; +using System.Threading; using Aop.Api.Domain; using Aspose.Cells.Charts; using JNPF; @@ -109,16 +110,6 @@ namespace Tnb.ProductionMgr private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build(); - Thread testThread; - void test() - { - while (true) - { - Console.WriteLine(DateTime.Now + " test " + CheckGettimer?.GetHashCode()); - - Thread.Sleep(1000); - } - } #endregion #region 构造函数 @@ -147,8 +138,6 @@ namespace Tnb.ProductionMgr db_Floor2timer移走上升降区未生成预任务且满托的料架 = repository.CopyNew(); db_Floor2timer移走下升降区未生成预任务且空托的料架 = repository.CopyNew(); - testThread = new Thread(test); - testThread.Start(); } #endregion @@ -157,6 +146,8 @@ namespace Tnb.ProductionMgr //ctu取货 private async void CheckGet(object? state) { + if (s_taskCheckGet.CurrentCount == 0) + return; await s_taskCheckGet.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -338,6 +329,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA //扫码入库 private async void ScanInStock(object? state) { + if (s_taskScan.CurrentCount == 0) + return; await s_taskScan.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -433,6 +426,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// private async void BGWCarrySupplement(object? state) { + if (s_taskBGWCarrySupplement.CurrentCount == 0) + return; await s_taskBGWCarrySupplement.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -546,6 +541,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// private async void YCLGLDPJInstock(object? state) { + if (s_taskYCLGLDPJInstock.CurrentCount == 0) + return; await s_taskYCLGLDPJInstock.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -631,6 +628,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// private async void YCLWXDPJInstock(object? state) { + if (s_taskYCLWXDPJInstock.CurrentCount == 0) + return; await s_taskYCLWXDPJInstock.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -714,6 +713,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA private async void SSXcode(object? state) { + if (s_taskSSXcode.CurrentCount == 0) + return; await s_taskSSXcode.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -808,6 +809,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 上升降机扫码 需要等待空料架区 此处需要轮询 private async void Floor2UpMachinecode(object? args) { + if (s_taskExecuteFloor2UpMachinecodetimer.CurrentCount == 0) + return; s_taskExecuteFloor2UpMachinecodetimer.Wait(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -991,6 +994,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 送空托到上升降区(object? args) { + if (s_task送空托到上升降区.CurrentCount == 0) + return; await s_task送空托到上升降区.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -1112,6 +1117,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 送满托到下升降区(object? args) { + if (s_task送满托到下升降区.CurrentCount == 0) + return; await s_task送满托到下升降区.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -1257,6 +1264,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 移走上升降区未生成预任务且满托的料架(object? args) { + if (s_task移走上升降区未生成预任务且满托的料架.CurrentCount == 0) + return; await s_task移走上升降区未生成预任务且满托的料架.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); @@ -1358,6 +1367,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 移走下升降区未生成预任务且空托的料架(object? args) { + if (s_task移走下升降区未生成预任务且空托的料架.CurrentCount == 0) + return; await s_task移走下升降区未生成预任务且空托的料架.WaitAsync(); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs index 28999084..d7873af8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsWareHouseConst.cs @@ -240,7 +240,7 @@ /// /// 生产入库 /// - public const string BIZTYPE_WMSPRDINSTOCK_ID = "34467501190677"; + public const string BIZTYPE_WMSPRDINSTOCK_ID = "34840264160277"; /// /// 条码打印状态-已完成 diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index f6ad1140..ab2e1393 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -25,7 +25,13 @@ namespace Tnb.WarehouseMgr.Interfaces /// /// Task> OutStockStrategy([FromQuery] OutStockStrategyQuery input); - + /// + /// 原材料仓出库策略 + /// + /// + /// + /// + Task> OutStockStrategyYCL([FromQuery] OutStockStrategyQuery input); /// /// 出库策略-销售出库下发 /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index afea52b4..58b86921 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -364,6 +364,50 @@ namespace Tnb.WarehouseMgr return input.Size > 0 ? items.Take(input.Size).ToList() : items; } + /// + /// 原材料仓出库策略 + /// + /// + /// + /// + public async Task> OutStockStrategyYCL([FromQuery] OutStockStrategyQuery input) + { + Expressionable whereExprable = Expressionable.Create() + .And((a, b, c) => a.is_lock == 0 && c.is_lock == 0) + .And((a, b, c) => !string.IsNullOrEmpty(a.location_id)) + .And((a, b, c) => c.is_type == ((int)EnumLocationType.存储库位).ToString()) + .And((a, b, c) => a.out_status == "0") + .And((a, b, c) => c.wh_id == input.warehouse_id) + .AndIF(!string.IsNullOrEmpty(input.material_id), (a, b, c) => b.material_id == input.material_id) + .AndIF(!string.IsNullOrEmpty(input.code_batch), (a, b, c) => b.code_batch == input.code_batch) + .AndIF(!string.IsNullOrEmpty(input.material_specification), (a, b, c) => b.material_specification == input.material_specification) + .AndIF(!string.IsNullOrEmpty(input.container_no), (a, b, c) => b.container_no == input.container_no) + .AndIF(!string.IsNullOrEmpty(input.carrystd_id), (a, b, c) => a.carrystd_id == input.carrystd_id); + Expression> carryStatusFilterExp = !input.material_id.IsNullOrWhiteSpace() + ? (a, b, c) => a.carry_status == ((int)EnumCarryStatus.占用).ToString() + : (a, b, c) => a.carry_status == ((int)EnumCarryStatus.空闲).ToString(); + _ = whereExprable.And(carryStatusFilterExp); + Expression> whereExpr = whereExprable.ToExpression(); + + SqlSugarClient cyDb = _db.CopyNew(); + WmsInstockPolicies policy = await cyDb.Queryable().Where(it => it.status == 1).FirstAsync(); + if (policy == null) + { + throw new AppFriendlyException("没有可用策略", 500); + } + + List items = await cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id) + .LeftJoin((a, b, c) => a.location_id == c.id) + .Where(whereExpr) + //.OrderByIF((a,b,c)=>SqlFunc.IsNullOrEmpty()) + .OrderBy(policy.policy) + + .Select() + .Distinct() + .ToListAsync(); + return input.Size > 0 ? items.Take(input.Size).ToList() : items; + } + /// /// 判断CTU是否可以放货 /// @@ -564,8 +608,27 @@ namespace Tnb.WarehouseMgr getdic.Add("ZS-C04-2", new string[] { "hxjC", "A5AGV允许入满箱", "true" }); getdic.Add("ZS-C05-2", new string[] { "hxjC", "A6AGV允许入满箱", "true" }); getdic.Add("ZS-C06-2", new string[] { "hxjC", "A7AGV允许入满箱", "true" }); + getdic.Add("ZS-C07-2", new string[] { "hxjC", "A8AGV允许入满箱", "true" }); + getdic.Add("ZS-C08-2", new string[] { "hxjC", "A9AGV允许入满箱", "true" }); + getdic.Add("ZS-C09-2", new string[] { "hxjC", "A10AGV允许入满箱", "true" }); + getdic.Add("ZS-C10-2", new string[] { "hxjC", "A11AGV允许入满箱", "true" }); + getdic.Add("ZS-C11-2", new string[] { "hxjC", "A12AGV允许入满箱", "true" }); + getdic.Add("ZS-C12-2", new string[] { "hxjC", "A13AGV允许入满箱", "true" }); + getdic.Add("ZS-C13-2", new string[] { "hxjC", "A14AGV允许入满箱", "true" }); + getdic.Add("ZS-C14-2", new string[] { "hxjC", "A1AGV允许入满箱", "true" }); - + getdic.Add("ZS-A01-2", new string[] { "hxjA", "A3AGV允许入满箱", "true" }); + getdic.Add("ZS-A02-2", new string[] { "hxjA", "A4AGV允许入满箱", "true" }); + getdic.Add("ZS-A03-2", new string[] { "hxjA", "A5AGV允许入满箱", "true" }); + getdic.Add("ZS-A04-2", new string[] { "hxjA", "A6AGV允许入满箱", "true" }); + getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7AGV允许入满箱", "true" }); + getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8AGV允许入满箱", "true" }); + getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9AGV允许入满箱", "true" }); + getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10AGV允许入满箱", "true" }); + getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11AGV允许入满箱", "true" }); + getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12AGV允许入满箱", "true" }); + getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13AGV允许入满箱", "true" }); + getdic.Add("ZS-A12-2", new string[] { "hxjA", "A14AGV允许入满箱", "true" }); @@ -584,6 +647,28 @@ namespace Tnb.WarehouseMgr putdic.Add("ZS-C04-1", new string[] { "hxjC", "A5AGV允许出空箱", "true" }); putdic.Add("ZS-C05-1", new string[] { "hxjC", "A6AGV允许出空箱", "true" }); putdic.Add("ZS-C06-1", new string[] { "hxjC", "A7AGV允许出空箱", "true" }); + putdic.Add("ZS-C07-1", new string[] { "hxjC", "A8AGV允许出空箱", "true" }); + putdic.Add("ZS-C08-1", new string[] { "hxjC", "A9AGV允许出空箱", "true" }); + putdic.Add("ZS-C09-1", new string[] { "hxjC", "A10AGV允许出空箱", "true" }); + putdic.Add("ZS-C10-1", new string[] { "hxjC", "A11AGV允许出空箱", "true" }); + putdic.Add("ZS-C11-1", new string[] { "hxjC", "A12AGV允许出空箱", "true" }); + putdic.Add("ZS-C12-1", new string[] { "hxjC", "A13AGV允许出空箱", "true" }); + putdic.Add("ZS-C13-1", new string[] { "hxjC", "A14AGV允许出空箱", "true" }); + putdic.Add("ZS-C14-1", new string[] { "hxjC", "A1AGV允许出空箱", "true" }); + + putdic.Add("ZS-A01-1", new string[] { "hxjA", "A3AGV允许出空箱", "true" }); + putdic.Add("ZS-A02-1", new string[] { "hxjA", "A4AGV允许出空箱", "true" }); + putdic.Add("ZS-A03-1", new string[] { "hxjA", "A5AGV允许出空箱", "true" }); + putdic.Add("ZS-A04-1", new string[] { "hxjA", "A6AGV允许出空箱", "true" }); + putdic.Add("ZS-A05-1", new string[] { "hxjA", "A7AGV允许出空箱", "true" }); + putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8AGV允许出空箱", "true" }); + putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9AGV允许出空箱", "true" }); + putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10AGV允许出空箱", "true" }); + putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11AGV允许出空箱", "true" }); + putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12AGV允许出空箱", "true" }); + putdic.Add("ZS-A11-1", new string[] { "hxjA", "A13AGV允许出空箱", "true" }); + putdic.Add("ZS-A12-1", new string[] { "hxjA", "A14AGV允许出空箱", "true" }); + if (action == "LOAD")//取货 { if (getdic.Keys.Contains(disTask.startlocation_code)) @@ -826,6 +911,11 @@ namespace Tnb.WarehouseMgr [HttpPost] public async Task GenTaskExecute() { + if (s_taskExecuteSemaphore.CurrentCount == 0) + { + Logger.Information("【GenTaskExecute】 【测试】 丢弃此执行"); + return; + } await s_taskExecuteSemaphore.WaitAsync(); await CTUTaskExecute(); @@ -852,6 +942,7 @@ namespace Tnb.WarehouseMgr third_eqp_type = c.third_eqp_type, }, true); + Logger.Information($"【GenTaskExecute】 获取到{sugarQueryable.Count()}条可执行的预任务..."); if (sugarQueryable.Count() == 0) return; @@ -1088,7 +1179,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Logger.Error("生成预任务执行时出现错误", ex); + Logger.Error("【GenTaskExecute】生成预任务执行时出现错误", ex); Logger.Error(ex.StackTrace!); await db.Ado.RollbackTranAsync(); throw; @@ -1097,6 +1188,9 @@ namespace Tnb.WarehouseMgr { _ = s_taskExecuteSemaphore.Release(); agvCts.Dispose(); + sw.Stop(); + Logger.Error($"【GenTaskExecute】 任务执行耗时{sw.ElapsedMilliseconds}毫秒"); + } } @@ -2240,6 +2334,8 @@ namespace Tnb.WarehouseMgr private async Task> LocPathCalcAlgorithms(string pStartId, string pEndId, List roads) { + Logger.Information($"【LocPathCalcAlgorithms】开始执行 pStartId:{pStartId} pEndId:{pEndId}"); + Stopwatch stopwatch = Stopwatch.StartNew(); #region dp //List results = new(); //var points = await _db.Queryable().ToListAsync(); @@ -2318,6 +2414,12 @@ namespace Tnb.WarehouseMgr Logger.Error("路径算法错误", ex); throw; } + finally + { + stopwatch.Stop(); + Logger.Information($"【LocPathCalcAlgorithms】耗时{stopwatch.ElapsedMilliseconds}"); + } + return results; #endregion @@ -2551,6 +2653,16 @@ namespace Tnb.WarehouseMgr ePoint = await _db.Queryable().FirstAsync(it => it.location_id == input.endlocation_id); } + if (sPoint == null) + { + throw new Exception($"库位{input.startlocation_id} 的起点点位未维护"); + } + if (ePoint == null) + { + throw new Exception($"库位{input.endlocation_id} 的终点点位未维护"); + } + + List points = new List(); if (sPoint.area_code != ePoint.area_code) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index eaacf15e..1135673a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -200,65 +200,62 @@ namespace Tnb.WarehouseMgr public async Task CarryBind(CarryBindInput input) { bool isOk = false; - - using (var db = _db.CopyNew()) + + try { - try + if (input == null) { - if (input == null) + throw new ArgumentNullException(nameof(input)); + } + + await _db.Ado.BeginTranAsync(); + WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id); + WmsCarryH? subCarry = await _db.Queryable().SingleAsync(it => it.id == input.membercarry_id); + if (carry != null && subCarry != null) + { + WmsCarryD wmsCarryD = new() { - throw new ArgumentNullException(nameof(input)); + carry_id = input.carry_id, + membercarry_id = input.membercarry_id, + membercarry_code = input.membercarry_code, + loc = 1, + create_time = DateTime.Now + }; + int row = await _db.Insertable(wmsCarryD).ExecuteCommandAsync(); + isOk = row > 0; + if (!isOk) + { + throw Oops.Oh(ErrorCode.COM1001); } - await db.Ado.BeginTranAsync(); - WmsCarryH? carry = await db.Queryable().SingleAsync(it => it.id == input.carry_id); - WmsCarryH? subCarry = await db.Queryable().SingleAsync(it => it.id == input.membercarry_id); - if (carry != null && subCarry != null) - { - WmsCarryD wmsCarryD = new() - { - carry_id = input.carry_id, - membercarry_id = input.membercarry_id, - membercarry_code = input.membercarry_code, - loc = 1, - create_time = DateTime.Now - }; - int row = await db.Insertable(wmsCarryD).ExecuteCommandAsync(); - isOk = row > 0; - if (!isOk) - { - throw Oops.Oh(ErrorCode.COM1001); - } + // 插入子载具绑定记录 + 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); - // 插入子载具绑定记录 - 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); - - await db.Ado.CommitTranAsync(); - } - else + await _db.Ado.CommitTranAsync(); + } + else + { + if (carry == null || subCarry == null) { - if (carry == null || subCarry == null) - { - throw new AppFriendlyException("没有可用的主载具", 500); - } + throw new AppFriendlyException("没有可用的主载具", 500); } } - catch (Exception ex) - { - await db.Ado.RollbackTranAsync(); - return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message); - } + } + catch (Exception ex) + { + await _db.Ado.RollbackTranAsync(); + return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message); } return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功"); @@ -275,56 +272,53 @@ namespace Tnb.WarehouseMgr public async Task CarryUnbind(CarryBindInput input) { bool isOk = false; - using (var db = _db.CopyNew()) + try { - try + if (input == null) { - if (input == null) + throw new ArgumentNullException(nameof(input)); + } + + WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id); + if (carry != null) + { + int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync(); + isOk = row > 0; + + if (!isOk) { - throw new ArgumentNullException(nameof(input)); + throw Oops.Oh(ErrorCode.COM1001); } - WmsCarryH? carry = await _db.Queryable().SingleAsync(it => it.id == input.carry_id); - if (carry != 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_WMSCARRYUNBIND_ID, true); + await _runService.Create(templateEntity, visualDevModelCrInput); + + await _db.Ado.CommitTranAsync(); + } + else + { + if (carry == null) { - int row = await _db.Deleteable().Where(r => r.carry_id == input.carry_id).ExecuteCommandAsync(); - isOk = row > 0; - - if (!isOk) - { - throw Oops.Oh(ErrorCode.COM1001); - } - - - // 插入子载具绑定记录 - 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_WMSCARRYUNBIND_ID, true); - await _runService.Create(templateEntity, visualDevModelCrInput); - - await db.Ado.CommitTranAsync(); - } - else - { - if (carry == null) - { - throw new AppFriendlyException("没有可用的主载具", 500); - } + throw new AppFriendlyException("没有可用的主载具", 500); } } - catch (Exception ex) - { - await db.Ado.RollbackTranAsync(); - return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message); - } + } + catch (Exception ex) + { + await _db.Ado.RollbackTranAsync(); + return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.InternalServerError, ex.Message); } return await ToApiResult(JNPF.Common.Enums.HttpStatusCode.OK, "成功"); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs index a39fea20..038e002f 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs @@ -223,10 +223,13 @@ namespace Tnb.WarehouseMgr throw new ArgumentNullException(nameof(input)); } - bool isOk = await _db.Updateable().SetColumns(it => new WmsDelivery { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync(); - if (!isOk) + if (!string.IsNullOrEmpty(input.requireId)) { - throw Oops.Oh(ErrorCode.COM1001); + bool isOk = await _db.Updateable().SetColumns(it => new WmsDelivery { status = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID }).Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync(); + if (!isOk) + { + throw Oops.Oh(ErrorCode.COM1001); + } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index ea4ac6af..e495801d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -198,7 +198,7 @@ namespace Tnb.WarehouseMgr code_batch = input.code_batch, Size = input.palletCount }; - List items = await _wareHouseService.OutStockStrategy(inStockStrategyInput); + List items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput); decimal qty = _db.Queryable().Where(r => items.Select(a => a.id).Contains(r.carry_id) && r.material_id == input.material_id).Sum(r => r.codeqty); @@ -257,7 +257,7 @@ namespace Tnb.WarehouseMgr //入库取终点 //出库起点 OutStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID, material_id = wmsMaterialTransferD.material_id, code_batch = wmsMaterialTransferD.code_batch, Size = input.palletCount }; - List items = await _wareHouseService.OutStockStrategy(inStockStrategyInput); + List items = await _wareHouseService.OutStockStrategyYCL(inStockStrategyInput); if (items.Count == 0) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index 64ea5d7a..31bdfec7 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -13,6 +13,7 @@ using JNPF.VisualDev; using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; using Microsoft.Extensions.Logging; +using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData; using Tnb.BasicData.Entities; @@ -55,6 +56,7 @@ namespace Tnb.WarehouseMgr /// public async Task PrdInstock(WmsPrdInstockInput input) { + Logger.LogInformation($"【PrdInstock】传入参数 {JsonConvert.SerializeObject(input)}"); try { await _db.Ado.BeginTranAsync(); @@ -62,6 +64,7 @@ namespace Tnb.WarehouseMgr WmsPrdInstockH prdInstockH = _db.Queryable().Where(r => r.prd_bill_code == input.prd_bill_code).First(); string prd_instock_code_id = ""; + string type = ""; // 新建主表 if (prdInstockH == null) { @@ -85,6 +88,7 @@ namespace Tnb.WarehouseMgr await _db.Insertable(wmsPrdInstockH).ExecuteCommandAsync(); prd_instock_code_id = wmsPrdInstockH.id; + type = input.type; } else { @@ -95,6 +99,8 @@ namespace Tnb.WarehouseMgr pqty = input.pqty, rqty = input.rqty }).Where(r => r.id == prd_instock_code_id).ExecuteCommandAsync(); + + type = prdInstockH.type; } List WmsPrdInstockDs = new List(); @@ -152,9 +158,12 @@ namespace Tnb.WarehouseMgr BasLocation endlocation_ssx = null; string startlocation_id_ssx = null; - // 注塑线边库到2,4输送线 - if (startLocation.wh_id == "32604516180501") + + + if (type == "25019163616533") { + 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(); @@ -169,35 +178,87 @@ namespace Tnb.WarehouseMgr { startlocation_id_ssx = "32609093546005"; } + + WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + + // 生成到输送线任务 + CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput(); + commonCreatePretaskInput1.startlocation_id = startLocation.id; + commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id; + commonCreatePretaskInput1.carry_id = wmsCarryH.id; + commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput1.biz_type = ""; + commonCreatePretaskInput1.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput1.isExcuteMission = false; + Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1); + if (res1.code != HttpStatusCode.OK) + { + throw new Exception($"注塑车间生成到输送线的任务失败 {res1.msg}"); + } + + // 生成到中储仓任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"注塑车间生成到中储仓的任务失败 {res2.msg}"); + } + } + else if (type == "25019172714005") + { + Logger.LogInformation($"【PrdInstock】挤出车间生产提报"); + WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + + // 生成到中储仓任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startLocation.id; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"挤出车间生成到中储仓的任务失败 {res2.msg}"); + } + } + else if (type == "25019191681045") + { + Logger.LogInformation($"【PrdInstock】包装车间生产提报"); + WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); + + // 生成到中储仓任务 + CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); + commonCreatePretaskInput2.startlocation_id = startLocation.id; + commonCreatePretaskInput2.endlocation_id = endLocation.id; + commonCreatePretaskInput2.carry_id = wmsCarryH.id; + commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; + commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; + commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; + + Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); + if (res2.code != HttpStatusCode.OK) + { + throw new Exception($"包装车间生成到中储仓的任务失败 {res2.msg}"); + } } - WmsCarryH wmsCarryH = await _db.Queryable().Where(r => r.id == wmsPrdInstockD.carry_id).FirstAsync(); - - // 生成到输送线任务 - CommonCreatePretaskInput commonCreatePretaskInput1 = new CommonCreatePretaskInput(); - commonCreatePretaskInput1.startlocation_id = startLocation.id; - commonCreatePretaskInput1.endlocation_id = endlocation_ssx.id; - commonCreatePretaskInput1.carry_id = wmsCarryH.id; - commonCreatePretaskInput1.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput1.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput1.biz_type = ""; - commonCreatePretaskInput1.require_id = wmsPrdInstockD.id; - commonCreatePretaskInput1.isExcuteMission = false; - Entities.Dto.Outputs.Result res1 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput1); - - // 生成到中储仓任务 - CommonCreatePretaskInput commonCreatePretaskInput2 = new CommonCreatePretaskInput(); - commonCreatePretaskInput2.startlocation_id = startlocation_id_ssx; - commonCreatePretaskInput2.endlocation_id = endLocation.id; - commonCreatePretaskInput2.carry_id = wmsCarryH.id; - commonCreatePretaskInput2.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput2.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput2.biz_type = WmsWareHouseConst.BIZTYPE_WMSPRDINSTOCK_ID; - commonCreatePretaskInput2.require_id = wmsPrdInstockD.id; - commonCreatePretaskInput2.isExcuteMission = false; - commonCreatePretaskInput2.isChangeCarryLoc2StartLoc = false; - - Entities.Dto.Outputs.Result res2 = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput2); } diff --git a/apihost/Tnb.API.Entry/Configurations/Cache.json b/apihost/Tnb.API.Entry/Configurations/Cache.json index ed558c59..6b399190 100644 --- a/apihost/Tnb.API.Entry/Configurations/Cache.json +++ b/apihost/Tnb.API.Entry/Configurations/Cache.json @@ -1,13 +1,13 @@ { "Cache": { "CacheType": "RedisCache", //MemoryCache - "ip": "127.0.0.1", + "ip": "192.168.11.109", "port": 6379, "password": "05jWEoJa8v", "RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0" }, "Redis": { - "ip": "127.0.0.1", + "ip": "192.168.11.109", "port": 6379, "password": "05jWEoJa8v", "RedisConnectionString": "{0}:{1},password={2}, poolsize=500,ssl=false,defaultDatabase=0" diff --git a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json index cedc7a1b..3195bfb6 100644 --- a/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json +++ b/apihost/Tnb.API.Entry/Configurations/ConnectionStrings.json @@ -2,8 +2,8 @@ "ConnectionStrings": { "ConfigId": "default", "DBType": "PostgreSQL", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp;Sqlite; - //"Host": "192.168.11.109", - "Host": "127.0.0.1", + "Host": "192.168.11.109", + //"Host": "127.0.0.1", "Port": "5432", //"DBName": "tianyi_db", //"UserName": "postgres",