将之前,电梯任务执行结束后通知的逻辑代码补上
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Aliyun.OSS;
|
||||
using JNPF;
|
||||
using JNPF.Common.Core.Manager;
|
||||
using JNPF.Common.Enums;
|
||||
@@ -276,15 +277,36 @@ namespace Tnb.WarehouseMgr
|
||||
if (elevatorQueueItem != null)
|
||||
{
|
||||
var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
|
||||
if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
|
||||
//if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
|
||||
{
|
||||
var doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
|
||||
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持)
|
||||
{
|
||||
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
||||
}
|
||||
//发送到3楼的指令
|
||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, 4);
|
||||
var floor = disTask.end_floor.ParseToInt();
|
||||
if (floor == 4)
|
||||
floor = 5;
|
||||
else if (floor == 3)
|
||||
floor = 4;
|
||||
else if (floor == 2)
|
||||
floor = 3;
|
||||
//发送到目标楼的指令
|
||||
CancellationTokenSource cts = new();
|
||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor);
|
||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
|
||||
await Task.Run(async () =>
|
||||
{
|
||||
do
|
||||
{
|
||||
tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, cts.Token);
|
||||
} while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt());
|
||||
|
||||
}, cts.Token);
|
||||
|
||||
if (sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯 &&
|
||||
agvStatus.ToEnum<EnumAgvStatus>() != EnumAgvStatus.AGV运行状态 && floorNo != 4)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -340,11 +340,21 @@ namespace Tnb.WarehouseMgr
|
||||
//呼梯操作
|
||||
//获取目标库位为电梯库位的任务
|
||||
|
||||
var endLocCodes = disTasks.Select(it => (it.endlocation_code, it.device_id, it.id)).Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
var endLocCodes = disTasks.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
if (endLocCodes?.Count > 0)
|
||||
{
|
||||
await CallingLanding(endLocCodes);
|
||||
}
|
||||
//执行电梯任务
|
||||
var elevatorTasks = disTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
if (elevatorTasks?.Count > 0)
|
||||
{
|
||||
foreach (var elevatorTask in elevatorTasks)
|
||||
{
|
||||
await ExecuteTargetFloorTask(elevatorTask);
|
||||
}
|
||||
|
||||
}
|
||||
////调用AGV创建任务链接口
|
||||
await AgvDispatch(disTasks, agvCts.Token);
|
||||
|
||||
@@ -370,7 +380,7 @@ namespace Tnb.WarehouseMgr
|
||||
/// </summary>
|
||||
/// <param name="endLocCodes"></param>
|
||||
/// <returns></returns>
|
||||
private async Task CallingLanding(List<(string endlocation_code, string device_id, string id)> endLocCodes)
|
||||
private async Task CallingLanding(List<(string endlocation_code, string device_id, string id, string floorNO)> endLocCodes)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -386,14 +396,15 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
{
|
||||
foreach (var (_, devId, disTaskId) in endLocCodes)
|
||||
foreach (var (_, devId, disTaskId, floorNO) in endLocCodes)
|
||||
{
|
||||
var floorN = await GetRealFloor(floorNO.ParseToInt());
|
||||
WmsElevatorUnexecute elevatorQueueItem = new()
|
||||
{
|
||||
distask_id = disTaskId,
|
||||
elevator_id = devId,
|
||||
elevator_code = _elevatorMap[devId].ToString(),
|
||||
floor = 5, //5代表4楼
|
||||
floor = floorN, //5代表4楼
|
||||
task_status = "待执行",
|
||||
create_id = _userManager.UserId,
|
||||
create_time = DateTime.Now
|
||||
@@ -420,6 +431,78 @@ namespace Tnb.WarehouseMgr
|
||||
}
|
||||
}
|
||||
/// <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>
|
||||
/// <param name="disTask"></param>
|
||||
/// <returns></returns>
|
||||
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
|
||||
{
|
||||
//收到放货确认通知,向电梯发送到3楼的指令
|
||||
try
|
||||
{
|
||||
var elevatorQueueItem = await _db.Queryable<WmsElevatorUnexecute>().FirstAsync(it => disTask.id == it.distask_id && it.task_status == "执行中");
|
||||
if (elevatorQueueItem != null)
|
||||
{
|
||||
//var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
|
||||
//if (disTask?.status == WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID)
|
||||
{
|
||||
var doorStatus = -1;
|
||||
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
||||
do
|
||||
{
|
||||
doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
|
||||
} while (doorStatus != 4);
|
||||
var floor = await GetRealFloor(disTask.end_floor.ParseToInt());
|
||||
//发送到目标楼的指令
|
||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, floor);
|
||||
//电梯任务手动执行任务状态上报
|
||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
|
||||
|
||||
do
|
||||
{
|
||||
tuple = await _elevatorControlService.GetElevatorStatus(elevatorQueueItem.elevator_code, CancellationToken.None);
|
||||
} while (tuple.sysStatus != 3 && tuple.runStatus != 0 && tuple.floorNo != disTask.end_floor.ParseToInt());
|
||||
|
||||
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯
|
||||
&& tuple.floorNo == disTask.end_floor.ParseToInt())
|
||||
{
|
||||
dynamic input = new ExpandoObject();
|
||||
input.disTaskIds = new List<string> { disTask.id };
|
||||
await TaskExecuteAfter(input);
|
||||
await TaskComplate(input);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error("执行到目标楼层电梯任务失败", ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Agv调度
|
||||
/// </summary>
|
||||
/// <param name="disTasks"></param>
|
||||
|
||||
Reference in New Issue
Block a user