取消定时服务发布订阅模式改为存时间轮询方式
This commit is contained in:
@@ -275,19 +275,19 @@ namespace Tnb.WarehouseMgr
|
||||
var pars = new Dictionary<string, string>();
|
||||
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<JObject>().ToList();
|
||||
if (objs?.Count == 4)
|
||||
//if (objs?.Count == 4)
|
||||
{
|
||||
if (objs[0].Value<string>("Name").Equals("SysStatus")
|
||||
&& objs[1].Value<string>("Name").Equals("RunStatus")
|
||||
&& objs[3].Value<string>("Name").Equals("FloorNo"))
|
||||
{
|
||||
multi = (objs[0].Value<int>("V"), objs[1].Value<int>("V"), objs[3].Value<int>("V"), objs[2].Value<int>("V"), objs[10].Value<int>("V"));
|
||||
multi = (objs[0].Value<int>("V"), objs[1].Value<int>("V"), objs[3].Value<int>("V"), objs[2].Value<int>("V"), objs[9].Value<int>("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<string>("Result").Equals("Ok", StringComparison.OrdinalIgnoreCase) ?? false;
|
||||
|
||||
@@ -46,13 +46,13 @@ namespace Tnb.WarehouseMgr
|
||||
private static Dictionary<string, Func<CancellationToken?, Task>> _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<TimedAttribute>() != null)
|
||||
.ToDictionary(x => x.Name, x =>
|
||||
(Func<CancellationToken?, Task>)Delegate.CreateDelegate(typeof(Func<CancellationToken?, Task>), 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<TimedAttribute>() != null)
|
||||
// .ToDictionary(x => x.Name, x =>
|
||||
// (Func<CancellationToken?, Task>)Delegate.CreateDelegate(typeof(Func<CancellationToken?, Task>), 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<ITaskMessageNotify>().Reader;
|
||||
// var channelReader = _serviceProvider.GetRequiredService<ITaskMessageNotify>().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<IEventPublisher>();
|
||||
var whSvc = App.GetRequiredService<IWareHouseService>();
|
||||
TimedTask(token => whSvc.GenTaskExecute(token), stoppingToken, 3);
|
||||
//齐套出库
|
||||
var kittingOutService = App.GetRequiredService<IWmskittingOutService>();
|
||||
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<IWmsSetSortingService>();
|
||||
TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 1);
|
||||
TimedTask(token => setSortingService.PackSortingByAdd(token), stoppingToken, 3);
|
||||
//最低库存检查
|
||||
var transferSignService = App.GetRequiredService<IWmsPDATransferSignService>();
|
||||
TimedTask(token => transferSignService.IsMinStorage(token), stoppingToken, 30, TimeSpanUnit.Minutes);
|
||||
|
||||
}, stoppingToken);
|
||||
|
||||
return Task.WhenAll(queueTask, timedTask);
|
||||
return timedTask;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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<string, object> _elevatorMap = new Dictionary<string, object>();
|
||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||
public Func<string, Task> AddUnExecuteTask { get; set; }
|
||||
|
||||
public WareHouseService(ISqlSugarRepository<WmsInstockH> repository, IDictionaryDataService dictionaryDataService,
|
||||
@@ -224,10 +226,10 @@ namespace Tnb.WarehouseMgr
|
||||
var db = _db.CopyNew();
|
||||
try
|
||||
{
|
||||
if (_elevatorMap.Count < 1)
|
||||
{
|
||||
_elevatorMap = await _db.Queryable<WmsElevatorH>().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code);
|
||||
}
|
||||
//if (_elevatorMap.Count < 1)
|
||||
//{
|
||||
// _elevatorMap = await _db.Queryable<WmsElevatorH>().ToDictionaryAsync(x => x.elevator_id, x => x.elevator_code);
|
||||
//}
|
||||
//获取所有未下发的预任务申请
|
||||
var preTasks = await db.Queryable<WmsPretaskH>().InnerJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
||||
.InnerJoin<WmsAreaH>((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>() != 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<WmsElevatorUnexecute>().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>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯
|
||||
&& tuple.floorNo == disTask.end_floor.ParseToInt())
|
||||
{
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user