电梯调整等
This commit is contained in:
@@ -2084,10 +2084,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
{
|
||||
if (s_agvElevatortaskDic.CurrentCount == 0)
|
||||
return;
|
||||
|
||||
var floor3outstock = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3outstock").FirstAsync();
|
||||
if (floor3outstock != null && floor3outstock.value == "0")
|
||||
return;
|
||||
await s_agvElevatortaskDic.WaitAsync();
|
||||
|
||||
try
|
||||
{
|
||||
await db_agvElevatorTaskExceptionHandles.Ado.BeginTranAsync();
|
||||
// 获取暂存区需要生成任务的库位
|
||||
List<BasLocation> agvElevatorStartLocs = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.Where(r => r.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && r.is_use == "1" && r.is_lock == 0).ToListAsync();
|
||||
@@ -2099,23 +2104,23 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
List<IGrouping<string, BasLocation>> elevatorTaskGroup = agvElevatorStartLocs.GroupBy(r => r.region_id).ToList();
|
||||
foreach (IGrouping<string, BasLocation> group in elevatorTaskGroup)
|
||||
{
|
||||
// 选一楼出货库位
|
||||
List<BasLocation> outLocations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
.OrderBy("task_nums, location_code").ToListAsync();
|
||||
|
||||
if (outLocations.Count == 0)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"一楼没有可用的出货库位");
|
||||
continue;
|
||||
}
|
||||
BasLocation outLocation = outLocations.FirstOrDefault();
|
||||
WmsPointH outPoint = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPointH>().FirstAsync(it => it.location_id == outLocation.id);
|
||||
|
||||
List<BasLocation> locs = group.ToList();
|
||||
LoggerAgvElevatorTask.LogWarning($"即将下发{locs.Count}条任务");
|
||||
for (int i = 0; i < locs.Count; i++)
|
||||
{
|
||||
// 选一楼出货库位
|
||||
List<BasLocation> outLocations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0")
|
||||
.OrderBy("location_code").ToListAsync();
|
||||
|
||||
if (outLocations.Count == 0)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogWarning($"一楼没有可用的出货库位");
|
||||
continue;
|
||||
}
|
||||
BasLocation outLocation = outLocations.FirstOrDefault();
|
||||
WmsPointH outPoint = await db_agvElevatorTaskExceptionHandles.Queryable<WmsPointH>().FirstAsync(it => it.location_id == outLocation.id);
|
||||
|
||||
// 交替选择缓存区库位
|
||||
var YCLInnerTransfer = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3CurOutCacheLocation").FirstAsync();
|
||||
|
||||
@@ -2123,12 +2128,62 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误!需要配置值为【3楼发货左】或【3楼发货右】", 500);
|
||||
|
||||
BasLocation startloc = null;
|
||||
// 如果没切换就是当前发货区
|
||||
string 切换发货区 = YCLInnerTransfer.value;
|
||||
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
|
||||
{
|
||||
List<BasLocation> locations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
|
||||
.Where((a, b) => b.name == YCLInnerTransfer.value).OrderBy("a.location_code,a.is_lock,a.is_use,task_nums").ToListAsync();
|
||||
.Where((a, b) => b.name == YCLInnerTransfer.value && a.is_use == "1" && a.is_lock == 0).OrderBy("a.location_code").ToListAsync();
|
||||
|
||||
startloc = locations.FirstOrDefault();
|
||||
#region 如果当前侧没有可用库位 切换另一侧继续发货,但是因为不能同时发两托同侧的货到同个电梯,所以必须保证当前优先级电梯是接第一托货
|
||||
// 交替出的时候可能会选不到库位,做特殊处理
|
||||
if (startloc == null)
|
||||
{
|
||||
LoggerAgvElevatorTask.LogInformation($"交替到{YCLInnerTransfer.value} 进行发货的时候,没有货物可以发");
|
||||
var _floor3FirstSelectElevatorTasknums = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3FirstSelectElevatorTasknums").FirstAsync();
|
||||
|
||||
切换发货区 = YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左";
|
||||
LoggerAgvElevatorTask.LogInformation($"再次交替到{切换发货区} 进行发货");
|
||||
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == 切换发货区)
|
||||
.Where(r => r.key == "floor3CurOutCacheLocation").ExecuteCommandAsync();
|
||||
locations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>()
|
||||
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
|
||||
.Where((a, b) => b.name == 切换发货区 && a.is_use == "1" && a.is_lock == 0).OrderBy("a.location_code").ToListAsync();
|
||||
|
||||
startloc = locations.FirstOrDefault();
|
||||
// 如果还是选不到
|
||||
if (startloc == null)
|
||||
{
|
||||
throw new Exception($"再次交替到{切换发货区} 进行发货,仍然没有货可发,属于暂存区数据异常");
|
||||
}
|
||||
|
||||
var _floor3FirstSelectElevator = await db_agvElevatorTaskExceptionHandles.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3FirstSelectElevator").FirstAsync();
|
||||
// 如果当前优先级电梯是空托盘 切换发货区之后不需要切换电梯
|
||||
if (_floor3FirstSelectElevatorTasknums.value == "2")
|
||||
{
|
||||
LoggerAgvElevatorTask.LogInformation($"当前优先级电梯{_floor3FirstSelectElevator.value}是空托盘 切换发货区之后不需要切换电梯");
|
||||
}
|
||||
// 如果当前优先级电梯不是空托盘 切换发货区之后还需要切换电梯
|
||||
else
|
||||
{
|
||||
LoggerAgvElevatorTask.LogInformation($"当前优先级电梯{_floor3FirstSelectElevator.value}不是空托盘 切换发货区之后还需要切换电梯");
|
||||
|
||||
string 切换电梯 = _floor3FirstSelectElevator.value == "Elevator3" ? "Elevator4" : "Elevator3";
|
||||
LoggerAgvElevatorTask.LogInformation($"交替到{切换电梯} 进行发货");
|
||||
// 选择另一个电梯座位首选电梯
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == 切换电梯)
|
||||
.Where(r => r.key == "floor3FirstSelectElevator").ExecuteCommandAsync();
|
||||
// 剩余可放托数
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == "2")
|
||||
.Where(r => r.key == "floor3FirstSelectElevatorTasknums").ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
List<WmsCarryH> wmsCarryHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsCarryH>().Where(r => r.location_id == startloc.id).ToListAsync();
|
||||
if (wmsCarryHs.Count > 1)
|
||||
@@ -2195,7 +2250,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
|
||||
WmsPretaskH preTask = new()
|
||||
{
|
||||
org_id = _userManager!.User.OrganizeId,
|
||||
org_id = WmsWareHouseConst.AdministratorOrgId,
|
||||
startlocation_id = sPoint?.location_id!,
|
||||
startlocation_code = sPoint?.location_code!,
|
||||
endlocation_id = ePoint?.location_id!,
|
||||
@@ -2238,7 +2293,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
}).Where(it => it.id == wmsCarryH.id).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左"))
|
||||
await db_agvElevatorTaskExceptionHandles.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (切换发货区 == "3楼发货左" ? "3楼发货右" : "3楼发货左"))
|
||||
.Where(r => r.key == "floor3CurOutCacheLocation").ExecuteCommandAsync();
|
||||
|
||||
//所有库位加锁
|
||||
@@ -2252,6 +2307,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
await db_agvElevatorTaskExceptionHandles.Ado.CommitTranAsync();
|
||||
}
|
||||
}
|
||||
catch (ObjectDisposedException ex)
|
||||
@@ -2590,6 +2647,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
|
||||
DateTime dateTime = DateTime.Now;
|
||||
WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH();
|
||||
string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH");
|
||||
wmsSterilizationInstockH.bill_code = code;
|
||||
wmsSterilizationInstockH.carry_id = wmsCarryH.id;
|
||||
wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code;
|
||||
wmsSterilizationInstockH.location_id = endlocation.id;
|
||||
@@ -2871,7 +2930,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
CheckGettimer = new Timer(CheckGet, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||
Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
||||
Scantimer = new Timer(ScanInStock, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
SSXcodetimer = new Timer(SSXcode, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
|
||||
// 八工位缓存区补充空托盘
|
||||
BGWCarrySupplementtimer = new Timer(BGWCarrySupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
@@ -2896,15 +2955,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
||||
// 停用
|
||||
//PackOutstockServicetimer = new Timer(PackOutstockService, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
|
||||
|
||||
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||
Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
|
||||
|
||||
F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
|
||||
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185));
|
||||
|
||||
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
|
||||
//agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
|
||||
agvelevatorTimer = new Timer(AgvelevatorTimerTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20));
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user