diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
index 32689bf4..0b9f0528 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
@@ -10,6 +10,10 @@
/// 4#梯设备名称
///
public string DevName4 { get; set; }
+ ///
+ /// 心跳检测设备名称集合
+ ///
+ public List HeartbeatDevNames { get; set; }
public string token { get; set; }
///
/// 获取设备标签列表url
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
index 8e6cff4a..f42aacde 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
@@ -33,6 +33,8 @@
/// 获取到的状态值
Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName,IEnumerable tags, CancellationToken token);
+
+ Task> GetELevatorStatusMap(string devName,IEnumerable tags, CancellationToken token);
///
/// 检查Agv状态
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
index 40430005..86a60422 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
@@ -222,7 +222,7 @@ namespace Tnb.WarehouseMgr
{
try
{
- Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}");
+ Logger.Information($"任务链上报->任务链编号:{input.taskChainCode},状态:{input.status},设备ID:{input.deviceID}");
/*switch (input.status)
{
case "CREATED": break;
@@ -318,6 +318,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))}");
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
index f19b7cfc..7a54fecc 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
@@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using System.Dynamic;
+using DingTalk.Api.Request;
using JNPF;
using JNPF.Common.Extension;
using Microsoft.AspNetCore.Mvc;
@@ -324,11 +325,29 @@ namespace Tnb.WarehouseMgr
}
}
}
- return (sysStatus: sysStatus, runStatus: runStatus, floorNo: floorNo, doorStatus: doorStatus, agvStatus: agvStatus);
+ return (sysStatus, runStatus, floorNo, doorStatus, agvStatus);
}
+ public async Task> GetELevatorStatusMap(string devName, IEnumerable tags, CancellationToken token)
+ {
+ Task GetTag(string tag)
+ {
+ var dicCommand = new Dictionary
+ {
+ ["DevName"] = devName,
+ ["token"] = _elevatorCtlCfg.token,
+ ["TagName"] = tag
+ };
+ return HttpClientHelper.GetAsync(_elevatorCtlCfg.GetTagUrl, pars: dicCommand);
+ }
+
+ var tasks = tags.Select(tag => GetTag(tag));
+ var results = await Task.WhenAll(tasks);
+ var statusMap = results?.Select(x => JObject.Parse(x)).ToDictionary(x => x.Value("Name"), x => x.Value("V")) ?? default;
+ return statusMap;
+ }
///
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs
index 8c8a275b..b1717e98 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/TimedTaskBackgroundService.cs
@@ -10,6 +10,7 @@ using NPOI.OpenXmlFormats.Dml.Diagram;
using Tnb.Common.Extension;
using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities.Configs;
+using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Entities.Exceptions;
@@ -42,43 +43,21 @@ namespace Tnb.WarehouseMgr
//电梯Agv心跳检测
_ = TimedTask(async token =>
{
- Dictionary parameter = new()
+ foreach (var devName in _elevatorControlConfiguration.HeartbeatDevNames)
{
- ["DevName"] = _elevatorControlConfiguration.DevName3,
- ["TagName"] = "AGVKeepalive",
- ["Value"] = "123",
- ["token"] = _elevatorControlConfiguration.token
- };
- string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
- await Console.Out.WriteLineAsync($"{_elevatorControlConfiguration.DevName3.Match(@"\d+")}#梯, 心跳检测结果:{result}");
- }, stoppingToken, 30, TimeSpanUnit.Seconds);
- _ = TimedTask(async token =>
- {
- Dictionary parameter = new()
- {
- ["DevName"] = _elevatorControlConfiguration.DevName4,
- ["TagName"] = "AGVKeepalive",
- ["Value"] = "123",
- ["token"] = _elevatorControlConfiguration.token
- };
- string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
- await Console.Out.WriteLineAsync($"{_elevatorControlConfiguration.DevName4.Match(@"\d+")}#梯,心跳检测结果:{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);
-
+ Dictionary parameter = new()
+ {
+ ["DevName"] = devName,
+ ["TagName"] = ElevatorConsts.AGVKeepalive,
+ ["Value"] = "123",
+ ["token"] = _elevatorControlConfiguration.token
+ };
+ string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
+ await Console.Out.WriteLineAsync($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}");
+ }
+ }, stoppingToken, 30);
- //最低库存检查
- var transferSignService = App.GetRequiredService();
- TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/
-
- }, stoppingToken);
-
+ });
return timedTask;
}
@@ -86,14 +65,42 @@ namespace Tnb.WarehouseMgr
private Task TimedTask(Func action, CancellationToken ct, int interval, TimeSpanUnit timeType = TimeSpanUnit.Seconds)
{
- CancellationToken token = ct;
- return Task.Factory.StartNew(async () =>
+ // CancellationToken token = ct;
+ // return Task.Factory.StartNew(async () =>
+ // {
+ // while (!token.IsCancellationRequested)
+ // {
+ // await action(ct).Catch(async ex =>
+ // {
+
+ // if (ex is TimedTaskException timedTaskEx and not null)
+ // {
+ // await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity
+ // {
+ // Id = SnowflakeIdHelper.NextId(),
+ // Category = 4,
+ // UserId = timedTaskEx.UserId,
+ // UserName = timedTaskEx.UserName,
+ // IPAddress = NetHelper.Ip,
+ // RequestURL = timedTaskEx.RequestURL,
+ // RequestMethod = timedTaskEx.RequestMethod,
+ // Json = timedTaskEx + "\n" + timedTaskEx.InnerException?.StackTrace + "\n" + timedTaskEx?.TargetSite?.GetParameters().ToString(),
+ // //PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue),
+ // CreatorTime = DateTime.Now
+ // }));
+ // }
+ // });
+ // await TaskDelay(timeType, interval);
+ // }
+ // }, ct, TaskCreationOptions.None, new CustomerTaskScheduler());
+
+ return Task.Run(async () =>
{
- while (!token.IsCancellationRequested)
+ while (!ct.IsCancellationRequested)
{
+
await action(ct).Catch(async ex =>
{
-
if (ex is TimedTaskException timedTaskEx and not null)
{
await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity
@@ -113,37 +120,7 @@ namespace Tnb.WarehouseMgr
});
await TaskDelay(timeType, interval);
}
- }, ct, TaskCreationOptions.None, new CustomerTaskScheduler());
-
- #region ThreadPool 线程运行会导致线程饥饿
- //return Task.Run(async () =>
- //{
- // while (!token.IsCancellationRequested)
- // {
-
- // await action(cts).Catch(async ex =>
- // {
- // if (ex is TimedTaskException timedTaskEx and not null)
- // {
- // await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity
- // {
- // Id = SnowflakeIdHelper.NextId(),
- // Category = 4,
- // UserId = timedTaskEx.UserId,
- // UserName = timedTaskEx.UserName,
- // IPAddress = NetHelper.Ip,
- // RequestURL = timedTaskEx.RequestURL,
- // RequestMethod = timedTaskEx.RequestMethod,
- // Json = timedTaskEx + "\n" + timedTaskEx.InnerException?.StackTrace + "\n" + timedTaskEx?.TargetSite?.GetParameters().ToString(),
- // //PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue),
- // CreatorTime = DateTime.Now
- // }));
- // }
- // });
- // await TaskDelay(timeType, interval);
- // }
- //}, token);
- #endregion
+ }, ct);
}
public override Task StopAsync(CancellationToken cancellationToken)
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
index 1c8b1275..b4519d93 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WareHouseService.cs
@@ -838,9 +838,7 @@ namespace Tnb.WarehouseMgr
{
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")
{
Logger.Information("执行业务回更操作.....");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
index 9ec854e7..eaef030d 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/WmsPurchaseAndSaleCommonService.cs
@@ -111,7 +111,8 @@ namespace Tnb.WarehouseMgr
{
if (s_materialMap.Count == 0)
{
- s_materialMap = await _db.Queryable().ToDictionaryAsync(x => x.id, x => x.name);
+ //物料+规格型号+批次+箱号
+ //s_materialMap = await _db.Queryable().ToDictionaryAsync(x => $"{}{}{}{}", x => x.name);
}
var list = await _db.Queryable().Where(it => it.bill_id == pkId)
.Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "")
diff --git a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json
index fb0a3e53..80c31cd7 100644
--- a/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json
+++ b/apihost/Tnb.API.Entry/Configurations/ElevatorControlSettings.json
@@ -1,6 +1,7 @@
{
"DevName3": "Elevator3",
"DevName4": "Elevator4",
+ "HeartbeatDevNames": [ "Elevator3", "Elevator4" ],
"token": "780BE4144636CF47DDF3920B0F1D069B",
"GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList",
"GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag",
diff --git a/apihost/Tnb.API.Entry/Startup.cs b/apihost/Tnb.API.Entry/Startup.cs
index 1efe0fb4..2196fe41 100644
--- a/apihost/Tnb.API.Entry/Startup.cs
+++ b/apihost/Tnb.API.Entry/Startup.cs
@@ -58,6 +58,8 @@ public class Startup : AppStartup
//定时任务
services.AddHostedService();
//services.AddHostedService();
+
+
}