From 0300ea2598ff79afa45808aaafbe8d89107ecc2d Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Oct 2023 09:32:34 +0800 Subject: [PATCH 1/5] =?UTF-8?q?BaseWareHouseService=20=E7=B1=BB=E9=9D=99?= =?UTF-8?q?=E6=80=81=E5=87=BD=E6=95=B0=E6=89=93=E5=9B=9E=E5=8E=9F=E5=BD=A2?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=BB=B6=E8=BF=9F=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=EF=BC=8C=E4=BB=A5=E9=81=BF=E5=85=8D=E6=9C=AA=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=94=A8=E6=88=B7=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/BaseWareHouseService.cs | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs index 48105be6..73368235 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) @@ -64,17 +64,23 @@ namespace Tnb.WarehouseMgr static BaseWareHouseService() { - var serviceTypes = App.EffectiveTypes.Where(u => u.IsClass && !u.IsInterface && !u.IsAbstract && typeof(IWHStorageService).IsAssignableFrom(u)).ToList(); - foreach (var serviceType in serviceTypes) + _stroageMapLazy = new Lazy>(() => { - var callerName = serviceType.GetCustomAttribute()?.Name ?? string.Empty; - if (!callerName.IsNullOrEmpty()) + Dictionary map = new(); + var serviceTypes = App.EffectiveTypes.Where(u => u.IsClass && !u.IsInterface && !u.IsAbstract && typeof(IWHStorageService).IsAssignableFrom(u)).ToList(); + foreach (var serviceType in serviceTypes) { - var obj = Activator.CreateInstance(serviceType) as IWHStorageService; - if (obj == null) continue; - _storeMap[callerName] = obj; + var callerName = serviceType.GetCustomAttribute()?.Name ?? string.Empty; + if (!callerName.IsNullOrEmpty()) + { + var obj = Activator.CreateInstance(serviceType) as IWHStorageService; + if (obj == null) continue; + map[callerName] = obj; + } } - } + return map; + }); + } protected Task GetUserIdentity(string? asscessToken = null) @@ -140,9 +146,9 @@ namespace Tnb.WarehouseMgr [NonAction] protected async Task DoUpdate(WareHouseUpInput input) { - if (_storeMap.ContainsKey(input.loginType)) + if (_stroageMapLazy.Value.ContainsKey(input.loginType)) { - await _storeMap[input.loginType].Do(input); + await _stroageMapLazy.Value[input.loginType].Do(input); } } [NonAction] @@ -229,7 +235,7 @@ namespace Tnb.WarehouseMgr } } if (0 != ret) - return ; + return; // sample setting. PPLBUtility.B_Set_Originpoint(0, 0); @@ -251,7 +257,7 @@ namespace Tnb.WarehouseMgr PPLBUtility.B_Prn_Text(200, 50, 0, 2, 2, 2, 'N', code); //barcode. PPLBUtility.B_Prn_Barcode(50, 100, 0, "1", 3, 5, 70, 'B', code);//have a counter - // output. + // output. PPLBUtility.B_Print_Out(1);// copy 2. } } From a350f122f6fd2411ec2414f750a1f043d3035b53 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Oct 2023 13:57:01 +0800 Subject: [PATCH 2/5] =?UTF-8?q?wms=EF=BC=8C=E4=BB=BB=E5=8A=A1=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index dfaa1117..0b81f967 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -497,8 +497,9 @@ namespace Tnb.WarehouseMgr await _db.Ado.CommitTranAsync(); } - catch (Exception) + catch (Exception ex) { + Log.Error("任务执行失败", ex); await _db.Ado.RollbackTranAsync(); throw; } @@ -532,8 +533,9 @@ namespace Tnb.WarehouseMgr await _db.Ado.CommitTranAsync(); } - catch (Exception) + catch (Exception ex) { + Log.Error("设备取返回操作失败", ex); await _db.Ado.RollbackTranAsync(); } } From 7635cc18c315f3e87d7718412feccd6d5eddd1f7 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Oct 2023 17:04:27 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=B0=86=E4=B9=8B=E5=89=8D=EF=BC=8C?= =?UTF-8?q?=E7=94=B5=E6=A2=AF=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E5=90=8E=E9=80=9A=E7=9F=A5=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A1=A5=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 28 +++++- .../Tnb.WarehouseMgr/WareHouseService.cs | 91 ++++++++++++++++++- 2 files changed, 112 insertions(+), 7 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index ae168134..2ec8664b 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Aliyun.OSS; using JNPF; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; @@ -276,15 +277,36 @@ namespace Tnb.WarehouseMgr if (elevatorQueueItem != null) { var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); - if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) + //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) { var doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) { await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 } - //发送到3楼的指令 - var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, 4); + var floor = disTask.end_floor.ParseToInt(); + if (floor == 4) + floor = 5; + else if (floor == 3) + floor = 4; + else if (floor == 2) + floor = 3; + //发送到目标楼的指令 + CancellationTokenSource cts = new(); + var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor); + (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); + await Task.Run(async () => + { + do + { + tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, cts.Token); + } while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt()); + + }, cts.Token); + + if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯 && +agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态 && floorNo != 4) + } } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 0b81f967..9b62c128 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -340,11 +340,21 @@ namespace Tnb.WarehouseMgr //呼梯操作 //获取目标库位为电梯库位的任务 - var endLocCodes = disTasks.Select(it => (it.endlocation_code, it.device_id, it.id)).Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).ToList(); + var endLocCodes = disTasks.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).ToList(); if (endLocCodes?.Count > 0) { await CallingLanding(endLocCodes); } + //执行电梯任务 + var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList(); + if (elevatorTasks?.Count > 0) + { + foreach (var elevatorTask in elevatorTasks) + { + await ExecuteTargetFloorTask(elevatorTask); + } + + } ////调用AGV创建任务链接口 await AgvDispatch(disTasks, agvCts.Token); @@ -370,7 +380,7 @@ namespace Tnb.WarehouseMgr /// /// /// - private async Task CallingLanding(List<(string endlocation_code, string device_id, string id)> endLocCodes) + private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes) { try { @@ -386,14 +396,15 @@ namespace Tnb.WarehouseMgr } } { - foreach (var (_, devId, disTaskId) in endLocCodes) + foreach (var (_, devId, disTaskId, floorNO) in endLocCodes) { + var floorN = await GetRealFloor(floorNO.ParseToInt()); WmsElevatorUnexecute elevatorQueueItem = new() { distask_id = disTaskId, elevator_id = devId, elevator_code = _elevatorMap[devId].ToString(), - floor = 5, //5代表4楼 + floor = floorN, //5代表4楼 task_status = "待执行", create_id = _userManager.UserId, create_time = DateTime.Now @@ -420,6 +431,78 @@ namespace Tnb.WarehouseMgr } } /// + /// 根据当前目标楼层获取,电梯接口真正的楼层 + /// + /// + /// + private Task GetRealFloor(int floor) + { + var realFloor = 0; + if (floor == 4) + { + realFloor = 5; + } + else if (floor == 3) + { + realFloor = 4; + } + else if (floor == 2) + { + realFloor = 3; + } + return Task.FromResult(realFloor); + } + /// + /// 执行到目标楼层电梯任务 + /// + /// + /// + private async Task ExecuteTargetFloorTask(WmsDistaskH disTask) + { + //收到放货确认通知,向电梯发送到3楼的指令 + try + { + var elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTask.id == it.distask_id && it.task_status == "执行中"); + 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; + await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 + do + { + doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); + } while (doorStatus != 4); + var floor = await GetRealFloor(disTask.end_floor.ParseToInt()); + //发送到目标楼的指令 + var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, 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); + } while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt()); + + if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯 + && tuple.floorNo == disTask.end_floor.ParseToInt()) + { + dynamic input = new ExpandoObject(); + input.disTaskIds = new List { disTask.id }; + await TaskExecuteAfter(input); + await TaskComplate(input); + } + } + } + } + catch (Exception ex) + { + Log.Error("执行到目标楼层电梯任务失败", ex); + throw; + } + } + /// /// Agv调度 /// /// From 1cfc9e25e5154bbcf8b3f5b94bdea4a2ed7f4220 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 9 Oct 2023 17:04:45 +0800 Subject: [PATCH 4/5] 1 --- .../Tnb.WarehouseMgr/DeviceProviderService.cs | 38 +------------------ 1 file changed, 1 insertion(+), 37 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs index 2ec8664b..9e818faa 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs @@ -272,43 +272,7 @@ namespace Tnb.WarehouseMgr disTaskIds = disTasks.Select(x => x.id).ToList() }; await _wareHouseService.TaskComplate(taskCompleUpInput); - //收到放货确认通知,向电梯发送到3楼的指令 - var elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); - if (elevatorQueueItem != null) - { - var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id); - //if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID) - { - var doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus); - if (doorStatus.ToEnum() != EnumDoorStatus.关门到位保持) - { - await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令 - } - var floor = disTask.end_floor.ParseToInt(); - if (floor == 4) - floor = 5; - else if (floor == 3) - floor = 4; - else if (floor == 2) - floor = 3; - //发送到目标楼的指令 - CancellationTokenSource cts = new(); - var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor); - (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1); - await Task.Run(async () => - { - do - { - tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, cts.Token); - } while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt()); - - }, cts.Token); - - if (sysStatus.ToEnum() == EnumSysStatus.正常状态 && runStatus.ToEnum() == EnumRunStatus.停梯 && -agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态 && floorNo != 4) - - } - } + } } catch (Exception ex) From ab9608aec2b6ddf50ce91b730bc41d3ac4cf921a Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 10 Oct 2023 13:23:38 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=8F=91=E5=B8=83=E8=AE=A2=E9=98=85=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E6=94=B9=E4=B8=BA=E5=AD=98=E6=97=B6=E9=97=B4=E8=BD=AE?= =?UTF-8?q?=E8=AF=A2=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ElevatorControlService.cs | 8 +-- .../TimedTaskBackgroundService.cs | 54 ++++++++++--------- .../Tnb.WarehouseMgr/WareHouseService.cs | 21 ++++---- .../Tnb.WarehouseMgr/WmsDeliveryService.cs | 5 ++ apihost/Tnb.API.Entry/Startup.cs | 2 +- system/Tnb.OAuth/OAuthService.cs | 8 +-- 6 files changed, 54 insertions(+), 44 deletions(-) diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs index 596a0a7a..81cde8fb 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs @@ -275,19 +275,19 @@ namespace Tnb.WarehouseMgr var pars = new Dictionary(); pars["DevName"] = devName; pars["Pos"] = "1"; - pars["Count"] = "4"; + pars["Count"] = "11"; pars["token"] = _elevatorCtlCfg.token; var url = _elevatorCtlCfg.GetTagListUrl; var systemInfo = await HttpClientHelper.GetAsync(url, pars: pars); var jo = JObject.Parse(systemInfo); var objs = jo["Items"].Values().ToList(); - if (objs?.Count == 4) + //if (objs?.Count == 4) { if (objs[0].Value("Name").Equals("SysStatus") && objs[1].Value("Name").Equals("RunStatus") && objs[3].Value("Name").Equals("FloorNo")) { - multi = (objs[0].Value("V"), objs[1].Value("V"), objs[3].Value("V"), objs[2].Value("V"), objs[10].Value("V")); + multi = (objs[0].Value("V"), objs[1].Value("V"), objs[3].Value("V"), objs[2].Value("V"), objs[9].Value("V")); } } return multi; @@ -334,7 +334,7 @@ namespace Tnb.WarehouseMgr await SendOpenCloseCmd(devName, (int)EnumAgvControl.前门关门); } var result = await WriteTagAsync(devName, ElevatorConsts.FloorExecute, floor); //呼叫电梯到4楼 - if (!result.IsNullOrEmpty()) + if (!string.IsNullOrEmpty(result)) { JObject jo = JObject.Parse(result); isSuccefuly = jo?.Value("Result").Equals("Ok", StringComparison.OrdinalIgnoreCase) ?? false; diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs index 49555047..195cae49 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs @@ -46,13 +46,13 @@ namespace Tnb.WarehouseMgr private static Dictionary> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase); static TimedTaskBackgroundService() { - Task.Run(() => - { - _timedFuncMap = App.EffectiveTypes.AsParallel().Where(t => !t.Namespace.IsNullOrWhiteSpace() && t.Namespace.Equals("Tnb.WarehouseMgr", StringComparison.OrdinalIgnoreCase)).SelectMany(t => t.GetMethods()) - .Where(m => m.GetCustomAttribute() != null) - .ToDictionary(x => x.Name, x => - (Func)Delegate.CreateDelegate(typeof(Func), App.GetService(x.DeclaringType), x)); - }); + //Task.Run(() => + //{ + // _timedFuncMap = App.EffectiveTypes.AsParallel().Where(t => !t.Namespace.IsNullOrWhiteSpace() && t.Namespace.Equals("Tnb.WarehouseMgr", StringComparison.OrdinalIgnoreCase)).SelectMany(t => t.GetMethods()) + // .Where(m => m.GetCustomAttribute() != null) + // .ToDictionary(x => x.Name, x => + // (Func)Delegate.CreateDelegate(typeof(Func), App.GetService(x.DeclaringType), x)); + //}); } public TimedTaskBackgroundService(IServiceProvider serviceProvider) { @@ -62,42 +62,44 @@ namespace Tnb.WarehouseMgr protected override Task ExecuteAsync(CancellationToken stoppingToken) { IsStarted = true; - var queueTask = Task.Run(async () => - { + //var queueTask = Task.Run(async () => + // { - var channelReader = _serviceProvider.GetRequiredService().Reader; + // var channelReader = _serviceProvider.GetRequiredService().Reader; - CancellationTokenSource? cts = new(); + // CancellationTokenSource? cts = new(); - while (channelReader != null && await channelReader.WaitToReadAsync()) - { - while (channelReader.TryRead(out var message)) - { - if (_timedFuncMap.ContainsKey(message.TaskName)) - { - await _timedFuncMap[message.TaskName].Invoke(stoppingToken); - } - } - } - }, stoppingToken); + // while (channelReader != null && await channelReader.WaitToReadAsync()) + // { + // while (channelReader.TryRead(out var message)) + // { + // if (_timedFuncMap.ContainsKey(message.TaskName)) + // { + // await _timedFuncMap[message.TaskName].Invoke(stoppingToken); + // } + // } + // } + // }, stoppingToken); var timedTask = Task.Run(() => { _eventPublisher = App.GetRequiredService(); + var whSvc = App.GetRequiredService(); + TimedTask(token => whSvc.GenTaskExecute(token), stoppingToken, 3); //齐套出库 var kittingOutService = App.GetRequiredService(); - TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1); - TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1); + TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 3); + TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 3); //齐套分拣 var setSortingService = App.GetRequiredService(); - TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 1); + TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 3); //最低库存检查 var transferSignService = App.GetRequiredService(); TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes); }, stoppingToken); - return Task.WhenAll(queueTask, timedTask); + return timedTask; } diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs index 9b62c128..6ff7bf66 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs @@ -17,6 +17,7 @@ using JNPF.Systems.Interfaces.System; using Mapster; using Microsoft.AspNetCore.Mvc; using Microsoft.CodeAnalysis; +using Microsoft.Extensions.Configuration; using Newtonsoft.Json; //using NPOI.SS.Formula.Functions; using SqlSugar; @@ -47,6 +48,7 @@ namespace Tnb.WarehouseMgr private readonly ICacheManager _cacheManager; private readonly IElevatorControlService _elevatorControlService; private static Dictionary _elevatorMap = new Dictionary(); + private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build(); public Func AddUnExecuteTask { get; set; } public WareHouseService(ISqlSugarRepository repository, IDictionaryDataService dictionaryDataService, @@ -224,10 +226,10 @@ namespace Tnb.WarehouseMgr var db = _db.CopyNew(); try { - if (_elevatorMap.Count < 1) - { - _elevatorMap = await _db.Queryable().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code); - } + //if (_elevatorMap.Count < 1) + //{ + // _elevatorMap = await _db.Queryable().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code); + //} //获取所有未下发的预任务申请 var preTasks = await db.Queryable().InnerJoin((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id) .InnerJoin((a, b, c) => a.area_id == c.id) @@ -385,9 +387,9 @@ namespace Tnb.WarehouseMgr try { var item = endLocCodes.FirstOrDefault(); - if (_elevatorMap.ContainsKey(item.device_id)) + //if (_elevatorMap.ContainsKey(item.device_id)) + var devName = _eleCtlCfg.DevName; { - var devName = _elevatorMap[item.device_id].ToString(); var agvStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.AGVControl); //判断当前设备是否为运行状态,不是则进入Agv电梯控制状态 if (agvStatus.ToEnum() != EnumAgvStatus.AGV运行状态) @@ -403,16 +405,15 @@ namespace Tnb.WarehouseMgr { distask_id = disTaskId, elevator_id = devId, - elevator_code = _elevatorMap[devId].ToString(), + elevator_code = devName, floor = floorN, //5代表4楼 task_status = "待执行", create_id = _userManager.UserId, create_time = DateTime.Now }; var elevatorQueue = await _db.Queryable().Where(it => it.elevator_id == devId && it.task_status == "执行中").ToListAsync(); - if (_elevatorMap.ContainsKey(devId) && (elevatorQueue.IsNull() || elevatorQueue.Count < 1)) + if ((elevatorQueue.IsNull() || elevatorQueue.Count < 1)) { - var devName = _elevatorMap[devId].ToString(); elevatorQueueItem.task_status = "执行中"; await _elevatorControlService.CallLift(devName, 5, CancellationToken.None); @@ -485,6 +486,8 @@ namespace Tnb.WarehouseMgr tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None); } while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt()); + Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo}"); + if (tuple.sysStatus.ToEnum() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum() == EnumRunStatus.停梯 && tuple.floorNo == disTask.end_floor.ParseToInt()) { diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs index 919a7bdb..1fd4f283 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsDeliveryService.cs @@ -12,6 +12,7 @@ using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; +using JNPF.Logging; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; @@ -135,10 +136,14 @@ namespace Tnb.WarehouseMgr var sPoint = it.FirstOrDefault(); var ePoint = it.LastOrDefault(); + Log.Information("ePoint?.point_code="+ ePoint?.point_code); + WmsPretaskH preTask = new(); preTask.org_id = _userManager.User.OrganizeId; preTask.startlocation_id = sPoint?.location_id!; preTask.startlocation_code = sPoint?.location_code!; + preTask.startpoint_code = sPoint?.point_code; + preTask.endpoint_code = ePoint?.point_code; preTask.endlocation_id = ePoint?.location_id!; preTask.endlocation_code = ePoint?.location_code!; preTask.start_floor = sPoint?.floor.ToString(); diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs index d595c879..c8f1231f 100644 --- a/apihost/Tnb.API.Entry/Startup.cs +++ b/apihost/Tnb.API.Entry/Startup.cs @@ -68,7 +68,7 @@ public class Startup : AppStartup //定时任务 services.AddHostedService(); //Agv心跳监听服务 - services.AddAgvHeartbeatMonitor(); + services.AddHostedService(); //services.AddHostedService(); } diff --git a/system/Tnb.OAuth/OAuthService.cs b/system/Tnb.OAuth/OAuthService.cs index 6438b0e2..23a2ca7f 100644 --- a/system/Tnb.OAuth/OAuthService.cs +++ b/system/Tnb.OAuth/OAuthService.cs @@ -294,7 +294,7 @@ public class OAuthService : IDynamicApiController, ITransient var userId = _userManager.UserId; //modify by ly on 20230918 登录成功后启动定时服务 - if (!userId.IsNullOrWhiteSpace()) + /*if (!userId.IsNullOrWhiteSpace()) { if (!_fetchPropValue.TryGetValue("IsStarted", out var action)) @@ -317,7 +317,7 @@ public class OAuthService : IDynamicApiController, ITransient { } } - } + }*/ var loginOutput = new CurrentUserOutput(); loginOutput.userInfo = await _userManager.GetUserInfo(); @@ -419,10 +419,10 @@ public class OAuthService : IDynamicApiController, ITransient public async Task Logout([FromQuery] string ticket) { //modify by ly on 20230918 - stopTimedTaskSvcCTS ??= new(); +/* stopTimedTaskSvcCTS ??= new(); await _backgroundService.StopAsync(stopTimedTaskSvcCTS.Token); stopTimedTaskSvcCTS.Cancel(); - //stopTimedTaskSvcCTS.Dispose(); +*/ //stopTimedTaskSvcCTS.Dispose(); UserManager.AsscessToken = string.Empty;