Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2024-07-25 15:03:57 +08:00
4 changed files with 92 additions and 56 deletions

View File

@@ -1895,11 +1895,16 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
try try
{ {
string jsonString = await _redisData.GetHash(DevName, field); string jsonString = await _redisData.GetHash(DevName, field);
Log.Information($"查询X2Server数据 {DevName} {field}:" + jsonString);
if (string.IsNullOrEmpty(jsonString)) if (string.IsNullOrEmpty(jsonString))
return false; return false;
JObject jsonObject = JObject.Parse(jsonString); JObject jsonObject = JObject.Parse(jsonString);
if (jsonObject.TryGetValue("StatusCode", out JToken valueToken1))
{
if (valueToken1.ToString() == "-1")
return false;
}
if (jsonObject.TryGetValue("Value", out JToken valueToken2)) if (jsonObject.TryGetValue("Value", out JToken valueToken2))
{ {
return bool.Parse(valueToken2.ToString()); return bool.Parse(valueToken2.ToString());
@@ -1920,59 +1925,59 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
public async Task<string> GetStringTag(string DevName, string field) public async Task<string> GetStringTag(string DevName, string field)
{ {
#region #region
//try
//{
// string jsonString = await _redisData.GetHash(DevName, field);
// JObject jsonObject = JObject.Parse(jsonString);
// if (jsonObject.TryGetValue("StatusCode", out JToken valueToken1))
// {
// if (valueToken1.ToString() == "-1")
// return "";
// }
// if (jsonObject.TryGetValue("Value", out JToken valueToken2))
// {
// return valueToken2.ToString();
// }
// else
// {
// Console.WriteLine($"未找到匹配项 {DevName} {field}");
// }
//}
//catch (Exception ex)
//{
// // 捕获并处理异常
// Console.WriteLine($"发生异常: {ex.Message}");
//}
//return $"未找到匹配项 {DevName} {field}";
#endregion
try try
{ {
string jsonString = await _redisData.GetHash(DevName, field); string jsonString = await _redisData.GetHash(DevName, field);
if (string.IsNullOrEmpty(jsonString)) Log.Information($"查询X2Server数据 {DevName} {field}:" + jsonString);
return ""; JObject jsonObject = JObject.Parse(jsonString);
if (jsonObject.TryGetValue("StatusCode", out JToken valueToken1))
string pattern = "\"Value\":\"(.*?)\"";
System.Text.RegularExpressions.Match match = Regex.Match(jsonString, pattern);
if (match.Success)
{ {
if (valueToken1.ToString() == "-1")
return match.Groups[1].Value; return "";
}
if (jsonObject.TryGetValue("Value", out JToken valueToken2))
{
return valueToken2.ToString();
} }
else else
{ {
Console.WriteLine($"未找到匹配项{DevName} {field}"); Console.WriteLine($"未找到匹配项 {DevName} {field}");
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine($"未找到匹配项{DevName} {field}"); // 捕获并处理异常
Console.WriteLine($"发生异常: {ex.Message}");
} }
return $"未找到匹配项 {DevName} {field}"; return $"未找到匹配项 {DevName} {field}";
#endregion
//try
//{
// string jsonString = await _redisData.GetHash(DevName, field);
// if (string.IsNullOrEmpty(jsonString))
// return "";
// string pattern = "\"Value\":\"(.*?)\"";
// System.Text.RegularExpressions.Match match = Regex.Match(jsonString, pattern);
// if (match.Success)
// {
// return match.Groups[1].Value;
// }
// else
// {
// Console.WriteLine($"未找到匹配项{DevName} {field}");
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine($"未找到匹配项{DevName} {field}");
//}
//return $"未找到匹配项 {DevName} {field}";
} }
private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value) private async Task<bool> Floor2UpDownMachinecode_SetTag(string tag, string value)
@@ -2524,7 +2529,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.Zero, TimeSpan.FromSeconds(180)); //YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.Zero, TimeSpan.FromSeconds(180));
return Task.CompletedTask; return Task.CompletedTask;
} }

View File

@@ -123,8 +123,8 @@ namespace Tnb.WarehouseMgr
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.LogError(ex.Message); Logger.LogError("【LoadConfirm】" + ex.Message);
Logger.LogError(ex.StackTrace); Logger.LogError("【LoadConfirm】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, $"取货确认..................失败 原因是{ex.Message}"); return await ToApiResult(HttpStatusCode.InternalServerError, $"取货确认..................失败 原因是{ex.Message}");
throw; throw;
} }
@@ -159,6 +159,11 @@ namespace Tnb.WarehouseMgr
{ {
if (elevator != null && s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode)) if (elevator != null && s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{ {
if (!TimedTaskBackgroundService.elevatorStatus[elevatorCode.ToString()])
{
Logger.LogError($"【LoadConfirm】 {elevatorCode} 电梯心跳中断,请重试!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"{elevatorCode} 电梯心跳中断,请重试!");
}
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲; //s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
string devName = elevatorCode?.ToString(); string devName = elevatorCode?.ToString();
Logger.Information($"【LoadConfirm】 获取设备:{devName},状态"); Logger.Information($"【LoadConfirm】 获取设备:{devName},状态");
@@ -180,7 +185,7 @@ namespace Tnb.WarehouseMgr
if (curFloor != floorNo) if (curFloor != floorNo)
{ {
Logger.Information($"【LoadConfirm】 电梯还未开门请重试curFloor != floorNo"); Logger.Information($"【LoadConfirm】 电梯还未开门请重试curFloor != floorNo");
return await ToApiResult(HttpStatusCode.InternalServerError, "【LoadConfirm】 电梯还未开门,请重试!"); return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
} }
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus. && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus. && floorNo == curFloor) //判断电梯楼层与当前放货在同一楼层在允许放货 if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus. && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus. && floorNo == curFloor) //判断电梯楼层与当前放货在同一楼层在允许放货
{ {
@@ -202,9 +207,11 @@ namespace Tnb.WarehouseMgr
} }
} }
} }
catch (Exception) catch (Exception ex)
{ {
return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); Logger.LogError("【LoadConfirm】" + ex.Message);
Logger.LogError("【LoadConfirm】" + ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, $"取货确认..................失败 原因是{ex.Message}");
throw; throw;
} }
return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!"); return await ToApiResult(HttpStatusCode.InternalServerError, "请重试!");
@@ -339,6 +346,11 @@ namespace Tnb.WarehouseMgr
} }
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode)) if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
{ {
if (!TimedTaskBackgroundService.elevatorStatus[elevatorCode.ToString()])
{
Logger.LogError($"【UnloadConfirm】 {elevatorCode} 电梯心跳中断,请重试!");
return await ToApiResult(HttpStatusCode.InternalServerError, $"{elevatorCode} 电梯心跳中断,请重试!");
}
string devName = elevatorCode?.ToString(); string devName = elevatorCode?.ToString();
@@ -397,7 +409,8 @@ namespace Tnb.WarehouseMgr
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.Error("【UnloadConfirm】 放货确认失败", ex); Logger.Error("【UnloadConfirm】 放货确认失败", ex.Message);
Logger.Error("【UnloadConfirm】 放货确认失败", ex.StackTrace);
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!"); return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
throw; throw;
} }

