diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
index c50e9373..32689bf4 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Configs/ElevatorControlConfiguration.cs
@@ -3,9 +3,13 @@
public class ElevatorControlConfiguration
{
///
- /// 设备名称
+ /// 3#梯设备名称
///
- public string DevName { get; set; }
+ public string DevName3 { get; set; }
+ ///
+ /// 4#梯设备名称
+ ///
+ public string DevName4 { get; set; }
public string token { get; set; }
///
/// 获取设备标签列表url
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/ElevatorStatusQuery.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/ElevatorStatusQuery.cs
new file mode 100644
index 00000000..fbbf7d8c
--- /dev/null
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Dto/Queries/ElevatorStatusQuery.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tnb.WarehouseMgr.Entities.Dto.Queries
+{
+ ///
+ /// 电梯状态查询输入参数
+ ///
+ public class ElevatorStatusQuery
+ {
+ ///
+ /// 设备名称
+ ///
+ public string DevName { get; set; }
+ ///
+ /// 标签集合
+ ///
+ public IEnumerable tags { get; set; }
+ }
+}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
index f7e9baff..8e6cff4a 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr.Interfaces/IElevatorControlService.cs
@@ -24,6 +24,15 @@
/// 取消标志
///
Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName, CancellationToken token);
+ ///
+ /// 获取电梯状态
+ ///
+ /// 设备名称
+ /// 标签集合
+ /// 取消标志
+ /// 获取到的状态值
+ Task<(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus)> GetElevatorStatus(string devName,IEnumerable tags, CancellationToken token);
+
///
/// 检查Agv状态
///
@@ -49,5 +58,6 @@
/// 取消令牌
///
Task CallLift(string devName, int floor, CancellationToken cancellationToken);
+
}
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
index b099637b..2154f966 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/BaseWareHouseService.cs
@@ -35,9 +35,17 @@ namespace Tnb.WarehouseMgr
public class BaseWareHouseService : IOverideVisualDevService, IDynamicApiController, ITransient
{
private static readonly Lazy> _stroageMapLazy;
+ private static readonly Dictionary s_logLevelMap = new()
+ {
+ [LogLevel.Debug] = "DBG",
+ [LogLevel.Information] = "INF",
+ [LogLevel.Warning] = "WRN",
+ [LogLevel.Error] = "ERR",
+ };
public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc();
public static SemaphoreSlim s_taskExecuteSemaphore = new(1);
+
protected IEventPublisher? EventPublisher { set; get; }
protected ILogger Logger => LoggerFactory.Create(builder => builder.AddFile($"{AppContext.BaseDirectory}/logs/custom{DateTime.Now:yyyyMMdd}.log", cfgOpts =>
@@ -46,9 +54,9 @@ namespace Tnb.WarehouseMgr
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
cfgOpts.MessageFormat = (logMsg) =>
{
- Span span = logMsg.LogLevel.ToString().ToCharArray();
- StringBuilder sb = new();
- _ = sb.Append($"{span[..4]} ");
+ var logLevel = s_logLevelMap[logMsg.LogLevel];
+ var sb = new StringBuilder();
+ _ = sb.Append($"[{logLevel}] ");
_ = sb.Append($"{logMsg.LogName} ");
_ = sb.Append($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ");
_ = sb.Append($"#{logMsg.EventId.Id} ");
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
index 9ba0ce75..40430005 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/DeviceProviderService.cs
@@ -13,6 +13,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
+using Senparc.CO2NET.Cache;
using SqlSugar;
using Tnb.Common.Extension;
using Tnb.EquipMgr.Entities;
@@ -85,9 +86,8 @@ namespace Tnb.WarehouseMgr
WmsElevatorH elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id)
.LeftJoin((a, b, c) => b.location_id == c.startlocation_id)
- .LeftJoin((a, b, c, d) => c.startlocation_id == d.location_id)
- .Where((a, b, c, d) => d.point_code == input.sourceName && input.taskCode.Contains(c.bill_code))
- .Select((a, b, c, d) => new WmsElevatorH
+ .Where((a, b, c) => c.endpoint_code == input.sourceName && input.taskCode == input.taskCode)
+ .Select((a, b, c) => new WmsElevatorH
{
distask_id = c.id,
device_id = a.elevator_id,
@@ -102,10 +102,13 @@ namespace Tnb.WarehouseMgr
try
{
Logger.Information($"当前任务Id:{elevator.distask_id}");
+ Logger.Information($"elevator.device_id={elevator.device_id}");
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{
- string devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName;
- (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None);
+
+ string devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName3;
+ var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" };
+ (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum()},运行状态:{runStatus.ToEnum()},Agv状态:{agvStatus.ToEnum()},当前楼层:{floorNo}");
{
if (doorStatus.ToEnum() != EnumDoorStatus.开门到位保持)
@@ -139,18 +142,18 @@ namespace Tnb.WarehouseMgr
[HttpPost, NonUnify, AllowAnonymous]
public async Task UnloadConfirm(ConfirmInput input)//
{
+ Logger.Information($"输入参数:{JsonConvert.SerializeObject(input)}");
Logger.Information("放货确认..................");
try
{
//根据Agv传递的参数获取,对应的电梯
WmsElevatorH elevator = await _db.Queryable().LeftJoin((a, b) => a.id == b.bill_id)
.LeftJoin((a, b, c) => b.location_id == c.endlocation_id)
- .LeftJoin((a, b, c, d) => c.endlocation_id == d.location_id)
- .Where((a, b, c, d) => d.point_code == input.targetName && c.bill_code == input.taskCode)
- .Select((a, b, c, d) => new WmsElevatorH
+ .Where((a, b, c) => c.endpoint_code == input.targetName && (c.bill_code == input.taskCode || c.bill_code == input.taskChainCode))
+ .Select((a, b, c) => new WmsElevatorH
{
end_floor = SqlFunc.ToInt32(c.end_floor),
- distask_id = c.id,
+ device_id = a.elevator_id,
}, true)
.FirstAsync();
if (elevator.IsNull())
@@ -158,10 +161,11 @@ namespace Tnb.WarehouseMgr
throw new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务");
}
- if (s_elevatorMap.TryGetValue(elevator.elevator_id, out object? elevatorCode))
+ if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{
- string devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName;
- (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, CancellationToken.None);//elevator.elevator_code
+ string devName = elevatorCode?.ToString() ?? _eleCtlCfg.DevName3;
+ var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" };
+ (int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);//elevator.elevator_code
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
//判断Agv电梯是否进入状态
if (agvStatus != (int)EnumAgvStatus.AGV运行状态)
@@ -253,14 +257,22 @@ namespace Tnb.WarehouseMgr
List disTasks = await _db.Queryable().Where(it => it.bill_code.Contains(input.taskChainCode)).ToListAsync();
List eps = await _db.Queryable().Where(it => it.code.Contains(input.deviceID)).ToListAsync();
- TaskExecuteUpInput taskExecuteUpInput = new()
+ if (disTasks == null || disTasks.Count < 1)
{
- disTaskIds = disTasks.Select(x => x.id).ToList(),
- EqpIds = eps.Select(x => x.id).ToList(),
- };
- await _wareHouseService.TaskExecute(taskExecuteUpInput);
+ Logger.Error($"根据任务链编号:{input.taskChainCode} ,未获取到任何任务");
+ }
+ if (disTasks?.Count > 0)
+ {
+ TaskExecuteUpInput taskExecuteUpInput = new()
+ {
+ disTaskIds = disTasks?.Select(x => x.id).ToList() ?? Enumerable.Empty().ToList(),
+ EqpIds = eps?.Select(x => x.id).ToList() ?? Enumerable.Empty().ToList(),
+ };
+ await _wareHouseService.TaskExecute(taskExecuteUpInput);
+ }
- ConnectionConfigOptions opts = App.GetOptions();
+
+ /*ConnectionConfigOptions opts = App.GetOptions();
UserAgent userAgent = new(App.HttpContext);
//写系统日志
await _eventPublisher.PublishAsync(new LogEventSource("Log:CreateOpLog", opts, new SysLogEntity
@@ -275,11 +287,12 @@ namespace Tnb.WarehouseMgr
Json = $"任务链状态上报,任务链编号:{input.taskChainCode},上报状态:{input.status},设备编号:{input.deviceID}",
PlatForm = string.Format("{0}-{1}", userAgent.OS.ToString(), userAgent.RawValue),
CreatorTime = DateTime.Now
- }));
+ }));*/
}
catch (Exception ex)
{
Logger.Error("任务链状态上报", ex);
+ Logger.Error($"任务链状态上报错误堆栈{Environment.NewLine}{ex.StackTrace}");
return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
throw;
}
@@ -326,6 +339,7 @@ namespace Tnb.WarehouseMgr
{
disTaskIds = disTasks.Select(x => x.id).ToList()
};
+ Logger.Information($"taskCompleUpInput json parameter:{JsonConvert.SerializeObject(taskCompleUpInput)}");
await _wareHouseService.TaskComplate(taskCompleUpInput);
}
diff --git a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
index afeebd57..f19b7cfc 100644
--- a/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
+++ b/WarehouseMgr/Tnb.WarehouseMgr/ElevatorControlService.cs
@@ -1,4 +1,5 @@
-using System.Dynamic;
+using System.Diagnostics.CodeAnalysis;
+using System.Dynamic;
using JNPF;
using JNPF.Common.Extension;
using Microsoft.AspNetCore.Mvc;
@@ -120,7 +121,7 @@ namespace Tnb.WarehouseMgr
{
TaskCompletionSource