电梯改造

This commit is contained in:
2024-09-04 09:08:50 +08:00
parent df654b1523
commit 6a5580bf3c
4 changed files with 75 additions and 41 deletions

View File

@@ -1460,19 +1460,56 @@ namespace Tnb.WarehouseMgr
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase))
.ToList();
var elePreTasks = preTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
var normalPreTasks = preTasks.Where(it => it.area_code != "B" && !agvElevatorTasks.Concat(elePreTasks).Select(x => x.endlocation_code).Contains(it.endlocation_code)).ToList();
//Logger.Information("【GenTaskExecute】 电梯预任务elePreTasks:" + JsonConvert.SerializeObject(elePreTasks));
//Logger.Information("【GenTaskExecute】 AGV/CTU/KIVA预任务normalPreTasks:" + JsonConvert.SerializeObject(normalPreTasks));
//Logger.Information("【GenTaskExecute】 AGV电梯预任务agvElevatorTasks:" + JsonConvert.SerializeObject(agvElevatorTasks));
/* IEnumerable<WmsPretaskH?> firstEleGrp = agvElevatorTasks.GroupBy(g => g.endlocation_code).Select(t => t.OrderBy(o => o.bill_code).FirstOrDefault());
agvElevatorTasks = firstEleGrp?.ToList() ?? Enumerable.Empty<WmsPretaskH>().ToList()!;
*/
//如果电梯任务预Agv任务存在相同目标库位删除Agv任务保证电梯任务先行
var equalEndLocPreTasks = elePreTasks.Select(x => x.endlocation_code).Intersect(agvElevatorTasks.Select(x => x.endlocation_code));
if (equalEndLocPreTasks.Any())
{
Logger.Information("【GenTaskExecute】 执行如果电梯任务预Agv任务存在相同目标库位删除Agv任务保证电梯任务先行 ");
agvElevatorTasks = agvElevatorTasks.Where(x => !equalEndLocPreTasks.Contains(x.endlocation_code)).ToList();
}
#region
#region
// 到暂存区的未完成任务
List<WmsDistaskH> wmsdistasks_agvElevator = await _db.Queryable<WmsDistaskH>()
.InnerJoin<BasLocation>((a, b) => a.endlocation_id == b.id)
.Where((a, b) => a.status != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID && a.status != WmsWareHouseConst.BILLSTATUS_CANCEL_ID
.Where((a, b) => a.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID
&& b.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID)
.ToListAsync();
// 过滤同目标库位的正在执行的预任务
agvElevatorTasks = agvElevatorTasks.Where(r => !wmsdistasks_agvElevator.Select(a => a.endlocation_id).Contains(r.endlocation_id)).ToList();
// 到暂存区的未完成预任务
List<WmsPretaskH> wmspretasks_agvElevator = await _db.Queryable<WmsPretaskH>()
.InnerJoin<BasLocation>((a, b) => a.endlocation_id == b.id)
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
.Where((a, b) => a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.PRETASK_BILL_STATUS_CANCEL_ID
&& b.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID)
.Select((a, b, c) => new WmsPretaskH
{
move_num = c.move_num,
third_eqp_type = c.third_eqp_type,
}, true)
.ToListAsync();
// 过滤normalPreTasks中的到三楼暂存区任务
normalPreTasks = normalPreTasks.Where(r => !wmspretasks_agvElevator.Select(a => a.endlocation_id).Contains(r.endlocation_id)).ToList();
// 过滤到三楼暂存区同目标库位的正在执行的任务
var cacheLocTasks = wmspretasks_agvElevator.Where(r => !wmsdistasks_agvElevator.Select(a => a.endlocation_id).Contains(r.endlocation_id)).ToList();
// 过滤重复目标库位的预任务
agvElevatorTasks = agvElevatorTasks.OrderBy(r => r.endlocation_code).GroupBy(r => r.endlocation_code).Select(r => { return r.ToList()[0]; }).ToList();
cacheLocTasks = cacheLocTasks.OrderBy(r => r.endlocation_code).GroupBy(r => r.endlocation_code).Select(r => { return r.ToList()[0]; }).ToList();
normalPreTasks = normalPreTasks.Concat(cacheLocTasks).ToList();
#endregion
@@ -1512,27 +1549,9 @@ namespace Tnb.WarehouseMgr
#endregion
var elePreTasks = preTasks.Where(it => it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase)).ToList();
var normalPreTasks = preTasks.Where(it => it.area_code != "B" && !agvElevatorTasks.Concat(elePreTasks).Select(x => x.endlocation_code).Contains(it.endlocation_code)).ToList();
//Logger.Information("【GenTaskExecute】 电梯预任务elePreTasks:" + JsonConvert.SerializeObject(elePreTasks));
//Logger.Information("【GenTaskExecute】 AGV/CTU/KIVA预任务normalPreTasks:" + JsonConvert.SerializeObject(normalPreTasks));
//Logger.Information("【GenTaskExecute】 AGV电梯预任务agvElevatorTasks:" + JsonConvert.SerializeObject(agvElevatorTasks));
/* IEnumerable<WmsPretaskH?> firstEleGrp = agvElevatorTasks.GroupBy(g => g.endlocation_code).Select(t => t.OrderBy(o => o.bill_code).FirstOrDefault());
agvElevatorTasks = firstEleGrp?.ToList() ?? Enumerable.Empty<WmsPretaskH>().ToList()!;
*/
//如果电梯任务预Agv任务存在相同目标库位删除Agv任务保证电梯任务先行
var equalEndLocPreTasks = elePreTasks.Select(x => x.endlocation_code).Intersect(agvElevatorTasks.Select(x => x.endlocation_code));
if (equalEndLocPreTasks.Any())
{
Logger.Information("【GenTaskExecute】 执行如果电梯任务预Agv任务存在相同目标库位删除Agv任务保证电梯任务先行 ");
agvElevatorTasks = agvElevatorTasks.Where(x => !equalEndLocPreTasks.Contains(x.endlocation_code)).ToList();
}
preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList();
//一楼中储仓CTU
List<string> ids = preTasks.Select(x => x.id).Distinct().ToList();
@@ -2354,8 +2373,23 @@ namespace Tnb.WarehouseMgr
{
Logger.Information($"通知WCS电梯{devName}下行接口调用成功");
}
#region
// 一托下的时候切换首选电梯
if (disTaskIds.Count == 1)
{
// 选择另一个电梯座位首选电梯
await db.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3"))
.Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync();
// 剩余可放托数
await db.Updateable<BasFactoryConfig>().SetColumns(r => r.value == "2")
.Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync();
}
#endregion
}
}
}
catch { throw; }
@@ -2802,7 +2836,7 @@ namespace Tnb.WarehouseMgr
{
id = multiList[i].endlocation_id,
is_lock = 0,
carry_count = locCarrycountMap[endLocId] == null ? 1: int.Parse(locCarrycountMap[endLocId].ToString()) + 1,
carry_count = locCarrycountMap[endLocId] == null || string.IsNullOrEmpty(locCarrycountMap[endLocId].ToString()) ? 1: int.Parse(locCarrycountMap[endLocId].ToString()) + 1,
is_use = string.IsNullOrEmpty(multiList[i].carry_status) ? ((int)EnumCarryStatus.).ToString() : multiList[i].carry_status
};
if (!string.IsNullOrEmpty(multiList[i].carry_status))
@@ -2810,8 +2844,6 @@ namespace Tnb.WarehouseMgr
loc.is_use = ((int)EnumCarryStatus.).ToString();
}
// 如果是出入库位 完成后解除占用
string? is_type = locTypeMap.ContainsKey(endLocId) ? locTypeMap[endLocId].ToString() : "";
if (is_type == ((int)EnumLocationType.).ToString())