From fc57a19cf84f3330f9d238b4a1118b517ed51336 Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Tue, 10 Sep 2024 17:42:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8E=B0=E5=9C=BA=E9=97=AE=E9=A2=98=E5=A4=84?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E7=94=B5=E6=A2=AF=E9=80=BB=E8=BE=91=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 36 ++- .../Dto/Queries/InStockStrategyQuery.cs | 7 +- .../Dto/Queries/OutStockStrategyQuery.cs | 7 +- .../Entity/WmsPretaskH.part.cs | 5 + .../Entity/WmsStockReportCode.cs | 18 +- .../Entity/WmsStockReportH.part.cs | 2 +- .../Enums/EnumLocationType.cs | 1 + .../IWareHouseService.cs | 1 + .../Tnb.WarehouseMgr/DeviceProviderService.cs | 14 +- .../Tnb.WarehouseMgr/ErpToWmsService.cs | 7 + .../Tnb.WarehouseMgr/WareHouseService.cs | 205 ++++++++++++++++-- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 14 +- .../WmsCarryStockReportService.cs | 10 +- .../WmsEmptyOutstockService .cs | 9 +- .../WmsMaterialSignHService.cs | 134 ++++++++---- .../WmsMaterialTransferService.cs | 6 +- .../WmsPDAEmptyOutstockService .cs | 4 +- .../Tnb.WarehouseMgr/WmsPrdInstockHService.cs | 1 - .../Tnb.WarehouseMgr/WmsSaleReleaseService.cs | 17 +- .../WmsTransferOutstockService.cs | 2 +- 20 files changed, 410 insertions(+), 90 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 073b0d57..17dc335d 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -2179,14 +2179,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 剩余可放托数 await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(r => r.value == "2") .Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync(); + + } } #endregion } + + + + List wmsCarryHs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.location_id == startloc.id).ToListAsync(); - if (wmsCarryHs.Count > 1) + if (wmsCarryHs.Count > 1) { LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上存在多个托盘{string.Join(',', wmsCarryHs.Select(x => x.carry_code))}"); continue; @@ -2199,6 +2205,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA WmsCarryH wmsCarryH = wmsCarryHs.FirstOrDefault(); WmsElevatorH wmsElevatorH = null; + + string elevatorSno = ""; // 选电梯 if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID) { @@ -2206,10 +2214,32 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA var floor3FirstSelectElevatorTasknums = await db_agvElevatorTaskExceptionHandles.Queryable().Where(p => p.key == "floor3FirstSelectElevatorTasknums").FirstAsync(); wmsElevatorH = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.elevator_code == floor3FirstSelectElevator.value).FirstAsync(); + elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", ""); + + + // 检查有没有同时从同个暂存区分区发到同个电梯任务 + if (wmsElevatorH.task_nums + wmsElevatorH.carry_count > 0) + { + List currentAreaLocs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(r => r.name == 切换发货区).Select(r => r.location_code).ToListAsync(); + // 同个暂存分区同个电梯的托盘 + List _carrys = await db_agvElevatorTaskExceptionHandles.Queryable() + .InnerJoin((a, b) => currentAreaLocs.Contains(a.startlocation_code) && a.carry_code == b.carry_code + && a.endlocation_code == b.startlocation_code && a.endlocation_code == $"DT-3-{elevatorSno}") + .Where((a, b) => (a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID) + || (b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID && b.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID)).Select((a, b) => a.carry_code).ToListAsync(); + + if (_carrys.Count > 0) + { + LoggerAgvElevatorTask.LogInformation($"出现同时从同个暂存区分区发到同个电梯{wmsElevatorH.elevator_code}的托盘{string.Join(',', _carrys)},等待托盘任务完成"); + continue; + } + } + floor3FirstSelectElevatorTasknums.value = (int.Parse(floor3FirstSelectElevatorTasknums.value) - 1).ToString(); if (floor3FirstSelectElevatorTasknums.value == "0") { + LoggerAgvElevatorTask.LogInformation($"重置首选电梯为{(wmsElevatorH.elevator_code == "Elevator3" ? "Elevator4" : "Elevator3")}"); // 选择另一个电梯座位首选电梯 await db_agvElevatorTaskExceptionHandles.Updateable().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3")) .Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync(); @@ -2221,8 +2251,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA .Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync(); } - string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", ""); - List wmsPointHs = await db_agvElevatorTaskExceptionHandles.Queryable().Where(it => it.status == 1).ToListAsync(); List points = new List(); @@ -2280,6 +2308,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA bool isOk = await _wareHouseService.GenPreTask(preTasks, null!, db_agvElevatorTaskExceptionHandles); if (isOk) { + LoggerAgvElevatorTask.LogInformation($"成功下发预任务 {string.Join(',', preTasks.Select(r => r.bill_code))}"); + LoggerAgvElevatorTask.LogInformation($"成功下发载具 {string.Join(',', preTasks.Select(r => r.carry_code))}"); //查询库位表 BasLocation location = await db_agvElevatorTaskExceptionHandles.Queryable().SingleAsync(it => it.id == startloc.id); { diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/InStockStrategyQuery.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/InStockStrategyQuery.cs index 9aa362b4..2c73df19 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/InStockStrategyQuery.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/InStockStrategyQuery.cs @@ -1,4 +1,6 @@ -namespace Tnb.WarehouseMgr.Entities.Dto +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Dto { /// /// 入库策略输入参数 @@ -34,5 +36,8 @@ // 策略编号 public string PolicyCode { get; set; } + + // 策略编号 + public ISqlSugarClient dbConn { get; set; } = null; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs index 99e2c9ae..e088f99b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/OutStockStrategyQuery.cs @@ -1,4 +1,6 @@ -namespace Tnb.WarehouseMgr.Entities.Dto +using SqlSugar; + +namespace Tnb.WarehouseMgr.Entities.Dto { public class OutStockStrategyQuery { @@ -52,5 +54,8 @@ // 策略编号 public string PolicyCode { get; set; } + + // 策略编号 + public ISqlSugarClient dbConn { get; set; } = null; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPretaskH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPretaskH.part.cs index e35603c6..afeef7e0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPretaskH.part.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsPretaskH.part.cs @@ -18,4 +18,9 @@ public partial class WmsPretaskH : ITaskManagerDel /// [SugarColumn(IsIgnore = true)] public string third_eqp_type { get; set; } + /// + /// 巷道 + /// + [SugarColumn(IsIgnore = true)] + public string passage { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs index 69c50463..f16bcaa8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportCode.cs @@ -17,7 +17,7 @@ public partial class WmsStockReportCode : BaseEntity /// /// 主表ID /// - public string? report_id { get; set; } + //public string? report_id { get; set; } ///// ///// 载具ID @@ -52,7 +52,7 @@ public partial class WmsStockReportCode : BaseEntity /// /// 条码数量 /// - public decimal codeqty { get; set; } + public decimal? codeqty { get; set; } /// /// 单位ID @@ -84,6 +84,10 @@ public partial class WmsStockReportCode : BaseEntity /// public DateTime? time_stamp { get; set; } + /// + /// 物料名称 + /// + public string? material_name { get; set; } /// /// 规格型号 /// @@ -116,4 +120,14 @@ public partial class WmsStockReportCode : BaseEntity /// public string? warehouse_name { get; set; } + /// + /// 区域编码 + /// + public string? region_code { get; set; } + + /// + /// 区域名称 + /// + public string? region_name { get; set; } + } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs index 42af197c..1aad1ce8 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/WmsStockReportH.part.cs @@ -18,7 +18,7 @@ public partial class WmsStockReportH //[SugarColumn(IsIgnore = true)] //public List Details { get; set; } //[SugarColumn(IsIgnore = true)] - public decimal codeqty { get; set; } + public decimal? codeqty { get; set; } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumLocationType.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumLocationType.cs index afa934c4..31afce51 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumLocationType.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Enums/EnumLocationType.cs @@ -10,5 +10,6 @@ 出库库位, 出入库位, 分拣库位, + 人工管理库位, } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index 07d7b3eb..da180542 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -196,6 +196,7 @@ namespace Tnb.WarehouseMgr.Interfaces /// Task> PathAlgorithmsEle(string pStartId, string pEndId, int ele); Task SsxControl(WmsDistaskH disTask, string action); + Task SsxControl_complete(WmsDistaskH disTask, string action); Func AddUnExecuteTask { get; set; } Task Check(string code, string action); /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index bd730732..0446da03 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -290,10 +290,12 @@ namespace Tnb.WarehouseMgr if (flag) { await _wareHouseService.SsxControl(dis, "UNLOAD"); + Logger.Information($"【UnloadConfirm】 当前放货,任务编号:{input.taskCode} 确认成功"); return await ToApiResult(HttpStatusCode.OK, "成功"); } else { + Logger.Information($"【UnloadConfirm】 当前放货,任务编号:{input.taskCode} 确认信号不允许"); return await ToApiResult(HttpStatusCode.InternalServerError, "失败"); } } @@ -304,10 +306,12 @@ namespace Tnb.WarehouseMgr { // 二楼机械臂 await _wareHouseService.Floor2MechanicalConfirm(dis, "UNLOAD"); + Logger.Information($"【UnloadConfirm】 当前放货,任务编号:{input.taskCode} 确认成功"); return await ToApiResult(HttpStatusCode.OK, "成功"); } else { + Logger.Information($"【UnloadConfirm】 当前放货,任务编号:{input.taskCode} 确认成功"); return await ToApiResult(HttpStatusCode.OK, "成功"); } } @@ -316,6 +320,7 @@ namespace Tnb.WarehouseMgr { Logger.LogError(ex.Message); Logger.LogError(ex.StackTrace); + Logger.Information($"【UnloadConfirm】 当前放货,任务编号:{input.taskCode} 确认失败"); return await ToApiResult(HttpStatusCode.InternalServerError, $"放货确认..................失败 原因是{ex.Message}"); throw; } @@ -915,7 +920,7 @@ namespace Tnb.WarehouseMgr }; Logger.Information($"taskCompleUpInput json parameter:{JsonConvert.SerializeObject(taskCompleUpInput)}"); await _wareHouseService.TaskComplate(taskCompleUpInput); - await _wareHouseService.SsxControl(disTask, "UNLOAD"); + await _wareHouseService.SsxControl_complete(disTask, "UNLOAD"); await _wareHouseService.Floor2MechanicalComplete(disTask, "UNLOAD"); @@ -960,6 +965,13 @@ namespace Tnb.WarehouseMgr }) .Where(it => it.elevator_id == wmsElevatorH.elevator_id).ExecuteCommandAsync(); + var floor3FirstSelectElevator = await _db.Queryable().Where(p => p.key == "floor3FirstSelectElevator").FirstAsync(); + if (floor3FirstSelectElevator.value == input.elevator_code) + { + // 剩余可放托数 + await _db.Updateable().SetColumns(r => r.value == "2") + .Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync(); + } List elevatorTasks = _db.Queryable() .Where(r => r.startlocation_code.Contains($"DT") && r.endlocation_code.Contains($"DT") && r.act_start_date == null && r.act_end_date == null diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs index a5d49be8..82ba6289 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ErpToWmsService.cs @@ -5,6 +5,7 @@ using JNPF.Common.Enums; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; +using JNPF.Systems.Entitys.Permission; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Authorization; @@ -1218,6 +1219,12 @@ namespace Tnb.WarehouseMgr { wmsRawmatTransferinstockH.outstockorg_id = org_erpExtendField.pk_org_v; wmsRawmatTransferinstockH.outstockorg_code = org_erpExtendField.pk_org; + + var OrganizeEntity = await db.Queryable().Where(a => a.Id == org_erpExtendField.table_id).FirstAsync(); + if (OrganizeEntity != null) + { + wmsRawmatTransferinstockH.outstockorg_name = OrganizeEntity.FullName; + } } else { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 228c9eb9..f6f04172 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -276,7 +276,11 @@ namespace Tnb.WarehouseMgr List items = new(); try { - var db = _db.CopyNew(); + var db = input.dbConn; + if (input.dbConn == null) + { + db = _db.CopyNew(); + } WmsInstockPolicies policy = await db.Queryable().Where(it => it.status == 1 && (string.IsNullOrEmpty(input.PolicyCode)|| it.bill_code == input.PolicyCode)).FirstAsync(); if (policy == null) @@ -307,7 +311,7 @@ namespace Tnb.WarehouseMgr .AndIF(!string.IsNullOrEmpty(input.passage), it => it.passage == input.passage) .ToExpression(); - items = await _db.CopyNew().Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); + items = await db.Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); } catch (Exception) { @@ -325,7 +329,12 @@ namespace Tnb.WarehouseMgr List items = new(); try { - WmsInstockPolicies policy = await _db.CopyNew().Queryable().Where(it => it.status == 1).FirstAsync(); + var db = input.dbConn; + if (input.dbConn == null) + { + db = _db.CopyNew(); + } + WmsInstockPolicies policy = await db.Queryable().Where(it => it.status == 1).FirstAsync(); if (policy == null) { throw new AppFriendlyException("没有可用的策略", 500); @@ -337,7 +346,7 @@ namespace Tnb.WarehouseMgr .And(it => it.is_type == ((int)EnumLocationType.分拣库位).ToString()) .And(it => it.is_use == ((int)EnumCarryStatus.空闲).ToString()) .ToExpression(); - items = await _db.CopyNew().Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); + items = await db.Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); } catch (Exception) { @@ -356,7 +365,12 @@ namespace Tnb.WarehouseMgr List items = new(); try { - WmsInstockPolicies policy = await _db.CopyNew().Queryable().Where(it => it.status == 1).FirstAsync(); + var db = input.dbConn; + if (input.dbConn == null) + { + db = _db.CopyNew(); + } + WmsInstockPolicies policy = await db.Queryable().Where(it => it.status == 1).FirstAsync(); if (policy == null) { throw new AppFriendlyException("没有可用的策略", 500); @@ -368,7 +382,7 @@ namespace Tnb.WarehouseMgr .And(it => it.is_type == ((int)EnumLocationType.出入库位).ToString()) .And(it => it.is_use == ((int)EnumCarryStatus.空闲).ToString()) .ToExpression(); - items = await _db.CopyNew().Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); + items = await db.Queryable().Where(whereExp).OrderBy(policy.policy).ToListAsync(); } catch (Exception) { @@ -472,7 +486,11 @@ namespace Tnb.WarehouseMgr _ = whereExprable.And(carryStatusFilterExp); Expression> whereExpr = whereExprable.ToExpression(); - SqlSugarClient cyDb = _db.CopyNew(); + var cyDb = input.dbConn; + if (input.dbConn == null) + { + cyDb = _db.CopyNew(); + } List> items = cyDb.Queryable().LeftJoin((a, b) => a.id == b.carry_id) .LeftJoin((a, b, c) => a.location_id == c.id) @@ -513,7 +531,11 @@ namespace Tnb.WarehouseMgr public async Task> OutStockStrategy([FromQuery] OutStockStrategyQuery input) { - SqlSugarClient cyDb = _db.CopyNew(); + var cyDb = input.dbConn; + if (input.dbConn == null) + { + cyDb = _db.CopyNew(); + } List busyPassages = new(); if (input.AvoidBusyPassage) { @@ -915,8 +937,8 @@ namespace Tnb.WarehouseMgr putdic.Add("ZS-A03-1", new string[] { "hxjA", "A5允许入空箱", }); getdic.Add("ZS-A03-2", new string[] { "hxjA", "A5允许取满箱" }); - putdic.Add("ZS-A04-1", new string[] { "hxjA", "A6允许入空箱", }); - getdic.Add("ZS-A04-2", new string[] { "hxjA", "A6允许取满箱" }); + putdic.Add("ZS-D06-1", new string[] { "hxjA", "A6允许入空箱", }); + getdic.Add("ZS-D06-2", new string[] { "hxjA", "A6允许取满箱" }); putdic.Add("ZS-A05-1", new string[] { "hxjA", "A7允许入空箱", }); getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7允许取满箱" }); @@ -1028,7 +1050,7 @@ namespace Tnb.WarehouseMgr 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-D06-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" }); @@ -1067,7 +1089,7 @@ namespace Tnb.WarehouseMgr 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-D06-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" }); @@ -1116,6 +1138,131 @@ namespace Tnb.WarehouseMgr } + + public async Task SsxControl_complete(WmsDistaskH disTask, string action) + { + Logger.Information($"输送线控制SsxControl_complete传入参数: {JsonConvert.SerializeObject(disTask)} {action}"); + + Dictionary putdic = new Dictionary(); + Dictionary getdic = new Dictionary(); + getdic.Add("SSX-021-005", new string[] { "YTCS", "FullOut_CS05Done", "true" }); + getdic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11出箱完毕", "true" }); + getdic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12出箱完毕", "true" }); + + getdic.Add("ZZ-01-02", new string[] { "外包装箱码垛线", "WBZX_x1_take_mtp", "true" }); + getdic.Add("ZZ-02-02", new string[] { "外包装箱码垛线", "WBZX_x2_take_mtp", "true" }); + + + getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "右输送线上层允许出箱3", "true" }); + getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "左输送线上层允许出箱1", "true" }); + getdic.Add("SSX-011-008", new string[] { "东面提升机输送线", "入库输送线8出箱完毕", "true" }); + getdic.Add("ZS-C01-2", new string[] { "hxjC", "A2AGV允许入满箱", "true" }); + getdic.Add("ZS-C02-2", new string[] { "hxjC", "A3AGV允许入满箱", "true" }); + getdic.Add("ZS-C03-2", new string[] { "hxjC", "A4AGV允许入满箱", "true" }); + 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-D06-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" }); + + + + putdic.Add("SSX-021-007", new string[] { "东面提升机输送线", "出库输送线7入箱完毕", "true" }); + putdic.Add("SSX-011-006", new string[] { "YTCS", "EmptyIn_CS06Done", "true" }); + putdic.Add("SSX-021-003", new string[] { "YTCS", "AgvFullIn_CS03Done", "true" }); + putdic.Add("SSX-021-001", new string[] { "YTCS", "CtuEmptyIn_CS01Done", "true" }); + putdic.Add("ZSSSXCTU02", new string[] { "YTCS", "右输送线下层允许入箱4", "true" }); + putdic.Add("ZSSSXCTU01", new string[] { "YTCS", "左输送线下层允许入箱2", "true" }); + putdic.Add("SSX-121-009", new string[] { "东面提升机输送线", "上升降机9入箱完毕", "true" }); + putdic.Add("SSX-121-010", new string[] { "东面提升机输送线", "上升降机10入箱完毕", "true" }); + putdic.Add("YCLCKBGW", new string[] { "CP8", "PutDoneEmptyBox", "true" }); + putdic.Add("ZS-C01-1", new string[] { "hxjC", "A2AGV允许出空箱", "true" }); + putdic.Add("ZS-C02-1", new string[] { "hxjC", "A3AGV允许出空箱", "true" }); + putdic.Add("ZS-C03-1", new string[] { "hxjC", "A4AGV允许出空箱", "true" }); + 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-D06-1", new string[] { "hxjA", "A6AGV允许出空箱", "false" }); + 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允许出空箱", "false" }); + putdic.Add("ZS-A12-1", new string[] { "hxjA", "A14AGV允许出空箱", "true" }); + + if (action == "LOAD")//取货 + { + if (getdic.Keys.Contains(disTask.startlocation_code)) + { + var strarr = getdic.Where(p => p.Key == disTask.startlocation_code).First().Value; + Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase) + { + ["DevName"] = strarr[0], + ["token"] = _eleCtlCfg.token, + ["TagName"] = strarr[1], + ["Value"] = strarr[2], + }; + Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}"); + var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); + Logger.Information($"SsxControlLOAD:{str}"); + //Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); + } + } + else if (action == "UNLOAD")//放货 + { + if (putdic.Keys.Contains(disTask.endlocation_code)) + { + var strarr = putdic.Where(p => p.Key == disTask.endlocation_code).First().Value; + Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase) + { + ["DevName"] = strarr[0], + ["token"] = _eleCtlCfg.token, + ["TagName"] = strarr[1], + ["Value"] = strarr[2], + }; + Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}"); + var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); + Logger.Information($"SsxControlUNLOAD:{str}"); + //Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}"); + } + } + + } + + /// /// 二楼机械臂 /// @@ -1480,6 +1627,35 @@ namespace Tnb.WarehouseMgr agvElevatorTasks = agvElevatorTasks.Where(x => !equalEndLocPreTasks.Contains(x.endlocation_code)).ToList(); } + #region 原材料仓同巷道任务出库控制同时只发一条 + // 原材料仓的未完成任务 + List wmspretasks_ycl = await db.Queryable() + .InnerJoin((a, b) => a.endlocation_id == b.id) + .InnerJoin((a, b, c) => a.area_id == c.id) + .InnerJoin((a, b, c, d) => a.startlocation_id == d.id) + .Where((a, b, c, d) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID + && b.is_use == "0" && d.is_type == "0" && b.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID) + .Select((a, b, c, d) => new WmsPretaskH + { + move_num = c.move_num, + third_eqp_type = c.third_eqp_type, + passage = d.passage + }, true) + .ToListAsync(); + // 原材料仓的执行中任务 + List wmspretasksrun_ycl = wmspretasks_ycl.Where(r => r.status == WmsWareHouseConst.PRETASK_BILL_STATUS_YXF_ID || r.status == WmsWareHouseConst.PRETASK_BILL_STATUS_START_ID).ToList(); + + // 过滤normalPreTasks中的原材料仓的任务 + normalPreTasks = normalPreTasks.Where(r => !wmspretasks_ycl.Select(a => a.id).Contains(r.id)).ToList(); + // 过滤原材料仓同巷道的正在执行的任务 + var yclTasks = wmspretasks_ycl.Where(r => !wmspretasksrun_ycl.Select(a => a.passage).Contains(r.passage)).ToList(); + // 过滤重复巷道的预任务 + yclTasks = yclTasks.OrderBy(r => r.passage).GroupBy(r => r.passage).Select(r => { return r.ToList()[0]; }).OrderBy(r => r.bill_code).ToList(); + + normalPreTasks = normalPreTasks.Concat(yclTasks).ToList(); + #endregion + + #region 三楼三四号梯如果与判断一托下有冲突 #region 电梯第三次改动 @@ -1507,7 +1683,7 @@ namespace Tnb.WarehouseMgr // 过滤到三楼暂存区同目标库位的正在执行的任务 var cacheLocTasks = wmspretasks_agvElevator.Where(r => !wmsdistasks_agvElevator.Select(a => a.endlocation_id).Contains(r.endlocation_id)).ToList(); // 过滤重复目标库位的预任务 - cacheLocTasks = cacheLocTasks.OrderBy(r => r.endlocation_code).GroupBy(r => r.endlocation_code).Select(r => { return r.ToList()[0]; }).ToList(); + cacheLocTasks = cacheLocTasks.OrderBy(r => r.endlocation_code).GroupBy(r => r.endlocation_code).Select(r => { return r.ToList()[0]; }).OrderBy(r => r.bill_code).ToList(); normalPreTasks = normalPreTasks.Concat(cacheLocTasks).ToList(); #endregion @@ -4085,8 +4261,7 @@ namespace Tnb.WarehouseMgr code_batch = input.code_batch, Size = 100, Region_id = WmsWareHouseConst.REGION_Purchase_ID, - PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK, - AvoidBusyPassage = true + PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK }; List items = await OutStockStrategy(outStockStrategyInput); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index e3bb0ad7..86de9d57 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -200,7 +200,10 @@ namespace Tnb.WarehouseMgr { decimal? sum = input.details.Where(r => group.Select(r => r.barcode).Contains(r.barcode)).Select(r => r.codeqty).Sum(); WmsPurchaseD wmsPurchaseD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); - + if (wmsPurchaseD == null) + { + throw new Exception($"条码{string.Join(',', input.details.Select(r => r.barcode))}来源采购收货明细不存在!"); + } // 收货质检之后不能绑定 if (!string.IsNullOrEmpty(wmsPurchaseD.qc_res)) { @@ -221,6 +224,10 @@ namespace Tnb.WarehouseMgr { decimal? sum = input.details.Where(r => group.Select(r => r.barcode).Contains(r.barcode)).Select(r => r.codeqty).Sum(); WmsOutsourceD wmsOutsourceD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); + if (wmsOutsourceD == null) + { + throw new Exception($"条码{string.Join(',', input.details.Select(r => r.barcode))}来源委外收货明细不存在!"); + } decimal? bind_qty = wmsOutsourceD.bind_qty ?? 0; if (sum + bind_qty > wmsOutsourceD.outsource_quantity) { @@ -234,6 +241,10 @@ namespace Tnb.WarehouseMgr { decimal? sum = input.details.Where(r => group.Select(r => r.barcode).Contains(r.barcode)).Select(r => r.codeqty).Sum(); WmsRawmatTransferinstockD wmsRawmatTransferinstockD = await _db.Queryable().Where(r => r.id == group.Key.require_id).FirstAsync(); + if (wmsRawmatTransferinstockD == null) + { + throw new Exception($"条码{string.Join(',', input.details.Select(r => r.barcode))}来源原材料调拨入库明细不存在!"); + } decimal? bind_qty = wmsRawmatTransferinstockD.bind_qty ?? 0; if (sum + bind_qty > wmsRawmatTransferinstockD.qty) @@ -339,7 +350,6 @@ namespace Tnb.WarehouseMgr throw new Exception($"以下条码已被绑定:{string.Join(',', repeat_wmsCarryCodes.Select(r => r.barcode))}"); } - List WmsCarryCodes = new List(); WmsCarrybindH wmsCarrybindH = new WmsCarrybindH(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs index e3eef7ff..7322f5c5 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryStockReportService.cs @@ -71,8 +71,8 @@ namespace Tnb.WarehouseMgr { warehouse_name = c.whname, carry_id = b.id, - carry_code = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, - carry_name = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, + carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, + carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, carry_status = b.is_lock == 1 ? "锁定" : "未锁定", carry_type = d.carrystd_name, location_code = a.location_code, @@ -146,7 +146,7 @@ namespace Tnb.WarehouseMgr if (report.carry_code != "空托盘堆垛") { - List curCarryCodes = items.FindAll(x => x.carry_id == itGroup.Key.carry_id); + List curCarryCodes = items.FindAll(x => !string.IsNullOrEmpty(x.carry_id) && x.carry_id == itGroup.Key.carry_id); List wmsCarryStockReportCodes = new List(); int index = 0; @@ -230,8 +230,8 @@ namespace Tnb.WarehouseMgr { warehouse_name = c.whname, carry_id = b.id, - carry_code = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, - carry_name = string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, + carry_code = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_code, + carry_name = a.is_use == "1" && string.IsNullOrEmpty(b.carry_code) ? "空托盘堆垛" : b.carry_name, carry_status = b.is_lock == 1 ? "锁定" : "未锁定", carry_type = d.carrystd_name, location_code = a.location_code, diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs index 7ecdcaff..c2a9483c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsEmptyOutstockService .cs @@ -68,7 +68,8 @@ namespace Tnb.WarehouseMgr SemaphoreSlim semaphoreSlim = null; try { - semaphoreSlim = _wareHouseService.GetSemaphore("outstock", input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString()); + string warehouse_id = input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString(); + semaphoreSlim = _wareHouseService.GetSemaphore("outstock", warehouse_id); await semaphoreSlim.WaitAsync(); await _db.Ado.BeginTranAsync(); @@ -83,9 +84,10 @@ namespace Tnb.WarehouseMgr OutStockStrategyQuery OutStockStrategyInput = new() { carrystd_id = input.data[nameof(OutStockStrategyQuery.carrystd_id)].ToString(), - warehouse_id = input.data[nameof(OutStockStrategyQuery.warehouse_id)].ToString(), + warehouse_id = warehouse_id, Size = qty }; + List? carrys = await _wareHouseService.OutStockStrategy(OutStockStrategyInput); Logger.Information($"根据出库策略获取的载具数量:{carrys?.Count}"); //var carrys = await _db.Queryable().LeftJoin((a, b) => a.location_id == b.id) @@ -253,7 +255,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Logger.Information($"空载具出库错误", ex); + Logger.Information($"空载具出库错误", ex.Message); + Logger.Information($"空载具出库错误", ex.StackTrace); await _db.Ado.RollbackTranAsync(); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs index db0fd55b..3af6f813 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialSignHService.cs @@ -179,57 +179,113 @@ namespace Tnb.WarehouseMgr List _wmsCarryCodes = _db.Queryable().Where(r => r.carry_id == wmsCarryH.id).ToList(); await _db.Updateable().SetColumns(r => r.carry_status == (_wmsCarryCodes.Count == 0 ? "0" : r.carry_status)).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync(); - switch (carryLoc.wh_id) + await _db.Updateable(wmsCarryCodes).ExecuteCommandAsync(); + + wmsMaterialSignH.warehouse_sign_id = carryLoc.wh_id; + + if (_wmsCarryCodes.Count > 0) { - case WmsWareHouseConst.WAREHOUSE_YCL_ID: - { - - await _db.Updateable(wmsCarryCodes).ExecuteCommandAsync(); - - await _wareHouseService.s_taskExecuteSemaphore_YCLInstock.WaitAsync(); - wmsMaterialSignH.warehouse_sign_id = WmsWareHouseConst.WAREHOUSE_YCL_ID; - wmsMaterialSignH.warehouse_instock_id = WmsWareHouseConst.WAREHOUSE_YCL_ID; - try + switch (carryLoc.wh_id) + { + case WmsWareHouseConst.WAREHOUSE_YCL_ID: { - InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_YCLCache_ID }; - List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); - if (endLocations.Count == 0) + try { - throw new AppFriendlyException("没有可以回库的库位", 500); + await _wareHouseService.s_taskExecuteSemaphore_YCLInstock.WaitAsync(); + wmsMaterialSignH.warehouse_instock_id = WmsWareHouseConst.WAREHOUSE_YCL_ID; + InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = "1", Size = 1, AvoidBusyPassage = true, Region_id = WmsWareHouseConst.REGION_YCLCache_ID }; + List endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); + if (endLocations.Count == 0) + { + throw new AppFriendlyException("没有可以回库的库位", 500); + } + CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput(); + commonCreatePretaskInput.startlocation_id = carryLoc.id; + commonCreatePretaskInput.endlocation_id = endLocations[0].id; + commonCreatePretaskInput.carry_id = wmsCarryH.id; + commonCreatePretaskInput.carry_code = wmsCarryH.carry_code; + commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; + commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WmsMaterialSign_ID; + + Logger.LogInformation($"【MaterialSign】 开始生成原材料仓回库任务 起点{carryLoc.location_code} 终点{endLocations[0].location_code} 托盘 {wmsCarryH.carry_code}"); + + Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db); + if (res.code != HttpStatusCode.OK) + { + throw new AppFriendlyException(res.msg, 500); + } } - CommonCreatePretaskInput commonCreatePretaskInput = new CommonCreatePretaskInput(); - commonCreatePretaskInput.startlocation_id = carryLoc.id; - commonCreatePretaskInput.endlocation_id = endLocations[0].id; - commonCreatePretaskInput.carry_id = wmsCarryH.id; - commonCreatePretaskInput.carry_code = wmsCarryH.carry_code; - commonCreatePretaskInput.task_type = WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID; - commonCreatePretaskInput.biz_type = WmsWareHouseConst.BIZTYPE_WmsMaterialSign_ID; - - Logger.LogInformation($"【MaterialSign】 开始生成原材料仓回库任务 起点{carryLoc.location_code} 终点{endLocations[0].location_code} 托盘 {wmsCarryH.carry_code}"); - - Entities.Dto.Outputs.Result res = await _wareHouseService.CommonCreatePretask(commonCreatePretaskInput, _db); - if (res.code != HttpStatusCode.OK) + catch (Exception ex) { - throw new AppFriendlyException(res.msg, 500); + throw; + } + finally + { + _wareHouseService.s_taskExecuteSemaphore_YCLInstock.Release(); } - } - catch (Exception ex) - { - throw; - } - finally - { - _wareHouseService.s_taskExecuteSemaphore_YCLInstock.Release(); - } - - break; - } + + break; + } + } } + await _db.Insertable(wmsMaterialSignH).ExecuteCommandAsync(); await _db.Insertable(wmsMaterialSignDs).ExecuteCommandAsync(); + #region 更新库存表 + + //switch (wmsDistaskH.biz_type) + //{ + // // 原材料调拨出库 + // case WmsWareHouseConst.BIZTYPE_WmsRawmatTransferoutstock_ID: + // { + // //WmsRawmatTransferoutstockD wmsRawmatTransferoutstockD = await _db.Queryable().Where(r => r.id == wmsDistaskH.source_id).FirstAsync(); + // //WmsRawmatTransferoutstockH wmsRawmatTransferoutstockH = await _db.Queryable().Where(r => r.id == wmsRawmatTransferoutstockD.bill_id).FirstAsync(); + + // //WmsTransferOrderH wmsTransferOrderH = await _db.Queryable().Where(r => r.id == wmsRawmatTransferoutstockH.transfer_order_id).FirstAsync(); + + + // break; + // } + // case WmsWareHouseConst.BIZTYPE_WMSMATERIALTRANSFER_ID: + // { + // WmsMaterialTransferD wmsMaterialTransferD = await _db.Queryable().Where(r => r.id == wmsDistaskH.source_id).FirstAsync(); + // WmsMaterialTransfer wmsMaterialTransfer = await _db.Queryable().Where(r => r.id == wmsMaterialTransferD.bill_id).FirstAsync(); + + // List wmsStockReportCodes = new List(); + // foreach (var wmsMaterialSignD in wmsMaterialSignDs) + // { + // WmsStockReportCode wmsStockReportCode = new WmsStockReportCode(); + // wmsStockReportCode.material_id = wmsMaterialSignD.id; + // wmsStockReportCode.material_code = wmsMaterialSignD.material_code; + // wmsStockReportCode.barcode = wmsMaterialSignD.barcode; + // wmsStockReportCode.code_batch = wmsMaterialSignD.code_batch; + // wmsStockReportCode.codeqty = wmsMaterialSignD.qty - wmsMaterialSignD.sign_qty; + // wmsStockReportCode.unit_id = wmsMaterialSignD.unit_id; + // wmsStockReportCode.create_id = _userManager?.User?.Id; + // wmsStockReportCode.create_time = DateTime.Now; + // wmsStockReportCode.warehouse_id = wmsMaterialTransfer.warehouse_instock; + // wmsStockReportCode. + // wmsStockReportCodes.Add(wmsStockReportCode); + // } + + + // //// todo 对接其它出库单 出库数量为签收数量 + // //if (!_wareHouseService.GetFloor1WXSGWOutstockLocation().Contains(carryLoc.id)) + // //{ + // // // todo 对接其它入库单 入库数量为签收数量 + + // //} + // break; + // } + //} + + + #endregion + + #region 上传bip switch (wmsDistaskH.biz_type) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs index 92dd1e7a..8d8c8132 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsMaterialTransferService.cs @@ -227,8 +227,7 @@ namespace Tnb.WarehouseMgr code_batch = input.code_batch, Size = input.palletCount, Region_id = WmsWareHouseConst.REGION_Purchase_ID, - PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK, - AvoidBusyPassage = true + PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK }; List items = await _wareHouseService.OutStockStrategy(outStockStrategyInput); @@ -337,8 +336,7 @@ namespace Tnb.WarehouseMgr await _db.Ado.BeginTranAsync(); OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_YCL_ID, material_id = wmsMaterialTransferD.material_id, - code_batch = input.code_batch, Size = input.palletCount,Region_id = WmsWareHouseConst.REGION_Purchase_ID,PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK, - AvoidBusyPassage = true}; + code_batch = input.code_batch, Size = input.palletCount,Region_id = WmsWareHouseConst.REGION_Purchase_ID,PolicyCode = WmsWareHouseConst.POLICY_YCLOUTSTOCK}; List items = await _wareHouseService.OutStockStrategy(outStockStrategyInput); if (items.Count == 0) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs index 7680855d..357befb9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPDAEmptyOutstockService .cs @@ -226,8 +226,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("PDA空载具出库错误", ex.Message); - Log.Error("PDA空载具出库错误", ex.StackTrace); + Logger.Error("PDA空载具出库错误", ex.Message); + Logger.Error("PDA空载具出库错误", ex.StackTrace); await _db.Ado.RollbackTranAsync(); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs index efe5aefd..cb3e60e3 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPrdInstockHService.cs @@ -274,7 +274,6 @@ namespace Tnb.WarehouseMgr 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, db); if (res2.code != HttpStatusCode.OK) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs index 6f8a0652..053c9a5c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsSaleReleaseService.cs @@ -165,7 +165,7 @@ namespace Tnb.WarehouseMgr WmsSaleD wmsOutstockD = await _db.Queryable().FirstAsync(it => it.id == input.source_id); await _db.Ado.BeginTranAsync(); //入库取终点 //出库起点 - OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.code_batch, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID }; + OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.code_batch, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID, dbConn = _db }; List> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput); decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal(); @@ -200,7 +200,7 @@ namespace Tnb.WarehouseMgr //人工发货 else { - InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID }; + InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = items_pretask.Count, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID, dbConn = _db }; endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); if (endLocations.Count < items_pretask.Count) @@ -244,11 +244,15 @@ namespace Tnb.WarehouseMgr throw new AppFriendlyException($"载具{carry.carry_code}无法选到缓存区库位,请检查电梯缓存分区配置表", 500); } #endregion + if (endLocation == null) + { + throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500); + } } //人工发货 else { - InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID }; + InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, Size = 1, Region_id = WmsWareHouseConst.REGION_CPManualOutstock_ID, dbConn = _db }; endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); if (endLocations.Count < 1) @@ -257,10 +261,6 @@ namespace Tnb.WarehouseMgr } endLocation = endLocations[0]; } - if (endLocation == null) - { - throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500); - } WmsPointH sPoint = null!; WmsPointH ePoint = null!; @@ -366,8 +366,7 @@ namespace Tnb.WarehouseMgr //所有库位加锁 string?[] ids = new[] { startLocation.id, preTasks[0].endlocation_id, endLocationId }; - _ = await _db.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync(); - + int row = await _db.Updateable().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync(); } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs index 85f982d3..9364824c 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsTransferOutstockService.cs @@ -96,7 +96,7 @@ namespace Tnb.WarehouseMgr WmsTransferOutstockD wmsOutstockD = await _db.Queryable().FirstAsync(it => it.id == input.source_id); await _db.Ado.BeginTranAsync(); //入库取终点 //出库起点 - OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.pi_code, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID }; + OutStockStrategyQuery outStockStrategyInput = new() { warehouse_id = WmsWareHouseConst.WAREHOUSE_CP_ID, material_id = wmsOutstockD.material_id, qty = input.qty, code_batch = wmsOutstockD.pi_code, Region_id = WmsWareHouseConst.REGION_CPOutstock_ID, dbConn = _db }; List> items = await _wareHouseService.OutStockStrategy_saleRelease(outStockStrategyInput); decimal canOutstockQty = items.Sum(r => r.Item3.codeqty).ParseToDecimal();