View File

@@ -9,7 +9,9 @@ using JNPF.Logging;
using JNPF.Systems.Entitys.System; using JNPF.Systems.Entitys.System;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using NPOI.OpenXmlFormats.Dml.Diagram; using NPOI.OpenXmlFormats.Dml.Diagram;
using NPOI.SS.Format;
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;
@@ -32,14 +34,19 @@ namespace Tnb.WarehouseMgr
private readonly IHostApplicationLifetime _lifeTime; private readonly IHostApplicationLifetime _lifeTime;
private List<string> s_heartbeatDevNames = new(); private List<string> s_heartbeatDevNames = new();
//private static Dictionary<string, Func<CancellationToken?, Task>> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase); //private static Dictionary<string, Func<CancellationToken?, Task>> _timedFuncMap = new(StringComparer.OrdinalIgnoreCase);
public static Dictionary<string, bool> elevatorStatus = new Dictionary<string, bool>();
public TimedTaskBackgroundService() public TimedTaskBackgroundService()
{ {
s_heartbeatDevNames = _elevatorControlConfiguration.HeartbeatDevNames;
if (elevatorStatus.Count == 0)
foreach (var devName in s_heartbeatDevNames)
elevatorStatus.Add(devName, false);
} }
protected override Task ExecuteAsync(CancellationToken stoppingToken) protected override Task ExecuteAsync(CancellationToken stoppingToken)
{ {
IsStarted = true; IsStarted = true;
s_heartbeatDevNames = _elevatorControlConfiguration.HeartbeatDevNames;
Task timedTask = Task.Run(() => Task timedTask = Task.Run(() =>
{ {
_eventPublisher = App.GetRequiredService<IEventPublisher>(); _eventPublisher = App.GetRequiredService<IEventPublisher>();
@@ -56,12 +63,23 @@ namespace Tnb.WarehouseMgr
["token"] = _elevatorControlConfiguration.token ["token"] = _elevatorControlConfiguration.token
}; };
Log.Information($"{devName.Match(@"\d+")}#梯, 心跳检测"); Log.Information($"{devName.Match(@"\d+")}#梯, 心跳检测");
string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter); try
Log.Information($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}"); {
string result = await HttpClientHelper.GetAsync(_elevatorControlConfiguration.WriteTagUrl, pars: parameter);
//var result = await RedisHelper.HSetAsync(devName, ElevatorConsts.AGVKeepalive, "123"); Log.Information($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}");
await Console.Out.WriteLineAsync($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}"); JObject resObj = JObject.Parse(result);
elevatorStatus[devName] = resObj["Result"].ToString() == "Ok";
//var result = await RedisHelper.HSetAsync(devName, ElevatorConsts.AGVKeepalive, "123");
await Console.Out.WriteLineAsync($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{result}");
}
catch (Exception ex)
{
Log.Error($"{devName.Match(@"\d+")}#梯, 心跳检测结果:{ex.Message}");
elevatorStatus[devName] = false;
}
} }
}, stoppingToken, 30); }, stoppingToken, 30);
}); });

