空载具入库,获取目标库位集合代码还原,用于测试CTU

This commit is contained in:
yang.lee
2023-12-13 14:05:44 +08:00
parent 886f3a1661
commit 89e7f0dd50
7 changed files with 65 additions and 50 deletions

View File

@@ -1,6 +1,7 @@
using System.Diagnostics;
using System.Dynamic;
using System.Linq.Expressions;
using Aliyun.OSS;
using JNPF;
using JNPF.Common.Contracts;
using JNPF.Common.Core.Manager;
@@ -233,7 +234,7 @@ namespace Tnb.WarehouseMgr
/// 判断CTU是否可以放货
/// </summary>
/// <returns></returns>
[HttpPost]
/*[HttpPost]
public async Task CheckPut(CheckPutInput input)
{
Dictionary<string, string[]> dic = new Dictionary<string, string[]>();
@@ -252,7 +253,7 @@ namespace Tnb.WarehouseMgr
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
if (!result)
throw new AppFriendlyException("点位" + input.point_code + "不可放", 500);
}
}*/
/// <summary>
/// 生成任务执行
@@ -438,25 +439,9 @@ namespace Tnb.WarehouseMgr
var agvDTTasks = disTasks.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
foreach (var task in agvDTTasks)
{
ElevagorInfoQuery q = new() { endlocation_id = task.endlocation_id };
var e = await FindElevatorFromPars(q);
if (e != null)
{
task.device_id = e.device_id;
}
}
await SetEleDevId(agvDTTasks);
/*foreach (var at in agvDTTasks)
{
var ele = elevatorList.Find(x => x.location_code == at.endlocation_code);
Logger.Information($"ele.elevator_id:{ele?.elevator_id},elevator_code:{ele?.elevator_code}");
if (ele != null)
{
at.device_id = ele.elevator_id;
}
}*/
List<(string endlocation_code, string device_id, string id, int start_floor)> endLocCodes = agvDTTasks
.Select(it => (it.endlocation_code, it.device_id, it.id, it.start_floor)).ToList();
@@ -466,7 +451,7 @@ namespace Tnb.WarehouseMgr
{
if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace()))
{
Logger.Information("呼梯操作");
Logger.Information($"呼梯操作");
_ = CallingLanding(endLocCodes);
}
else
@@ -482,6 +467,7 @@ namespace Tnb.WarehouseMgr
if (elevatorTasks?.Count > 0)
{
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
await SetEleDevId(elevatorTasks);
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
{
_ = ExecuteTargetFloorTask(elevatorTask);
@@ -496,6 +482,19 @@ namespace Tnb.WarehouseMgr
}
}
}
async Task SetEleDevId(List<WmsDistaskH> distaskList)
{
foreach (var task in distaskList)
{
ElevagorInfoQuery q = new() { endlocation_id = task.endlocation_id };
var e = await FindElevatorFromPars(q);
if (e != null)
{
task.device_id = e.device_id;
}
}
}
}
catch (Exception ex) when (ex is HttpRequestException hReqEx)
{
@@ -606,16 +605,16 @@ namespace Tnb.WarehouseMgr
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
{
//收到放货确认通知向电梯发送到3楼的指令
Logger.Information($"开始执行电梯任务任务ID:{disTask.id}");
Logger.Information($"开始执行电梯任务任务ID:{disTask.id},设备ID{disTask.device_id}");
try
{
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
{
return;
}
string devName = s_elevatorMap[disTask.device_id]?.ToString() ?? _eleCtlCfg.DevName3;
string devName = elevatorCode?.ToString();
Logger.Information($"当前:{devName.Match(@"\d+")}#梯");
Logger.Information($"当前设备{devName},{devName.Match(@"\d+")}#梯");
var tags = new[] { "SysStatus", "RunStatus", "FloorNo", "DoorStatus", "AGVStatus" };
(int sysStatus, int runStatus, int curFloorNo, int doorStatus, int agvStatus) eleStatusMulti = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
@@ -623,8 +622,9 @@ namespace Tnb.WarehouseMgr
{
_ = await _elevatorControlService.WriteTagAsync(devName, ElevatorConsts.AGVControl, 1);
}
Logger.Information($"电梯当前状态->系统状态:{eleStatusMulti.sysStatus.ToEnum<EnumSysStatus>()},运行状态:{eleStatusMulti.runStatus.ToEnum<EnumRunStatus>().ToString()},门状态:{eleStatusMulti.doorStatus.ToEnum<EnumDoorStatus>().ToString()},Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>().ToString()},当前楼层:{eleStatusMulti.curFloorNo}");
if (!_elevatorAgvCtlStatusMap.TryGetValue(disTask.id, out int agvCtlStatus) || agvCtlStatus != (int)EnumAgvStatus.AGV运行状态)
if (!_elevatorAgvCtlStatusMap.TryGetValue(disTask.device_id, out int agvCtlStatus) || agvCtlStatus != (int)EnumAgvStatus.AGV运行状态)
{
do
{
@@ -632,7 +632,7 @@ namespace Tnb.WarehouseMgr
await Task.Delay(1000);
} while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态);
Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>()}");
_elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus;
_elevatorAgvCtlStatusMap[disTask.device_id] = eleStatusMulti.agvStatus;
}
int doorStatus = -1;
@@ -641,6 +641,7 @@ namespace Tnb.WarehouseMgr
do
{
doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
Logger.Information($"关门结果:{closeDoorRes}");
await Task.Delay(1000);
} while (doorStatus != 4);
Logger.Information($"当前门状态:{doorStatus}");
@@ -824,9 +825,13 @@ namespace Tnb.WarehouseMgr
_ = await _db.Updateable<WmsPretaskH>().SetColumns(it => new WmsPretaskH { status = WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID }).Where(it => preTaskIds.Contains(it.id)).ExecuteCommandAsync();
//更新电梯任务数量
var eles = await _db.Queryable<WmsElevatorH>().Where(it => disTasks.Select(x => x.area_code).Contains(it.area_code)).ToListAsync();
var areaCodes = disTasks.Select(x => x.area_code).ToList();
var eles = await _db.Queryable<WmsElevatorH>().Where(it => areaCodes.Contains(it.area_code)).ToListAsync();
if (eles?.Count > 0)
await _db.Updateable(eles).ReSetValue(it => it.task_nums--).ExecuteCommandAsync();
{
eles.ForEach(x => x.task_nums--);
await _db.Updateable(eles).UpdateColumns(it=>it.task_nums).ExecuteCommandAsync();
}
//更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位