将之前,电梯任务执行结束后通知的逻辑代码补上

This commit is contained in:
alex
2023-10-09 17:04:27 +08:00
parent a350f122f6
commit 7635cc18c3
2 changed files with 112 additions and 7 deletions

View File

@@ -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)
}
}
}

View File

@@ -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>