电梯调整等

This commit is contained in:
2024-09-06 11:06:01 +08:00
parent 27536bfd7c
commit be75d77d3e
10 changed files with 175 additions and 81 deletions

View File

@@ -2084,10 +2084,15 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
{ {
if (s_agvElevatortaskDic.CurrentCount == 0) if (s_agvElevatortaskDic.CurrentCount == 0)
return; 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(); await s_agvElevatortaskDic.WaitAsync();
try try
{ {
await db_agvElevatorTaskExceptionHandles.Ado.BeginTranAsync();
// 获取暂存区需要生成任务的库位 // 获取暂存区需要生成任务的库位
List<BasLocation> agvElevatorStartLocs = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>() 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(); .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(); List<IGrouping<string, BasLocation>> elevatorTaskGroup = agvElevatorStartLocs.GroupBy(r => r.region_id).ToList();
foreach (IGrouping<string, BasLocation> group in elevatorTaskGroup) 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(); List<BasLocation> locs = group.ToList();
LoggerAgvElevatorTask.LogWarning($"即将下发{locs.Count}条任务"); LoggerAgvElevatorTask.LogWarning($"即将下发{locs.Count}条任务");
for (int i = 0; i < locs.Count; i++) 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(); 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); throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前出库分区 项配置错误需要配置值为【3楼发货左】或【3楼发货右】", 500);
BasLocation startloc = null; BasLocation startloc = null;
// 如果没切换就是当前发货区
string = YCLInnerTransfer.value;
if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID) if (group.Key == WmsWareHouseConst.REGION_CPOutstockCache_ID)
{ {
List<BasLocation> locations = await db_agvElevatorTaskExceptionHandles.Queryable<BasLocation>() List<BasLocation> locations = await db_agvElevatorTaskExceptionHandles.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.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(); 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(); List<WmsCarryH> wmsCarryHs = await db_agvElevatorTaskExceptionHandles.Queryable<WmsCarryH>().Where(r => r.location_id == startloc.id).ToListAsync();
if (wmsCarryHs.Count > 1) if (wmsCarryHs.Count > 1)
@@ -2195,7 +2250,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
WmsPretaskH preTask = new() WmsPretaskH preTask = new()
{ {
org_id = _userManager!.User.OrganizeId, org_id = WmsWareHouseConst.AdministratorOrgId,
startlocation_id = sPoint?.location_id!, startlocation_id = sPoint?.location_id!,
startlocation_code = sPoint?.location_code!, startlocation_code = sPoint?.location_code!,
endlocation_id = ePoint?.location_id!, 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(); }).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(); .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) catch (ObjectDisposedException ex)
@@ -2590,6 +2647,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
DateTime dateTime = DateTime.Now; DateTime dateTime = DateTime.Now;
WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH(); WmsSterilizationInstockH wmsSterilizationInstockH = new WmsSterilizationInstockH();
string code = await _billRullService.GetBillNumber("WmsSterilizationInstockH");
wmsSterilizationInstockH.bill_code = code;
wmsSterilizationInstockH.carry_id = wmsCarryH.id; wmsSterilizationInstockH.carry_id = wmsCarryH.id;
wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code; wmsSterilizationInstockH.carry_code = wmsCarryH.carry_code;
wmsSterilizationInstockH.location_id = endlocation.id; wmsSterilizationInstockH.location_id = endlocation.id;
@@ -2871,7 +2930,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
public Task StartAsync(CancellationToken cancellationToken) public Task StartAsync(CancellationToken cancellationToken)
{ {
CheckGettimer = new Timer(CheckGet, null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); 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)); SSXcodetimer = new Timer(SSXcode, null, TimeSpan.Zero, TimeSpan.FromSeconds(5));
// 八工位缓存区补充空托盘 // 八工位缓存区补充空托盘
BGWCarrySupplementtimer = new Timer(BGWCarrySupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); 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)); //PackOutstockServicetimer = new Timer(PackOutstockService, null, TimeSpan.Zero, TimeSpan.FromSeconds(60));
Floor4DMJ2MJXtimer = new Timer(Floor4DMJ2MJX, 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(30)); Floor4MJX2MJCtimer = new Timer(Floor4MJX2MJC, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); Floor4DMC2CPKtimer = new Timer(Floor4DMC2CPK, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30)); F2KTPsupplementtimer = new Timer(F2KTPsupplement, null, TimeSpan.Zero, TimeSpan.FromSeconds(30));
YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185)); YCLInternalTransfertimer = new Timer(YCLInternalTransfer, null, TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(185));
elevatorTimer = new Timer(ElevatorTaskExceptionHandle, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20)); 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; return Task.CompletedTask;
} }

