电梯逻辑变更 erp同步调整 生成条码变更等
This commit is contained in:
@@ -11,6 +11,7 @@ using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using Aop.Api.Domain;
|
||||
using Aspose.Cells.Charts;
|
||||
using Aspose.Cells.Drawing;
|
||||
using JNPF;
|
||||
using JNPF.Common.Cache;
|
||||
using JNPF.Common.Core.Manager;
|
||||
@@ -28,6 +29,7 @@ using NetTaste;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Npgsql;
|
||||
using NPOI.HPSF;
|
||||
using NPOI.OpenXmlFormats;
|
||||
using Org.BouncyCastle.Asn1.X509;
|
||||
using Org.BouncyCastle.Asn1.X509.Qualified;
|
||||
@@ -89,15 +91,15 @@ namespace Tnb.ProductionMgr
|
||||
private static Timer? Floor4DMC2CPKtimer;
|
||||
// 四楼包材自动到二楼包材库
|
||||
private static Timer? PackOutstockServicetimer;
|
||||
// 检查到电梯任务异常断开后处理
|
||||
private Thread? ElevatorTaskExceptionHandleThread;
|
||||
// 二楼空托盘自动补充到线边
|
||||
private static Timer? F2KTPsupplementtimer;
|
||||
// 原材料仓内转移
|
||||
private static Timer? YCLInternalTransfertimer;
|
||||
|
||||
// 原材料仓内转移
|
||||
// 电梯
|
||||
private static Timer? elevatorTimer;
|
||||
// 生成AGV到电梯的任务
|
||||
private static Timer? agvelevatorTimer;
|
||||
|
||||
public SemaphoreSlim s_taskCheckGet = new(1);
|
||||
public SemaphoreSlim s_taskScan = new(1);
|
||||
@@ -116,6 +118,10 @@ namespace Tnb.ProductionMgr
|
||||
public SemaphoreSlim s_taskFloor4DMC2CPKService = new(1);
|
||||
public SemaphoreSlim s_taskF2KTPsupplement = new(1);
|
||||
public SemaphoreSlim s_taskYCLInternalTransfer = new(1);
|
||||
/// <summary>
|
||||
/// AGV到电梯任务
|
||||
/// </summary>
|
||||
public SemaphoreSlim s_agvElevatortaskDic = new(1);
|
||||
|
||||
|
||||
private StackExRedisHelper _redisData;
|
||||
@@ -139,6 +145,8 @@ namespace Tnb.ProductionMgr
|
||||
private ISqlSugarClient db_Floor4DMC2CPK;
|
||||
private ISqlSugarClient db_F2KTPsupplement;
|
||||
private ISqlSugarClient db_YCLInternalTransfer;
|
||||
private ISqlSugarClient db_agvElevatorTaskExceptionHandles;
|
||||
|
||||
|
||||
|
||||
private readonly IWmsPDAScanInStockService _wmsPDAScanInStock;
|
||||
@@ -196,6 +204,7 @@ namespace Tnb.ProductionMgr
|
||||
db_Floor4DMC2CPK = repository.CopyNew();
|
||||
db_F2KTPsupplement = repository.CopyNew();
|
||||
db_YCLInternalTransfer = repository.CopyNew();
|
||||
db_agvElevatorTaskExceptionHandles = repository.CopyNew();
|
||||
|
||||
List<string> elevatorAreas = repository.CopyNew().Queryable<WmsElevatorH>().Select(r => r.area_code).Distinct().ToList();
|
||||
foreach (var s_elevatorArea in elevatorAreas)
|
||||
@@ -317,69 +326,69 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
#region 弃用
|
||||
|
||||
|
||||
//获取redis数据
|
||||
private async void GetRedisData(object? state)
|
||||
{
|
||||
var _redisReadConfigs = _repository.AsQueryable().Where(p => p.enabled == 1).ToList();
|
||||
foreach (var config in _redisReadConfigs)
|
||||
{
|
||||
try
|
||||
{
|
||||
var json = await _redisData.GetHash(config.dev_name!, config.tag_name!);
|
||||
if (json == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
JObject? res = JsonConvert.DeserializeObject<JObject>(json);
|
||||
if (config.data_type == (int)DataType.INT)
|
||||
{
|
||||
if (config.check_type == (int)CheckType.相等)
|
||||
{
|
||||
if (res.Value<int>("Value") == int.Parse(config.data!))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
TriggerEvent((EventType)config.event_type, instockInput);
|
||||
}
|
||||
}
|
||||
else if (config.check_type == (int)CheckType.包含)
|
||||
{
|
||||
int[] ints = Array.ConvertAll(config.data!.Replace("[", "").Replace("]", "").Split(",", StringSplitOptions.RemoveEmptyEntries), int.Parse);
|
||||
if (ints.Contains(res.Value<int>("Value")))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
TriggerEvent((EventType)config.event_type, instockInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (config.data_type == (int)DataType.BOOL)
|
||||
{
|
||||
if (config.check_type == (int)CheckType.相等)
|
||||
{
|
||||
if (res.Value<bool>("Value") == bool.Parse(config.data!))
|
||||
{
|
||||
InstockInput instockInput = new()
|
||||
{
|
||||
equip_code = res["DevName"]!.ToString(),
|
||||
label_code = res["TagName"]!.ToString()
|
||||
};
|
||||
TriggerEvent((EventType)config.event_type, instockInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
////获取redis数据
|
||||
//private async void GetRedisData(object? state)
|
||||
//{
|
||||
// var _redisReadConfigs = _repository.AsQueryable().Where(p => p.enabled == 1).ToList();
|
||||
// foreach (var config in _redisReadConfigs)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// var json = await _redisData.GetHash(config.dev_name!, config.tag_name!);
|
||||
// if (json == null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// JObject? res = JsonConvert.DeserializeObject<JObject>(json);
|
||||
// if (config.data_type == (int)DataType.INT)
|
||||
// {
|
||||
// if (config.check_type == (int)CheckType.相等)
|
||||
// {
|
||||
// if (res.Value<int>("Value") == int.Parse(config.data!))
|
||||
// {
|
||||
// InstockInput instockInput = new()
|
||||
// {
|
||||
// equip_code = res["DevName"]!.ToString(),
|
||||
// label_code = res["TagName"]!.ToString()
|
||||
// };
|
||||
// TriggerEvent((EventType)config.event_type, instockInput);
|
||||
// }
|
||||
// }
|
||||
// else if (config.check_type == (int)CheckType.包含)
|
||||
// {
|
||||
// int[] ints = Array.ConvertAll(config.data!.Replace("[", "").Replace("]", "").Split(",", StringSplitOptions.RemoveEmptyEntries), int.Parse);
|
||||
// if (ints.Contains(res.Value<int>("Value")))
|
||||
// {
|
||||
// InstockInput instockInput = new()
|
||||
// {
|
||||
// equip_code = res["DevName"]!.ToString(),
|
||||
// label_code = res["TagName"]!.ToString()
|
||||
// };
|
||||
// TriggerEvent((EventType)config.event_type, instockInput);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (config.data_type == (int)DataType.BOOL)
|
||||
// {
|
||||
// if (config.check_type == (int)CheckType.相等)
|
||||
// {
|
||||
// if (res.Value<bool>("Value") == bool.Parse(config.data!))
|
||||
// {
|
||||
// InstockInput instockInput = new()
|
||||
// {
|
||||
// equip_code = res["DevName"]!.ToString(),
|
||||
// label_code = res["TagName"]!.ToString()
|
||||
// };
|
||||
// TriggerEvent((EventType)config.event_type, instockInput);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
private void TriggerEvent(EventType eventType, InstockInput instockInput)
|
||||
{
|
||||
switch (eventType)
|
||||
@@ -1922,7 +1931,10 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 生成电梯任务
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
async void ElevatorTaskExceptionHandle(object args)
|
||||
{
|
||||
Task[] taskActions = new Task[_wareHouseService.s_elevatortaskDic.Count];
|
||||
@@ -1966,15 +1978,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
|
||||
var e = await _wareHouseService.FindElevatorFromPars(q);
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
|
||||
|
||||
// 存在叉车已放货完成电梯任务还没生成的情况,这种情况等待完成
|
||||
WmsElevatorH wmsElevator = await db_ElevatorTaskExceptionHandle.Queryable<WmsElevatorH>().Where(r => r.elevator_id == e.device_id).FirstAsync();
|
||||
if (wmsElevator.carry_count != elevatorTasks.Count)
|
||||
{
|
||||
throw new Exception($"电梯{e.elevator_code}内放货托盘为{wmsElevator.carry_count}托,已生成的电梯任务为{elevatorTasks.Count},需要等待电梯任务生成");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 三、四号梯发货带两托货
|
||||
string[] doubleCarryRunElevators =
|
||||
{
|
||||
@@ -1982,6 +1986,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
};
|
||||
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
|
||||
{
|
||||
// 存在叉车已放货完成电梯任务还没生成的情况,这种情况等待完成
|
||||
WmsElevatorH wmsElevator = await db_ElevatorTaskExceptionHandle.Queryable<WmsElevatorH>().Where(r => r.elevator_id == e.device_id).FirstAsync();
|
||||
if (wmsElevator.carry_count != elevatorTasks.Count)
|
||||
{
|
||||
throw new Exception($"电梯{e.elevator_code}内放货托盘为{wmsElevator.carry_count}托,已生成的电梯任务为{elevatorTasks.Count},需要等待电梯任务生成");
|
||||
}
|
||||
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】判断为三四号梯任务");
|
||||
LoggerElevatorTask.Information($"【ElevatorTaskExceptionHandle】现在{e.elevator_code}有{group.Count()}托货");
|
||||
// 电梯内放置两托货呼叫电梯下
|
||||
@@ -2065,6 +2076,201 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
Task.WaitAll(taskActions);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 电梯第三次改动 生成Agv到电梯任务
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
async void AgvelevatorTimerTaskExceptionHandle(object args)
|
||||
{
|
||||
if (s_agvElevatortaskDic.CurrentCount == 0)
|
||||
return;
|
||||
await s_agvElevatortaskDic.WaitAsync();
|
||||
|
||||
try
|
||||
{
|
||||
// 获取暂存区需要生成任务的库位
|
||||
List<BasLocation> agvElevatorStartLocs = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.Where(r => r.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && r.is_use == "1" && r.is_lock == 0).ToListAsync();
|
||||
|
||||
if (agvElevatorStartLocs.Count > 0)
|
||||
{
|
||||
LoggerAgvElevatorTask.Information($"【AgvelevatorTimerTaskExceptionHandle】检查到需要下发到一楼任务的暂存区库位{agvElevatorStartLocs.Count}条 {string.Join(',', agvElevatorStartLocs.Select(x => x.location_code))}");
|
||||
|
||||
List<IGrouping<string, BasLocation>> elevatorTaskGroup = agvElevatorStartLocs.GroupBy(r => r.region_id).ToList();
|
||||
foreach (IGrouping<string, BasLocation> group in elevatorTaskGroup)
|
||||
{
|
||||
// 选一楼出货库位
|
||||
List<BasLocation> outLocations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
.OrderBy("task_nums, location_code").ToListAsync();
|
||||
|
||||
if (outLocations.Count == 0)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"一楼没有可用的出货库位");
|
||||
continue;
|
||||
}
|
||||
BasLocation outLocation = outLocations.FirstOrDefault();
|
||||
WmsPointH outPoint = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPointH>().FirstAsync(it => it.location_id == outLocation.id);
|
||||
|
||||
List<BasLocation> locs = group.ToList();
|
||||
LoggerAgvElevatorTask.LogWarning($"即将下发{locs.Count}条任务");
|
||||
for (int i = 0; i < locs.Count; i++)
|
||||
{
|
||||
// 交替选择缓存区库位
|
||||
var YCLInnerTransfer = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3CurOutCacheLocation").FirstAsync();
|
||||
|
||||
if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右"))
|
||||
{
|
||||
throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
|
||||
}
|
||||
|
||||
BasLocation startloc = null;
|
||||
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||
{
|
||||
List<BasLocation> locations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
|
||||
.Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.location_code,a.is_lock,a.is_use,task_nums").ToListAsync();
|
||||
startloc = locations.FirstOrDefault();
|
||||
}
|
||||
List<WmsCarryH> wmsCarryHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsCarryH>().Where(r => r.location_id == startloc.id).ToListAsync();
|
||||
if (wmsCarryHs.Count > 1)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上存在多个托盘{string.Join(',', wmsCarryHs.Select(x => x.carry_code))}");
|
||||
continue;
|
||||
}
|
||||
if (wmsCarryHs.Count == 1)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上不存在托盘");
|
||||
continue;
|
||||
}
|
||||
WmsCarryH wmsCarryH = wmsCarryHs.FirstOrDefault();
|
||||
|
||||
WmsElevatorH wmsElevatorH = null;
|
||||
// 选电梯
|
||||
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||
{
|
||||
List<WmsElevatorH> wmsElevatorHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsElevatorH>().Where(r => r.elevator_group == "2" && r.enabled == 1).ToListAsync();
|
||||
|
||||
foreach (WmsElevatorH _wmsElevatorH in wmsElevatorHs)
|
||||
{
|
||||
// 加上暂存区到电梯的任务数
|
||||
List<WmsPretaskH> wmsPretaskHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPretaskH>()
|
||||
.Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID || r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.startlocation_id == startloc.id).ToListAsync();
|
||||
|
||||
_wmsElevatorH.carry_count += wmsPretaskHs.Count;
|
||||
}
|
||||
|
||||
wmsElevatorH = wmsElevatorHs.OrderBy(r => r.carry_count).FirstOrDefault();
|
||||
}
|
||||
|
||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||
|
||||
List<WmsPointH> wmsPointHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPointH>().Where(it => it.status == 1).ToListAsync();
|
||||
List<WmsPointH> points = new List<WmsPointH>();
|
||||
|
||||
// 到电梯
|
||||
WmsPointH cacheOut_point = wmsPointHs.Where(r => r.location_code == startloc.location_code).First().Copy();
|
||||
WmsPointH DT_C_point = wmsPointHs.Where(r => r.point_code == $"DT-C-03-0{elevatorSno}").First().Copy();
|
||||
cacheOut_point.area_code = "FC";
|
||||
DT_C_point.area_code = "FC";
|
||||
|
||||
points.Add(cacheOut_point);
|
||||
points.Add(DT_C_point);
|
||||
// 到一楼
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-3-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-1-{elevatorSno}").First());
|
||||
points.Add(wmsPointHs.Where(r => r.point_code == $"DT-R-01-0{elevatorSno}").First());
|
||||
points.Add(outPoint);
|
||||
|
||||
//根据获取的路径点生成预任务,生成顺序必须预路径算法返回的起终点的顺序一致(预任务顺序)
|
||||
if (points?.Count > 0)
|
||||
{
|
||||
List<WmsPretaskH> preTasks = points.Where(it => !it.location_id.IsNullOrEmpty()).GroupBy(g => g.area_code).Select(it =>
|
||||
{
|
||||
WmsPointH? sPoint = it.FirstOrDefault();
|
||||
WmsPointH? ePoint = it.LastOrDefault();
|
||||
|
||||
WmsPretaskH preTask = new()
|
||||
{
|
||||
org_id = _userManager!.User.OrganizeId,
|
||||
startlocation_id = sPoint?.location_id!,
|
||||
startlocation_code = sPoint?.location_code!,
|
||||
endlocation_id = ePoint?.location_id!,
|
||||
endlocation_code = ePoint?.location_code!,
|
||||
start_floor = sPoint?.floor.ToString(),
|
||||
end_floor = ePoint?.floor.ToString(),
|
||||
startpoint_id = sPoint?.id!,
|
||||
startpoint_code = sPoint?.point_code!,
|
||||
endpoint_id = ePoint?.id!,
|
||||
endpoint_code = ePoint?.point_code!,
|
||||
bill_code = _billRullService!.GetBillNumber(WmsWareHouseConst.WMS_PRETASK_H_ENCODE).GetAwaiter().GetResult(),
|
||||
status = WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID,
|
||||
biz_type = wmsCarryH.biz_type,
|
||||
task_type = WmsWareHouseConst.WMS_PRETASK_TRANSFER_TYPE_ID
|
||||
};
|
||||
preTask.carry_id = wmsCarryH.id;
|
||||
preTask.carry_code = wmsCarryH.carry_code;
|
||||
preTask.area_id = sPoint?.area_id!;
|
||||
preTask.area_code = it.Key;
|
||||
// 载具记录 require_id todo
|
||||
preTask.require_id = wmsCarryH.require_id;
|
||||
preTask.require_code = "";
|
||||
preTask.create_id = _userManager.UserId;
|
||||
preTask.create_time = DateTime.Now;
|
||||
return preTask;
|
||||
}).ToList();
|
||||
bool isOk = await _wareHouseService.GenPreTask(preTasks, null!, db_agvElevatorTaskExceptionHandles);
|
||||
if (isOk)
|
||||
{
|
||||
//查询库位表
|
||||
BasLocation location = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>().SingleAsync(it => it.id == startloc.id);
|
||||
{
|
||||
//载具加锁,增加库位信息
|
||||
_ = await db_agvElevatorTaskExceptionHandles.Updateable<WmsCarryH>().SetColumns(it => new WmsCarryH
|
||||
{
|
||||
carry_status = ((int)EnumCarryStatus.占用).ToString(),
|
||||
is_lock = 1,
|
||||
location_id = startloc.id,
|
||||
location_code = location.location_code
|
||||
}).Where(it => it.id == wmsCarryH.id).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左"))
|
||||
.Where(r => r.key == "floor3CurOutCacheLocation").ExecuteCommandAsync();
|
||||
|
||||
//所有库位加锁
|
||||
string?[] ids = new[] { startloc.id, preTasks[0].endlocation_id, outLocation.id };
|
||||
_ = await db_agvElevatorTaskExceptionHandles.Updateable<BasLocation>().SetColumns(it => new BasLocation { is_lock = 1 }).Where(it => ids.Contains(it.id)).ExecuteCommandAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("预任务生成失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (ObjectDisposedException ex)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"【AgvelevatorTimerTaskExceptionHandle】 数据库连接异常:{ex.Message}");
|
||||
LoggerAgvElevatorTask.LogWarning($"【AgvelevatorTimerTaskExceptionHandle】 数据库连接异常:{ex.StackTrace}");
|
||||
if (ex.Source == "Npgsql")
|
||||
db_agvElevatorTaskExceptionHandles = _repository.AsSugarClient().CopyNew();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("【AgvelevatorTimerTaskExceptionHandle】" + ex.Message);
|
||||
LoggerAgvElevatorTask.LogError($"【AgvelevatorTimerTaskExceptionHandle】 {ex.Message}");
|
||||
LoggerAgvElevatorTask.LogError($"【AgvelevatorTimerTaskExceptionHandle】 {ex.StackTrace}");
|
||||
// 数据库连接断开时会报错
|
||||
try { await db_agvElevatorTaskExceptionHandles.Ado.RollbackTranAsync(); } catch { };
|
||||
}
|
||||
finally
|
||||
{
|
||||
s_agvElevatortaskDic.Release();
|
||||
}
|
||||
}
|
||||
|
||||
#region 内存测试
|
||||
|
||||
@@ -2695,6 +2901,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185));
|
||||
|
||||
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
|
||||
//agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
@@ -2724,10 +2932,11 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
Floor4DMJ2MJXtimer?.Dispose();
|
||||
Floor4MJX2MJCtimer?.Dispose();
|
||||
Floor4DMC2CPKtimer?.Dispose();
|
||||
ElevatorTaskExceptionHandleThread.Abort();
|
||||
F2KTPsupplementtimer?.Dispose();
|
||||
YCLInternalTransfertimer?.Dispose();
|
||||
elevatorTimer?.Dispose();
|
||||
agvelevatorTimer?.Dispose();
|
||||
|
||||
}
|
||||
|
||||
#region 日志
|
||||
@@ -2775,6 +2984,39 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
}
|
||||
}
|
||||
|
||||
protected string _LoggerAgvElevatorTaskFileName = "";
|
||||
protected ILogger _LoggerAgvElevatorTask;
|
||||
protected ILogger LoggerAgvElevatorTask
|
||||
{
|
||||
get
|
||||
{
|
||||
string newFileName = $"{AppContext.BaseDirectory}/logs/{DateTime.Now:yyyyMMdd}/custom{DateTime.Now:yyyyMMdd}AgvElevatorTask.log";
|
||||
if (_LoggerAgvElevatorTaskFileName != newFileName)
|
||||
{
|
||||
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddFile(newFileName, cfgOpts =>
|
||||
{
|
||||
|
||||
//cfgOpts.DateFormat = "yyyy-MM-dd HH:mm:ss.fff";
|
||||
cfgOpts.MessageFormat = (logMsg) =>
|
||||
{
|
||||
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} ");
|
||||
_ = sb.Append(logMsg.Message + " ");
|
||||
_ = sb.Append(logMsg.Exception?.ToString());
|
||||
return sb.ToString();
|
||||
};
|
||||
|
||||
}));
|
||||
_LoggerAgvElevatorTask = loggerFactory.CreateLogger(this.GetType());
|
||||
_LoggerAgvElevatorTaskFileName = newFileName;
|
||||
}
|
||||
return _LoggerAgvElevatorTask;
|
||||
}
|
||||
}
|
||||
|
||||
protected string _LoggerSSXFileName = "";
|
||||
protected ILogger _LoggerSSX;
|
||||
|
||||
Reference in New Issue
Block a user