From dd86185625be4f2fb5489eb717769a46e104a2aa Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Thu, 13 Jun 2024 10:28:22 +0800 Subject: [PATCH] bug --- .../Tnb.ProductionMgr/RedisBackGround.cs | 1621 ++++++++++------- .../IWareHouseService.cs | 2 +- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 44 +- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 8 +- .../Tnb.WarehouseMgr/WareHouseService.cs | 108 +- .../Tnb.WarehouseMgr/WmsCarryBindService.cs | 16 +- .../Tnb.WarehouseMgr/WmsCarryService.cs | 19 +- 7 files changed, 1120 insertions(+), 698 deletions(-) diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 2e3555b4..311d07f3 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -1,5 +1,6 @@ using System; using System.Data; +using System.Diagnostics; using System.DirectoryServices.ActiveDirectory; using System.Dynamic; using System.Security.Cryptography.X509Certificates; @@ -15,16 +16,15 @@ using JNPF.Common.Dtos.VisualDev; using JNPF.Common.Extension; using JNPF.Common.Security; using JNPF.FriendlyException; +using JNPF.Logging; using JNPF.Systems.Interfaces.System; +using JNPF.TaskScheduler; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using NetTaste; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using NPOI.OpenXmlFormats; -using NPOI.SS.Formula.Eval; -using NPOI.SS.Formula.Functions; using Org.BouncyCastle.Asn1.X509; using Org.BouncyCastle.Asn1.X509.Qualified; using Qiniu.Util; @@ -35,6 +35,7 @@ using Tnb.BasicData.Entities; using Tnb.Common.Extension; using Tnb.Common.Redis; using Tnb.Common.Utils; +using Tnb.EquipMgr.Entities; using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Entities.Enums; @@ -53,28 +54,32 @@ namespace Tnb.ProductionMgr //redis定时获取数采数据 public class RedisBackGround : IHostedService, IDisposable { - private Timer? Readtimer; - private Timer? CheckGettimer; - private Timer? Scantimer; - private Timer? SSXcodetimer; + #region 全局变量 + private static Timer? Readtimer; + private static Timer? CheckGettimer; + private static Timer? Scantimer; + private static Timer? SSXcodetimer; // 八工位缓存区补充空托盘 - private Timer? BGWCarrySupplementtimer; + private static Timer? BGWCarrySupplementtimer; // 供料叠盘机空托盘自动入库 - private Timer? YCLGLDPJInstocktimer; + private static Timer? YCLGLDPJInstocktimer; // 外协叠盘机空托盘自动入库 - private Timer? YCLWXDPJInstocktimer; + private static Timer? YCLWXDPJInstocktimer; // 二楼上升降机 - private Timer? Floor2UpMachinecodetimer; + private static Timer? Floor2UpMachinecodetimer; // 二楼料架配送 - private Timer? Floor2timer送空托到上升降区; - private Timer? Floor2timer送满托到下升降区; - private Timer? Floor2timer移走上升降区未生成预任务且满托的料架; - private Timer? Floor2timer移走下升降区未生成预任务且空托的料架; - - // 7号线补充空料箱 - //private Timer? SSX7Supplementtimer; + private static Timer? Floor2timer送空托到上升降区; + private static Timer? Floor2timer送满托到下升降区; + private static Timer? Floor2timer移走上升降区未生成预任务且满托的料架; + private static Timer? Floor2timer移走下升降区未生成预任务且空托的料架; + public SemaphoreSlim s_taskCheckGet = new(1); + public SemaphoreSlim s_taskScan = new(1); + public SemaphoreSlim s_taskSSXcode = new(1); + public SemaphoreSlim s_taskBGWCarrySupplement = new(1); + public SemaphoreSlim s_taskYCLGLDPJInstock = new(1); + public SemaphoreSlim s_taskYCLWXDPJInstock = new(1); public SemaphoreSlim s_taskExecuteFloor2UpMachinecodetimer = new(1); public SemaphoreSlim s_task送空托到上升降区 = new(1); public SemaphoreSlim s_task送满托到下升降区 = new(1); @@ -84,6 +89,17 @@ namespace Tnb.ProductionMgr private StackExRedisHelper _redisData; private readonly IPrdInstockService _prdInstockService; private readonly ISqlSugarRepository _repository; + private readonly ISqlSugarClient db_Scantimer; + private readonly ISqlSugarClient db_CheckGettimer; + private readonly ISqlSugarClient db_SSXcodetimer; + private readonly ISqlSugarClient db_BGWCarrySupplementtimer; + private readonly ISqlSugarClient db_YCLGLDPJInstocktimer; + private readonly ISqlSugarClient db_YCLWXDPJInstocktimer; + private readonly ISqlSugarClient db_Floor2UpMachinecodetimer; + private readonly ISqlSugarClient db_Floor2timer送空托到上升降区; + private readonly ISqlSugarClient db_Floor2timer送满托到下升降区; + private readonly ISqlSugarClient db_Floor2timer移走上升降区未生成预任务且满托的料架; + private readonly ISqlSugarClient db_Floor2timer移走下升降区未生成预任务且空托的料架; private readonly IWmsPDAScanInStockService _wmsPDAScanInStock; private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; @@ -93,8 +109,21 @@ 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 构造函数 public RedisBackGround(StackExRedisHelper redisData, IPrdInstockService prdInstockService, ISqlSugarRepository repository, IWmsPDAScanInStockService wmsPDAScanInStock - , IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService, IWmsEmptyOutstockService wmsEmptyOutstockService) + , IUserManager userManager, IBillRullService billRullService, IWareHouseService wareHouseService, IWmsCarryBindService wmsCarryBindService, IWmsEmptyOutstockService wmsEmptyOutstockService) { _redisData = redisData; _prdInstockService = prdInstockService; @@ -106,29 +135,52 @@ namespace Tnb.ProductionMgr _wmsCarryBindService = wmsCarryBindService; _wmsEmptyOutstockService = wmsEmptyOutstockService; - //_redisData.rcvMsg += _redisData_rcvMsg; + db_CheckGettimer = repository.CopyNew(); + db_Scantimer = repository.CopyNew(); + db_SSXcodetimer = repository.CopyNew(); + db_BGWCarrySupplementtimer = repository.CopyNew(); + db_YCLGLDPJInstocktimer = repository.CopyNew(); + db_YCLWXDPJInstocktimer = repository.CopyNew(); + db_Floor2UpMachinecodetimer = repository.CopyNew(); + db_Floor2timer送空托到上升降区 = repository.CopyNew(); + db_Floor2timer送满托到下升降区 = repository.CopyNew(); + db_Floor2timer移走上升降区未生成预任务且满托的料架 = repository.CopyNew(); + db_Floor2timer移走下升降区未生成预任务且空托的料架 = repository.CopyNew(); + + testThread = new Thread(test); + testThread.Start(); } + #endregion + #region ctu取货 //ctu取货 private async void CheckGet(object? state) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行CheckGet"); - Dictionary getdic = new Dictionary(); - getdic.Add("SSX-021-005", new string[] { "YTCS", "AllowFullOut_CS05", "LiftCode" }); - getdic.Add("SSX-011-002", new string[] { "YTCS", "AllowAgvFullIn_CS02", "Code_CS02" }); - getdic.Add("SSX-011-004", new string[] { "YTCS", "AllowCtuFullOut_CS04", "Code_CS04" }); - - getdic.Add("SSX-011-008", new string[] { "东面提升机输送线", "入库输送线8允许出箱", "入库输送线8条码" }); - - getdic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11允许出箱", "下升降机11条码" }); - getdic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12允许出箱", "下升降机12条码" }); - getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "AllowAgvEmptyOut_CS03", "" }); - getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "AllowAgvEmptyOut_CS01", "" }); - - foreach (var key in getdic.Keys) + await s_taskCheckGet.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行CheckGet"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行CheckGet"); + + Dictionary getdic = new Dictionary(); + getdic.Add("SSX-021-005", new string[] { "YTCS", "AllowFullOut_CS05", "LiftCode" }); + getdic.Add("SSX-011-002", new string[] { "YTCS", "AllowAgvFullIn_CS02", "Code_CS02" }); + getdic.Add("SSX-011-004", new string[] { "YTCS", "AllowCtuFullOut_CS04", "Code_CS04" }); + + getdic.Add("SSX-011-008", new string[] { "东面提升机输送线", "入库输送线8允许出箱", "入库输送线8条码" }); + + getdic.Add("SSX-111-011", new string[] { "东面提升机输送线", "下升降机11允许出箱", "下升降机11条码" }); + getdic.Add("SSX-111-012", new string[] { "东面提升机输送线", "下升降机12允许出箱", "下升降机12条码" }); + getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "AllowAgvEmptyOut_CS03", "" }); + getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "AllowAgvEmptyOut_CS01", "" }); + // s_taskCheckGet + + + foreach (var key in getdic.Keys) { var strs = getdic.Where(p => p.Key == key).First().Value; @@ -146,396 +198,55 @@ namespace Tnb.ProductionMgr continue; } Logger.LogInformation($@"【定时任务CheckGet】 成功取到{strs[2]}值:{coderesult}"); - using (var _db = _repository.AsSugarClient().CopyNew()) + //using (var _db = _repository.AsSugarClient().CopyNew()) + //{ + var DistaskH = db_CheckGettimer.Queryable().Where(p => p.carry_code == coderesult && p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID && string.IsNullOrEmpty(p.extras)).First(); + + if (DistaskH != null) { - var DistaskH = _db.Queryable().Where(p => p.carry_code == coderesult && p.status == WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID && string.IsNullOrEmpty(p.extras)).First(); + Logger.LogInformation($@"【定时任务CheckGet】 成功找到载具:{coderesult} 对应的任务执行单{DistaskH.bill_code}"); + dynamic reqBody = new ExpandoObject(); + reqBody.taskCode = DistaskH.bill_code; + reqBody.slotCode = key; + reqBody.containerCode = coderesult; + CancellationTokenSource Ctu = new(); + Logger.LogInformation($"【定时任务CheckGet】 开始发送请求到 http://192.168.11.104:1880/wcs/notify/cargo 载具:{coderesult}"); + dynamic respBody = HttpClientHelper.PostStreamAsync("http://192.168.11.104:1880/wcs/notify/cargo", reqBody, Ctu.Token).Result; - if (DistaskH != null) - { - Logger.LogInformation($@"【定时任务CheckGet】 成功找到载具:{coderesult} 对应的任务执行单{DistaskH.bill_code}"); - dynamic reqBody = new ExpandoObject(); - reqBody.taskCode = DistaskH.bill_code; - reqBody.slotCode = key; - reqBody.containerCode = coderesult; - CancellationTokenSource Ctu = new(); - Logger.LogInformation($"【定时任务CheckGet】 开始发送请求到 http://192.168.11.104:1880/wcs/notify/cargo 载具:{coderesult}"); - dynamic respBody = HttpClientHelper.PostStreamAsync("http://192.168.11.104:1880/wcs/notify/cargo", reqBody, Ctu.Token).Result; - - Logger.LogInformation($"【定时任务CheckGet】 接收请求 http://192.168.11.104:1880/wcs/notify/cargo 结果 {respBody} "); - DistaskH.extras = respBody; - _db.Updateable(DistaskH).ExecuteCommand(); - Ctu.Dispose(); - } - else - { - LoggerSSX.LogInformation($@"【定时任务CheckGet】 {key}->{strs[0]} {strs[2]} + Logger.LogInformation($"【定时任务CheckGet】 接收请求 http://192.168.11.104:1880/wcs/notify/cargo 结果 {respBody} "); + DistaskH.extras = respBody; + db_CheckGettimer.Updateable(DistaskH).ExecuteCommand(); + Ctu.Dispose(); + } + else + { + LoggerSSX.LogInformation($@"【定时任务CheckGet】 {key}->{strs[0]} {strs[2]} 采集结果:{$@"任务执行(wms_distask_h)中找不到匹配的记录 任务执行需要存在载具编号(carry_code)为{coderesult} 且单据状态(status)为已下达(26126853976101) 且扩展字段(extras)为空的记录 select extras,* from wms_distask_h where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STATUS_YXD_ID}' "}"); - } } + //} } } } - catch (Exception ex) - { - Console.WriteLine("【CheckGet】" + ex.Message); - LoggerSSX.LogError(ex.ToString()); - } + } + catch (Exception ex) + { + Console.WriteLine("【CheckGet】" + ex.Message); + LoggerSSX.LogError(ex.ToString()); + } + finally + { + s_taskCheckGet.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行CheckGet {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行CheckGet {stopwatch.ElapsedMilliseconds} ms"); } } - - private static readonly Dictionary s_logLevelMap = new() - { - [LogLevel.Debug] = "DBG", - [LogLevel.Information] = "INF", - [LogLevel.Warning] = "WRN", - [LogLevel.Error] = "ERR", - }; - - - #region 日志 - - protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - - protected ILogger LoggerBGW => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customBGW{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - protected ILogger LoggerSSX => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customSSX{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - // 二楼上下升降机日志 - protected ILogger LoggerFloor2UpDownMachine => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customFloor2UpDownMachine{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - - // 二楼料架补充 - protected ILogger LoggerFloor2RackDelivery => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customFloor2RackDelivery{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - protected ILogger LoggerBGWCarrySupplement => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customBGWCarrySupplement{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - protected ILogger LoggerSSX7Supplementtimer => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customSSX7Supplementtimer{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - - protected ILogger LoggerYCLGLDPJInstock => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/customYCLGLDPJInstock{DateTime.Now:yyyyMMdd}.log", cfgOpts => - { - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => - { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; - - })).CreateLogger(this.GetType()); - #endregion - #region 八工位 - - //扫码入库 - private async void ScanInStock(object? state) - { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行ScanInStock"); - Dictionary getdic = new Dictionary(); - getdic.Add("BGWRKYCL02", new string[] { "CP8", "AllowGetFullBox1", "code1", "PutDoneEmptyBox", "false" }); - getdic.Add("BGWRKYCL01", new string[] { "CP8", "AllowGetFullBox2", "code2", "PutDoneEmptyBox", "false" }); - foreach (var key in getdic.Keys) - { - try - { - var strs = getdic.Where(p => p.Key == key).First().Value; - - - bool result = await GetBoolTag(strs[0], strs[1]); - - if (result) - { - Logger.LogInformation($"【ScanInStock】 八工位 {key} AllowGetFullBox1采集到 {result}"); - - Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase) - { - ["DevName"] = strs[0], - ["token"] = _eleCtlCfg.token, - ["TagName"] = strs[3], - ["Value"] = strs[4], - }; - Logger.LogInformation($"【ScanInStock】 八工位 {key} 发送PutDoneEmptyBox指令 {_eleCtlCfg.WriteTagUrl} {JsonConvert.SerializeObject(dicCommand)}"); - HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand).Wait(); - - - string coderesult = await GetStringTag(strs[0], strs[2]); - - Logger.LogInformation($"【ScanInStock】 八工位 {key} 获取到扫码信息: {coderesult}"); - - using (var _db = _repository.AsSugarClient().CopyNew()) - { - WmsCarryH? carry = _db.Queryable().Single(it => it.carry_code == coderesult); - Logger.LogInformation($"【ScanInStock】 八工位 {key} 查找{coderesult}绑定的托盘: {JsonConvert.SerializeObject(carry)}"); - if (carry != null) - { - if (_db.Queryable().Where(p => p.carry_id == carry.id && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).Any()) - { - Logger.LogInformation($"【ScanInStock】 八工位 {key} 托盘 {carry.id} 对应的执行任务状态(status)不是26126860808229(已完成),此时不能执行入库"); - continue; - } - - var WmsCarryCode = _db.Queryable().Where(it => it.carry_id == carry.id).OrderByDescending(it => it.id).First(); - // 用适当的字段替换 YourTimestampField - - if (WmsCarryCode != null) - { - Logger.LogInformation($"【ScanInStock】 八工位 {key} 查找到托盘{carry.carry_code}在WmsCarryCode中存在"); - - VisualDevModelDataCrInput input = new VisualDevModelDataCrInput(); - input.data = new Dictionary(); - input.data.Add("barcode", coderesult); - input.data.Add("codeqty", WmsCarryCode.codeqty);//条码数量 - input.data.Add("material_code", WmsCarryCode.material_code); - input.data.Add("extras", key);//location_code - input.data.Add("warehouse_id", "1");//TEST - input.data.Add("bill_code", "");//采购收货单号 - input.data.Add("code_batch", WmsCarryCode.code_batch!);//批次 - input.data.Add("material_specification", WmsCarryCode.material_specification!);//规格型号 - input.data.Add("container_no", WmsCarryCode.container_no!);//箱号 - input.data.Add("material_id", WmsCarryCode.material_id); - input.data.Add("id", null); - _wmsPDAScanInStock.ScanInStockByRedis(input).Wait(); - } - } - } - } - } - catch (Exception ex) - { - Console.WriteLine("【ScanInStock】" + ex.Message); - Logger.LogInformation($"【ScanInStock】 八工位扫到码发送入库请求发生异常:{ex}"); - } - } - } - - /// - /// 八工位空托盘补充 - /// - private async void BGWCarrySupplement(object? state) - { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行BGWCarrySupplement"); - Dictionary getdic = new Dictionary(); - getdic.Add("YCLCKBGW", new string[] { "CP8", "AllowPutEmptyBox1" }); - - foreach (var key in getdic.Keys) - { - try - { - var strs = getdic.Where(p => p.Key == key).First().Value; - bool result = await GetBoolTag(strs[0], strs[1]); - if (result) - { - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】读取到信号{strs[1]} 值为{result} "); - - using (var _db = _repository.AsSugarClient().CopyNew()) - { - BasLocation endLocation = _db.Queryable().Where(r => r.location_code == key).First(); - if (endLocation == null) - { - LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {key}未维护库位信息"); - continue; - } - if (endLocation.is_lock == 1) - { - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 八工位 {key} 已锁定"); - continue; - } - - // 未锁定且已占用且库位中没有记录托盘 此时认为是叠盘机送过来的 - var wmsLoc = _db.Queryable() - .LeftJoin((a, b) => a.id == b.location_id) - .Where((a, b) => a.is_lock == 0 && a.is_use == "1" - && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") - && a.is_type == "0") - .OrderBy((a, b) => a.location_code) // 当前是按库位排序出库 - .Select((a, b) => new - { - BasLocation = a, - WmsCarryH = b - }).ToList().GroupBy(p => p.BasLocation) - .Where(group => - { - // 是否存在托盘 - bool isExistsCarry = false; - foreach (var item in group) - { - if (!string.IsNullOrEmpty(item.WmsCarryH.carry_code)) - { - isExistsCarry = true; - break; - } - } - if (isExistsCarry) - return false; - else - return true; - }).Select(r => r.Key); - - - if (wmsLoc.Count() == 0) - { - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 没有未锁定且已占用且库位中没有记录托盘的数据"); - continue; - } - BasLocation startLocation = wmsLoc.First(); - - //锁定起点库位 - await _db.Updateable().SetColumns(r => r.is_lock == 1).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); - ////锁定终点库位 更新为空闲 - //await _db.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); - - - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】锁定起点库位 开始生成 {startLocation.location_code} 到 {endLocation.location_code} 预任务 "); - bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerBGWCarrySupplement); - if (!result_createPretask) - { - LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败 "); - continue; - } - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功"); - - - } - - - _ = _wareHouseService.GenTaskExecute(); - } - } - catch (Exception ex) - { - Console.WriteLine("【BGWCarrySupplement】" + ex.Message); - LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 八工位空托盘补充发生异常:{ex}"); - } - } - } - #region 弃用 @@ -622,18 +333,231 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA #endregion + #region 八工位 + + //扫码入库 + private async void ScanInStock(object? state) + { + await s_taskScan.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try + { + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行ScanInStock"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行ScanInStock"); + + Dictionary getdic = new Dictionary(); + getdic.Add("BGWRKYCL02", new string[] { "CP8", "AllowGetFullBox1", "code1", "PutDoneEmptyBox", "false" }); + getdic.Add("BGWRKYCL01", new string[] { "CP8", "AllowGetFullBox2", "code2", "PutDoneEmptyBox", "false" }); + foreach (var key in getdic.Keys) + { + var strs = getdic.Where(p => p.Key == key).First().Value; + + + bool result = await GetBoolTag(strs[0], strs[1]); + + if (result) + { + Logger.LogInformation($"【ScanInStock】 八工位 {key} {strs[1]}采集到 {result}"); + + Dictionary dicCommand = new(StringComparer.OrdinalIgnoreCase) + { + ["DevName"] = strs[0], + ["token"] = _eleCtlCfg.token, + ["TagName"] = strs[3], + ["Value"] = strs[4], + }; + Logger.LogInformation($"【ScanInStock】 八工位 {key} 发送PutDoneEmptyBox指令 {_eleCtlCfg.WriteTagUrl} {JsonConvert.SerializeObject(dicCommand)}"); + HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand).Wait(); + + + string coderesult = await GetStringTag(strs[0], strs[2]); + + Logger.LogInformation($"【ScanInStock】 八工位 {key} 获取到扫码信息: {coderesult}"); + + //using (var _db = _repository.AsSugarClient().CopyNew()) + { + WmsCarryH? carry = db_Scantimer.Queryable().Single(it => it.carry_code == coderesult); + Logger.LogInformation($"【ScanInStock】 八工位 {key} 查找{coderesult}绑定的托盘: {JsonConvert.SerializeObject(carry)}"); + if (carry != null) + { + if (db_Scantimer.Queryable().Where(p => p.carry_id == carry.id && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).Any()) + { + Logger.LogInformation($"【ScanInStock】 八工位 {key} 托盘 {carry.id} 对应的执行任务状态(status)不是26126860808229(已完成),此时不能执行入库"); + continue; + } + + var WmsCarryCode = db_Scantimer.Queryable().Where(it => it.carry_id == carry.id).OrderByDescending(it => it.id).First(); + // 用适当的字段替换 YourTimestampField + + if (WmsCarryCode != null) + { + Logger.LogInformation($"【ScanInStock】 八工位 {key} 查找到托盘{carry.carry_code}在WmsCarryCode中存在"); + + VisualDevModelDataCrInput input = new VisualDevModelDataCrInput(); + input.data = new Dictionary(); + input.data.Add("barcode", coderesult); + input.data.Add("codeqty", WmsCarryCode.codeqty);//条码数量 + input.data.Add("material_code", WmsCarryCode.material_code); + input.data.Add("extras", key);//location_code + input.data.Add("warehouse_id", "1");//TEST + input.data.Add("bill_code", "");//采购收货单号 + input.data.Add("code_batch", WmsCarryCode.code_batch!);//批次 + input.data.Add("material_specification", WmsCarryCode.material_specification!);//规格型号 + input.data.Add("container_no", WmsCarryCode.container_no!);//箱号 + input.data.Add("material_id", WmsCarryCode.material_id); + input.data.Add("id", null); + _wmsPDAScanInStock.ScanInStockByRedis(input).Wait(); + } + } + } + } + } + } + catch (Exception ex) + { + Console.WriteLine("【ScanInStock】" + ex.Message); + Logger.LogInformation($"【ScanInStock】 八工位扫到码发送入库请求发生异常:{ex}"); + } + finally + { + s_taskScan.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行ScanInStock {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行ScanInStock {stopwatch.ElapsedMilliseconds} ms"); + } + } + + /// + /// 八工位空托盘补充 + /// + private async void BGWCarrySupplement(object? state) + { + await s_taskBGWCarrySupplement.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try + { + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行BGWCarrySupplement"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行BGWCarrySupplement"); + + Dictionary getdic = new Dictionary(); + getdic.Add("YCLCKBGW", new string[] { "CP8", "AllowPutEmptyBox1" }); + + foreach (var key in getdic.Keys) + { + var strs = getdic.Where(p => p.Key == key).First().Value; + bool result = await GetBoolTag(strs[0], strs[1]); + if (result) + { + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】读取到信号{strs[1]} 值为{result} "); + + //using (var _db = _repository.AsSugarClient().CopyNew()) + { + BasLocation endLocation = db_BGWCarrySupplementtimer.Queryable().Where(r => r.location_code == key).First(); + if (endLocation == null) + { + LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {key}未维护库位信息"); + continue; + } + if (endLocation.is_lock == 1) + { + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 八工位 {key} 已锁定"); + continue; + } + + // 未锁定且已占用且库位中没有记录托盘 此时认为是叠盘机送过来的 + var wmsLoc = db_BGWCarrySupplementtimer.Queryable() + .LeftJoin((a, b) => a.id == b.location_id) + .Where((a, b) => a.is_lock == 0 && a.is_use == "1" + && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") + && a.is_type == "0") + .OrderBy((a, b) => a.location_code) // 当前是按库位排序出库 + .Select((a, b) => new + { + BasLocation = a, + WmsCarryH = b + }).ToList().GroupBy(p => p.BasLocation) + .Where(group => + { + // 是否存在托盘 + bool isExistsCarry = false; + foreach (var item in group) + { + if (!string.IsNullOrEmpty(item.WmsCarryH.carry_code)) + { + isExistsCarry = true; + break; + } + } + if (isExistsCarry) + return false; + else + return true; + }).Select(r => r.Key); + + + if (wmsLoc.Count() == 0) + { + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 没有未锁定且已占用且库位中没有记录托盘的数据"); + continue; + } + BasLocation startLocation = wmsLoc.First(); + + //锁定起点库位 + await db_BGWCarrySupplementtimer.Updateable().SetColumns(r => r.is_lock == 1).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); + ////锁定终点库位 更新为空闲 + //await _db.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); + + + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】锁定起点库位 开始生成 {startLocation.location_code} 到 {endLocation.location_code} 预任务 "); + bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerBGWCarrySupplement); + if (!result_createPretask) + { + LoggerBGWCarrySupplement.LogWarning($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成失败 "); + continue; + } + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 {startLocation.location_code} 到 {endLocation.location_code} 预任务生成成功"); + + + } + + + _ = _wareHouseService.GenTaskExecute(); + } + } + } + catch (Exception ex) + { + Console.WriteLine("【BGWCarrySupplement】" + ex.Message); + LoggerBGWCarrySupplement.LogInformation($"【BGWCarrySupplementtimer】 八工位空托盘补充发生异常:{ex}"); + } + finally + { + s_taskBGWCarrySupplement.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行BGWCarrySupplement {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行BGWCarrySupplement {stopwatch.ElapsedMilliseconds} ms"); + } + } + /// /// 供料叠盘机空托盘自动入库 /// private async void YCLGLDPJInstock(object? state) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行YCLGLDPJInstock"); - Dictionary getdic = new Dictionary(); - getdic.Add("SGW-YCL", new string[] { "CP3-5", "AllowGetFullBox" }); - - foreach (var key in getdic.Keys) + await s_taskYCLGLDPJInstock.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行YCLGLDPJInstock"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行YCLGLDPJInstock"); + + Dictionary getdic = new Dictionary(); + getdic.Add("SGW-YCL", new string[] { "CP3-5", "AllowGetFullBox" }); + + foreach (var key in getdic.Keys) { var strs = getdic.Where(p => p.Key == key).First().Value; bool result = await GetBoolTag(strs[0], strs[1]); @@ -641,9 +565,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机 {key} {strs[1]}采集到 {result}"); - using (var db = _repository.AsSugarClient().CopyNew()) + //using (var db = _repository.AsSugarClient().CopyNew()) { - BasLocation startLocation = db.Queryable().Where(r => r.location_code == key).First(); + BasLocation startLocation = db_YCLGLDPJInstocktimer.Queryable().Where(r => r.location_code == key).First(); if (startLocation == null) { LoggerYCLGLDPJInstock.LogWarning($"【YCLGLDPJInstock】 {key}未维护库位信息"); @@ -656,7 +580,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } // 找到未锁定且未占用的库位 - var endLocations = db.Queryable() + var endLocations = db_YCLGLDPJInstocktimer.Queryable() .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") && a.is_type == "0"); LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 sql {endLocations.ToSqlString()}"); @@ -670,9 +594,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BasLocation endLocation = endLocations.First(); //锁定起点库位 更新为空闲 - await db.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); + await db_YCLGLDPJInstocktimer.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); //锁定终点库位 - await db.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); + await db_YCLGLDPJInstocktimer.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock); if (!result_createPretask) @@ -687,11 +611,18 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA _ = _wareHouseService.GenTaskExecute(); } } - catch (Exception ex) - { - Console.WriteLine("【YCLGLDPJInstock】" + ex.Message); - LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机空托入库发生异常:{ex}"); - } + } + catch (Exception ex) + { + Console.WriteLine("【YCLGLDPJInstock】" + ex.Message); + LoggerYCLGLDPJInstock.LogInformation($"【YCLGLDPJInstock】 三工位叠盘机空托入库发生异常:{ex}"); + } + finally + { + s_taskYCLGLDPJInstock.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行YCLGLDPJInstock {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行YCLGLDPJInstock {stopwatch.ElapsedMilliseconds} ms"); } } @@ -700,12 +631,18 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// private async void YCLWXDPJInstock(object? state) { - Dictionary getdic = new Dictionary(); - getdic.Add("未定", new string[] { "CP3-3", "AllowGetFullBox" }); - - foreach (var key in getdic.Keys) + await s_taskYCLWXDPJInstock.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行YCLWXDPJInstock"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行YCLWXDPJInstock"); + + Dictionary getdic = new Dictionary(); + getdic.Add("未定", new string[] { "CP3-3", "AllowGetFullBox" }); + + foreach (var key in getdic.Keys) { var strs = getdic.Where(p => p.Key == key).First().Value; bool result = await GetBoolTag(strs[0], strs[1]); @@ -713,7 +650,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机 {key} {strs[1]}采集到 {result}"); - BasLocation startLocation = _repository.AsSugarClient().Queryable().Where(r => r.location_code == key).First(); + BasLocation startLocation = db_YCLWXDPJInstocktimer.Queryable().Where(r => r.location_code == key).First(); if (startLocation == null) { LoggerYCLGLDPJInstock.LogWarning($"【YCLWXDPJInstock】 {key}未维护库位信息"); @@ -726,7 +663,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } // 找到未锁定且未占用的库位 - var endLocations = _repository.AsSugarClient().Queryable() + var endLocations = db_YCLWXDPJInstocktimer.Queryable() .Where(a => a.is_lock == 0 && a.is_use == "0" && a.wh_id == WmsWareHouseConst.WAREHOUSE_YCL_ID && a.location_code.Contains("YCL-") && a.is_type == "0"); LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 sql {endLocations.ToSqlString()}"); @@ -740,9 +677,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BasLocation endLocation = endLocations.First(); //锁定起点库位 更新为空闲 - await _repository.AsSugarClient().Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); + await db_YCLWXDPJInstocktimer.Updateable().SetColumns(r => new BasLocation { is_lock = 1, is_use = "0" }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); //锁定终点库位 - await _repository.AsSugarClient().Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); + await db_YCLWXDPJInstocktimer.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); bool result_createPretask = await createPretask(startLocation.id, endLocation.id, "", "", LoggerYCLGLDPJInstock); if (!result_createPretask) @@ -756,10 +693,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA _ = _wareHouseService.GenTaskExecute(); } } - catch (Exception ex) - { - LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机空托入库发生异常:{ex}"); - } + } + catch (Exception ex) + { + LoggerYCLGLDPJInstock.LogInformation($"【YCLWXDPJInstock】 外协叠盘机空托入库发生异常:{ex}"); + } + finally + { + s_taskYCLWXDPJInstock.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行YCLWXDPJInstock {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行YCLWXDPJInstock {stopwatch.ElapsedMilliseconds} ms"); } } @@ -770,15 +714,22 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA private async void SSXcode(object? state) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行SSXcode"); - Dictionary dic = new Dictionary(); - dic.Add("东面提升机输送线", new string[] { "下升降机判断请求", "下升降机判断条码", "下升降机判断完毕", "下升降机判断结果" }); - Dictionary putdic = new Dictionary(); - putdic.Add("SSX-111-011", 11); - putdic.Add("SSX-111-012", 12); - foreach (var key in dic.Keys) + await s_taskSSXcode.WaitAsync(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行SSXcode"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行SSXcode"); + + Dictionary dic = new Dictionary(); + dic.Add("东面提升机输送线", new string[] { "下升降机判断请求", "下升降机判断条码", "下升降机判断完毕", "下升降机判断结果" }); + Dictionary putdic = new Dictionary(); + putdic.Add("SSX-111-011", 11); + putdic.Add("SSX-111-012", 12); + + + foreach (var key in dic.Keys) { var strs = dic.Where(p => p.Key == key).First().Value; @@ -792,7 +743,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { result = "LX" + result.Replace("\r", ""); } - var DistaskH = _repository.AsSugarClient().Queryable().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).OrderByDescending(p => p.create_time).First(); + var DistaskH = db_SSXcodetimer.Queryable().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).OrderByDescending(p => p.create_time).First(); if (DistaskH != null) { Logger.LogInformation($"【定时任务SSXcode】DistaskH != null putdic.Keys.Contains(DistaskH.startlocation_code):{putdic.Keys.Contains(DistaskH.startlocation_code)} {result}"); @@ -816,7 +767,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } else { - Logger.LogInformation($"【定时任务SSXcode】DistaskH == null {_repository.AsSugarClient().Queryable().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).OrderByDescending(p => p.create_time).ToSqlString()}"); + Logger.LogInformation($"【定时任务SSXcode】DistaskH == null "); Dictionary dicCommand2 = new(StringComparer.OrdinalIgnoreCase) { ["DevName"] = key, @@ -836,56 +787,48 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } } } - catch (Exception ex) - { - Console.WriteLine("【SSXcode】" + ex.Message); - Logger.LogInformation($"【定时任务SSXcode】发生异常 {ex}"); - } + } + catch (Exception ex) + { + Console.WriteLine("【SSXcode】" + ex.Message); + Logger.LogInformation($"【定时任务SSXcode】发生异常 {ex}"); + } + finally + { + s_taskSSXcode.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString($"yyyy-MM-dd HH:mm:ss")} 结束执行SSXcode {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString($"yyyy-MM-dd HH:mm:ss")} 结束执行SSXcode {stopwatch.ElapsedMilliseconds} ms"); } } #endregion - public void Dispose() - { - Readtimer?.Dispose(); - CheckGettimer?.Dispose(); - Scantimer?.Dispose(); - SSXcodetimer?.Dispose(); - Floor2UpMachinecodetimer?.Dispose(); - Floor2timer送空托到上升降区?.Dispose(); - Floor2timer送满托到下升降区?.Dispose(); - Floor2timer移走上升降区未生成预任务且满托的料架?.Dispose(); - Floor2timer移走下升降区未生成预任务且空托的料架?.Dispose(); - - BGWCarrySupplementtimer?.Dispose(); - YCLGLDPJInstocktimer?.Dispose(); - YCLWXDPJInstocktimer?.Dispose(); - - //SSX7Supplementtimer?.Dispose(); - } - #region 二楼上升降机机械臂 // 上升降机扫码 需要等待空料架区 此处需要轮询 private async void Floor2UpMachinecode(object? args) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行Floor2UpMachinecode"); - string barcode = await GetStringTag("东面提升机输送线", MechanicalArmConsts.上升降机条码); - if (string.IsNullOrEmpty(barcode)) + s_taskExecuteFloor2UpMachinecodetimer.Wait(); + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - LoggerFloor2UpDownMachine.LogError($@"【上升降机】未取到条码数据"); - return; - } - using (var db = _repository.AsSugarClient().CopyNew()) - { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行Floor2UpMachinecode"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行Floor2UpMachinecode"); + + string barcode = await GetStringTag("东面提升机输送线", MechanicalArmConsts.上升降机条码); + if (string.IsNullOrEmpty(barcode)) + { + LoggerFloor2UpDownMachine.LogError($@"【上升降机】未取到条码数据"); + return; + } + //using (var db = _repository.AsSugarClient().CopyNew()) { - s_taskExecuteFloor2UpMachinecodetimer.Wait(); // 读取上升降机的左右料架区配置 string[] configs = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" }; // 左右料架区配置 - List WmsMechanicalArmHs = db.Queryable() + List WmsMechanicalArmHs = db_Floor2UpMachinecodetimer.Queryable() .Where(r => configs.Contains(r.name) && r.agvconfirm == 1).ToList(); // 是否可以放货 @@ -904,7 +847,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】扫描到有效条码 {barcode}"); // 获取下到输送线9和10的未完成的转库单 - List WmsMaterialTransfers = db.Queryable() + List WmsMaterialTransfers = db_Floor2UpMachinecodetimer.Queryable() .InnerJoin((a, b) => a.id == b.bill_id) .Where((a, b) => a.warehouse_instock == "33780009364245" && a.warehouse_outstock == "2" && a.remainbindracknum > 0 && b.carry_code == barcode).ToList(); @@ -925,7 +868,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA IEnumerable targetConfigs = WmsMechanicalArmHs.Where(r => r.outbill == ckdCode && r.stackingcount < r.maxnum); WmsMechanicalArmH target; - await db.Ado.BeginTranAsync(); + await db_Floor2UpMachinecodetimer.Ado.BeginTranAsync(); // 找不到对应的料架 if (targetConfigs.Count() == 0) { @@ -940,7 +883,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 更新 转库单、满托数量 LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】为条码 {barcode} 所在的转库单 {ckdCode} 占用了一个空闲料架"); - await db.Updateable().SetColumns(r => new WmsMechanicalArmH + await db_Floor2UpMachinecodetimer.Updateable().SetColumns(r => new WmsMechanicalArmH { outbill = ckdCode, maxnum = maxnum @@ -963,7 +906,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA else { LoggerFloor2UpDownMachine.LogError($@"【上升降机】条码{barcode}找不到绑定转库单{ckdCode}的料架区,且没有空闲的料架区可以用于绑定此转库单!"); - await db.Ado.RollbackTranAsync(); + await db_Floor2UpMachinecodetimer.Ado.RollbackTranAsync(); return; } } @@ -973,10 +916,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】当前条码目标料架区为 {JsonConvert.SerializeObject(target)}"); // 料架信息 - WmsCarryH rack = db.Queryable().Where(r => r.id == target.rackid).ToList()[0]; + WmsCarryH rack = db_Floor2UpMachinecodetimer.Queryable().Where(r => r.id == target.rackid).ToList()[0]; // 料箱信息 - WmsCarryH LX = db.Queryable().Where(r => r.carry_code == barcode).ToList()[0]; + WmsCarryH LX = db_Floor2UpMachinecodetimer.Queryable().Where(r => r.carry_code == barcode).ToList()[0]; // 开始码垛 bool result_开始码垛 = await Floor2UpDownMachinecode_SetTag(MechanicalArmConsts.上升降机当前码垛位, target.stackingposition.ToString()); @@ -986,7 +929,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA throw new Exception($@"【上升降机】码垛结果 {result_开始码垛}"); } // 回写料箱条码、码垛计数 - await db.Updateable().SetColumns(r => new WmsMechanicalArmH + await db_Floor2UpMachinecodetimer.Updateable().SetColumns(r => new WmsMechanicalArmH { barcodes = $"{target.barcodes},{barcode}".Trim(','), stackingcount = r.stackingcount + 1, @@ -995,7 +938,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】回写料箱条码、码垛计数"); // 回写转库单的剩余可绑定料架数量 - await db.Updateable().SetColumns(r => new WmsMaterialTransfer + await db_Floor2UpMachinecodetimer.Updateable().SetColumns(r => new WmsMaterialTransfer { remainbindracknum = r.remainbindracknum - 1 }).Where(r => r.id == WmsMaterialTransfer.id).ExecuteCommandAsync(); @@ -1012,19 +955,22 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA await _wmsCarryBindService.CarryBind(carryBindInput); - await db.Ado.CommitTranAsync(); - } - catch (Exception ex) - { - LoggerFloor2UpDownMachine.LogError(ex.ToString()); - LoggerFloor2UpDownMachine.LogError(ex.StackTrace); - await db.Ado.RollbackTranAsync(); - } - finally - { - s_taskExecuteFloor2UpMachinecodetimer.Release(); + await db_Floor2UpMachinecodetimer.Ado.CommitTranAsync(); } } + catch (Exception ex) + { + LoggerFloor2UpDownMachine.LogError(ex.ToString()); + LoggerFloor2UpDownMachine.LogError(ex.StackTrace); + await db_Floor2UpMachinecodetimer.Ado.RollbackTranAsync(); + } + finally + { + s_taskExecuteFloor2UpMachinecodetimer.Release(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行Floor2UpMachinecode {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行Floor2UpMachinecode {stopwatch.ElapsedMilliseconds} ms"); + } } // 二楼机械臂信号对应机械臂字典 @@ -1045,32 +991,36 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 送空托到上升降区(object? args) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行送空托到上升降区"); - #region 检查信号 - List configs_upMachine = new List(); - if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托1")) - { - LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托1 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托1"]); - } - if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托2")) - { - LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托2 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托2"]); - } - - // 没有有效信号 - if (configs_upMachine.Count == 0) - return; - #endregion - await s_task送空托到上升降区.WaitAsync(); - using (var db = _repository.AsSugarClient().CopyNew()) + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行送空托到上升降区"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行送空托到上升降区"); + + #region 检查信号 + List configs_upMachine = new List(); + if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托1")) + { + LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托1 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托1"]); + } + if (await GetBoolTag("东面提升机输送线", $"上升降机请求送空托2")) + { + LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】上升降机请求送空托2 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求送空托2"]); + } + + // 没有有效信号 + if (configs_upMachine.Count == 0) + return; + #endregion + + //using (var db = _repository.AsSugarClient().CopyNew()) { // 找到没有绑定料架的且库位未锁定的料架区 - ISugarQueryable WmsMechanicalArmHsuagar = db.Queryable() + ISugarQueryable WmsMechanicalArmHsuagar = db_Floor2timer送空托到上升降区.Queryable() .InnerJoin((a, b) => a.location_id == b.id) .Where((a, b) => string.IsNullOrEmpty(a.rackcode) && b.is_lock == 0 && configs_upMachine.Contains(a.name)); @@ -1088,7 +1038,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { // 找到占用且未锁定的库位上的空料架 ISugarQueryable rackStartLocations = - db.Queryable() + db_Floor2timer送空托到上升降区.Queryable() .InnerJoin((a, b) => a.id == b.location_id) .LeftJoin((a, b, c) => b.id == c.carry_id) .Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && string.IsNullOrEmpty(c.id) @@ -1103,7 +1053,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BasLocation startLocation = rackStartLocations.First(); - List wmsCarryHs = db.Queryable().Where(r => r.location_id == startLocation.id).ToList(); + List wmsCarryHs = db_Floor2timer送空托到上升降区.Queryable().Where(r => r.location_id == startLocation.id).ToList(); if (wmsCarryHs.Count == 0) { LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架"); @@ -1119,11 +1069,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 空料架 WmsCarryH targetCarry = wmsCarryHs[0]; - await db.Updateable().SetColumns(r => new BasLocation + await db_Floor2timer送空托到上升降区.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); - await db.Updateable().SetColumns(r => new BasLocation + await db_Floor2timer送空托到上升降区.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == wmsMechanicalArmH.location_id).ExecuteCommandAsync(); @@ -1139,17 +1089,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } //await db.CommitTranAsync(); } - catch (Exception ex) - { - LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.Message}"); - LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.StackTrace}"); - //await db.RollbackTranAsync(); - } - finally - { - s_task送空托到上升降区.Release(); - _wareHouseService.GenTaskExecute(); - } + } + catch (Exception ex) + { + LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.Message}"); + LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 {ex.StackTrace}"); + //await db.RollbackTranAsync(); + } + finally + { + s_task送空托到上升降区.Release(); + _wareHouseService.GenTaskExecute(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行送空托到上升降区 {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行送空托到上升降区 {stopwatch.ElapsedMilliseconds} ms"); } } @@ -1159,32 +1112,36 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 送满托到下升降区(object? args) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行送满托到下升降区"); - #region 检查信号 - List configs_upMachine = new List(); - if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托1")) - { - LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托1 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托1"]); - } - if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托2")) - { - LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托2 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托2"]); - } - - // 没有有效信号 - if (configs_upMachine.Count == 0) - return; - #endregion - await s_task送满托到下升降区.WaitAsync(); - using (var db = _repository.AsSugarClient().CopyNew()) + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行送满托到下升降区"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行送满托到下升降区"); + + #region 检查信号 + List configs_upMachine = new List(); + if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托1")) + { + LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托1 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托1"]); + } + if (await GetBoolTag("东面提升机输送线", $"下升降机请求送满托2")) + { + LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】下升降机请求送满托2 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求送满托2"]); + } + + // 没有有效信号 + if (configs_upMachine.Count == 0) + return; + #endregion + + //using (var db = _repository.AsSugarClient().CopyNew()) { // 找到没有绑定料架的且库位未锁定的料架区 - ISugarQueryable WmsMechanicalArmHsuagar = db.Queryable() + ISugarQueryable WmsMechanicalArmHsuagar = db_Floor2timer送满托到下升降区.Queryable() .InnerJoin((a, b) => a.location_id == b.id) .Where((a, b) => string.IsNullOrEmpty(a.rackcode) && b.is_lock == 0 && configs_upMachine.Contains(a.name)); @@ -1202,7 +1159,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { // 找到占用且未锁定的库位上的满料架且料架中的料箱是空的 List rackStartLocations = - db.Queryable() + db_Floor2timer送满托到下升降区.Queryable() .InnerJoin((a, b) => a.id == b.location_id) .LeftJoin((a, b, c) => b.id == c.carry_id) // 有料箱 .LeftJoin((a, b, c, d) => c.membercarry_id == d.carry_id) @@ -1239,7 +1196,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA BasLocation startLocation = rackStartLocations.First(); - List wmsCarryHs = db.Queryable().Where(r => r.location_id == startLocation.id).ToList(); + List wmsCarryHs = db_Floor2timer送满托到下升降区.Queryable().Where(r => r.location_id == startLocation.id).ToList(); if (wmsCarryHs.Count == 0) { LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架"); @@ -1255,12 +1212,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 满料架 WmsCarryH targetCarry = wmsCarryHs[0]; - await db.Updateable().SetColumns(r => new BasLocation + await db_Floor2timer送满托到下升降区.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == startLocation.id).ExecuteCommandAsync(); - await db.Updateable().SetColumns(r => new BasLocation + await db_Floor2timer送满托到下升降区.Updateable().SetColumns(r => new BasLocation { is_lock = 1 }).Where(r => r.id == wmsMechanicalArmH.location_id).ExecuteCommandAsync(); @@ -1276,17 +1233,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } //await db.CommitTranAsync(); } - catch (Exception ex) - { - LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.Message}"); - LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.StackTrace}"); - //await db.RollbackTranAsync(); - } - finally - { - s_task送满托到下升降区.Release(); - _wareHouseService.GenTaskExecute(); - } + } + catch (Exception ex) + { + LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.Message}"); + LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 {ex.StackTrace}"); + //await db.RollbackTranAsync(); + } + finally + { + s_task送满托到下升降区.Release(); + _wareHouseService.GenTaskExecute(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行送满托到下升降区 {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行送满托到下升降区 {stopwatch.ElapsedMilliseconds} ms"); } } @@ -1297,41 +1257,45 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 移走上升降区未生成预任务且满托的料架(object? args) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行移走上升降区未生成预任务且满托的料架"); - #region 检查信号 - List configs_upMachine = new List(); - if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托1")) - { - LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托1 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托1"]); - } - if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托2")) - { - LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托2 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托2"]); - } - - // 没有有效信号 - if (configs_upMachine.Count == 0) - return; - #endregion - await s_task移走上升降区未生成预任务且满托的料架.WaitAsync(); - using (var db = _repository.AsSugarClient().CopyNew()) + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行移走上升降区未生成预任务且满托的料架"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行移走上升降区未生成预任务且满托的料架"); + + #region 检查信号 + List configs_upMachine = new List(); + if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托1")) + { + LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托1 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托1"]); + } + if (await GetBoolTag("东面提升机输送线", $"上升降机请求取满托2")) + { + LoggerFloor2RackDelivery.LogError($"【移走上升降区未生成预任务且满托的料架】上升降机请求取满托2 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["上升降机请求取满托2"]); + } + + // 没有有效信号 + if (configs_upMachine.Count == 0) + return; + #endregion + + //using (var db = _repository.AsSugarClient().CopyNew()) { //await db.BeginTranAsync(); // 读取上升降机的左右料架区配置 - List WmsMechanicalArmHs = db.Queryable().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList(); + List WmsMechanicalArmHs = db_Floor2timer移走上升降区未生成预任务且满托的料架.Queryable().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList(); foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs) { LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}"); - await db.Updateable().SetColumns(r => new WmsMechanicalArmH + await db_Floor2timer移走上升降区未生成预任务且满托的料架.Updateable().SetColumns(r => new WmsMechanicalArmH { iscreatepretask = 1 }).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync(); @@ -1339,7 +1303,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA // 找到未占用且未锁定的库位 ISugarQueryable rackEndLocations = - db.Queryable() + db_Floor2timer移走上升降区未生成预任务且满托的料架.Queryable() .Where(r => r.wh_id == "33780009364245" && r.is_use == "0" && r.is_lock == 0).OrderBy(a => a.id).Take(1); if (rackEndLocations.Count() == 0) @@ -1370,17 +1334,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA //await db.CommitTranAsync(); } - catch (Exception ex) - { - LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.Message}"); - LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.StackTrace}"); - //await db.RollbackTranAsync(); - } - finally - { - s_task移走上升降区未生成预任务且满托的料架.Release(); - _wareHouseService.GenTaskExecute(); - } + } + catch (Exception ex) + { + LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.Message}"); + LoggerFloor2RackDelivery.LogInformation($"【移走上升降区未生成预任务且满托的料架】 {ex.StackTrace}"); + //await db.RollbackTranAsync(); + } + finally + { + s_task移走上升降区未生成预任务且满托的料架.Release(); + _wareHouseService.GenTaskExecute(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行移走上升降区未生成预任务且满托的料架 {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行移走上升降区未生成预任务且满托的料架 {stopwatch.ElapsedMilliseconds} ms"); } } @@ -1391,48 +1358,52 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA /// public async void 移走下升降区未生成预任务且空托的料架(object? args) { - Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 执行移走下升降区未生成预任务且空托的料架"); - #region 检查信号 - List configs_upMachine = new List(); - if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托1")) - { - LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托1 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托1"]); - } - - if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托2")) - { - LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托2 true"); - configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托2"]); - } - - // 没有有效信号 - if (configs_upMachine.Count == 0) - return; - #endregion await s_task移走下升降区未生成预任务且空托的料架.WaitAsync(); - using (var db = _repository.AsSugarClient().CopyNew()) + Stopwatch stopwatch = new Stopwatch(); + stopwatch.Start(); + try { - try + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行移走下升降区未生成预任务且空托的料架"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 开始执行移走下升降区未生成预任务且空托的料架"); + + #region 检查信号 + List configs_upMachine = new List(); + if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托1")) + { + LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托1 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托1"]); + } + + if (await GetBoolTag("东面提升机输送线", $"下升降机请求取空托2")) + { + LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托2 true"); + configs_upMachine.Add(floor2mechanicalAtmDic["下升降机请求取空托2"]); + } + + // 没有有效信号 + if (configs_upMachine.Count == 0) + return; + #endregion + //using (var db = _repository.AsSugarClient().CopyNew()) { //await db.BeginTranAsync(); // 读取下升降机的左右料架区配置 - List WmsMechanicalArmHs = db.Queryable().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList(); + List WmsMechanicalArmHs = db_Floor2timer移走下升降区未生成预任务且空托的料架.Queryable().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList(); foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs) { LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.location_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}"); - await db.Updateable().SetColumns(r => new WmsMechanicalArmH + await db_Floor2timer移走下升降区未生成预任务且空托的料架.Updateable().SetColumns(r => new WmsMechanicalArmH { iscreatepretask = 1 }).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync(); // 找到未占用且未锁定的库位 ISugarQueryable rackEndLocations = - db.Queryable() + db_Floor2timer移走下升降区未生成预任务且空托的料架.Queryable() .Where(r => r.wh_id == "33780009364245" && r.is_use == "0" && r.is_lock == 0).OrderBy(a => a.id).Take(1); if (rackEndLocations.Count() == 0) @@ -1452,7 +1423,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA await _wmsCarryBindService.CarryUnbind(carryBindInput); // 锁住终点库位 - await db.Updateable(r => new BasLocation + await db_Floor2timer移走下升降区未生成预任务且空托的料架.Updateable(r => new BasLocation { is_lock = 1 }).Where(r => r.id == endLocation.id).ExecuteCommandAsync(); @@ -1468,17 +1439,20 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA } //await db.CommitTranAsync(); } - catch (Exception ex) - { - LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.Message}"); - LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.StackTrace}"); - //await db.RollbackTranAsync(); - } - finally - { - s_task移走下升降区未生成预任务且空托的料架.Release(); - _wareHouseService.GenTaskExecute(); - } + } + catch (Exception ex) + { + LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.Message}"); + LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 {ex.StackTrace}"); + //await db.RollbackTranAsync(); + } + finally + { + s_task移走下升降区未生成预任务且空托的料架.Release(); + _wareHouseService.GenTaskExecute(); + stopwatch.Stop(); + Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行移走下升降区未生成预任务且空托的料架 {stopwatch.ElapsedMilliseconds} ms"); + LoggerTimer.LogInformation($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 结束执行移走下升降区未生成预任务且空托的料架 {stopwatch.ElapsedMilliseconds} ms"); } } @@ -1513,6 +1487,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA try { string jsonString = await _redisData.GetHash(DevName, field); + if (string.IsNullOrEmpty(jsonString)) + return false; JObject jsonObject = JObject.Parse(jsonString); @@ -1567,6 +1543,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA try { string jsonString = await _redisData.GetHash(DevName, field); + if (string.IsNullOrEmpty(jsonString)) + return ""; string pattern = "\"Value\":\"(.*?)\""; @@ -1642,9 +1620,6 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA Floor2timer移走上升降区未生成预任务且满托的料架 = new Timer(移走上升降区未生成预任务且满托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); Floor2timer移走下升降区未生成预任务且空托的料架 = new Timer(移走下升降区未生成预任务且空托的料架, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); - // 7号线补充空料箱 (弃用) - //SSX7Supplementtimer = new Timer(SSX7Supplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); - return Task.CompletedTask; } @@ -1653,5 +1628,349 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA return Task.CompletedTask; } + public void Dispose() + { + Console.WriteLine("*****************Dispose*****************"); + Log.Information("*****************Dispose*****************"); + Readtimer?.Dispose(); + CheckGettimer?.Dispose(); + Scantimer?.Dispose(); + SSXcodetimer?.Dispose(); + Floor2UpMachinecodetimer?.Dispose(); + Floor2timer送空托到上升降区?.Dispose(); + Floor2timer送满托到下升降区?.Dispose(); + Floor2timer移走上升降区未生成预任务且满托的料架?.Dispose(); + Floor2timer移走下升降区未生成预任务且空托的料架?.Dispose(); + + BGWCarrySupplementtimer?.Dispose(); + YCLGLDPJInstocktimer?.Dispose(); + YCLWXDPJInstocktimer?.Dispose(); + + } + + #region 日志 + + private static readonly Dictionary s_logLevelMap = new() + { + [LogLevel.Debug] = "DBG", + [LogLevel.Information] = "INF", + [LogLevel.Warning] = "WRN", + [LogLevel.Error] = "ERR", + }; + + protected string _LoggerFileName = ""; + protected ILogger _Logger; + protected ILogger Logger + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _Logger = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _Logger; + } + } + + + protected string _LoggerBGWFileName = ""; + protected ILogger _LoggerBGW; + protected ILogger LoggerBGW + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customBGW{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerBGW = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerBGW; + } + } + + + protected string _LoggerSSXFileName = ""; + protected ILogger _LoggerSSX; + protected ILogger LoggerSSX + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customSSX{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerSSX = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerSSX; + } + } + + // 二楼上下升降机日志 + protected string _LoggerFloor2UpDownMachineFileName = ""; + protected ILogger _LoggerFloor2UpDownMachine; + protected ILogger LoggerFloor2UpDownMachine + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customFloor2UpDownMachine{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerFloor2UpDownMachine = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerFloor2UpDownMachine; + } + } + + // 二楼料架补充 + protected string _LoggerFloor2RackDeliveryFileName = ""; + protected ILogger _LoggerFloor2RackDelivery; + protected ILogger LoggerFloor2RackDelivery + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customFloor2RackDelivery{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerFloor2RackDelivery = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerFloor2RackDelivery; + } + } + + + protected string _LoggerBGWCarrySupplementFileName = ""; + protected ILogger _LoggerBGWCarrySupplement; + protected ILogger LoggerBGWCarrySupplement + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customBGWCarrySupplement{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerBGWCarrySupplement = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerBGWCarrySupplement; + } + } + + + protected string _LoggerSSX7SupplementtimerFileName = ""; + protected ILogger _LoggerSSX7Supplementtimer; + protected ILogger LoggerSSX7Supplementtimer + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customSSX7Supplementtimer{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerSSX7Supplementtimer = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerSSX7Supplementtimer; + } + } + + + + protected string _LoggerYCLGLDPJInstockFileName = ""; + protected ILogger _LoggerYCLGLDPJInstock; + protected ILogger LoggerYCLGLDPJInstock + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customYCLGLDPJInstock{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerYCLGLDPJInstock = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _LoggerYCLGLDPJInstock; + } + } + + protected string _LoggerTimerFileName = ""; + protected ILogger _LoggerTimer; + protected ILogger LoggerTimer + { + get + { + string newFileName = $"{AppContext.BaseDirectory}/logs/customTimer{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerTimerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { + + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + + })); + _LoggerTimer = loggerFactory.CreateLogger(this.GetType()); + _LoggerTimerFileName = newFileName; + } + return _LoggerTimer; + } + } + #endregion } } \ No newline at end of file diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index 9d6649f7..f6ad1140 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -111,7 +111,7 @@ namespace Tnb.WarehouseMgr.Interfaces /// // 二楼机械臂 /// /// - Task Floor2MechanicalComplete(WmsDistaskH disTask, string action); + Task Floor2MechanicalComplete(WmsDistaskH disTask, string action); /// /// 二楼kiva把料架送到下升降机后生成中储仓入库任务 diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index f2a989d5..13b8b8a6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -50,25 +50,39 @@ namespace Tnb.WarehouseMgr protected IEventPublisher? EventPublisher { set; get; } - protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts => + protected string _LoggerFileName = ""; + protected ILogger _Logger; + protected ILogger Logger { - - //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; - cfgOpts.MessageFormat = (logMsg) => + get { - var logLevel = s_logLevelMap[logMsg.LogLevel]; - var sb = new StringBuilder(); - _ = sb.Append($"[{logLevel}] "); - _ = sb.Append($"{logMsg.LogName} "); - _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); - _ = sb.Append($"#{logMsg.EventId.Id} "); - _ = sb.Append(logMsg.Message + " "); - _ = sb.Append(logMsg.Exception?.ToString()); - return sb.ToString(); - }; + string newFileName = $"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log"; + if (_LoggerFileName != newFileName) + { + ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts => + { - })).CreateLogger(this.GetType()); + //cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff"; + cfgOpts.MessageFormat = (logMsg) => + { + var logLevel = s_logLevelMap[logMsg.LogLevel]; + var sb = new StringBuilder(); + _ = sb.Append($"[{logLevel}] "); + _ = sb.Append($"{logMsg.LogName} "); + _ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} "); + _ = sb.Append($"#{logMsg.EventId.Id} "); + _ = sb.Append(logMsg.Message + " "); + _ = sb.Append(logMsg.Exception?.ToString()); + return sb.ToString(); + }; + })); + _Logger = loggerFactory.CreateLogger(this.GetType()); + _LoggerFileName = newFileName; + } + return _Logger; + } + } static BaseWareHouseService() { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index fcd17960..237c32fe 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -427,11 +427,10 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task TaskCallback(TaskCallBackInput input) { - - Logger.Information($"【TaskCallback】 接收到WCS信号 任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); + var disTask = await _db.Queryable().FirstAsync(it => it.bill_code == input.taskCode); + Logger.Information($"【TaskCallback】 【接收】{input.taskCode} WCS信号 任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); try { - var disTask = await _db.Queryable().FirstAsync(it => it.bill_code == input.taskCode); List disTasks = new() { disTask }; if (input.action == "LOAD") { @@ -513,7 +512,9 @@ namespace Tnb.WarehouseMgr await _wareHouseService.SsxControl(disTask, "UNLOAD"); // 二楼机械臂 await _wareHouseService.Floor2MechanicalComplete(disTask, "UNLOAD"); + Logger.Information($"【TaskCallback】 Agv放货完成,任务编号:{string.Join(",", disTasks.Select(x => x.bill_code))}"); } + } catch (Exception ex) { @@ -526,6 +527,7 @@ namespace Tnb.WarehouseMgr { _ = InvokeGenPretaskExcute(); } + Logger.Information($"【TaskCallback】 【成功】{input.taskCode} WCS信号 任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); return await ToApiResult(HttpStatusCode.OK, "成功"); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index ca4fce99..afea52b4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -76,6 +76,7 @@ namespace Tnb.WarehouseMgr private readonly IRunService _runService; public static SemaphoreSlim s_floor2CreatePretask = new(1); + public SemaphoreSlim s_taskCommonCreatePretask = new(1); public Func AddUnExecuteTask { get; set; } @@ -418,12 +419,13 @@ namespace Tnb.WarehouseMgr getdic.Add("ZSSSXCTU01", new string[] { "YTCS", "AllowAgvEmptyOut_CS01" }); getdic.Add("ZSSSXCTU02", new string[] { "YTCS", "AllowAgvEmptyOut_CS03" }); + #region 注塑车间点位 putdic.Add("ZS-C01-1", new string[] { "hxjC", "A2允许入空箱", }); getdic.Add("ZS-C01-2", new string[] { "hxjC", "A2允许取满箱" }); putdic.Add("ZS-C02-1", new string[] { "hxjC", "A3允许入空箱", }); getdic.Add("ZS-C02-2", new string[] { "hxjC", "A3允许取满箱" }); - + putdic.Add("ZS-C03-1", new string[] { "hxjC", "A4允许入空箱", }); getdic.Add("ZS-C03-2", new string[] { "hxjC", "A4允许取满箱" }); @@ -435,6 +437,69 @@ namespace Tnb.WarehouseMgr putdic.Add("ZS-C06-1", new string[] { "hxjC", "A7允许入空箱", }); getdic.Add("ZS-C06-2", new string[] { "hxjC", "A7允许取满箱" }); + + putdic.Add("ZS-C07-1", new string[] { "hxjC", "A8允许入空箱", }); + getdic.Add("ZS-C07-2", new string[] { "hxjC", "A8允许取满箱" }); + + putdic.Add("ZS-C08-1", new string[] { "hxjC", "A9允许入空箱", }); + getdic.Add("ZS-C08-2", new string[] { "hxjC", "A9允许取满箱" }); + + putdic.Add("ZS-C09-1", new string[] { "hxjC", "A10允许入空箱", }); + getdic.Add("ZS-C09-2", new string[] { "hxjC", "A10允许取满箱" }); + + putdic.Add("ZS-C10-1", new string[] { "hxjC", "A11允许入空箱", }); + getdic.Add("ZS-C10-2", new string[] { "hxjC", "A11允许取满箱" }); + + putdic.Add("ZS-C11-1", new string[] { "hxjC", "A12允许入空箱", }); + getdic.Add("ZS-C11-2", new string[] { "hxjC", "A12允许取满箱" }); + + putdic.Add("ZS-C12-1", new string[] { "hxjC", "A13允许入空箱", }); + getdic.Add("ZS-C12-2", new string[] { "hxjC", "A13允许取满箱" }); + + putdic.Add("ZS-C13-1", new string[] { "hxjC", "A14允许入空箱", }); + getdic.Add("ZS-C13-2", new string[] { "hxjC", "A14允许取满箱" }); + + putdic.Add("ZS-C14-1", new string[] { "hxjC", "A1允许入空箱", }); + getdic.Add("ZS-C14-2", new string[] { "hxjC", "A1允许取满箱" }); + + + putdic.Add("ZS-A01-1", new string[] { "hxjA", "A3允许入空箱", }); + getdic.Add("ZS-A01-2", new string[] { "hxjA", "A3允许取满箱" }); + + putdic.Add("ZS-A02-1", new string[] { "hxjA", "A4允许入空箱", }); + getdic.Add("ZS-A02-2", new string[] { "hxjA", "A4允许取满箱" }); + + 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-A05-1", new string[] { "hxjA", "A7允许入空箱", }); + getdic.Add("ZS-A05-2", new string[] { "hxjA", "A7允许取满箱" }); + + putdic.Add("ZS-A06-1", new string[] { "hxjA", "A8允许入空箱", }); + getdic.Add("ZS-A06-2", new string[] { "hxjA", "A8允许取满箱" }); + + putdic.Add("ZS-A07-1", new string[] { "hxjA", "A9允许入空箱", }); + getdic.Add("ZS-A07-2", new string[] { "hxjA", "A9允许取满箱" }); + + putdic.Add("ZS-A08-1", new string[] { "hxjA", "A10允许入空箱", }); + getdic.Add("ZS-A08-2", new string[] { "hxjA", "A10允许取满箱" }); + + putdic.Add("ZS-A09-1", new string[] { "hxjA", "A11允许入空箱", }); + getdic.Add("ZS-A09-2", new string[] { "hxjA", "A11允许取满箱" }); + + putdic.Add("ZS-A10-1", new string[] { "hxjA", "A12允许入空箱", }); + getdic.Add("ZS-A10-2", new string[] { "hxjA", "A12允许取满箱" }); + + putdic.Add("ZS-A11-1", new string[] { "hxjA", "A13允许入空箱", }); + getdic.Add("ZS-A11-2", new string[] { "hxjA", "A13允许取满箱" }); + + putdic.Add("ZS-A12-1", new string[] { "hxjA", "A14允许入空箱", }); + getdic.Add("ZS-A12-2", new string[] { "hxjA", "A14允许取满箱" }); + #endregion + var strs = new string[] { }; if (action == "LOAD")//取货 @@ -548,7 +613,7 @@ namespace Tnb.WarehouseMgr ["TagName"] = strarr[1], ["Value"] = strarr[2], }; - Logger.Information($"SsxControlUNLOAD:{dicCommand}"); + Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}"); var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand); Logger.Information($"SsxControlUNLOAD:{str}"); } @@ -560,7 +625,7 @@ namespace Tnb.WarehouseMgr /// 二楼机械臂 /// /// - public async Task Floor2MechanicalComplete(WmsDistaskH disTask, string action) + public async Task Floor2MechanicalComplete(WmsDistaskH disTask, string action) { List rackAreaPointsUp = new List(); List rackAreaPointsDown = new List(); @@ -573,10 +638,10 @@ namespace Tnb.WarehouseMgr try { - await _db.Ado.BeginTranAsync(); if (disTask.area_code == "E") { + await _db.Ado.BeginTranAsync(); Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}"); SqlSugarClient db = _db.CopyNew(); @@ -589,7 +654,7 @@ namespace Tnb.WarehouseMgr if (WmsMechanicalArmHs.Count() == 0) { Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配"); - return false; + throw new Exception($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配"); } WmsMechanicalArmH target = WmsMechanicalArmHs.First(); @@ -611,7 +676,7 @@ namespace Tnb.WarehouseMgr Logger.LogInformation($@"【送满托到下升降区】设定下升降机满托{target.stackingposition}满托数量为 {LXCount} 结果为 {result}"); if (!result) { - return false; + throw new Exception($"下升降机满托{target.stackingposition}数量 写入失败"); } // 尝试写入满托送到信号 @@ -619,7 +684,7 @@ namespace Tnb.WarehouseMgr Logger.LogInformation($@"【送满托到下升降区】回写 下升降机满托{target.stackingposition}送到 结果为{result下升降机空托送到}"); if (!result下升降机空托送到) { - return false; + throw new Exception($"下升降机满托{target.stackingposition}送到 写入失败"); } // 绑定料架 @@ -671,7 +736,7 @@ namespace Tnb.WarehouseMgr if (WmsMechanicalArmHs.Count() == 0) { Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配"); - return false; + throw new Exception($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配"); } WmsMechanicalArmH target = WmsMechanicalArmHs.First(); @@ -719,17 +784,15 @@ namespace Tnb.WarehouseMgr Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV在料架区取货完成"); } } + await _db.Ado.CommitTranAsync(); } - - await _db.Ado.CommitTranAsync(); - return true; } catch(Exception ex) { + Logger.LogError("【Floor2MechanicalComplete】" + ex.ToString()); await _db.Ado.RollbackTranAsync(); - return false; + throw; } - return false; } private async Task Floor2UpDownMachinecode_SetTag(string tag, string value) @@ -1808,8 +1871,6 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - Logger.Information($@"TaskComplate 更新carryIts: {JsonConvert.SerializeObject(carryIts)}"); - Logger.Information($@"TaskComplate 更新carryCodeIts: {JsonConvert.SerializeObject(carryCodeIts)}"); _ = await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync(); //更新条码的库位和仓库信息 _ = await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync(); @@ -1869,9 +1930,10 @@ namespace Tnb.WarehouseMgr } } } + Logger.Information($"【TaskComplate】 任务操作完成提交事务 {string.Join(",", input.disTaskIds)}"); await _db.Ado.CommitTranAsync(); - Logger.Information("任务操作完成"); + Logger.Information($"【TaskComplate】 任务操作完成 {string.Join(",", input.disTaskIds)}"); } catch (Exception ex) { @@ -2470,8 +2532,9 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task CommonCreatePretask(CommonCreatePretaskInput input) { - using (var db = _db.CopyNew()) + //using (var db = _db.CopyNew()) { + await s_taskCommonCreatePretask.WaitAsync(); Logger.LogInformation($"【createPretask】 接收到请求 参数:{JsonConvert.SerializeObject(input)}"); try { @@ -2481,11 +2544,11 @@ namespace Tnb.WarehouseMgr if (!string.IsNullOrEmpty(input.startlocation_id)) { - sPoint = await db.Queryable().FirstAsync(it => it.location_id == input.startlocation_id); + sPoint = await _db.Queryable().FirstAsync(it => it.location_id == input.startlocation_id); } if (!string.IsNullOrEmpty(input.endlocation_id)) { - ePoint = await db.Queryable().FirstAsync(it => it.location_id == input.endlocation_id); + ePoint = await _db.Queryable().FirstAsync(it => it.location_id == input.endlocation_id); } List points = new List(); @@ -2520,14 +2583,14 @@ namespace Tnb.WarehouseMgr // 如果指定了carry_id else if (!string.IsNullOrEmpty(input.carry_id)) { - wmsCarryH = db.Queryable().Where(r => r.id == input.carry_id).First(); + wmsCarryH = _db.Queryable().Where(r => r.id == input.carry_id).First(); carry_id = wmsCarryH.id; carry_code = wmsCarryH.carry_code; } // carry_code else if (!string.IsNullOrEmpty(input.carry_code)) { - wmsCarryH = db.Queryable().Where(r => r.carry_code == input.carry_code).First(); + wmsCarryH = _db.Queryable().Where(r => r.carry_code == input.carry_code).First(); carry_id = wmsCarryH.id; carry_code = wmsCarryH.carry_code; } @@ -2596,7 +2659,7 @@ namespace Tnb.WarehouseMgr }; //根据载具移入Id,回更单据状态 - _ = await db.Updateable().SetColumns(it => new WmsMoveInstock { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync(); + _ = await _db.Updateable().SetColumns(it => new WmsMoveInstock { status = WmsWareHouseConst.BILLSTATUS_ON_ID }).Where(it => it.id == preTaskUpInput.RquireId).ExecuteCommandAsync(); Expression> wmsCarryHChangeExp = a => new WmsCarryH { is_lock = 1 }; @@ -2625,6 +2688,7 @@ namespace Tnb.WarehouseMgr } finally { + s_taskCommonCreatePretask.Release(); if (input.isExcuteMission) { GenTaskExecute(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs index 22ef6ead..eaacf15e 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryBindService.cs @@ -13,6 +13,7 @@ using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Newtonsoft.Json; +using Npgsql; using Senparc.Weixin.MP.AdvancedAPIs.Card; using SqlSugar; using Tnb.WarehouseMgr.Entities; @@ -165,14 +166,25 @@ namespace Tnb.WarehouseMgr WmsCarryCode.is_out = 0; WmsCarryCodes.Add(WmsCarryCode); } + int rows = 0; if (WmsCarryCodes.Count > 0) - await _db.Insertable(WmsCarryCodes).ExecuteCommandAsync(); + rows = await _db.Insertable(WmsCarryCodes).ExecuteCommandAsync(); + if (rows == 0) + { + throw new Exception($"接收到{input.details.Count}个条码 但是成功绑定的条码数量为0个!"); + } + } + catch (PostgresException ex) + { + Logger.LogError(ex.Message); + Logger.LogError(ex.StackTrace); + throw new AppFriendlyException($"绑定失败(1.可能是存在已被绑定的条码 2.存在与此载具编号相同的载具 3.存在字段传了空值) {ex.Message}", 500); } catch (Exception ex) { Logger.LogError(ex.Message); Logger.LogError(ex.StackTrace); - throw new AppFriendlyException("绑定失败", 500); + throw new AppFriendlyException($"绑定失败 {ex.Message}", 500); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs index 8a079e50..307cffbf 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsCarryService.cs @@ -15,6 +15,7 @@ using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using Npgsql; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.Common.Utils; @@ -305,7 +306,7 @@ namespace Tnb.WarehouseMgr /// - /// 载具绑定物料 + /// 载具绑定物料(MES用) /// /// /// @@ -314,7 +315,7 @@ namespace Tnb.WarehouseMgr { try { - WmsCarryCode wmsCarryCode = new WmsCarryCode(); + WmsCarryCode wmsCarryCode = input.Adapt(); wmsCarryCode.org_id = WmsWareHouseConst.AdministratorOrgId; wmsCarryCode.create_time = DateTime.Now; wmsCarryCode.carry_id = input.carry_id; @@ -329,13 +330,23 @@ namespace Tnb.WarehouseMgr wmsCarryCode.unit_id = input.unit_id; wmsCarryCode.unit_code = input.unit_code; wmsCarryCode.create_id = input.create_id; - await _db.Insertable(wmsCarryCode).ExecuteCommandAsync(); + int rows = await _db.Insertable(wmsCarryCode).ExecuteCommandAsync(); + if (rows == 0) + { + throw new Exception($"接收到1个条码 但是成功绑定的条码数量为0个!"); + } + await _db.Updateable().SetColumns(r => r.carry_status == ((int)EnumCarryStatus.占用).ToString()).Where(r => r.id == input.carry_id).ExecuteCommandAsync(); // todo 绑定记录表 - return await ToApiResult(HttpStatusCode.OK, "成功"); } + catch (PostgresException ex) + { + Logger.LogError(ex.Message); + Logger.LogError(ex.StackTrace); + throw new AppFriendlyException($"绑定失败(1.可能是存在已被绑定的条码 2.存在与此载具编号相同的载具 3.存在字段传了空值) {ex.Message}", 500); + } catch (Exception ex) { Logger.LogInformation(ex.Message);