1、解决SnowflakeIdHeler.NextId()空引用问题
2、将Agv心跳检测服务移至自定义定时服务,统一维护管理
This commit is contained in:
@@ -343,7 +343,7 @@ namespace Tnb.WarehouseMgr
|
||||
//获取目标库位为电梯库位的任务
|
||||
|
||||
var endLocCodes = disTasks
|
||||
.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||
.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)
|
||||
).Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
|
||||
if (endLocCodes?.Count > 0)
|
||||
@@ -454,28 +454,7 @@ namespace Tnb.WarehouseMgr
|
||||
throw;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据当前目标楼层获取,电梯接口真正的楼层
|
||||
/// </summary>
|
||||
/// <param name="floor"></param>
|
||||
/// <returns></returns>
|
||||
private Task<int> GetRealFloor(int floor)
|
||||
{
|
||||
var realFloor = 0;
|
||||
if (floor == 4)
|
||||
{
|
||||
realFloor = 5;
|
||||
}
|
||||
else if (floor == 3)
|
||||
{
|
||||
realFloor = 4;
|
||||
}
|
||||
else if (floor == 2)
|
||||
{
|
||||
realFloor = 3;
|
||||
}
|
||||
return Task.FromResult(realFloor);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 执行到目标楼层电梯任务
|
||||
/// </summary>
|
||||
@@ -488,6 +467,7 @@ namespace Tnb.WarehouseMgr
|
||||
try
|
||||
{
|
||||
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => it.task_status == "执行中");
|
||||
Log.Information($"是否存在电梯任务项:{elevatorQueueItem != null}");
|
||||
if (elevatorQueueItem != null)
|
||||
{
|
||||
//var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
|
||||
@@ -499,10 +479,12 @@ namespace Tnb.WarehouseMgr
|
||||
do
|
||||
{
|
||||
doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
|
||||
await Task.Delay(2000);
|
||||
} while (doorStatus != 4);
|
||||
Log.Information($"当前门状态:{doorStatus}");
|
||||
var floor = await GetRealFloor(disTask.end_floor.ParseToInt());
|
||||
Log.Information($"目标楼层:{floor}");
|
||||
Log.Information($"当前门状态:{doorStatus}");
|
||||
|
||||
//发送到目标楼的指令
|
||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor);
|
||||
//电梯任务手动执行任务状态上报
|
||||
@@ -511,17 +493,20 @@ namespace Tnb.WarehouseMgr
|
||||
do
|
||||
{
|
||||
tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None);
|
||||
} while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt());
|
||||
await Task.Delay(2000);
|
||||
} while (tuple.sysStatus != 3 && tuple.runStatus != 0);
|
||||
|
||||
Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo}");
|
||||
Log.Information($"sysStatus:{tuple.sysStatus},runStatus:{tuple.runStatus},floorNo:{tuple.floorNo},disTask.end_floor={disTask.end_floor}");
|
||||
|
||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯
|
||||
&& tuple.floorNo == disTask.end_floor.ParseToInt())
|
||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯)
|
||||
{
|
||||
dynamic input = new ExpandoObject();
|
||||
input.disTaskIds = new List<string> { disTask.id };
|
||||
await TaskExecuteAfter(input);
|
||||
await TaskComplate(input);
|
||||
Log.Information($"disTask.require_id={disTask.require_id}");
|
||||
|
||||
List<string> disTaskIds = new() { disTask.id };
|
||||
TaskExecuteAfterUpInput teaUpInput = new() { disTaskIds = disTaskIds };
|
||||
await TaskExecuteAfter(teaUpInput);
|
||||
TaskCompleUpInput tcUpInput = new() { disTaskIds = disTaskIds };
|
||||
await TaskComplate(tcUpInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -712,28 +697,35 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
locIts.Add(loc);
|
||||
}
|
||||
|
||||
Log.Information("更新载具及库位开始.....");
|
||||
await _db.Updateable(carryIts).UpdateColumns(it => new { it.is_lock, it.location_id, it.location_code }).ExecuteCommandAsync();
|
||||
//更新条码的库位和仓库信息
|
||||
await _db.Updateable(carryCodeIts).UpdateColumns(it => new { it.warehouse_id, it.location_id, it.location_code }).Where(it => multiList.Select(x => x.carry_id).Contains(it.carry_id)).ExecuteCommandAsync();
|
||||
//更新库位信息,使用状态为 使用,锁定状态为未锁定
|
||||
await _db.Updateable(locIts).UpdateColumns(it => new { it.is_use, it.is_lock }).ExecuteCommandAsync();
|
||||
Log.Information("更新载具及库位结束.....");
|
||||
Log.Information($"_userManager.LoginType={_userManager.LoginType}");
|
||||
//更新业务主表的单据状态
|
||||
foreach (var dt in disTasks)
|
||||
{
|
||||
var disTaskCodes = await _db.Queryable<WmsDistaskCode>().Where(it => it.bill_id == dt.id).ToListAsync();
|
||||
var upInput = new WareHouseUpInput { bizTypeId = dt.biz_type, requireId = dt.require_id!, distaskCodes = disTaskCodes, carryIds = disTasks.Select(x => x.carry_id).ToList() };
|
||||
|
||||
upInput.loginType = !_userManager.LoginType.IsNullOrEmpty() ? "app" : "web";
|
||||
Log.Information($"upInput.loginType={upInput.loginType}");
|
||||
if (dt.is_sign == 1 && dt.chain_type == "3")
|
||||
{
|
||||
Log.Information("执行业务回更操作.....");
|
||||
await DoUpdate(upInput);
|
||||
}
|
||||
}
|
||||
}
|
||||
await _db.Ado.CommitTranAsync();
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error($"任务结束失败", ex);
|
||||
Log.Error($"任务结束失败堆栈异常", ex.StackTrace);
|
||||
await _db.Ado.RollbackTranAsync();
|
||||
throw;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user