View File

@@ -541,7 +541,11 @@ namespace Tnb.WarehouseMgr
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}"); Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
} }
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync(); int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => new BasLocation
{
is_lock = 0,
task_nums = r.task_nums - 1,
}).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0) if (unlockEndRow > 0)
Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}"); Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}");
else else
@@ -668,7 +672,11 @@ namespace Tnb.WarehouseMgr
Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}"); Logger.Information($"未成功解锁起点库位{wmsDistaskH.startlocation_code}");
} }
int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => r.is_lock == 0).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync(); int unlockEndRow = await _db.Updateable<BasLocation>().SetColumns(r => new BasLocation
{
is_lock = 0,
task_nums = r.task_nums - 1,
}).Where(r => r.location_code == wmsDistaskH.endlocation_code).ExecuteCommandAsync();
if (unlockEndRow > 0) if (unlockEndRow > 0)
Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}"); Logger.Information($"成功解锁终点库位{wmsDistaskH.endlocation_code}");
else else

View File

@@ -1484,17 +1484,17 @@ namespace Tnb.WarehouseMgr
#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.TASK_BILL_STATUS_COMPLE_ID && a.status != WmsWareHouseConst.TASK_BILL_STATUS_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();
// 到暂存区的未完成预任务 // 到暂存区的未完成预任务
List<WmsPretaskH> wmspretasks_agvElevator = await _db.Queryable<WmsPretaskH>() List<WmsPretaskH> wmspretasks_agvElevator = await db.Queryable<WmsPretaskH>()
.InnerJoin<BasLocation>((a, b) => a.endlocation_id == b.id) .InnerJoin<BasLocation>((a, b) => a.endlocation_id == b.id)
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.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 .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) && b.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && b.is_use == "0")
.Select((a, b, c) => new WmsPretaskH .Select((a, b, c) => new WmsPretaskH
{ {
move_num = c.move_num, move_num = c.move_num,
@@ -1512,7 +1512,6 @@ namespace Tnb.WarehouseMgr
normalPreTasks = normalPreTasks.Concat(cacheLocTasks).ToList(); normalPreTasks = normalPreTasks.Concat(cacheLocTasks).ToList();
#endregion #endregion
if (s_elevatortaskWCSRequestDic.Count > 0) if (s_elevatortaskWCSRequestDic.Count > 0)
{ {
for (int index_agvElevatorTasks = 0; index_agvElevatorTasks < agvElevatorTasks.Count; index_agvElevatorTasks++) for (int index_agvElevatorTasks = 0; index_agvElevatorTasks < agvElevatorTasks.Count; index_agvElevatorTasks++)
@@ -1551,6 +1550,9 @@ namespace Tnb.WarehouseMgr
preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList(); preTasks = normalPreTasks.Concat(agvElevatorTasks).Concat(elePreTasks).ToList();
if (preTasks.Count() == 0)
return;
//一楼中储仓CTU //一楼中储仓CTU
@@ -2374,6 +2376,12 @@ namespace Tnb.WarehouseMgr
Logger.Information($"通知WCS电梯{devName}下行接口调用成功"); Logger.Information($"通知WCS电梯{devName}下行接口调用成功");
} }
List<WmsCarryH> carryHs = await db.Queryable<WmsCarryH>().Where(r => disTasks.Select(r => r.carry_id).Contains(r.id)).ToListAsync();
carryHs.ForEach(r => {
r.location_id = disTask.endlocation_id;
r.location_code = disTask.endlocation_code;
});
await db.Updateable(carryHs).ExecuteCommandAsync();
#region #region
// 一托下的时候切换首选电梯 // 一托下的时候切换首选电梯
@@ -3229,7 +3237,7 @@ namespace Tnb.WarehouseMgr
BasLocation endlocation = await _db.Queryable<BasLocation>().InnerJoin<WmsPointH>((a, b) => a.id == b.location_id).Where((a, b) => b.id == pEndId).FirstAsync(); BasLocation endlocation = await _db.Queryable<BasLocation>().InnerJoin<WmsPointH>((a, b) => a.id == b.location_id).Where((a, b) => b.id == pEndId).FirstAsync();
// 后续可整理成配置表 // 后续可整理成配置表
#region #region
//if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID) //if (startlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CP_ID && endlocation.wh_id == WmsWareHouseConst.WAREHOUSE_CPCRK_ID)
//{ //{
// WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync(); // WmsElevatorH wmsElevatorH = await _db.Queryable<WmsElevatorH>().Where(it => it.elevator_group == "2" && it.enabled == 1).OrderBy(r => r.task_nums).FirstAsync();

View File

@@ -169,12 +169,15 @@ namespace Tnb.WarehouseMgr
CarryCodeUnbindCodeInput carryCodeUnbindCodeInput = new CarryCodeUnbindCodeInput(); CarryCodeUnbindCodeInput carryCodeUnbindCodeInput = new CarryCodeUnbindCodeInput();
carryCodeUnbindCodeInput.carry_code_id = wmsCarryCode.id; carryCodeUnbindCodeInput.carry_code_id = wmsCarryCode.id;
await _wmsCarryUnbindService.CarryCodeUnbindCode(carryCodeUnbindCodeInput, _db); await _wmsCarryUnbindService.CarryCodeUnbindCode(carryCodeUnbindCodeInput, _db);
await _db.Updateable<WmsCarryH>().SetColumns(r => r.carry_status == "0").Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
} }
await _db.Updateable<WmsTempCode>().SetColumns(r => r.codeqty == wmsCarryCode.codeqty) await _db.Updateable<WmsTempCode>().SetColumns(r => r.codeqty == wmsCarryCode.codeqty)
.Where(r => r.barcode == wmsCarryCode.barcode).ExecuteCommandAsync(); .Where(r => r.barcode == wmsCarryCode.barcode).ExecuteCommandAsync();
} }
// 如果没有条码 设置载具状态为空闲
List<WmsCarryCode> _wmsCarryCodes = _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == wmsCarryH.id).ToList();
await _db.Updateable<WmsCarryH>().SetColumns(r => r.carry_status == (_wmsCarryCodes.Count == 0 ? "0" : r.carry_status)).Where(r => r.id == wmsCarryH.id).ExecuteCommandAsync();
switch (carryLoc.wh_id) switch (carryLoc.wh_id)
{ {

View File

@@ -81,10 +81,10 @@ namespace Tnb.WarehouseMgr
try try
{ {
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any()) //if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{ //{
throw new AppFriendlyException("条码已生成", 500); // throw new AppFriendlyException("条码已生成", 500);
}; //};
WmsOutsourceD WmsOutsourceD = await _db.Queryable<WmsOutsourceD>().Where(it => input.BillId == it.id).FirstAsync(); WmsOutsourceD WmsOutsourceD = await _db.Queryable<WmsOutsourceD>().Where(it => input.BillId == it.id).FirstAsync();
WmsOutsourceH WmsOutsourceH = await _db.Queryable<WmsOutsourceH>().Where(it => WmsOutsourceD.fk_wms_outsource_order_id == it.id).FirstAsync(); WmsOutsourceH WmsOutsourceH = await _db.Queryable<WmsOutsourceH>().Where(it => WmsOutsourceD.fk_wms_outsource_order_id == it.id).FirstAsync();

View File

@@ -320,10 +320,10 @@ namespace Tnb.WarehouseMgr
try try
{ {
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any()) //if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{ //{
throw new AppFriendlyException("条码已生成", 500); // throw new AppFriendlyException("条码已生成", 500);
}; //};
WmsPurchaseD WmsPurchaseD = await _db.Queryable<WmsPurchaseD>().Where(it => input.BillId == it.id).FirstAsync(); WmsPurchaseD WmsPurchaseD = await _db.Queryable<WmsPurchaseD>().Where(it => input.BillId == it.id).FirstAsync();
WmsPurchaseH WmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(it => WmsPurchaseD.bill_id == it.id).FirstAsync(); WmsPurchaseH WmsPurchaseH = await _db.Queryable<WmsPurchaseH>().Where(it => WmsPurchaseD.bill_id == it.id).FirstAsync();

View File

@@ -207,10 +207,10 @@ namespace Tnb.WarehouseMgr
try try
{ {
await _db.Ado.BeginTranAsync(); await _db.Ado.BeginTranAsync();
if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any()) //if (_db.Queryable<WmsTempCode>().Where(it => input.BillId == it.require_id).Any())
{ //{
throw new AppFriendlyException("条码已生成", 500); // throw new AppFriendlyException("条码已生成", 500);
}; //};
WmsRawmatTransferinstockD WmsRawmatTransferinstockD = await _db.Queryable<WmsRawmatTransferinstockD>().Where(it => input.BillId == it.id).FirstAsync(); WmsRawmatTransferinstockD WmsRawmatTransferinstockD = await _db.Queryable<WmsRawmatTransferinstockD>().Where(it => input.BillId == it.id).FirstAsync();
WmsRawmatTransferinstockH WmsRawmatTransferinstockH = await _db.Queryable<WmsRawmatTransferinstockH>().Where(it => WmsRawmatTransferinstockD.bill_id == it.id).FirstAsync(); WmsRawmatTransferinstockH WmsRawmatTransferinstockH = await _db.Queryable<WmsRawmatTransferinstockH>().Where(it => WmsRawmatTransferinstockD.bill_id == it.id).FirstAsync();

View File

@@ -224,21 +224,25 @@ namespace Tnb.WarehouseMgr
{ {
#region #region
// 3-1 第三次改动 // 3-1 第三次改动
var YCLInnerTransfer = await _db.Queryable<BasFactoryConfig>().Where(p => p.key == "floor3CurInCacheLocation").FirstAsync(); endLocation = null;
Logger.Information($"当前发货区: {YCLInnerTransfer.value}"); // 正常情况下交替入,如果左右两侧缓存数量不一致 优先补充托盘数量少那一侧
if (YCLInnerTransfer.value == null || (YCLInnerTransfer.value != "3楼发货左" && YCLInnerTransfer.value != "3楼发货右")) List<BasLocation> locations_left = await _db.Queryable<BasLocation>()
{
throw new AppFriendlyException($"工厂配置->三楼出库暂存区当前入库分区 项配置错误需要配置值为【3楼发货左】或【3楼发货右】", 500);
}
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,a.carry_count+a.task_nums,a.location_code").ToListAsync(); .Where((a, b) => b.name == "3楼发货左").OrderBy("a.is_lock,a.is_use,a.carry_count+a.task_nums,a.location_code").ToListAsync();
List<BasLocation> locations_right = await _db.Queryable<BasLocation>()
endLocation = locations.FirstOrDefault(); .InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
.Where((a, b) => b.name == "3楼发货右").OrderBy("a.is_lock,a.is_use,a.carry_count+a.task_nums,a.location_code").ToListAsync();
await _db.Updateable<BasFactoryConfig>().SetColumns(r => r.value == (YCLInnerTransfer.value == "3楼发货左" ? "3楼发货右" : "3楼发货左")) decimal leftQty = locations_left.Sum(r => r.carry_count + r.task_nums);
.Where(r => r.key == "floor3CurInCacheLocation").ExecuteCommandAsync(); decimal rightQty = locations_right.Sum(r => r.carry_count + r.task_nums);
if (leftQty <= rightQty)
endLocation = locations_left.FirstOrDefault();
else
endLocation = locations_right.FirstOrDefault();
if (endLocation == null)
{
throw new AppFriendlyException($"载具{carry.carry_code}无法选到缓存区库位,请检查电梯缓存分区配置表", 500);
}
#endregion #endregion
} }
//人工发货 //人工发货

View File

@@ -114,12 +114,12 @@ namespace Tnb.WarehouseMgr
// 自动发货 // 自动发货
if (!input.isManual) if (!input.isManual)
{ {
endLocations = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").ToListAsync(); //endLocations = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").ToListAsync();
if (endLocations.Count < items_pretask.Count) //if (endLocations.Count < items_pretask.Count)
{ //{
throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500); // throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500);
} //}
} }
//人工发货 //人工发货
else else
@@ -145,18 +145,28 @@ namespace Tnb.WarehouseMgr
// 自动发货 // 自动发货
if (!input.isManual) if (!input.isManual)
{ {
endLocation = await _db.Queryable<BasLocation>().Where(r => _wareHouseService.GetFloor1OutstockLocation().Contains(r.id) && r.is_lock == 0 && r.is_use == "0").OrderBy("is_lock, task_nums, location_code").FirstAsync(); #region
// 3-1 第三次改动
endLocation = null;
// 正常情况下交替入,如果左右两侧缓存数量不一致 优先补充托盘数量少那一侧
List<BasLocation> locations_left = await _db.Queryable<BasLocation>()
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
.Where((a, b) => b.name == "3楼发货左").OrderBy("a.is_lock,a.is_use,a.carry_count+a.task_nums,a.location_code").ToListAsync();
List<BasLocation> locations_right = await _db.Queryable<BasLocation>()
.InnerJoin<WmsElevatorcacheArea>((a, b) => a.id == b.location_id)
.Where((a, b) => b.name == "3楼发货右").OrderBy("a.is_lock,a.is_use,a.carry_count+a.task_nums,a.location_code").ToListAsync();
decimal leftQty = locations_left.Sum(r => r.carry_count + r.task_nums);
decimal rightQty = locations_right.Sum(r => r.carry_count + r.task_nums);
if (leftQty <= rightQty)
endLocation = locations_left.FirstOrDefault();
else
endLocation = locations_right.FirstOrDefault();
if (endLocation == null) if (endLocation == null)
{ {
throw new AppFriendlyException("一楼没有足够的未锁定且空闲的出库工位", 500); throw new AppFriendlyException($"载具{carry.carry_code}无法选到缓存区库位,请检查电梯缓存分区配置表", 500);
}
List<BasLocation> endLocations_temp = await _db.Queryable<BasLocation>().Where(r => r.region_id == WmsWareHouseConst.REGION_CPOutstockCache_ID && r.is_lock == 0 && r.is_use == "0").ToListAsync();
if (endLocations_temp.Count < items_pretask.Count)
{
throw new AppFriendlyException($"三楼发货时,没有可用的暂存库位可以使用,需要下发任务{items_pretask.Count}条,可用的暂存库位只有{endLocations_temp.Count}条", 500);
} }
#endregion
} }
//人工发货 //人工发货
else else

View File

@@ -116,21 +116,23 @@ namespace Tnb.Common.Utils
{ {
Log.Information($"开始请求 {url} 请求参数: {JsonConvert.SerializeObject(pars)}"); Log.Information($"开始请求 {url} 请求参数: {JsonConvert.SerializeObject(pars)}");
} }
HttpClient Client = new HttpClient(); using (HttpClient Client = new HttpClient())
var reqUri = url;
if (pars?.Count > 0)
{ {
reqUri = QueryHelpers.AddQueryString(url, pars); var reqUri = url;
//await Console.Out.WriteLineAsync(reqUri); if (pars?.Count > 0)
{
reqUri = QueryHelpers.AddQueryString(url, pars);
//await Console.Out.WriteLineAsync(reqUri);
}
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var respBody = await Client.GetAsync(reqUri);
var result = await respBody.Content.ReadAsStringAsync();
if (isLog)
{
Log.Information($"请求 {url} 参数: {JsonConvert.SerializeObject(pars)} 结果: {result}");
}
return result;
} }
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var respBody = await Client.GetAsync(reqUri);
var result = await respBody.Content.ReadAsStringAsync();
if (isLog)
{
Log.Information($"请求 {url} 结果: {result}");
}
return result;
} }
public static async Task<string> GetAsync(string url, Dictionary<string, string> headers = null, Dictionary<string, string> pars = null) public static async Task<string> GetAsync(string url, Dictionary<string, string> headers = null, Dictionary<string, string> pars = null)