From ab2f4c5b9babfd8d3c837c2bdca03c6dd06f7f9d Mon Sep 17 00:00:00 2001 From: majian <780924089@qq.com> Date: Tue, 27 Aug 2024 22:44:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E3=80=81=E7=94=B5=E6=A2=AF?= =?UTF-8?q?=E4=BC=98=E5=8C=96......?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.ProductionMgr/RedisBackGround.cs | 33 +++-- .../Dto/Inputs/ElevatorStatusInput.cs | 12 ++ .../Dto/Outputs/LocationOutput.cs | 1 + .../Entity/BasCoderules.cs | 52 +++++++ .../IWareHouseService.cs | 19 ++- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 4 + .../Tnb.WarehouseMgr/DeviceProviderService.cs | 51 ++++++- .../LocationDefinitionService.cs | 1 + .../Tnb.WarehouseMgr/WareHouseService.cs | 129 +++++++++++++++--- 9 files changed, 262 insertions(+), 40 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ElevatorStatusInput.cs create mode 100644 WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/BasCoderules.cs diff --git a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs index 3d433075..fa586607 100644 --- a/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs +++ b/ProductionMgr/Tnb.ProductionMgr/RedisBackGround.cs @@ -117,7 +117,6 @@ namespace Tnb.ProductionMgr public SemaphoreSlim s_taskF2KTPsupplement = new(1); public SemaphoreSlim s_taskYCLInternalTransfer = new(1); - public Dictionary s_elevatortaskDic = new(); private StackExRedisHelper _redisData; private readonly IPrdInstockService _prdInstockService; @@ -138,7 +137,6 @@ namespace Tnb.ProductionMgr private ISqlSugarClient db_Floor4DMJ2MJX; private ISqlSugarClient db_Floor4MJX2MJC; private ISqlSugarClient db_Floor4DMC2CPK; - private List db_ElevatorTaskExceptionHandles = new (); private ISqlSugarClient db_F2KTPsupplement; private ISqlSugarClient db_YCLInternalTransfer; @@ -203,9 +201,9 @@ namespace Tnb.ProductionMgr foreach (var s_elevatorArea in elevatorAreas) { ISqlSugarClient db_ElevatorTaskExceptionHandle = repository.CopyNew(); - db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle); + _wareHouseService.db_ElevatorTaskExceptionHandles.Add(db_ElevatorTaskExceptionHandle); SemaphoreSlim s_elevatortask = new(1); - s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask); + _wareHouseService.s_elevatortaskDic.Add(s_elevatorArea, s_elevatortask); } } @@ -1010,7 +1008,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA continue; } - 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(); + var DistaskH = db_SSXcodetimer.Queryable().Where(p => p.carry_code == result && p.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && p.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID).OrderByDescending(p => p.create_time).First(); if (DistaskH != null) { string target = putdic.Keys.Contains(DistaskH.startlocation_code) ? putdic.Where(p => p.Key == DistaskH.startlocation_code).First().Value.ToString() : "13"; @@ -1926,24 +1924,26 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA async void ElevatorTaskExceptionHandle(object args) { - Task[] taskActions = new Task[s_elevatortaskDic.Count]; + Task[] taskActions = new Task[_wareHouseService.s_elevatortaskDic.Count]; int index = 0; - foreach (string area in s_elevatortaskDic.Keys) + foreach (string area in _wareHouseService.s_elevatortaskDic.Keys) { - SemaphoreSlim s_elevatortask = s_elevatortaskDic[area]; + SemaphoreSlim s_elevatortask = _wareHouseService.s_elevatortaskDic[area]; if (s_elevatortask.CurrentCount == 0) return; await s_elevatortask.WaitAsync(); - var db_ElevatorTaskExceptionHandle = db_ElevatorTaskExceptionHandles[index]; + var db_ElevatorTaskExceptionHandle = _wareHouseService.db_ElevatorTaskExceptionHandles[index]; taskActions[index] = Task.Run(async () => { try { + // 获取未判定几托下的电梯任务或者已判定一托下的电梯任务 + // 因为电梯任务判定为一托下之后会回写act_start_date,后续同电梯小车不会进入到已判定过几托下的电梯,不存在同电梯既有act_start_date为空又有act_start_date不为空的情况 List elevatorTasks = db_ElevatorTaskExceptionHandle.Queryable() - .Where(r => r.area_code == area && r.act_start_date == null && r.act_end_date == null + .Where(r => r.area_code == area && r.act_end_date == null && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】检查到需要恢复/执行的电梯任务{elevatorTasks.Count}条 {string.Join(',', elevatorTasks.Select(x => x.bill_code))}"); @@ -1951,6 +1951,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA if (elevatorTasks?.Count > 0) { + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】{JsonConvert.SerializeObject(elevatorTasks)}"); + List> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList(); foreach (IGrouping group in elevatorTaskGroup) { @@ -1977,8 +1979,9 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsDistaskHs[0].device_id = e.device_id; wmsDistaskHs[1].device_id = e.device_id; } + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); - await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); } // 一托货 @@ -1993,9 +1996,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA { wmsDistaskHs[0].device_id = e.device_id; } + + LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); - await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); + + } } else @@ -2011,7 +2018,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA wmsDistaskHs[0].device_id = e.device_id; } LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}"); - await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs); + await _wareHouseService.ExecuteTargetFloorTask(wmsDistaskHs, db_ElevatorTaskExceptionHandle); LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】呼叫电梯 {e.elevator_code}执行完成"); } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ElevatorStatusInput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ElevatorStatusInput.cs new file mode 100644 index 00000000..cb044a3a --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Inputs/ElevatorStatusInput.cs @@ -0,0 +1,12 @@ +namespace Tnb.WarehouseMgr.Entities.Dto.Inputs +{ + /// + /// + /// + public class ElevatorStatusInput + { + // ELE03 ELE04 + public string ElevatorName { get; set; } + + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/LocationOutput.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/LocationOutput.cs index bad1e402..2f4f7c8a 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/LocationOutput.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Outputs/LocationOutput.cs @@ -15,6 +15,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto public string carry_code { get; set; } public string material_code { get; set; } public string material_name { get; set; } + public string material_specification { get; set; } public string code_batch { get; set; } public decimal num { get; set; } /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/BasCoderules.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/BasCoderules.cs new file mode 100644 index 00000000..e1696fe6 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Entity/BasCoderules.cs @@ -0,0 +1,52 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.BasicData.Entities.Entity; + +/// +/// 编码规则记录表 +/// +[SugarTable("bas_coderules")] +public partial class BasCoderules : BaseEntity +{ + public BasCoderules() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 修改用户 + /// + public string? modify_id { get; set; } + + /// + /// 修改时间 + /// + public DateTime? modify_time { get; set; } + + /// + /// 前缀 + /// + public string? prefix { get; set; } + + /// + /// 自定义 + /// + public string? custom { get; set; } + + /// + /// 当前流水号 + /// + public int? waternumber{ get; set; } + +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs index 17c07277..a8a81049 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IWareHouseService.cs @@ -33,7 +33,16 @@ namespace Tnb.WarehouseMgr.Interfaces SemaphoreSlim s_taskExecuteSemaphore_F2ZCCOutstock { get; } SemaphoreSlim _s_GenTaskExecute { get; } - + + Dictionary s_elevatortaskDic + { + get; + } + List db_ElevatorTaskExceptionHandles + { + get; + } + /// /// 入库策略 /// @@ -144,7 +153,7 @@ namespace Tnb.WarehouseMgr.Interfaces /// /// /// - Task TaskComplate(TaskCompleUpInput input); + Task TaskComplate(TaskCompleUpInput input, ISqlSugarClient db = null); /// /// 任务执行 /// @@ -156,7 +165,7 @@ namespace Tnb.WarehouseMgr.Interfaces /// /// /// /// - Task TaskExecuteAfter(TaskExecuteAfterUpInput input); + Task TaskExecuteAfter(TaskExecuteAfterUpInput input, ISqlSugarClient db = null); /// /// 路径算法(同时出库多个载具) /// @@ -200,8 +209,10 @@ namespace Tnb.WarehouseMgr.Interfaces /// /// /// - Task ExecuteTargetFloorTask(List disTasks); + Task ExecuteTargetFloorTask(List disTasks, ISqlSugarClient db = null); Task FindElevatorFromPars(ElevagorInfoQuery input); + + Task CreateCodeRules(string prefix, string custom, int watercodeLength); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 428fcba9..2a6a57e9 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -63,9 +63,13 @@ namespace Tnb.WarehouseMgr public static SemaphoreSlim _s_taskExecuteSemaphore_F4DMJCOutstock = new(1); public static SemaphoreSlim _s_taskExecuteSemaphore_AddOutinStockDetail = new(1); + public static SemaphoreSlim _s_taskExecuteSemaphore_codeRules = new(1); protected static Dictionary _s_eleUseStatusDic; + public Dictionary _s_elevatortaskDic = new(); + public List _db_ElevatorTaskExceptionHandles = new(); + public static SemaphoreSlim s_GenTaskExecute = new(1); protected IEventPublisher? EventPublisher { set; get; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index a9650cbd..0e8eace1 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -1,4 +1,5 @@ using System.Drawing.Drawing2D; +using System.Dynamic; using Aliyun.OSS; using Aop.Api.Domain; using JNPF; @@ -23,6 +24,7 @@ using SqlSugar; using Tnb.BasicData.Entities; using Tnb.Common.Extension; using Tnb.EquipMgr.Entities; +using Tnb.QcMgr.Entities; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Configs; using Tnb.WarehouseMgr.Entities.Consts; @@ -395,17 +397,30 @@ namespace Tnb.WarehouseMgr _ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令 } - // 3 4号梯只要电梯是当前楼层开门状态就能进 + // 3 4号梯需要电梯是当前楼层开门状态就能进 bool canEnter = false; if (devName == "Elevator3" || devName == "Elevator4") { string sno = devName.Match(@"\d+"); + + // 如果判定好了几托下,则不允许开门放货 List elevatorTasks = _db.Queryable() + .Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date != null && r.act_end_date == null + && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); + if (elevatorTasks.Count >= 0) + { + Logger.LogInformation($"电梯{devName}内已有货,且已判定为一托下!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"电梯内{devName}已有货,且已判定为一托下!"); + } + + // 如果还未判定几托下,判断是否放了两托货 + elevatorTasks = _db.Queryable() .Where(r => r.startlocation_code == $"DT-3-{sno}" && r.endlocation_code == $"DT-1-{sno}" && r.act_start_date == null && r.act_end_date == null && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); if (elevatorTasks.Count >= 2) { - return await ToApiResult(HttpStatusCode.InternalServerError, "电梯内已有两托货!"); + Logger.LogInformation($"电梯内{devName}已有两托货!"); + return await ToApiResult(HttpStatusCode.InternalServerError, $"电梯内{devName}已有两托货!"); } canEnter = true; } @@ -1064,5 +1079,37 @@ namespace Tnb.WarehouseMgr } return ToApiResult(HttpStatusCode.OK, data); } + + ///// + ///// 电梯有货无货状态(给三四号梯发货用) + ///// + ///// + ///// + //[HttpPost] + //public async Task ElevatorStatus(ElevatorStatusInput input) + //{ + // try + // { + // //List elevatorTasks = _db.Queryable() + // // .Where(r => r.area_code == input.ElevatorName && r.act_start_date == null && r.act_end_date == null && r.start_floor == 3 && r.end_floor == 1 + // // && r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID).ToList(); + + // WmsElevatorH wmsElevatorH = await _db.Queryable().Where(r => r.area_code == input.ElevatorName).FirstAsync(); + + // dynamic data = new ExpandoObject(); + // data.ElevatorName = input.ElevatorName; + // data.status = wmsElevatorH.isneedwcsreset == 1; + // Logger.Information($"获取电梯{input.ElevatorName} 是否需要重置WCS深浅位 {wmsElevatorH.isneedwcsreset == 1}"); + + // return await ToApiResult(HttpStatusCode.OK, data); + // } + // catch (Exception ex) + // { + // Logger.Error($"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败", ex.Message); + // Logger.Error($"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败", ex.StackTrace); + // return await ToApiResult(HttpStatusCode.InternalServerError, $"获取电梯{input.ElevatorName}是否需要重置WCS深浅位失败"); + // } + //} + } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs index 8adaa69b..fe4e94e0 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/LocationDefinitionService.cs @@ -338,6 +338,7 @@ namespace Tnb.WarehouseMgr { var mat = mats.Where(p => p.id == carrycode.material_id).First(); locationOutput.material_name = mat.name; + locationOutput.material_specification = mat.material_specification; } locationOutput.code_batch = carrycode.code_batch; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 2cd9ae8e..941dbafe 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -57,6 +57,8 @@ using static NPOI.HSSF.Util.HSSFColor; using Tnb.BasicData; using System.Reflection; using NPOI.SS.Format; +using Aspose.Cells.Drawing; +using Tnb.BasicData.Entities.Entity; namespace Tnb.WarehouseMgr { @@ -128,6 +130,15 @@ namespace Tnb.WarehouseMgr } + public Dictionary s_elevatortaskDic + { + get { return _s_elevatortaskDic; } + } + public List db_ElevatorTaskExceptionHandles + { + get { return _db_ElevatorTaskExceptionHandles; } + } + public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, StackExRedisHelper redisData, IBillRullService billRullService, IUserManager userManager, ICacheManager cacheManager, IElevatorControlService elevatorControlService, @@ -2191,12 +2202,20 @@ namespace Tnb.WarehouseMgr /// /// /// - public async Task ExecuteTargetFloorTask(List disTasks) + public async Task ExecuteTargetFloorTask(List disTasks, ISqlSugarClient db = null) { //收到放货确认通知,向电梯发送到3楼的指令 Logger.Information($"开始执行电梯任务,任务:{string.Join(",", disTasks.Select(r => r.bill_code))}"); var disTask = disTasks[0]; + + Logger.Information($"disTask.require_id={disTask.require_id}"); + List disTaskIds = new() { disTasks[0].id }; + if (disTasks.Count == 2) + { + disTaskIds.Add(disTasks[1].id); + } + string devName = ""; try { if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode)) @@ -2204,10 +2223,46 @@ namespace Tnb.WarehouseMgr Logger.Information($"开始执行电梯任务,没有取到设备{disTask.device_id}的 elevatorCode! s_elevatorMap: {JsonConvert.SerializeObject(s_elevatorMap)}"); return; } - string devName = s_elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName3; + devName = s_elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName3; - Logger.Information($"当前:{devName.Match(@"\d+")}#梯"); + // 回写act_start_date之前会发给wcs重置深浅位,没回写就是没发 + if (disTasks[0].act_start_date == null) + { + TaskExecuteAfterUpInput teaUpInput = new() + { + disTaskIds = disTaskIds, + }; + await TaskExecuteAfter(teaUpInput, db); + + string[] doubleCarryRunElevators = + { + "Elevator3","Elevator4" + }; + if (doubleCarryRunElevators.Contains(devName) && disTasks[0].end_floor == 1) + { + AgvRequestConfig requestCfg = App.Configuration.Build(); + string url = requestCfg.AgvRequestUrls.CreateTaskChainUrl; + dynamic reqBody = new ExpandoObject(); + reqBody.floor = devName == "Elevator3" ? "03" : "04"; + reqBody.isDown = true; + CancellationTokenSource Ctu = new(); + Logger.Information($"【ElevatorTaskExceptionHandle】 电梯{devName}下行 开始请求WCS lift/thirdFloor接口 请求地址:{url} 请求参数:{JsonConvert.SerializeObject(reqBody)} "); + dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, Ctu.Token); + Logger.Information($"【ElevatorTaskExceptionHandle】 电梯{devName}下行 接收到WCS lift/thirdFloor接口信息:{respBody}"); + if (respBody.code != "200") + { + throw new Exception($"通知WCS电梯{devName}下行接口调用错误"); + } + } + + } + } + catch { throw; } + + + try + { var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" }; (int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None); if (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态) @@ -2260,22 +2315,11 @@ namespace Tnb.WarehouseMgr if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) { - Logger.Information($"disTask.require_id={disTask.require_id}"); - List disTaskIds = new() { disTasks[0].id }; - if (disTasks.Count == 2) - { - disTaskIds.Add(disTasks[1].id); - } - TaskExecuteAfterUpInput teaUpInput = new() - { - disTaskIds = disTaskIds, - }; - await TaskExecuteAfter(teaUpInput); TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds, }; - await TaskComplate(tcUpInput); + await TaskComplate(tcUpInput, db); Logger.Information($"{devName.Match(@"\d+")}#梯 电梯任务执行完成"); } @@ -2392,7 +2436,7 @@ namespace Tnb.WarehouseMgr } - + /// /// 任务执行 /// @@ -2434,10 +2478,12 @@ namespace Tnb.WarehouseMgr /// /// [HttpPost] - public async Task TaskExecuteAfter(TaskExecuteAfterUpInput input) + public async Task TaskExecuteAfter(TaskExecuteAfterUpInput input, ISqlSugarClient dbConn = null) { //更新任务执行表单据状态 - var db = _db.CopyNew(); + var db = dbConn; + if (dbConn == null) + db = _db.CopyNew(); try { @@ -2473,10 +2519,12 @@ namespace Tnb.WarehouseMgr /// /// [HttpPost] - public async Task TaskComplate(TaskCompleUpInput input) + public async Task TaskComplate(TaskCompleUpInput input, ISqlSugarClient dbConn = null) { - - var db = _db.CopyNew(); + var db = dbConn; + if (dbConn == null) + db = _db.CopyNew(); + try { Logger.Information($"【TaskComplate】 开始执行TaskComplate {JsonConvert.SerializeObject(input)}"); @@ -3879,7 +3927,46 @@ namespace Tnb.WarehouseMgr } } + public async Task CreateCodeRules(string prefix, string custom, int watercodeLength) + { + try + { + await _s_taskExecuteSemaphore_codeRules.WaitAsync(); + string watercode = ""; + int? waternumber = 1; + BasCoderules basCoderules = await _db.Queryable().Where(r => r.prefix == prefix && r.custom == custom).FirstAsync(); + if (basCoderules == null) + { + watercode = "1"; + BasCoderules basCoderulesIns = new BasCoderules(); + basCoderulesIns.create_time = DateTime.Now; + basCoderulesIns.prefix = prefix; + basCoderulesIns.custom = custom; + basCoderulesIns.waternumber = waternumber; + await _db.Insertable(basCoderulesIns).ExecuteCommandAsync(); + watercode = waternumber.ToString().PadLeft(watercodeLength, '0'); + } + else + { + waternumber = basCoderules.waternumber; + waternumber++; + await _db.Updateable().SetColumns(r => r.waternumber == waternumber).ExecuteCommandAsync(); + watercode = waternumber.ToString().PadLeft(watercodeLength, '0'); + } + return watercode; + } + catch(Exception ex) + { + throw; + } + finally + { + _s_taskExecuteSemaphore_codeRules.Release(); + } + } + #endregion + } }