电梯Agv心跳代码调整

This commit is contained in:
yang.lee
2023-11-27 15:01:48 +08:00
parent 8cff8f3bd0
commit ce2fc1b29b
9 changed files with 80 additions and 75 deletions

View File

@@ -10,6 +10,10 @@
/// 4#梯设备名称 /// 4#梯设备名称
/// </summary> /// </summary>
public string DevName4 { get; set; } public string DevName4 { get; set; }
/// <summary>
/// 心跳检测设备名称集合
/// </summary>
public List<string> HeartbeatDevNames { get; set; }
public string token { get; set; } public string token { get; set; }
/// <summary> /// <summary>
/// 获取设备标签列表url /// 获取设备标签列表url

View File

@@ -33,6 +33,8 @@
/// <returns>获取到的状态值</returns> /// <returns>获取到的状态值</returns>
Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName,IEnumerable<string> tags, CancellationToken token); Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName,IEnumerable<string> tags, CancellationToken token);
Task<Dictionary<string,int>> GetELevatorStatusMap(string devName,IEnumerable<string> tags, CancellationToken token);
/// <summary> /// <summary>
/// 检查Agv状态 /// 检查Agv状态
/// </summary> /// </summary>

View File

@@ -222,7 +222,7 @@ namespace Tnb.WarehouseMgr
{ {
try try
{ {
Logger.Information($"任务链编号:{input.taskChainCode},状态:{input.status},设备ID{input.deviceID}"); Logger.Information($"任务链上报->任务链编号:{input.taskChainCode},状态:{input.status},设备ID{input.deviceID}");
/*switch (input.status) /*switch (input.status)
{ {
case "CREATED": break; case "CREATED": break;
@@ -318,6 +318,7 @@ namespace Tnb.WarehouseMgr
{ {
disTaskIds = disTasks.Select(x => x.id).ToList() disTaskIds = disTasks.Select(x => x.id).ToList()
}; };
Logger.Information($"设备取返回输入参数:{JsonConvert.SerializeObject(taskExecuteAfterUpInput)}");
await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput); await _wareHouseService.TaskExecuteAfter(taskExecuteAfterUpInput);
Logger.Information($"Agv取货完成,任务Id:{string.Join(",", disTasks.Select(x => x.id))}"); Logger.Information($"Agv取货完成,任务Id:{string.Join(",", disTasks.Select(x => x.id))}");
WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中"); WmsElevatorUnexecute elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTasks.Select(x => x.id).Contains(it.distask_id) && it.task_status == "执行中");

View File

@@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis; using System.Diagnostics.CodeAnalysis;
using System.Dynamic; using System.Dynamic;
using DingTalk.Api.Request;
using JNPF; using JNPF;
using JNPF.Common.Extension; using JNPF.Common.Extension;
using Microsoft.AspNetCore.Mvc; 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<Dictionary<string, int>> GetELevatorStatusMap(string devName, IEnumerable<string> tags, CancellationToken token)
{
Task<string> GetTag(string tag)
{
var dicCommand = new Dictionary<string, string>
{
["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<string>("Name"), x => x.Value<int>("V")) ?? default;
return statusMap;
}
/// <summary> /// <summary>

View File

@@ -10,6 +10,7 @@ using NPOI.OpenXmlFormats.Dml.Diagram;
using Tnb.Common.Extension; using Tnb.Common.Extension;
using Tnb.Common.Utils; using Tnb.Common.Utils;
using Tnb.WarehouseMgr.Entities.Configs; using Tnb.WarehouseMgr.Entities.Configs;
using Tnb.WarehouseMgr.Entities.Consts;
using Tnb.WarehouseMgr.Entities.Enums; using Tnb.WarehouseMgr.Entities.Enums;
using Tnb.WarehouseMgr.Entities.Exceptions; using Tnb.WarehouseMgr.Entities.Exceptions;
@@ -42,43 +43,21 @@ namespace Tnb.WarehouseMgr
//电梯Agv心跳检测 //电梯Agv心跳检测
_ = TimedTask(async token => _ = TimedTask(async token =>
{ {
Dictionary<string, string> parameter = new() foreach (var devName in _elevatorControlConfiguration.HeartbeatDevNames)
{ {
["DevName"] = _elevatorControlConfiguration.DevName3, Dictionary<string, string> parameter = new()
["TagName"] = "AGVKeepalive", {
["Value"] = "123", ["DevName"] = devName,
["token"] = _elevatorControlConfiguration.token ["TagName"] = ElevatorConsts.AGVKeepalive,
}; ["Value"] = "123",
string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); ["token"] = _elevatorControlConfiguration.token
await Console.Out.WriteLineAsync($"{_elevatorControlConfiguration.DevName3.Match(@"\d+")}#梯, 心跳检测结果:{result}"); };
}, stoppingToken, 30, TimeSpanUnit.Seconds); string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
_ = TimedTask(async token => await Console.Out.WriteLineAsync($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}");
{ }
Dictionary<string, string> parameter = new() }, stoppingToken, 30);
{
["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<IWmskittingOutService>();
TimedTask(token => kittingOutService.KittingOutByAdd(token), stoppingToken, 1);
TimedTask(token => kittingOutService.KittingOutByIsToBeShipped(token), stoppingToken, 1);
//齐套分拣
var setSortingService = App.GetRequiredService<IWmsSetSortingService>();
TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 2);
//最低库存检查 });
var transferSignService = App.GetRequiredService<IWmsPDATransferSignService>();
TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);*/
}, stoppingToken);
return timedTask; return timedTask;
} }
@@ -86,14 +65,42 @@ namespace Tnb.WarehouseMgr
private Task TimedTask(Func<CancellationToken, Task> action, CancellationToken ct, int interval, TimeSpanUnit timeType = TimeSpanUnit.Seconds) private Task TimedTask(Func<CancellationToken, Task> action, CancellationToken ct, int interval, TimeSpanUnit timeType = TimeSpanUnit.Seconds)
{ {
CancellationToken token = ct; // CancellationToken token = ct;
return Task.Factory.StartNew(async () => // 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 => await action(ct).Catch(async ex =>
{ {
if (ex is TimedTaskException timedTaskEx and not null) if (ex is TimedTaskException timedTaskEx and not null)
{ {
await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateExLog", timedTaskEx.options!, new SysLogEntity
@@ -113,37 +120,7 @@ namespace Tnb.WarehouseMgr
}); });
await TaskDelay(timeType, interval); await TaskDelay(timeType, interval);
} }
}, ct, TaskCreationOptions.None, new CustomerTaskScheduler()); }, ct);
#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
} }
public override Task StopAsync(CancellationToken cancellationToken) public override Task StopAsync(CancellationToken cancellationToken)

