允许电梯放两托货

This commit is contained in:
2024-08-01 16:32:50 +08:00
parent 5693ef6ed2
commit b5e7495dfe
6 changed files with 198 additions and 53 deletions

View File

@@ -56,6 +56,7 @@ using Tnb.WarehouseMgr.Interfaces;
using static NPOI.HSSF.Util.HSSFColor;
using Tnb.BasicData;
using System.Reflection;
using NPOI.SS.Format;
namespace Tnb.WarehouseMgr
{
@@ -1025,6 +1026,7 @@ namespace Tnb.WarehouseMgr
Logger.Information($"SsxControlLOAD:{JsonConvert.SerializeObject(dicCommand)}");
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
Logger.Information($"SsxControlLOAD:{str}");
Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}");
}
}
else if (action == "UNLOAD")//放货
@@ -1042,6 +1044,7 @@ namespace Tnb.WarehouseMgr
Logger.Information($"SsxControlUNLOAD:{JsonConvert.SerializeObject(dicCommand)}");
var str = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
Logger.Information($"SsxControlUNLOAD:{str}");
Logger.Information($"SsxControlUNLOAD - 控制后查询:{_redisData.GetHash(strarr[0], strarr[1]).Result}");
}
}
@@ -1546,7 +1549,7 @@ namespace Tnb.WarehouseMgr
var tags = _eleCtlCfg.tags;
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) = await _elevatorControlService.GetElevatorStatus(e.elevator_code, tags, CancellationToken.None);
Logger.Information($"【GenTaskExecute】 电梯当前状态->系统状态:{sysStatus.ToEnum<EnumSysStatus>()},运行状态:{runStatus.ToEnum<EnumRunStatus>()},Agv状态:{agvStatus.ToEnum<EnumAgvStatus>()},当前楼层:{floorNo},电梯占用状态{s_eleUseStatusDic[e.device_id]}");
var curFloor = await GetRealFloor(e.end_floor);
var curFloor = await GetRealFloor(e.elevator_code, e.end_floor);
if (e != null && s_eleUseStatusDic[e.device_id] == (int)EnumElevatorUseStatus. && curFloor != floorNo)
{
@@ -1580,18 +1583,60 @@ namespace Tnb.WarehouseMgr
Logger.Information($"【GenTaskExecute】当前电梯任务数:{elevatorTasks?.Count ?? 0}");
if (elevatorTasks?.Count > 0)
{
foreach (WmsDistaskH? elevatorTask in elevatorTasks)
List<IGrouping<string, WmsDistaskH>> elevatorTaskGroup = elevatorTasks.GroupBy(r => $"{r.endlocation_code} {r.end_floor}").ToList();
foreach (IGrouping<string, WmsDistaskH> group in elevatorTaskGroup)
{
ElevagorInfoQuery q = new() { endlocation_id = elevatorTask.endlocation_id, taskCode = elevatorTask.bill_code};
List<WmsDistaskH> wmsDistaskHs = group.ToList();
ElevagorInfoQuery q = new() { endlocation_id = wmsDistaskHs[0].endlocation_id, taskCode = wmsDistaskHs[0].bill_code };
Logger.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯参数 {JsonConvert.SerializeObject(q)}");
var e = await FindElevatorFromPars(q);
Logger.Information($"【GenTaskExecute】执行电梯任务时 根据任务单号获取电梯结果 {JsonConvert.SerializeObject(e)}");
if (e != null)
{
elevatorTask.device_id = e.device_id;
}
_ = ExecuteTargetFloorTask(elevatorTask);
// 三、四号梯发货带两托货
string[] doubleCarryRunElevators = new string[2]
{
"Elevator3","Elevator4"
};
if (doubleCarryRunElevators.Contains(e.elevator_code) && wmsDistaskHs[0].end_floor == 1)
{
// 电梯内放置两托货呼叫电梯下
if (group.Count() == 2)
{
if (e != null)
{
wmsDistaskHs[0].device_id = e.device_id;
wmsDistaskHs[1].device_id = e.device_id;
}
_ = ExecuteTargetFloorTask(wmsDistaskHs);
}
// 一托货
else if (group.Count() == 1)
{
// 如果当前电梯没有执行中的任务 则呼叫电梯下
if (_db.Queryable<WmsDistaskH>().Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID
&& r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.endlocation_id == wmsDistaskHs[0].startlocation_id).Count() == 0)
{
if (e != null)
{
wmsDistaskHs[0].device_id = e.device_id;
}
_ = ExecuteTargetFloorTask(wmsDistaskHs);
}
}
else
{
Logger.LogError($"电梯 {e.elevator_code} 待执行的电梯任务数异常 目前是{group.Count()} 超过了两托");
}
}
else
{
if (e != null)
{
wmsDistaskHs[0].device_id = e.device_id;
}
_ = ExecuteTargetFloorTask(wmsDistaskHs);
}
}
}
List<WmsDistaskH> agvTasks = disTasks.Where(it => !it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
@@ -2045,7 +2090,7 @@ namespace Tnb.WarehouseMgr
Logger.Information($"【CallingLanding】 任务开始目标楼层为:{floorNO}");
int floorN = await GetRealFloor(floorNO);
int floorN = await GetRealFloor(devName, floorNO);
//如果电梯在当前楼层则不呼梯
if (floorN == eleStatusMulti.curFloorNo)
{
@@ -2103,10 +2148,12 @@ namespace Tnb.WarehouseMgr
/// </summary>
/// <param name="disTask"></param>
/// <returns></returns>
public async Task ExecuteTargetFloorTask(WmsDistaskH disTask)
public async Task ExecuteTargetFloorTask(List<WmsDistaskH> disTasks)
{
//收到放货确认通知向电梯发送到3楼的指令
Logger.Information($"开始执行电梯任务,任务ID:{disTask.id}");
Logger.Information($"开始执行电梯任务,任务:{string.Join(",", disTasks.Select(r => r.bill_code))}");
var disTask = disTasks[0];
try
{
if (!s_elevatorMap.TryGetValue(disTask.device_id, out object? elevatorCode))
@@ -2147,7 +2194,7 @@ namespace Tnb.WarehouseMgr
} while (doorStatus != 4);
Logger.Information($"当前门状态:{doorStatus}");
int floor = await GetRealFloor(disTask.end_floor);
int floor = await GetRealFloor(devName, disTask.end_floor);
//电梯任务手动执行任务状态上报
(int sysStatus, int runStatus, int floorNo, int doorStatus, int agvStatus) tuple = (-1, -1, -1, -1, -1);
@@ -2169,8 +2216,7 @@ namespace Tnb.WarehouseMgr
if (tuple.sysStatus.ToEnum<EnumSysStatus>() == EnumSysStatus. && tuple.runStatus.ToEnum<EnumRunStatus>() == EnumRunStatus.)
{
Logger.Information($"disTask.require_id={disTask.require_id}");
List<string> disTaskIds = new() { disTask.id };
var upInput = new { disTaskIds = disTask.id };
List<string> disTaskIds = new() { disTasks[0].id, disTasks[1].id };
TaskExecuteAfterUpInput teaUpInput = new()
{
disTaskIds = disTaskIds,
@@ -2211,6 +2257,13 @@ namespace Tnb.WarehouseMgr
//floor2.Add("AS02");
//floor2.Add("AX01");
//floor2.Add("AX02");
// 三、四号梯发货带两托货
string[] doubleCarryRunElevators =
{
"29815764588053","29815767573013"
};
//调用AGV创建任务链接口
try
{
@@ -2233,24 +2286,31 @@ namespace Tnb.WarehouseMgr
foreach ((string k, object v) in taskChainCodeDic)
{
var typeflag = false;
var dis = disTasks.Where(p => p.groups == k).First();
dynamic reqBody = new ExpandoObject();
reqBody.taskChainCode = k;
reqBody.type = (int)EnumTaskChainType.AGV;
if (kiva.Contains(dis.startlocation_code) || kiva.Contains(dis.endlocation_code)
//|| floor2.Contains(dis.startlocation_code) || floor2.Contains(dis.endlocation_code)
)
{
typeflag = true;
reqBody.type = (int)EnumTaskChainType.KIVA;
}
// 如果管理区是E二楼暂存仓和二楼缓存仓 统一发KIVA
if (dis.area_code == "E")
{
typeflag = true;
reqBody.type = (int)EnumTaskChainType.KIVA;
}
dynamic reqBody = new ExpandoObject();
reqBody.taskChainCode = k;
reqBody.type = typeflag ? (int)EnumTaskChainType.KIVA : (int)EnumTaskChainType.AGV;
// 三四号电梯出货
if (doubleCarryRunElevators.Contains(dis.device_id) && dis.end_floor == 1)
{
reqBody.type = (int)EnumTaskChainType.;
}
// 原材料仓使用优先级
if (dis.area_code == "A")