电梯改造
This commit is contained in:
@@ -2120,9 +2120,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
var YCLInnerTransfer = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3CurOutCacheLocation").FirstAsync();
|
var YCLInnerTransfer = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3CurOutCacheLocation").FirstAsync();
|
||||||
|
|
||||||
if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右"))
|
if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右"))
|
||||||
{
|
|
||||||
throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
|
throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
|
||||||
}
|
|
||||||
|
|
||||||
BasLocation startloc = null;
|
BasLocation startloc = null;
|
||||||
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||||
@@ -2138,7 +2136,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上存在多个托盘{string.Join(',', wmsCarryHs.Select(x => x.carry_code))}");
|
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上存在多个托盘{string.Join(',', wmsCarryHs.Select(x => x.carry_code))}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (wmsCarryHs.Count == 1)
|
if (wmsCarryHs.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上不存在托盘");
|
LoggerAgvElevatorTask.LogWarning($"暂存区库位{startloc.location_code}上不存在托盘");
|
||||||
continue;
|
continue;
|
||||||
@@ -2149,18 +2147,23 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 选电梯
|
// 选电梯
|
||||||
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||||
{
|
{
|
||||||
List<WmsElevatorH> wmsElevatorHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsElevatorH>().Where(r => r.elevator_group == "2" && r.enabled == 1).ToListAsync();
|
var floor3FirstSelectElevator = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3FirstSelectElevator").FirstAsync();
|
||||||
|
var floor3FirstSelectElevatorTasknums = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3FirstSelectElevatorTasknums").FirstAsync();
|
||||||
|
|
||||||
foreach (WmsElevatorH _wmsElevatorH in wmsElevatorHs)
|
wmsElevatorH = await db_agvElevatorTaskExceptionHandles.Queryable<WmsElevatorH>().Where(r => r.elevator_code == floor3FirstSelectElevator.value).FirstAsync();
|
||||||
|
|
||||||
|
floor3FirstSelectElevatorTasknums.value = (int.Parse(floor3FirstSelectElevatorTasknums.value) - 1).ToString();
|
||||||
|
if (floor3FirstSelectElevatorTasknums.value == "0")
|
||||||
{
|
{
|
||||||
// 加上暂存区到电梯的任务数
|
// 选择另一个电梯座位首选电梯
|
||||||
List<WmsPretaskH> wmsPretaskHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPretaskH>()
|
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (r.value == "Elevator3" ? "Elevator4" : "Elevator3"))
|
||||||
.Where(r => r.status != WmsWareHouseConst.TASK_BILL_STATUS_COMPLE_ID || r.status != WmsWareHouseConst.TASK_BILL_STATUS_CANCEL_ID && r.startlocation_id == startloc.id).ToListAsync();
|
.Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync();
|
||||||
|
// 重置为可放两托
|
||||||
_wmsElevatorH.carry_count += wmsPretaskHs.Count;
|
floor3FirstSelectElevatorTasknums.value = "2";
|
||||||
}
|
}
|
||||||
|
// 剩余可放托数
|
||||||
wmsElevatorH = wmsElevatorHs.OrderBy(r => r.carry_count).FirstOrDefault();
|
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == floor3FirstSelectElevatorTasknums.value)
|
||||||
|
.Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
string elevatorSno = wmsElevatorH.elevator_code.Replace("Elevator", "");
|
||||||
|
|||||||
@@ -1460,19 +1460,56 @@ namespace Tnb.WarehouseMgr
|
|||||||
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase))
|
!it.area_code.Contains("ELE", StringComparison.OrdinalIgnoreCase))
|
||||||
.ToList();
|
.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 三楼三四号梯如果与判断一托下有冲突
|
||||||
|
|
||||||
#region 电梯第三次改动
|
#region 电梯第三次改动
|
||||||
// 到暂存区的未完成任务
|
// 到暂存区的未完成任务
|
||||||
List<WmsDistaskH> wmsdistasks_agvElevator = await _db.Queryable<WmsDistaskH>()
|
List<WmsDistaskH> wmsdistasks_agvElevator = await _db.Queryable<WmsDistaskH>()
|
||||||
.InnerJoin<BasLocation>((a, b) => a.endlocation_id == b.id)
|
.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)
|
&& b.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||||
.ToListAsync();
|
.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
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
@@ -1512,27 +1549,9 @@ namespace Tnb.WarehouseMgr
|
|||||||
#endregion
|
#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();
|
preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList();
|
||||||
|
|
||||||
|
|
||||||
//一楼中储仓CTU
|
//一楼中储仓CTU
|
||||||
|
|
||||||
List<string> ids = preTasks.Select(x => x.id).Distinct().ToList();
|
List<string> ids = preTasks.Select(x => x.id).Distinct().ToList();
|
||||||
@@ -2354,8 +2373,23 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
Logger.Information($"通知WCS电梯{devName}下行接口调用成功");
|
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; }
|
catch { throw; }
|
||||||
@@ -2802,7 +2836,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
{
|
{
|
||||||
id = multiList[i].endlocation_id,
|
id = multiList[i].endlocation_id,
|
||||||
is_lock = 0,
|
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
|
is_use = string.IsNullOrEmpty(multiList[i].carry_status) ? ((int)EnumCarryStatus.占用).ToString() : multiList[i].carry_status
|
||||||
};
|
};
|
||||||
if (!string.IsNullOrEmpty(multiList[i].carry_status))
|
if (!string.IsNullOrEmpty(multiList[i].carry_status))
|
||||||
@@ -2810,8 +2844,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
loc.is_use = ((int)EnumCarryStatus.占用).ToString();
|
loc.is_use = ((int)EnumCarryStatus.占用).ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 如果是出入库位 完成后解除占用
|
// 如果是出入库位 完成后解除占用
|
||||||
string? is_type = locTypeMap.ContainsKey(endLocId) ? locTypeMap[endLocId].ToString() : "";
|
string? is_type = locTypeMap.ContainsKey(endLocId) ? locTypeMap[endLocId].ToString() : "";
|
||||||
if (is_type == ((int)EnumLocationType.出入库位).ToString())
|
if (is_type == ((int)EnumLocationType.出入库位).ToString())
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ namespace Tnb.WarehouseMgr
|
|||||||
}
|
}
|
||||||
List<BasLocation> locations = await _db.Queryable<BasLocation>()
|
List<BasLocation> locations = await _db.Queryable<BasLocation>()
|
||||||
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
|
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
|
||||||
.Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.is_lock,a.is_use,carry_count,a.location_code").ToListAsync();
|
.Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.is_lock,a.is_use,a.carry_count+a.task_nums,a.location_code").ToListAsync();
|
||||||
|
|
||||||
endLocation = locations.FirstOrDefault();
|
endLocation = locations.FirstOrDefault();
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw new ArgumentNullException(nameof(input));
|
throw new ArgumentNullException(nameof(input));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BasLocation endLocation = await _db.Queryable<BasLocation>().Where(r => r.id == input.wmsDistaskH.endlocation_id).FirstAsync();
|
BasLocation endLocation = await _db.Queryable<BasLocation>().Where(r => r.id == input.wmsDistaskH.endlocation_id).FirstAsync();
|
||||||
// 生产入库(灭菌完成) 仓库传 1001A1100000001MA8KP
|
// 生产入库(灭菌完成) 仓库传 1001A1100000001MA8KP
|
||||||
if (endLocation.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID)
|
if (endLocation.wh_id == WmsWareHouseConst.WAREHOUSE_MJC_ID)
|
||||||
|
|||||||
Reference in New Issue
Block a user