将之前,电梯任务执行结束后通知的逻辑代码补上
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Aliyun.OSS;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
using JNPF.Common.Core.Manager;
|
using JNPF.Common.Core.Manager;
|
||||||
using JNPF.Common.Enums;
|
using JNPF.Common.Enums;
|
||||||
@@ -276,15 +277,36 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (elevatorQueueItem != null)
|
if (elevatorQueueItem != null)
|
||||||
{
|
{
|
||||||
var disTask = disTasks.Find(x => x.id == elevatorQueueItem.distask_id);
|
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);
|
var doorStatus = await _elevatorControlService.GetTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.DoorStatus);
|
||||||
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持)
|
if (doorStatus.ToEnum<EnumDoorStatus>() != EnumDoorStatus.关门到位保持)
|
||||||
{
|
{
|
||||||
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
await _elevatorControlService.SendOpenCloseCmd(elevatorQueueItem.elevator_code, 4); //向电梯发送前门关门指令
|
||||||
}
|
}
|
||||||
//发送到3楼的指令
|
var floor = disTask.end_floor.ParseToInt();
|
||||||
var reuslt = await _elevatorControlService.WriteTagAsync(elevatorQueueItem.elevator_code, ElevatorConsts.FloorExecute, 4);
|
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)
|
if (endLocCodes?.Count > 0)
|
||||||
{
|
{
|
||||||
await CallingLanding(endLocCodes);
|
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创建任务链接口
|
////调用AGV创建任务链接口
|
||||||
await AgvDispatch(disTasks, agvCts.Token);
|
await AgvDispatch(disTasks, agvCts.Token);
|
||||||
|
|
||||||
@@ -370,7 +380,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="endLocCodes"></param>
|
/// <param name="endLocCodes"></param>
|
||||||
/// <returns></returns>
|
/// <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
|
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()
|
WmsElevatorUnexecute elevatorQueueItem = new()
|
||||||
{
|
{
|
||||||
distask_id = disTaskId,
|
distask_id = disTaskId,
|
||||||
elevator_id = devId,
|
elevator_id = devId,
|
||||||
elevator_code = _elevatorMap[devId].ToString(),
|
elevator_code = _elevatorMap[devId].ToString(),
|
||||||
floor = 5, //5代表4楼
|
floor = floorN, //5代表4楼
|
||||||
task_status = "待执行",
|
task_status = "待执行",
|
||||||
create_id = _userManager.UserId,
|
create_id = _userManager.UserId,
|
||||||
create_time = DateTime.Now
|
create_time = DateTime.Now
|
||||||
@@ -420,6 +431,78 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <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调度
|
/// Agv调度
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="disTasks"></param>
|
/// <param name="disTasks"></param>
|
||||||
|
|||||||
Reference in New Issue
Block a user