空载具入库,获取目标库位集合代码还原,用于测试CTU
This commit is contained in:
@@ -10,5 +10,7 @@ namespace Tnb.WarehouseMgr.Entities.Dto.Queries
|
|||||||
{
|
{
|
||||||
public string taskCode { get; set; }
|
public string taskCode { get; set; }
|
||||||
public string endlocation_id { get; set; }
|
public string endlocation_id { get; set; }
|
||||||
|
public string startlocation_id { get; set; }
|
||||||
|
public string sourceName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ public partial class WmsElevatorH : BaseEntity<string>
|
|||||||
/// 电梯ID
|
/// 电梯ID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string elevator_id { get; set; } = string.Empty;
|
public string elevator_id { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 电梯编号
|
/// 电梯编号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
private static readonly Lazy<Task> initializationTask;
|
private static readonly Lazy<Task> initializationTask;
|
||||||
private static SqlSugarScope context;
|
private static SqlSugarScope context;
|
||||||
private readonly ISqlSugarClient _db;
|
private readonly ISqlSugarClient _db;
|
||||||
|
public static Dictionary<string, int> s_eleUseStatusDic = new();
|
||||||
|
|
||||||
static DevServBase()
|
static DevServBase()
|
||||||
{
|
{
|
||||||
@@ -57,9 +58,13 @@ namespace Tnb.WarehouseMgr
|
|||||||
protected async Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input)
|
protected async Task<WmsElevatorH> FindElevatorFromPars(ElevagorInfoQuery input)
|
||||||
{
|
{
|
||||||
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
var ele = await _db.CopyNew().Queryable<WmsElevatorH>().InnerJoin<WmsElevatorD>((a, b) => a.id == b.bill_id)
|
||||||
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code)
|
.InnerJoin<WmsDistaskH>((a, b, c) => b.location_code == c.endlocation_code || b.location_code == c.startpoint_code)
|
||||||
|
.Where((a, b, c) => a.enabled == 1)
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode)
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.taskCode), (a, b, c) => c.bill_code == input.taskCode)
|
||||||
.WhereIF(!SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => b.location_id == input.endlocation_id)
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.endlocation_id), (a, b, c) => b.location_id == input.endlocation_id)
|
||||||
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.startlocation_id), (a, b, c) => b.location_id == input.startlocation_id)
|
||||||
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-R", input.sourceName), (a, b, c) => c.startpoint_code == input.sourceName)
|
||||||
|
.WhereIF(!SqlFunc.IsNullOrEmpty(input.sourceName) && SqlFunc.StartsWith("DT-C", input.sourceName), (a, b, c) => c.endpoint_code == input.sourceName)
|
||||||
.Select((a, b, c) => new WmsElevatorH
|
.Select((a, b, c) => new WmsElevatorH
|
||||||
{
|
{
|
||||||
bill_code = c.bill_code,
|
bill_code = c.bill_code,
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
private readonly IElevatorControlService _elevatorControlService;
|
private readonly IElevatorControlService _elevatorControlService;
|
||||||
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
private readonly ElevatorControlConfiguration _eleCtlCfg = App.Configuration.Build<ElevatorControlConfiguration>();
|
||||||
private readonly ILoggerFactory _loggerFactory;
|
private readonly ILoggerFactory _loggerFactory;
|
||||||
public static Dictionary<string, int> s_eleUseStatusDic = new();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -108,30 +108,32 @@ namespace Tnb.WarehouseMgr
|
|||||||
}, true)
|
}, true)
|
||||||
.FirstAsync();*/
|
.FirstAsync();*/
|
||||||
Logger.Information($"当前取货,子任务编号:{input.taskCode}");
|
Logger.Information($"当前取货,子任务编号:{input.taskCode}");
|
||||||
ElevagorInfoQuery q = new() { taskCode =input.taskCode };
|
|
||||||
|
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
||||||
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
||||||
if (elevator.IsNull())
|
if (elevator.IsNull())
|
||||||
{
|
{
|
||||||
Logger.Error("未找到匹配的电梯任务", new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务"));
|
Logger.Error("未找到匹配的电梯任务", new Exception($"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务"));
|
||||||
return await ToApiResult(HttpStatusCode.InternalServerError, $"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务");
|
return await ToApiResult(HttpStatusCode.InternalServerError, $"根据参数,sourceName:{input.sourceName},taskCode:{input.taskCode},未找到匹配的电梯任务");
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
if (s_elevatorMap.TryGetValue(elevator.device_id, out object? elevatorCode))
|
||||||
{
|
{
|
||||||
|
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
||||||
string devName = elevatorCode?.ToString();
|
string devName = elevatorCode?.ToString();
|
||||||
Logger.Information($"获取设备:{devName},状态");
|
Logger.Information($"获取设备:{devName},状态");
|
||||||
var tags = _eleCtlCfg.tags;
|
var tags = _eleCtlCfg.tags;
|
||||||
await Task.Delay(1000);
|
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, tags, CancellationToken.None);
|
||||||
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo}");
|
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo}");
|
||||||
{
|
{
|
||||||
var curFloor = await GetRealFloor(elevator.end_floor);
|
var curFloor = await GetRealFloor(elevator.end_floor);
|
||||||
Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
/* Logger.Information($"目标楼层:{curFloor},电梯当前楼层:{floorNo}");
|
||||||
Logger.Information($"当前放货设备ID:{elevator.device_id}");
|
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
||||||
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
var loadedStatus = s_eleUseStatusDic[elevator.device_id] == 1 ? "完成" : "未完成";
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#梯,放货-> {loadedStatus}");
|
Logger.Information($"{devName.Match(@"\d+")}#梯,取货-> {loadedStatus}");
|
||||||
|
*/
|
||||||
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && curFloor != floorNo)
|
||||||
{
|
{
|
||||||
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
|
_ = await _elevatorControlService.CallLift(devName, elevator.end_floor, CancellationToken.None);
|
||||||
@@ -144,10 +146,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令
|
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令
|
||||||
}
|
}
|
||||||
if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
//if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
||||||
{
|
//{
|
||||||
await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
// Logger.Information($"{devName.Match(@"\d+")}#梯,任务未完成");
|
||||||
}
|
// await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
||||||
|
//}
|
||||||
|
|
||||||
if (sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯
|
if (sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus.正常状态 && runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.停梯
|
||||||
&& doorStatus == (int)EnumDoorStatus.开门到位保持)
|
&& doorStatus == (int)EnumDoorStatus.开门到位保持)
|
||||||
@@ -204,7 +207,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
string devName = elevatorCode?.ToString();
|
string devName = elevatorCode?.ToString();
|
||||||
Logger.Information($"获取设备:{devName},状态");
|
Logger.Information($"获取设备:{devName},状态");
|
||||||
await Task.Delay(1000);
|
|
||||||
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, _eleCtlCfg.tags, CancellationToken.None);//elevator.elevator_code
|
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(devName, _eleCtlCfg.tags, CancellationToken.None);//elevator.elevator_code
|
||||||
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
Logger.Information($"电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus},门状态:{doorStatus},Agv状态:{agvStatus},当前楼层:{floorNo}");
|
||||||
//判断Agv电梯是否进入状态
|
//判断Agv电梯是否进入状态
|
||||||
@@ -229,10 +231,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
Logger.Information($"当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
Logger.Information($"当前楼层:{curFloor},电梯所在楼层:{floorNo}");
|
||||||
if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
if (doorStatus == (int)EnumDoorStatus.开门到位保持 && s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.占用)
|
||||||
{
|
{
|
||||||
await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
Logger.Information($"{devName.Match(@"\d+")}#梯,任务未完成");
|
||||||
|
return await ToApiResult(HttpStatusCode.InternalServerError, "电梯还未开门,请重试!");
|
||||||
}
|
}
|
||||||
//电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态
|
//电梯到达目标楼层后,判断当前电梯门状态是否为开门到位保持状态
|
||||||
if (doorStatus != (int)EnumDoorStatus.开门到位保持 && curFloor == floorNo) //判断目标楼层与电梯所在楼层在同一层才可开门放货
|
if (s_eleUseStatusDic[elevator.device_id] == (int)EnumElevatorUseStatus.空闲 && doorStatus != (int)EnumDoorStatus.开门到位保持 && curFloor == floorNo) //判断目标楼层与电梯所在楼层在同一层才可开门放货
|
||||||
{
|
{
|
||||||
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令
|
_ = await _elevatorControlService.SendOpenCloseCmd(devName, 3); //发送电梯前门开门指令
|
||||||
}
|
}
|
||||||
@@ -241,6 +244,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
&& doorStatus == (int)EnumDoorStatus.开门到位保持)
|
&& doorStatus == (int)EnumDoorStatus.开门到位保持)
|
||||||
{
|
{
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.占用;
|
||||||
|
Logger.Information($"当前电梯状态:{s_eleUseStatusDic[elevator.device_id].ToEnum<EnumElevatorUseStatus>().ToString()}");
|
||||||
return await ToApiResult(HttpStatusCode.OK, "成功");
|
return await ToApiResult(HttpStatusCode.OK, "成功");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -364,7 +368,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
//根据Agv传递的参数获取,对应的电梯
|
//根据Agv传递的参数获取,对应的电梯
|
||||||
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
ElevagorInfoQuery q = new() { taskCode = input.taskCode };
|
||||||
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
WmsElevatorH elevator = await FindElevatorFromPars(q);
|
||||||
s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
//s_eleUseStatusDic[elevator.device_id] = (int)EnumElevatorUseStatus.空闲;
|
||||||
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
Logger.Information($"当前取货设备ID:{elevator.device_id}");
|
||||||
//根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
|
//根据disTask StartLocationId 起始库位关联电梯获取设备ID location_code.Continas("")
|
||||||
var devName = s_elevatorMap[elevator.device_id]?.ToString();
|
var devName = s_elevatorMap[elevator.device_id]?.ToString();
|
||||||
|
|||||||
@@ -197,11 +197,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
["TagName"] = "DoorExecute",
|
["TagName"] = "DoorExecute",
|
||||||
["Value"] = value.ToString()
|
["Value"] = value.ToString()
|
||||||
};
|
};
|
||||||
var eleStatusMap = await RedisHelper.HGetAllAsync(devName);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_ = await HttpClientHelper.GetAsync(_elevatorCtlCfg.WriteTagUrl, pars: dicCommand);
|
_ = await HttpClientHelper.GetAsync(_elevatorCtlCfg.WriteTagUrl, pars: dicCommand);
|
||||||
//flag = await RedisHelper.HSetAsync(devName, ElevatorConsts.DoorExecute, value);
|
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
@@ -488,6 +486,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
var tasks = ParallelWriteTagAsync(input);
|
var tasks = ParallelWriteTagAsync(input);
|
||||||
var writeRes = await Task.WhenAll(tasks);
|
var writeRes = await Task.WhenAll(tasks);
|
||||||
|
|
||||||
var timedTaskSvc = _backgudSvc as TimedTaskBackgroundService;
|
var timedTaskSvc = _backgudSvc as TimedTaskBackgroundService;
|
||||||
if (timedTaskSvc != null)
|
if (timedTaskSvc != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Linq.Expressions;
|
using System.Linq.Expressions;
|
||||||
|
using Aliyun.OSS;
|
||||||
using JNPF;
|
using JNPF;
|
||||||
using JNPF.Common.Contracts;
|
using JNPF.Common.Contracts;
|
||||||
using JNPF.Common.Core.Manager;
|
using JNPF.Common.Core.Manager;
|
||||||
@@ -233,7 +234,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
/// 判断CTU是否可以放货
|
/// 判断CTU是否可以放货
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
/*[HttpPost]
|
||||||
public async Task CheckPut(CheckPutInput input)
|
public async Task CheckPut(CheckPutInput input)
|
||||||
{
|
{
|
||||||
Dictionary<string, string[]> dic = new Dictionary<string, string[]>();
|
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;
|
bool result = res != null && res["Value"] != null ? res.Value<bool>("Value") : false;
|
||||||
if (!result)
|
if (!result)
|
||||||
throw new AppFriendlyException("点位" + input.point_code + "不可放", 500);
|
throw new AppFriendlyException("点位" + input.point_code + "不可放", 500);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 生成任务执行
|
/// 生成任务执行
|
||||||
@@ -438,25 +439,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
var agvDTTasks = disTasks.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
var agvDTTasks = disTasks.Where(it => it.endlocation_code.StartsWith("DT", StringComparison.OrdinalIgnoreCase) &&
|
||||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||||
|
|
||||||
foreach (var task in agvDTTasks)
|
await SetEleDevId(agvDTTasks);
|
||||||
{
|
|
||||||
ElevagorInfoQuery q = new() { endlocation_id = task.endlocation_id };
|
|
||||||
var e = await FindElevatorFromPars(q);
|
|
||||||
if (e != null)
|
|
||||||
{
|
|
||||||
task.device_id = e.device_id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*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
|
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();
|
.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()))
|
if (endLocCodes.Select(x => x.device_id).All(x => !x.IsNullOrWhiteSpace()))
|
||||||
{
|
{
|
||||||
Logger.Information("呼梯操作");
|
Logger.Information($"呼梯操作");
|
||||||
_ = CallingLanding(endLocCodes);
|
_ = CallingLanding(endLocCodes);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -482,6 +467,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
if (elevatorTasks?.Count > 0)
|
if (elevatorTasks?.Count > 0)
|
||||||
{
|
{
|
||||||
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
Logger.Information($"当前电梯任务数:{elevatorTasks?.Count ?? 0}");
|
||||||
|
await SetEleDevId(elevatorTasks);
|
||||||
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
|
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
|
||||||
{
|
{
|
||||||
_ = ExecuteTargetFloorTask(elevatorTask);
|
_ = 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)
|
catch (Exception ex) when (ex is HttpRequestException hReqEx)
|
||||||
{
|
{
|
||||||
@@ -606,16 +605,16 @@ namespace Tnb.WarehouseMgr
|
|||||||
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
|
private async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
|
||||||
{
|
{
|
||||||
//收到放货确认通知,向电梯发送到3楼的指令
|
//收到放货确认通知,向电梯发送到3楼的指令
|
||||||
Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}");
|
Logger.Information($"开始执行电梯任务,任务ID:{disTask.id},设备ID:{disTask.device_id}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
|
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
|
||||||
{
|
{
|
||||||
return;
|
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" };
|
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);
|
(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);
|
_ = 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
|
do
|
||||||
{
|
{
|
||||||
@@ -632,7 +632,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
} while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态);
|
} while (eleStatusMulti.agvStatus != (int)EnumAgvStatus.AGV运行状态);
|
||||||
Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>()}");
|
Logger.Information($"{devName.Match(@"\d+")}#, 当前Agv状态:{eleStatusMulti.agvStatus.ToEnum<EnumAgvStatus>()}");
|
||||||
_elevatorAgvCtlStatusMap[disTask.id] = eleStatusMulti.agvStatus;
|
_elevatorAgvCtlStatusMap[disTask.device_id] = eleStatusMulti.agvStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
int doorStatus = -1;
|
int doorStatus = -1;
|
||||||
@@ -641,6 +641,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
|
doorStatus = await _elevatorControlService.GetTagAsync(devName, ElevatorConsts.DoorStatus);
|
||||||
|
Logger.Information($"关门结果:{closeDoorRes}");
|
||||||
await Task.Delay(1000);
|
await Task.Delay(1000);
|
||||||
} while (doorStatus != 4);
|
} while (doorStatus != 4);
|
||||||
Logger.Information($"当前门状态:{doorStatus}");
|
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();
|
_ = 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)
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
//更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位
|
//更新载具,锁定状态为未锁定,更新载具的库位当前任务的目标库位
|
||||||
|
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
//入库取终点
|
//入库取终点
|
||||||
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 };
|
InStockStrategyQuery inStockStrategyInput = new() { warehouse_id = input.data[nameof(InStockStrategyQuery.warehouse_id)].ToString()!, Size = 1 };
|
||||||
//test
|
//test
|
||||||
BasLocation llll = await _db.Queryable<BasLocation>().FirstAsync(it=>it.location_code == _configuration["TestLocation"]);
|
BasLocation llll = await _db.Queryable<BasLocation>().FirstAsync(it => it.location_code == _configuration["TestLocation"]);
|
||||||
List<BasLocation> endLocations = new() { llll }; //await _wareHouseService.InStockStrategy(inStockStrategyInput);
|
List<BasLocation> endLocations = await _wareHouseService.InStockStrategy(inStockStrategyInput); //new() { llll };
|
||||||
WmsPointH? sPoint = null;
|
WmsPointH? sPoint = null;
|
||||||
WmsPointH? ePoint = null;
|
WmsPointH? ePoint = null;
|
||||||
if (input.data.ContainsKey(nameof(WmsPointH.location_id)))
|
if (input.data.ContainsKey(nameof(WmsPointH.location_id)))
|
||||||
|
|||||||
Reference in New Issue
Block a user