From 40d0878aa65e1b71eae8198458110428f0929420 Mon Sep 17 00:00:00 2001 From: "yang.lee" Date: Fri, 27 Oct 2023 17:08:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97=E5=BD=92?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E5=B0=86=E6=97=A5=E5=BF=97=E5=86=99=E5=85=A5?= =?UTF-8?q?=E5=88=B0=E6=8C=87=E5=AE=9A=E7=9A=84=E6=96=87=E4=BB=B6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 2 +- .../BaseWareHouseService`1.cs | 46 +++++++ .../Tnb.WarehouseMgr/DeviceProviderService.cs | 46 ++++--- .../TimedTaskBackgroundService.cs | 21 +-- .../Tnb.WarehouseMgr/WareHouseService.cs | 121 +++++++++++------- .../ElevatorControlSettings.json | 2 +- 6 files changed, 158 insertions(+), 80 deletions(-) create mode 100644 WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 1d025174..7f4e2ecd 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs @@ -54,7 +54,7 @@ namespace Tnb.WarehouseMgr private static Dictionary _storeMap = new(StringComparer.OrdinalIgnoreCase); public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); private readonly ChannelWriter _channelWriter; - + public BaseWareHouseService(ChannelWriter? channelWriter = default) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs new file mode 100644 index 00000000..49f33d92 --- /dev/null +++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService`1.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using JNPF.Common.Contracts; +using JNPF.Logging; +using Microsoft.Extensions.Logging; + +namespace Tnb.WarehouseMgr +{ + public class BaseWareHouseService : BaseWareHouseService + { + 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) => + { + Span span = logMsg.LogLevel.ToString().ToCharArray(); + var sb = new StringBuilder(); + sb.Append($"{span.Slice(0, 4)} "); + 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(); + } + + public static class CustomLoggerExtenstions + { + public static void Information(this ILogger logger, string message, params object[] parameters) + { + logger.LogInformation(message, parameters); + } + + public static void Error(this ILogger logger, string message, Exception ex, params object[] parameters) + { + logger.LogError(ex, message, parameters); + } + } +} diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index e70fd132..06d111fc 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -20,12 +20,15 @@ using JNPF.Systems.Interfaces.System; using JNPF.WorkFlow.Entitys.Dto.FlowLaunch; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using NPOI.OpenXmlFormats; using Senparc.NeuChar.ApiHandlers; using SqlSugar; +using Tnb.Common.Extension; using Tnb.EquipMgr.Entities; using Tnb.WarehouseMgr.Entities; +using Tnb.WarehouseMgr.Entities.Configs; using Tnb.WarehouseMgr.Entities.Consts; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.WarehouseMgr.Entities.Dto.Inputs; @@ -40,7 +43,7 @@ namespace Tnb.WarehouseMgr /// Wms设备接口提供程序服务类 /// - public class DeviceProviderService : BaseWareHouseService + public class DeviceProviderService : BaseWareHouseService { private readonly ISqlSugarClient _db; private readonly IWareHouseService _wareHouseService; @@ -48,6 +51,9 @@ namespace Tnb.WarehouseMgr private readonly IEventPublisher _eventPublisher; private readonly IUserManager _userManager; private readonly IElevatorControlService _elevatorControlService; + private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build(); + private readonly ILoggerFactory _loggerFactory; + public DeviceProviderService(ISqlSugarRepository repository, IWareHouseService wareHouseService, @@ -72,6 +78,7 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify] public async Task CreateTaskChain() { + Logger.LogInformation("fasdfadsfadsfasdfasdfadsfasdfadsfadsfasdfasdfasdfasdfas"); return await Task.FromResult(null); } @@ -95,14 +102,14 @@ namespace Tnb.WarehouseMgr //Log.Information($"elevator!=null?{elevator!=null}"); - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None); - Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus.ToEnum().ToString()},Agv状态:{agvStatus.ToEnum().ToString()},当前楼层:{floorNo}"); { //var endFloor = elevator.end_floor; var floor = 5; if (doorStatus.ToEnum() != EnumDoorStatus.开门到位保持) { - await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令 + await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 } if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯) { @@ -130,7 +137,7 @@ namespace Tnb.WarehouseMgr [HttpPost, NonUnify, AllowAnonymous] public async Task UnloadConfirm(ConfirmInput input)// { - Log.Information("放货确认.................."); + Logger.Information("放货确认.................."); try { //根据Agv传递的参数获取,对应的电梯 @@ -141,20 +148,20 @@ namespace Tnb.WarehouseMgr .Select((a, b, c, d) => new WmsElevatorH { end_floor = SqlFunc.ToInt32(c.end_floor) }, true) .FirstAsync(); - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus("Elevator1", CancellationToken.None);//elevator.elevator_code - Log.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None);//elevator.elevator_code + Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum().ToString()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}"); //判断Agv电梯是否进入状态 if (agvStatus != (int)EnumAgvStatus.AGV运行状态) { - await _elevatorControlService.WriteTagAsync("Elevator1", ElevatorConsts.AGVControl, 1); + await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.AGVControl, 1); } - Log.Information("目前正常"); + Logger.Information("目前正常"); //电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态 if (doorStatus != (int)EnumDoorStatus.开门到位保持) { - await _elevatorControlService.SendOpenCloseCmd("Elevator1", 3); //发送电梯前门开门指令 + await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 3); //发送电梯前门开门指令 } if (sysStatus == (int)EnumSysStatus.正常状态 && runStatus == (int)EnumRunStatus.停梯 && doorStatus == (int)EnumDoorStatus.开门到位保持) @@ -162,13 +169,13 @@ namespace Tnb.WarehouseMgr Log.Information("进入开门状态,马上要成功了"); try { - elevator.current_floor = elevator.end_floor; - await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync(); + /* elevator.current_floor = elevator.end_floor; + await _db.Updateable(elevator).UpdateColumns(it => it.current_floor).ExecuteCommandAsync();*/ } catch (Exception ex) { - Log.Error("更新延迟队列异常", ex); + Logger.LogError("更新延迟队列异常", ex); throw; } @@ -194,7 +201,7 @@ namespace Tnb.WarehouseMgr { try { - Log.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); + Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}"); switch (input.status) { case "CREATED": break; @@ -235,8 +242,9 @@ namespace Tnb.WarehouseMgr CreatorTime = DateTime.Now })); } - catch (Exception) + catch (Exception ex) { + Logger.Error("任务链状态上报", ex); return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } @@ -263,16 +271,16 @@ namespace Tnb.WarehouseMgr disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); - Log.Information("Agv取货完成"); + Logger.Information("Agv取货完成"); var elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); if (elevatorQueueItem != null) { - Log.Information("开始进入关门流程"); + Logger.Information("开始进入关门流程"); var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) { - var doorStatus = await _elevatorControlService.GetTagAsync("Elevator1", ElevatorConsts.DoorStatus); + var doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) { await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 @@ -299,7 +307,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("任务状态上报出现错误", ex); + Logger.Error("任务状态上报出现错误", ex); return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); throw; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 5459f26a..98cbd5d4 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -90,15 +90,7 @@ namespace Tnb.WarehouseMgr _eventPublisher = App.GetRequiredService(); var whSvc = App.GetRequiredService(); TimedTask(token => whSvc.GenTaskExecute(), stoppingToken, 1); - ////齐套出库 - var kittingOutService = App.GetRequiredService(); - TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1); - TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1); - //齐套分拣 - var setSortingService = App.GetRequiredService(); - TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2); - - + //电梯Agv心跳检测 TimedTask(async token => { var parameter = new Dictionary(); @@ -109,9 +101,18 @@ namespace Tnb.WarehouseMgr var result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); await Console.Out.WriteLineAsync($"心跳检测结果:{result}"); }, stoppingToken, 30, TimeSpanUnit.Seconds); + ////齐套出库 + /*var kittingOutService = App.GetRequiredService(); + TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1); + TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1); + //齐套分拣 + var setSortingService = App.GetRequiredService(); + TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2); + + //最低库存检查 var transferSignService = App.GetRequiredService(); - TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes); + TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/ }, stoppingToken); diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 76fdfdb4..0358a74d 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -39,7 +39,7 @@ namespace Tnb.WarehouseMgr /// /// 库房业务类(出入库) /// - public class WareHouseService : BaseWareHouseService, IWareHouseService + public class WareHouseService : BaseWareHouseService, IWareHouseService { private readonly ISqlSugarClient _db; private readonly IDictionaryDataService _dictionaryDataService; @@ -352,11 +352,13 @@ namespace Tnb.WarehouseMgr } //执行电梯任务 var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList(); - Log.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); - Log.Information("准备执行电梯任务"); + if (elevatorTasks?.Count > 0) { - Log.Information("执行电梯任务"); + Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}"); + Logger.Information("准备执行电梯任务"); + Logger.Information("执行电梯任务"); + foreach (var elevatorTask in elevatorTasks) { await ExecuteTargetFloorTask(elevatorTask); @@ -378,7 +380,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("生成预任务执行时出现错误", ex); + Logger.Error("生成预任务执行时出现错误", ex); await db.Ado.RollbackTranAsync(); throw; } @@ -394,7 +396,7 @@ namespace Tnb.WarehouseMgr /// private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes) { - Log.Information($"开始呼梯操作............."); + Logger.Information($"开始呼梯操作............."); try { var item = endLocCodes.FirstOrDefault(); @@ -402,7 +404,7 @@ namespace Tnb.WarehouseMgr var devName = _eleCtlCfg.DevName; { var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl); - Log.Information($"当前Agv状态:{agvStatus.ToEnum().ToString()}"); + Logger.Information($"当前Agv状态:{agvStatus.ToEnum().ToString()}"); //判断当前设备是否为运行状态,不是则进入Agv电梯控制状态 if (agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态) @@ -415,11 +417,11 @@ namespace Tnb.WarehouseMgr foreach (var (_, devId, disTaskId, floorNO) in endLocCodes) { - Log.Information($"任务开始目标楼层为:{floorNO}"); + Logger.Information($"任务开始目标楼层为:{floorNO}"); var floorN = await GetRealFloor(floorNO.ParseToInt()); - Log.Information($"实际目标楼层为:{floorN}"); + Logger.Information($"实际目标楼层为:{floorN}"); WmsElevatorUnexecute elevatorQueueItem = new() { @@ -431,7 +433,7 @@ namespace Tnb.WarehouseMgr create_id = _userManager.UserId, create_time = DateTime.Now }; - var elevatorQueue = await _db.Queryable().Where(it => it.elevator_id == devId && it.task_status == "执行中").ToListAsync(); + var elevatorQueue = await _db.Queryable().Where(it => it.distask_id == disTaskId && it.task_status == "执行中").ToListAsync(); if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1) && floorNO.ParseToInt() != curFloorNo) { @@ -439,7 +441,7 @@ namespace Tnb.WarehouseMgr var callLiftRes = await _elevatorControlService.CallLift(devName, floorN, CancellationToken.None); string successful = "成功", fail = "失败"; var callLiftResult = callLiftRes ? successful : fail; - Log.Information($"呼梯结果:{callLiftResult}"); + Logger.Information($"呼梯结果:{callLiftResult}"); } //如果当前电梯有任务在做,将当前呼梯任务放入待执行队列 @@ -450,11 +452,11 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("呼梯操作错误", ex); + Logger.Error("呼梯操作错误", ex); throw; } } - + /// /// 执行到目标楼层电梯任务 /// @@ -463,48 +465,52 @@ namespace Tnb.WarehouseMgr private async Task ExecuteTargetFloorTask(WmsDistaskH disTask) { //收到放货确认通知,向电梯发送到3楼的指令 - Log.Information($"开始执行电梯任务,任务ID:{disTask.id}"); + Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}"); try { - var elevatorQueueItem = await _db.Queryable().FirstAsync(it => it.task_status == "执行中"); +/* var elevatorQueueItem = await _db.Queryable().FirstAsync(it => it.task_status == "执行中"); Log.Information($"是否存在电梯任务项:{elevatorQueueItem != null}"); - if (elevatorQueueItem != null) +*/ //if (elevatorQueueItem != null) { //var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) { var doorStatus = -1; - var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 - Log.Information($"关门结果:{closeDoorRes}"); + var closeDoorRes = await _elevatorControlService.SendOpenCloseCmd(_eleCtlCfg.DevName, 4); //向电梯发送前门关门指令 + Logger.Information($"关门结果:{closeDoorRes}"); do { - doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); + doorStatus = await _elevatorControlService.GetTagAsync(_eleCtlCfg.DevName, ElevatorConsts.DoorStatus); await Task.Delay(2000); } while (doorStatus != 4); - Log.Information($"当前门状态:{doorStatus}"); + Logger.Information($"当前门状态:{doorStatus}"); + var floor = await GetRealFloor(disTask.end_floor.ParseToInt()); - Log.Information($"目标楼层:{floor}"); + + Logger.Information($"目标楼层:{floor}"); //发送到目标楼的指令 - var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor); + var reuslt = await _elevatorControlService.WriteTagAsync(_eleCtlCfg.DevName, ElevatorConsts.FloorExecute, floor); //电梯任务手动执行任务状态上报 (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); do { - tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None); + tuple = await _elevatorControlService.GetElevatorStatus(_eleCtlCfg.DevName, CancellationToken.None); await Task.Delay(2000); } while (tuple.sysStatus != 3 && tuple.runStatus != 0); - Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); + Logger.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}"); if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯) { Log.Information($"disTask.require_id={disTask.require_id}"); List disTaskIds = new() { disTask.id }; + Log.Information($"disTaskIds={string.Join(",", disTaskIds)}"); TaskExecuteAfterUpInput teaUpInput = new() { disTaskIds = disTaskIds }; await TaskExecuteAfter(teaUpInput); + TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds }; await TaskComplate(tcUpInput); } @@ -513,7 +519,7 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error("执行到目标楼层电梯任务失败", ex); + Logger.Error("执行到目标楼层电梯任务失败", ex); throw; } } @@ -538,7 +544,7 @@ namespace Tnb.WarehouseMgr targetName = it.endpoint_code, containerCode = it.carry_code, })); - Log.Information($"请求地址:{url}"); + Logger.Information($"请求地址:{url}"); foreach (var (k, v) in taskChainCodeDic) { dynamic reqBody = new ExpandoObject(); @@ -547,14 +553,14 @@ namespace Tnb.WarehouseMgr reqBody.sequential = false; reqBody.taskChainPriority = 0; reqBody.taskList = v; - Log.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}"); + Logger.Information($"请求参数:{JsonConvert.SerializeObject(reqBody)}"); var respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token); - Log.Information($"调用Agv接口响应结果:{respBody}"); + Logger.Information($"调用Agv接口响应结果:{respBody}"); } } catch (Exception ex) { - Log.Error("agv调度失败异常", ex); + Logger.Error("agv调度失败异常", ex); throw; } } @@ -658,11 +664,13 @@ namespace Tnb.WarehouseMgr await _db.Updateable().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync(); //更新电梯任务数量 - var eles = await _db.Queryable().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync(); - if (eles?.Count > 0) - await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync(); - + /* var eles = await _db.Queryable().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync(); + if (eles?.Count > 0) + await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync(); + */ //更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位 + Logger.Information("更新载具及库位准备中....."); + var multiList = disTasks.Select(it => (it.carry_id, it.carry_status, it.endlocation_id, it.endlocation_code)).ToList(); var locWhIdMap = await _db.Queryable().Where(it => multiList.Select(x => x.endlocation_id).Contains(it.id)).ToDictionaryAsync(it => it.id, it => it.wh_id); List carryIts = new(); @@ -677,9 +685,10 @@ namespace Tnb.WarehouseMgr location_id = multiList[i].endlocation_id, location_code = multiList[i].endlocation_code }; + var endLocId = multiList[i].endlocation_id; WmsCarryCode carryCode = new() { - warehouse_id = locWhIdMap[multiList[i].endlocation_id].ToString(), + warehouse_id = locWhIdMap.ContainsKey(endLocId) ? locWhIdMap[endLocId].ToString() : "", location_id = multiList[i].endlocation_id, location_code = multiList[i].endlocation_code }; @@ -697,25 +706,37 @@ namespace Tnb.WarehouseMgr locIts.Add(loc); } - Log.Information("更新载具及库位开始....."); + 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(); //更新库位信息,使用状态为 使用,锁定状态为未锁定 await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync(); - Log.Information("更新载具及库位结束....."); - Log.Information($"_userManager.LoginType={_userManager.LoginType}"); - //更新业务主表的单据状态 + Logger.Information("更新载具及库位结束....."); + Logger.Information($"_userManager==null:{_userManager == null}"); + /* var loginType= _userManager?.LoginType ?? "web"; + Log.Information($"_userManager.LoginType={loginType}"); + */ //更新业务主表的单据状态 foreach (var dt in disTasks) { + Logger.Information("开始业务回更"); var disTaskCodes = await _db.Queryable().Where(it => it.bill_id == dt.id).ToListAsync(); var upInput = new WareHouseUpInput { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() }; - upInput.loginType = !_userManager.LoginType.IsNullOrEmpty() ? "app" : "web"; - Log.Information($"upInput.loginType={upInput.loginType}"); + /*if (!_userManager?.LoginType.IsNullOrEmpty() ?? false) + { + upInput.loginType = "app"; + } + else + { + upInput.loginType = "web"; + }*/ + Logger.Information("loginType赋值前"); + upInput.loginType = "web";//(!string.IsNullOrEmpty(_userManager?.LoginType) ? "app" : "web") ?? "web"; + Logger.Information($"upInput.loginType={upInput.loginType}"); if (dt.is_sign == 1 && dt.chain_type == "3") { - Log.Information("执行业务回更操作....."); + Logger.Information("执行业务回更操作....."); await DoUpdate(upInput); } } @@ -724,8 +745,8 @@ namespace Tnb.WarehouseMgr } catch (Exception ex) { - Log.Error($"任务结束失败", ex); - Log.Error($"任务结束失败堆栈异常", ex.StackTrace); + Logger.Error($"任务结束失败", ex); + Log .Error($"任务结束失败堆栈异常", ex.StackTrace); await _db.Ado.RollbackTranAsync(); throw; } @@ -792,11 +813,13 @@ namespace Tnb.WarehouseMgr { row = await _db.Insertable(preTaskCodes).ExecuteCommandAsync(); } - var eleP = preTasks.Find(x => x.area_code.Contains("ELE")); - if (eleP != null) - { - row = await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); - } + //先注释 by ly on 20231025 + /* var eleP = preTasks.Find(x => x.area_code.Contains("ELE")); + if (eleP != null) + { + row = await _db.Updateable().SetColumns(it => it.task_nums == it.task_nums + 1).Where(it => it.area_code == eleP.area_code).ExecuteCommandAsync(); + } + */ return row > 0; } /// @@ -847,7 +870,7 @@ namespace Tnb.WarehouseMgr [NonAction] public async Task> PathAlgorithms(string pStartId, string pEndId) { - var roads = await _db.Queryable().ToListAsync(); + var roads = await _db.Queryable().Where(it => it.status == 1).ToListAsync(); var points = await LocPathCalcAlgorithms(pStartId, pEndId, roads); try { diff --git a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json index f0537f5d..33b95bee 100644 --- a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json +++ b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json @@ -1,5 +1,5 @@ { - "DevName": "Elevator1", + "DevName": "Elevator2", "token": "780BE4144636CF47DDF3920B0F1D069B", "GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList", "GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag",