From 33e40288535d45a1f47e1df14c06b13c5bea8fb1 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Fri, 1 Dec 2023 22:16:39 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E8=B0=83=E6=95=B4=E7=94=B5=E6=A2=AF?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BB=A3=E7=A0=81=202=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=86=85=E9=83=A8=E6=B5=8B=E8=AF=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 48 +++++++++++++++---- .../ElevatorControlService.cs | 4 +- .../Tnb.WarehouseMgr/WareHouseService.cs | 30 +++++++----- .../WmsInternalTempTestService.cs | 36 ++++++++++++++ 4 files changed, 95 insertions(+), 23 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/WmsInternalTempTestService.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 15b8b86f..e9086acc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -82,11 +82,17 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task LoadConfirm(ConfirmInput input) { - Log.Information("取货确认.................."); + Logger.Information("--------------------------------------------------------"); + Logger.Information("取货确认.................."); + var whereExp = Expressionable.Create() + .And((a, b, c) => c.bill_code == input.taskCode) + .AndIF(SqlFunc.Contains("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName) + .AndIF(SqlFunc.Contains("DT-C", input.sourceName), (a, b, c) => c.endlocation_code == input.sourceName) + .ToExpression(); - WmsElevatorH elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) - .LeftJoin((a, b, c) => b.location_id == c.startlocation_id) - .Where((a, b, c) => c.endpoint_code == input.sourceName && input.taskCode == input.taskCode) + WmsElevatorH elevator = await _db.Queryable().InnerJoin((a, b) => a.id == b.bill_id) + .InnerJoin((a, b, c) => b.location_id == c.startlocation_id) + .Where(whereExp) .Select((a, b, c) => new WmsElevatorH { distask_id = c.id, @@ -132,6 +138,7 @@ namespace Tnb.WarehouseMgr throw; } return await ToApiResult(HttpStatusCode.OK, "未启用"); + Logger.Information("--------------------------------------------------------"); } /// @@ -142,14 +149,21 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task UnloadConfirm(ConfirmInput input)// { - Logger.Information($"输入参数:{JsonConvert.SerializeObject(input)}"); + Logger.Information("--------------------------------------------------------"); Logger.Information("放货确认.................."); + Logger.Information($"输入参数:{JsonConvert.SerializeObject(input)}"); try { + var whereExp = Expressionable.Create() + .And((a, b, c) => c.bill_code == input.taskCode) + .AndIF(SqlFunc.Contains("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName) + .AndIF(SqlFunc.Contains("DT-C", input.sourceName), (a, b, c) => c.endlocation_code == input.sourceName) + .ToExpression(); + //根据Agv传递的参数获取,对应的电梯 WmsElevatorH elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id) .LeftJoin((a, b, c) => b.location_id == c.endlocation_id) - .Where((a, b, c) => c.endpoint_code == input.targetName && (c.bill_code == input.taskCode || c.bill_code == input.taskChainCode)) + .Where(whereExp) .Select((a, b, c) => new WmsElevatorH { end_floor = SqlFunc.ToInt32(c.end_floor), @@ -201,7 +215,7 @@ namespace Tnb.WarehouseMgr } return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); - + } catch (Exception ex) { @@ -209,6 +223,7 @@ namespace Tnb.WarehouseMgr return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); throw; } + Logger.Information("--------------------------------------------------------"); } /// @@ -218,6 +233,8 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task TaskChainCallBack(TaskChainCallBackInput input) { + Logger.Information("--------------------------------------------------------"); + try { Logger.Information($"任务链上报->任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); @@ -254,7 +271,7 @@ namespace Tnb.WarehouseMgr } - + /*ConnectionConfigOptions opts = App.GetOptions(); @@ -281,7 +298,10 @@ namespace Tnb.WarehouseMgr return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } + Logger.Information("--------------------------------------------------------"); return await ToApiResult(HttpStatusCode.OK, "成功"); + + } /// @@ -292,7 +312,9 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task TaskCallback(TaskCallBackInput input) { - Log.Information($"任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); + Logger.Information("--------------------------------------------------------"); + + Logger.Information($"任务状态上报->接收参数:{JsonConvert.SerializeObject(input)}"); try { @@ -305,6 +327,7 @@ namespace Tnb.WarehouseMgr { disTaskIds = disTasks.Select(x => x.id).ToList() }; + Logger.Information($"设备取返回输入参数:{JsonConvert.SerializeObject(taskExecuteAfterUpInput)}"); await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); Logger.Information($"Agv取货完成,任务Id:{string.Join(",", disTasks.Select(x => x.id))}"); @@ -312,8 +335,11 @@ namespace Tnb.WarehouseMgr if (elevatorQueueItem != null) { Logger.Information("开始进入关门流程"); + var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); int doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); - if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) + if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持 + && !disTask.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) + ) { _ = await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 _ = await _db.Deleteable(elevatorQueueItem).ExecuteCommandAsync(); @@ -347,7 +373,9 @@ namespace Tnb.WarehouseMgr { _ = InvokeGenPretaskExcute(); } + Logger.Information("--------------------------------------------------------"); return await ToApiResult(HttpStatusCode.OK, "成功"); + } /// diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs index 2b42bb0c..a5afd009 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs @@ -303,8 +303,10 @@ namespace Tnb.WarehouseMgr var tasks = tags.Select(tag => GetTag(tag)); var results = await Task.WhenAll(tasks.Select(task => task)); + Logger.Information($"状态结果:{string.Join(",",results)}"); var jos = results.Select(r => JObject.Parse(r)).ToArray(); var (sysStatus, runStatus, floorNo, doorStatus, agvStatus) = (0, 0, 0, 0, 0); + var propertyMap = new Dictionary>() { { ElevatorConsts.SysStatus, v => sysStatus = v }, @@ -425,7 +427,7 @@ namespace Tnb.WarehouseMgr throw new ArgumentNullException(nameof(input.devNames)); } var tasks = ParallelWriteTagAsync(input); - await Task.WhenAll(tasks); + var writeRes = await Task.WhenAll(tasks); var timedTaskSvc = _backgudSvc as TimedTaskBackgroundService; if (timedTaskSvc != null) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 3742747a..e319f6e6 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -250,7 +250,7 @@ namespace Tnb.WarehouseMgr floor = b.floor }, true).ToListAsync(); - Logger.Information($"可用电梯信息:{elevatorList.Select(e => e.elevator_code)}"); + Logger.Information($"可用电梯信息:{string.Join(",", elevatorList.Select(e => e.elevator_code).Distinct())}"); //获取所有未下发的预任务申请 @@ -265,6 +265,8 @@ namespace Tnb.WarehouseMgr third_eqp_type = c.third_eqp_type, }, true) .ToListAsync(); + Logger.Information("获取未下发的预任务列表完成的......"); + List agvElevatorTasks = preTasks .Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) && !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)) @@ -392,7 +394,6 @@ namespace Tnb.WarehouseMgr } } } - //disTasks.ForEach(x => x.id = SnowflakeIdHelper.NextId()); int row = await db.Insertable(disTasks).ExecuteCommandAsync(); @@ -408,6 +409,8 @@ namespace Tnb.WarehouseMgr await db.Ado.CommitTranAsync(); + Logger.Information("预任务执行完成"); + if (string.Equals(_eleCtlCfg.Environment, ElevatorConsts.EnvironmentName, StringComparison.OrdinalIgnoreCase)) { //呼梯操作 @@ -418,7 +421,7 @@ namespace Tnb.WarehouseMgr foreach (var at in agvDTTasks) { var ele = elevatorList.Find(x => x.location_code == at.endlocation_code); - Logger.Information($"ele.elevator_id:{ele?.elevator_id},elevator_code:{ele.elevator_code}"); + Logger.Information($"ele.elevator_id:{ele?.elevator_id},elevator_code:{ele?.elevator_code}"); if (ele != null) { at.device_id = ele.elevator_id; @@ -429,6 +432,7 @@ namespace Tnb.WarehouseMgr .Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList(); if (endLocCodes?.Count > 0) { + Logger.Information("呼梯操作"); await CallingLanding(endLocCodes); } //执行电梯任务 @@ -437,9 +441,6 @@ namespace Tnb.WarehouseMgr if (elevatorTasks?.Count > 0) { Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); - Logger.Information("准备执行电梯任务"); - Logger.Information("执行电梯任务"); - foreach (WmsDistaskH? elevatorTask in elevatorTasks) { await ExecuteTargetFloorTask(elevatorTask); @@ -463,6 +464,7 @@ namespace Tnb.WarehouseMgr catch (Exception ex) { Logger.Error("生成预任务执行时出现错误", ex); + Logger.Error(ex.StackTrace!); await db.Ado.RollbackTranAsync(); throw; } @@ -479,6 +481,7 @@ namespace Tnb.WarehouseMgr /// private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, int floorNO)> endLocCodes) { + Logger.Information("--------------------------------------------------------"); Logger.Information($" 开始呼梯操作............."); Logger.Information($"电梯信息:{JsonConvert.SerializeObject(s_elevatorMap)}"); try @@ -546,6 +549,8 @@ namespace Tnb.WarehouseMgr //如果当前电梯有任务在做,将当前呼梯任务放入待执行队列 _ = await _db.Insertable(elevatorQueueItem).ExecuteCommandAsync(); + + Logger.Information("呼梯任务执行完成"); } } catch (Exception ex) @@ -554,6 +559,7 @@ namespace Tnb.WarehouseMgr Logger.Error($"呼梯操作错误堆栈跟踪:{Environment.NewLine}{ex.StackTrace}"); throw; } + Logger.Information("--------------------------------------------------------"); } /// @@ -563,6 +569,7 @@ namespace Tnb.WarehouseMgr /// private async Task ExecuteTargetFloorTask(WmsDistaskH disTask) { + Logger.Information("--------------------------------------------------------"); //收到放货确认通知,向电梯发送到3楼的指令 Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}"); try @@ -631,6 +638,8 @@ namespace Tnb.WarehouseMgr disTaskIds = disTaskIds, }; await TaskComplate(tcUpInput); + + Logger.Information("电梯任务执行完成"); } } @@ -639,6 +648,7 @@ namespace Tnb.WarehouseMgr Logger.Error("执行到目标楼层电梯任务失败", ex); throw; } + Logger.Information("--------------------------------------------------------"); } /// /// Agv调度 @@ -780,7 +790,6 @@ namespace Tnb.WarehouseMgr await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync(); //更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位 - Logger.Information("更新载具及库位准备中....."); List<(string carry_id, string carry_status, string endlocation_id, string endlocation_code)> multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList(); Dictionary locWhIdMap = await _db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id); @@ -819,7 +828,6 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - Logger.Information("更新载具及库位开始....."); _ = 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(); @@ -830,7 +838,6 @@ namespace Tnb.WarehouseMgr */ //更新业务主表的单据状态 foreach (WmsDistaskH? dt in disTasks) { - Logger.Information("开始业务回更"); List disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); WareHouseUpInput upInput = new() { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() }; @@ -845,12 +852,13 @@ namespace Tnb.WarehouseMgr upInput.loginType = "web";//(!string.IsNullOrEmpty(_userManager?.LoginType) ? "app" : "web") ?? "web"; if (dt.is_sign == 1 && dt.chain_type == "3") { - Logger.Information("执行业务回更操作....."); await DoUpdate(upInput); } } } await _db.Ado.CommitTranAsync(); + + Logger.Information("任务操作完成"); } catch (Exception ex) { @@ -993,7 +1001,6 @@ namespace Tnb.WarehouseMgr { if (points?.FindAll(x => x.location_code != null && x.location_code.Contains("dt", StringComparison.OrdinalIgnoreCase))?.Count > 0) { - Logger.Information("包含电梯Agv任务"); //查询当前电梯点 List curEleDs = await _db.Queryable().InnerJoin((a, b) => a.bill_id == b.id).Where((a, b) => points.Select(x => x.id).Contains(a.point_id)).ToListAsync(); Logger.Information($"curEleDs==null :{curEleDs == null},curEleDs:{string.Join(",", curEleDs.Select(x => x.bill_id))}"); @@ -1002,7 +1009,6 @@ namespace Tnb.WarehouseMgr { //当前电梯 WmsElevatorH curEle = await _db.Queryable().SingleAsync(it => it.id == curEleDs.First().bill_id); - Logger.Information($"curEle==null :{curEle == null}"); //同电梯组电梯 List sGpEle = await _db.Queryable().Where(it => it.elevator_group == curEle.elevator_group && it.id != curEle.id && it.enabled == 1).ToListAsync(); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsInternalTempTestService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsInternalTempTestService.cs new file mode 100644 index 00000000..2030b87b --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsInternalTempTestService.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Extension; +using Microsoft.AspNetCore.Mvc; +using SqlSugar; +using Tnb.BasicData.Entities; + +namespace Tnb.WarehouseMgr +{ + public class WmsInternalTempTestService + { + private readonly ISqlSugarClient _db; + public WmsInternalTempTestService(ISqlSugarRepository repo) + { + _db = repo.AsSugarClient(); + } + /// + /// 修改列 + /// + /// + [HttpPost] + public void UpdateCol() + { + List list = new List(); + foreach (var loc in list) + { + ReadOnlySpan inputSpan= loc.location_code.AsSpan(); + ReadOnlySpan lastTwoCharacters = inputSpan.Slice(inputSpan.Length - 2); + var num = lastTwoCharacters.ToString().Match(@"\d+"); + } + } + } +}