View File

@@ -838,9 +838,7 @@ namespace Tnb.WarehouseMgr
{ {
upInput.loginType = "web"; upInput.loginType = "web";
}*/ }*/
Logger.Information("loginType赋值前");
upInput.loginType = "web";//(!string.IsNullOrEmpty(_userManager?.LoginType) ? "app" : "web") ?? "web"; 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") if (dt.is_sign == 1 && dt.chain_type == "3")
{ {
Logger.Information("执行业务回更操作....."); Logger.Information("执行业务回更操作.....");

View File

@@ -111,7 +111,8 @@ namespace Tnb.WarehouseMgr
{ {
if (s_materialMap.Count == 0) if (s_materialMap.Count == 0)
{ {
s_materialMap = await _db.Queryable<BasMaterial>().ToDictionaryAsync(x => x.id, x => x.name); //物料+规格型号+批次+箱号
//s_materialMap = await _db.Queryable<BasMaterial>().ToDictionaryAsync(x => $"{}{}{}{}", x => x.name);
} }
var list = await _db.Queryable<TSubEntity>().Where(it => it.bill_id == pkId) var list = await _db.Queryable<TSubEntity>().Where(it => it.bill_id == pkId)
.Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "") .Mapper(it => it.material_name = s_materialMap.ContainsKey(it.material_id) ? s_materialMap[it.material_id]?.ToString() ?? "" : "")

View File

@@ -1,6 +1,7 @@
{ {
"DevName3": "Elevator3", "DevName3": "Elevator3",
"DevName4": "Elevator4", "DevName4": "Elevator4",
"HeartbeatDevNames": [ "Elevator3", "Elevator4" ],
"token": "780BE4144636CF47DDF3920B0F1D069B", "token": "780BE4144636CF47DDF3920B0F1D069B",
"GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList", "GetTagListUrl": "http://192.168.11.110:9100/Dev/GetTagList",
"GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag", "GetTagUrl": "http://192.168.11.110:9100/Dev/GetTag",

View File

@@ -58,6 +58,8 @@ public class Startup : AppStartup
//定时任务 //定时任务
services.AddHostedService<TimedTaskBackgroundService>(); services.AddHostedService<TimedTaskBackgroundService>();
//services.AddHostedService<RedisBackGround>(); //services.AddHostedService<RedisBackGround>();
} }