View File

@@ -800,7 +800,7 @@ namespace Tnb.WarehouseMgr
string data = await _redisData.GetHash(strs[0], strs[1]); string data = await _redisData.GetHash(strs[0], strs[1]);
Logger.Information("wcs请求CheckPut接口查询X2Server数据:" + data); Logger.Information("wcs请求CheckPut接口查询X2Server数据:" + data);
JObject? res = JsonConvert.DeserializeObject<JObject>(data); JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false; bool result = res != null && res["Value"] != null && res["StatusCode"].ToString() == "0" ? res.Value<bool>("Value") : false;
if (!result) if (!result)
throw new AppFriendlyException("点位" + input.targetName + "不可放", 500); throw new AppFriendlyException("点位" + input.targetName + "不可放", 500);
Logger.Information("wcs请求CheckPut接口结果CTU可放货" + data); Logger.Information("wcs请求CheckPut接口结果CTU可放货" + data);
@@ -921,7 +921,7 @@ namespace Tnb.WarehouseMgr
} }
string data = _redisData.GetHash(strs[0], strs[1]).Result; string data = _redisData.GetHash(strs[0], strs[1]).Result;
JObject? res = JsonConvert.DeserializeObject<JObject>(data); JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false; bool result = res != null && res["Value"] != null && res["StatusCode"].ToString() == "0" ? res.Value<bool>("Value") : false;
Logger.Information($"【Check】{action} 判断KIVA是否可以取货(信号是否允许) 获取{code}的标签{strs[1]}信号值 结果为:{result} "); Logger.Information($"【Check】{action} 判断KIVA是否可以取货(信号是否允许) 获取{code}的标签{strs[1]}信号值 结果为:{result} ");
if (!result) if (!result)
{ {
@@ -943,7 +943,7 @@ namespace Tnb.WarehouseMgr
} }
string data = _redisData.GetHash(strs[0], strs[1]).Result; string data = _redisData.GetHash(strs[0], strs[1]).Result;
JObject? res = JsonConvert.DeserializeObject<JObject>(data); JObject? res = JsonConvert.DeserializeObject<JObject>(data);
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false; bool result = res != null && res["Value"] != null && res["StatusCode"].ToString() == "0" ? res.Value<bool>("Value") : false;
Logger.Information($"【Check】 判断CTU是否可以放货(信号是否允许) 获取{code}的标签{strs[1]}信号值 结果为:{result}"); Logger.Information($"【Check】 判断CTU是否可以放货(信号是否允许) 获取{code}的标签{strs[1]}信号值 结果为:{result}");
if (!result) if (!result)
{ {