优化
This commit is contained in:
@@ -63,7 +63,11 @@ namespace Tnb.ProductionMgr
|
|||||||
// 二楼料架配送
|
// 二楼料架配送
|
||||||
private Timer? Floor2RackDeliverytimer;
|
private Timer? Floor2RackDeliverytimer;
|
||||||
|
|
||||||
public static SemaphoreSlim s_taskExecuteRackDelivery = new(1);
|
public static SemaphoreSlim s_taskExecuteFloor2UpMachinecodetimer = new(1);
|
||||||
|
public static SemaphoreSlim s_task送空托到上升降区 = new(1);
|
||||||
|
public static SemaphoreSlim s_task送满托到下升降区 = new(1);
|
||||||
|
public static SemaphoreSlim s_task移走上升降区未生成预任务且满托的料架 = new(1);
|
||||||
|
public static SemaphoreSlim s_task移走下升降区未生成预任务且空托的料架 = new(1);
|
||||||
|
|
||||||
private readonly RedisData _redisData;
|
private readonly RedisData _redisData;
|
||||||
private readonly IPrdInstockService _prdInstockService;
|
private readonly IPrdInstockService _prdInstockService;
|
||||||
@@ -874,61 +878,68 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
// 上升降机
|
// 上升降机
|
||||||
private async void Floor2UpMachinecode(object args)
|
private async void Floor2UpMachinecode(object args)
|
||||||
{
|
{
|
||||||
|
string barcode = await Floor2UpDownMachinecode_GetTag<string>(MechanicalArmConsts.上升降机条码);
|
||||||
|
if (string.IsNullOrEmpty(barcode))
|
||||||
|
{
|
||||||
|
LoggerFloor2UpDownMachine.LogError($@"【上升降机】未取到条码数据");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
string barcode = await Floor2UpDownMachinecode_GetTag<string>(MechanicalArmConsts.上升降机条码);
|
|
||||||
if (string.IsNullOrEmpty(barcode))
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogError($@"【上升降机】未取到条码数据");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 读取上升降机的左右料架区配置
|
|
||||||
string[] configs = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
|
||||||
// 左右料架区配置
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
|
||||||
.Where(r => configs.Contains(r.name) && r.agvconfirm == 1).ToList();
|
|
||||||
|
|
||||||
// 是否可以放货
|
|
||||||
if (WmsMechanicalArmHs.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】目前没有可以放货的料架区(机械臂空托送到信号为false)");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果条码已被绑定
|
|
||||||
if (WmsMechanicalArmHs.Where(r => !string.IsNullOrEmpty(r.barcodes) && r.barcodes.Contains(barcode)).Count() > 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】条码{barcode}已被绑定");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】扫描到有效条码 {barcode}");
|
|
||||||
|
|
||||||
// 获取下到输送线9和10的未完成的出库单
|
|
||||||
List<WmsEmptyOutstockH> WmsEmptyOutstockHs = db.Queryable<WmsEmptyOutstockH>()
|
|
||||||
.InnerJoin<WmsEmptyOutstockD>((a, b) => a.id == b.bill_id)
|
|
||||||
.Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
|
|
||||||
&& b.carry_code == barcode).ToList();
|
|
||||||
|
|
||||||
if (WmsEmptyOutstockHs.Count() == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】未找到条码{barcode}的输送线为9、10的出库单");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 出库单
|
|
||||||
WmsEmptyOutstockH WmsEmptyOutstockH = WmsEmptyOutstockHs.OrderByDescending(r => r.create_time).First();
|
|
||||||
|
|
||||||
// 找到条码在的出库单
|
|
||||||
string ckdCode = WmsEmptyOutstockH.bill_code;
|
|
||||||
int ckdRemainBindRackNum = (int)(WmsEmptyOutstockH.remainbindracknum != null ? WmsEmptyOutstockH.remainbindracknum : 0);
|
|
||||||
|
|
||||||
//扫描到的料箱 a.对应出库单的b.码垛计数未达到满托数量的料架区
|
|
||||||
IEnumerable<WmsMechanicalArmH> targetConfigs = WmsMechanicalArmHs.Where(r => r.outbill == ckdCode && r.stackingcount < r.maxnum);
|
|
||||||
|
|
||||||
WmsMechanicalArmH target;
|
|
||||||
await db.Ado.BeginTranAsync();
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
s_taskExecuteFloor2UpMachinecodetimer.Wait();
|
||||||
|
|
||||||
|
// 读取上升降机的左右料架区配置
|
||||||
|
string[] configs = new string[2] { "二楼上升降机机械臂左", "二楼上升降机机械臂右" };
|
||||||
|
// 左右料架区配置
|
||||||
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>()
|
||||||
|
.Where(r => configs.Contains(r.name) && r.agvconfirm == 1).ToList();
|
||||||
|
|
||||||
|
// 是否可以放货
|
||||||
|
if (WmsMechanicalArmHs.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】目前没有可以放货的料架区(料架区一个料架都没有,如果实际有料架说明系统缓存表与实际不对应,需要重置缓存表信息)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果条码已被绑定
|
||||||
|
if (WmsMechanicalArmHs.Where(r => !string.IsNullOrEmpty(r.barcodes) && r.barcodes.Contains(barcode)).Count() > 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】条码{barcode}已被绑定");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LoggerFloor2UpDownMachine.LogInformation($@"【上升降机】扫描到有效条码 {barcode}");
|
||||||
|
|
||||||
|
// 获取下到输送线9和10的未完成的出库单
|
||||||
|
List<WmsEmptyOutstockH> WmsEmptyOutstockHs = db.Queryable<WmsEmptyOutstockH>()
|
||||||
|
.InnerJoin<WmsEmptyOutstockD>((a, b) => a.id == b.bill_id)
|
||||||
|
.Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
|
||||||
|
&& b.carry_code == barcode).ToList();
|
||||||
|
|
||||||
|
string ss = db.Queryable<WmsEmptyOutstockH>()
|
||||||
|
.InnerJoin<WmsEmptyOutstockD>((a, b) => a.id == b.bill_id)
|
||||||
|
.Where((a, b) => (a.location_id == "32609238573589" || a.location_id == "32609229889045") && (string.IsNullOrEmpty(a.bindrackcomplete) || a.bindrackcomplete != WmsWareHouseConst.BILLSTATUS_COMPLETE_ID)
|
||||||
|
&& b.carry_code == barcode).ToSqlString();
|
||||||
|
|
||||||
|
if (WmsEmptyOutstockHs.Count() == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2UpDownMachine.LogWarning($@"【上升降机】未找到条码{barcode}的输送线为9、10的出库单");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 出库单
|
||||||
|
WmsEmptyOutstockH WmsEmptyOutstockH = WmsEmptyOutstockHs.OrderByDescending(r => r.create_time).First();
|
||||||
|
|
||||||
|
// 找到条码在的出库单
|
||||||
|
string ckdCode = WmsEmptyOutstockH.bill_code;
|
||||||
|
int ckdRemainBindRackNum = (int)(WmsEmptyOutstockH.remainbindracknum != null ? WmsEmptyOutstockH.remainbindracknum : 0);
|
||||||
|
|
||||||
|
//扫描到的料箱 a.对应出库单的b.码垛计数未达到满托数量的料架区
|
||||||
|
IEnumerable<WmsMechanicalArmH> targetConfigs = WmsMechanicalArmHs.Where(r => r.outbill == ckdCode && r.stackingcount < r.maxnum);
|
||||||
|
|
||||||
|
WmsMechanicalArmH target;
|
||||||
|
await db.Ado.BeginTranAsync();
|
||||||
// 找不到对应的料架
|
// 找不到对应的料架
|
||||||
if (targetConfigs.Count() == 0)
|
if (targetConfigs.Count() == 0)
|
||||||
{
|
{
|
||||||
@@ -1014,10 +1025,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
await _wmsCarryBindService.CarryBindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
await _wmsCarryBindService.CarryBindFloor2UpDownMachine(carryBindFloor2UpDownMachineInput);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await db.Ado.CommitTranAsync();
|
await db.Ado.CommitTranAsync();
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -1025,67 +1033,13 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
LoggerFloor2UpDownMachine.LogError(ex.StackTrace);
|
LoggerFloor2UpDownMachine.LogError(ex.StackTrace);
|
||||||
await db.Ado.RollbackTranAsync();
|
await db.Ado.RollbackTranAsync();
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
s_taskExecuteFloor2UpMachinecodetimer.Release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 检查机械臂料架区信号(下升降机满托1送到)
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
//public async Task<bool> 检查机械臂料架区信号_下升降机满托1送到()
|
|
||||||
//{
|
|
||||||
// using (var db = _repository.AsSugarClient().CopyNew())
|
|
||||||
// {
|
|
||||||
// string[] configs_upMachine = new string[2] { "二楼下升降机机械臂左", "二楼下升降机机械臂右" };
|
|
||||||
|
|
||||||
// // 找到AGV已到货,没有机械臂确认的数据
|
|
||||||
// ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>()
|
|
||||||
// .Where(r => r.agvconfirm == 1 && r.mechanicalconfirm == 0 && configs_upMachine.Contains(r.name));
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【检查机械臂料架区信号_下升降机满托1送到】 {WmsMechanicalArmHsuagar.Count()}");
|
|
||||||
|
|
||||||
// foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHsuagar.ToList())
|
|
||||||
// {
|
|
||||||
// int LXCount = db.Queryable<WmsCarryD>().Where(a => a.carry_id == wmsMechanicalArmH.rackid).Count();
|
|
||||||
|
|
||||||
// bool result = await Floor2UpDownMachinecode_SetTag($"下升降机满托{wmsMechanicalArmH.stackingposition}数量", LXCount.ToString());
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【送满托到下升降区】设定下升降机满托{wmsMechanicalArmH.stackingposition}满托数量为 {LXCount} 结果为 {result}");
|
|
||||||
// if (!result)
|
|
||||||
// {
|
|
||||||
// throw new Exception($@"【送满托到下升降区】设定升降机满托{wmsMechanicalArmH.stackingposition}满托数量为 {LXCount} 结果为 {result}");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 尝试写入满托送到信号
|
|
||||||
// bool result下升降机空托送到 = await Floor2UpDownMachinecode_SetTag($"下升降机满托{wmsMechanicalArmH.stackingposition}送到", "true");
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【送满托到下升降区】回写 下升降机满托{wmsMechanicalArmH.stackingposition}送到 结果为{result下升降机空托送到}");
|
|
||||||
// if (!result下升降机空托送到)
|
|
||||||
// {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // 绑定料架
|
|
||||||
// await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
|
||||||
// {
|
|
||||||
// mechanicalconfirm = 1,
|
|
||||||
// maxnum = LXCount
|
|
||||||
// }).Where(r => r.id == wmsMechanicalArmH.id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【送满托到下升降区】 料架{wmsMechanicalArmH.rackid}下的料箱开始生成预任务");
|
|
||||||
// bool pretask_result = await _wareHouseService.Floor2EmptyCarryCreateZZCPretask(wmsMechanicalArmH.rackid);
|
|
||||||
// if (pretask_result)
|
|
||||||
// {
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【送满托到下升降区】 料架{wmsMechanicalArmH.rackid}下的料箱生成预任务完成");
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// LoggerFloor2UpDownMachine.LogInformation($@"【送满托到下升降区】 料架{wmsMechanicalArmH.rackid}下的料箱生成预任务失败");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 二楼机械臂信号对应机械臂字典
|
// 二楼机械臂信号对应机械臂字典
|
||||||
Dictionary<string, string> floor2mechanicalAtmDic = new Dictionary<string, string>()
|
Dictionary<string, string> floor2mechanicalAtmDic = new Dictionary<string, string>()
|
||||||
{
|
{
|
||||||
@@ -1124,103 +1078,109 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
|
try
|
||||||
// 找到没有绑定料架的且库位未锁定的料架区
|
{
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
await s_task送空托到上升降区.WaitAsync();
|
||||||
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
// 找到没有绑定料架的且库位未锁定的料架区
|
||||||
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
||||||
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
||||||
|
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
||||||
|
|
||||||
if (WmsMechanicalArmHs.Count() == 0)
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
||||||
|
|
||||||
|
if (WmsMechanicalArmHs.Count() == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 料架区
|
||||||
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
|
{
|
||||||
|
// 找到占用且未锁定的库位上的空料架
|
||||||
|
ISugarQueryable<BasLocation> rackStartLocations =
|
||||||
|
db.Queryable<BasLocation>()
|
||||||
|
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
||||||
|
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id)
|
||||||
|
.Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && string.IsNullOrEmpty(c.id)
|
||||||
|
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy(a => a.id).Take(1);
|
||||||
|
|
||||||
|
if (rackStartLocations.Count() == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 暂存仓中没有可用的空料架 {rackStartLocations.ToSqlString()}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
||||||
|
|
||||||
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
|
|
||||||
|
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
|
|
||||||
|
if (startPoints.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
||||||
|
|
||||||
|
if (endPoints.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
|
if (wmsCarryHs.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wmsCarryHs.Count > 1)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空料架
|
||||||
|
WmsCarryH targetCarry = wmsCarryHs[0];
|
||||||
|
|
||||||
|
WmsPointH startPoint = startPoints.First();
|
||||||
|
WmsPointH endPoint = endPoints.First();
|
||||||
|
|
||||||
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
|
{
|
||||||
|
is_lock = 1
|
||||||
|
}).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
||||||
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
|
{
|
||||||
|
is_lock = 1
|
||||||
|
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
||||||
|
List<WmsPointH> points = new List<WmsPointH>();
|
||||||
|
points.Add(startPoint);
|
||||||
|
points.Add(endPoint);
|
||||||
|
|
||||||
|
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
||||||
|
if (!result.Item1)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
// 料架区
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
|
||||||
{
|
{
|
||||||
// 找到占用且未锁定的库位上的空料架
|
s_task送空托到上升降区.Release();
|
||||||
ISugarQueryable<BasLocation> rackStartLocations =
|
|
||||||
db.Queryable<BasLocation>()
|
|
||||||
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
|
||||||
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id)
|
|
||||||
.Where((a, b, c) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && string.IsNullOrEmpty(c.id)
|
|
||||||
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy(a => a.id).Take(1);
|
|
||||||
|
|
||||||
if (rackStartLocations.Count() == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送空托到上升降区】 暂存仓中没有可用的空料架 {rackStartLocations.ToSqlString()}");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
|
||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
if (wmsCarryHs.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wmsCarryHs.Count > 1)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送空托到上升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 空料架
|
|
||||||
WmsCarryH targetCarry = wmsCarryHs[0];
|
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
|
||||||
{
|
|
||||||
is_lock = 1
|
|
||||||
}).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
|
||||||
{
|
|
||||||
is_lock = 1
|
|
||||||
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
|
||||||
//await _repository.AsSugarClient().Updateable<WmsPointH>().SetColumns(r => new WmsPointH
|
|
||||||
//{
|
|
||||||
// is_lock = 1
|
|
||||||
//}).Where(r => r.id == endPoint.id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送空托到上升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
points.Add(startPoint);
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
|
||||||
if (!result.Item1)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
//throw new Exception("【送空托到上升降区】 未成功生成预任务");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1248,129 +1208,134 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
return false;
|
return false;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
// 找到没有绑定料架的且库位未锁定的料架区
|
try
|
||||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
{
|
||||||
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
await s_task送满托到下升降区.WaitAsync();
|
||||||
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
// 找到没有绑定料架的且库位未锁定的料架区
|
||||||
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHsuagar = db.Queryable<WmsMechanicalArmH>().
|
||||||
|
InnerJoin<WmsPointH>((a, b) => a.point_id == b.id)
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
.InnerJoin<BasLocation>((a, b, c) => b.location_id == c.id)
|
||||||
|
.Where((a, b, c) => string.IsNullOrEmpty(a.rackcode) && c.is_lock == 0 && configs_upMachine.Contains(a.name));
|
||||||
if (WmsMechanicalArmHs.Count() == 0)
|
|
||||||
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = WmsMechanicalArmHsuagar.ToList();
|
||||||
|
|
||||||
|
if (WmsMechanicalArmHs.Count() == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 料架区
|
||||||
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
|
{
|
||||||
|
// 找到占用且未锁定的库位上的满料架且料架中的料箱是空的
|
||||||
|
List<BasLocation> rackStartLocations =
|
||||||
|
db.Queryable<BasLocation>()
|
||||||
|
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
||||||
|
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id) // 有料箱
|
||||||
|
.LeftJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
||||||
|
.Where((a, b, c, d) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && !string.IsNullOrEmpty(c.id)
|
||||||
|
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy((a, b, c, d) => d.id).Select((a, b, c, d) => new // 关联载具物料明细表
|
||||||
|
{
|
||||||
|
basLocation = a,
|
||||||
|
WmsCarryCode_id = d.id
|
||||||
|
}).ToList().GroupBy(r => r.basLocation.location_code).Select(r =>
|
||||||
|
{
|
||||||
|
var item = r.FirstOrDefault();
|
||||||
|
// 前面通过OrderBy(d => d.id)对WmsCarryCode_id进行了排序 那么如果第一行有数据则说明存在非空料箱
|
||||||
|
if (!string.IsNullOrEmpty(item.WmsCarryCode_id))
|
||||||
|
{
|
||||||
|
return new BasLocation();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 进这里说明库位下的料箱都为空
|
||||||
|
return item.basLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
// 筛选非空库位数据
|
||||||
|
.Where(r => !string.IsNullOrEmpty(r.location_code)).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
if (rackStartLocations.Count() == 0)
|
||||||
|
{
|
||||||
|
//LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 暂存仓中没有可用的满料架 {rackStartLocations.ToSqlString()}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
||||||
|
|
||||||
|
BasLocation startLocation = rackStartLocations.First();
|
||||||
|
|
||||||
|
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
|
|
||||||
|
if (startPoints.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
||||||
|
|
||||||
|
if (endPoints.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
||||||
|
if (wmsCarryHs.Count == 0)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wmsCarryHs.Count > 1)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 满料架
|
||||||
|
WmsCarryH targetCarry = wmsCarryHs[0];
|
||||||
|
|
||||||
|
WmsPointH startPoint = startPoints.First();
|
||||||
|
WmsPointH endPoint = endPoints.First();
|
||||||
|
|
||||||
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
|
{
|
||||||
|
is_lock = 1
|
||||||
|
}).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
||||||
|
{
|
||||||
|
is_lock = 1
|
||||||
|
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
||||||
|
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
||||||
|
List<WmsPointH> points = new List<WmsPointH>();
|
||||||
|
points.Add(startPoint);
|
||||||
|
points.Add(endPoint);
|
||||||
|
|
||||||
|
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
||||||
|
if (!result.Item1)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 无需补充料架区 {WmsMechanicalArmHsuagar.ToSqlString()}");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
// 料架区
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
|
||||||
{
|
{
|
||||||
//bool 下升降机请求送满托 = await Floor2UpDownMachinecode_GetTag<bool>($"下升降机请求送满托{wmsMechanicalArmH.stackingposition}");
|
s_task送满托到下升降区.Release();
|
||||||
//if (!下升降机请求送满托)
|
|
||||||
//{
|
|
||||||
// LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 料架区 {wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 下升降机请求送满托{wmsMechanicalArmH.stackingposition}信号不为true");
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 找到占用且未锁定的库位上的满料架且料架中的料箱是空的
|
|
||||||
List<BasLocation> rackStartLocations =
|
|
||||||
db.Queryable<BasLocation>()
|
|
||||||
.InnerJoin<WmsCarryH>((a, b) => a.id == b.location_id)
|
|
||||||
.LeftJoin<WmsCarryD>((a, b, c) => b.id == c.carry_id) // 有料箱
|
|
||||||
.LeftJoin<WmsCarryCode>((a, b, c, d) => c.membercarry_id == d.carry_id)
|
|
||||||
.Where((a, b, c, d) => a.wh_id == "33780009364245" && a.is_use == "1" && a.is_lock == 0 && !string.IsNullOrEmpty(c.id)
|
|
||||||
&& b.carrystd_id == WmsWareHouseConst.CARRY_LJSTD_ID).OrderBy((a, b, c, d) => d.id).Select((a, b, c, d) => new // 关联载具物料明细表
|
|
||||||
{
|
|
||||||
basLocation = a,
|
|
||||||
WmsCarryCode_id = d.id
|
|
||||||
}).ToList().GroupBy(r => r.basLocation.location_code).Select(r =>
|
|
||||||
{
|
|
||||||
var item = r.FirstOrDefault();
|
|
||||||
// 前面通过OrderBy(d => d.id)对WmsCarryCode_id进行了排序 那么如果第一行有数据则说明存在非空料箱
|
|
||||||
if (!string.IsNullOrEmpty(item.WmsCarryCode_id))
|
|
||||||
{
|
|
||||||
return new BasLocation();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 进这里说明库位下的料箱都为空
|
|
||||||
return item.basLocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
// 筛选非空库位数据
|
|
||||||
.Where(r => !string.IsNullOrEmpty(r.location_code)).ToList();
|
|
||||||
|
|
||||||
|
|
||||||
if (rackStartLocations.Count() == 0)
|
|
||||||
{
|
|
||||||
//LoggerFloor2RackDelivery.LogWarning($"【送满托到下升降区】 暂存仓中没有可用的满料架 {rackStartLocations.ToSqlString()}");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 即将补充料架区{wmsMechanicalArmH.name}");
|
|
||||||
|
|
||||||
BasLocation startLocation = rackStartLocations.First();
|
|
||||||
|
|
||||||
List<WmsPointH> startPoints = db.Queryable<WmsPointH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
|
|
||||||
if (startPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起始库位{startLocation.location_code}未在点位表维护对应的点位");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsPointH> endPoints = db.Queryable<WmsPointH>().Where(r => r.id == wmsMechanicalArmH.point_id).ToList();
|
|
||||||
|
|
||||||
if (endPoints.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 终点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<WmsCarryH> wmsCarryHs = db.Queryable<WmsCarryH>().Where(r => r.location_id == startLocation.id).ToList();
|
|
||||||
if (wmsCarryHs.Count == 0)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起点{startLocation.id} {startLocation.location_code}上找不到料架");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wmsCarryHs.Count > 1)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError($"【送满托到下升降区】 起点{startLocation.id} {startLocation.location_code}上存在多个料架");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 满料架
|
|
||||||
WmsCarryH targetCarry = wmsCarryHs[0];
|
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
|
||||||
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
|
||||||
{
|
|
||||||
is_lock = 1
|
|
||||||
}).Where(r => r.id == startLocation.id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
await db.Updateable<BasLocation>().SetColumns(r => new BasLocation
|
|
||||||
{
|
|
||||||
is_lock = 1
|
|
||||||
}).Where(r => r.id == endPoint.location_id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【送满托到下升降区】 开始生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {targetCarry.carry_code}");
|
|
||||||
List<WmsPointH> points = new List<WmsPointH>();
|
|
||||||
points.Add(startPoint);
|
|
||||||
points.Add(endPoint);
|
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, targetCarry.id, targetCarry.carry_code, LoggerFloor2RackDelivery);
|
|
||||||
if (!result.Item1)
|
|
||||||
{
|
|
||||||
throw new Exception("【送满托到下升降区】 未成功生成预任务");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1401,24 +1366,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
// 读取上升降机的左右料架区配置
|
try
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList();
|
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
|
||||||
{
|
{
|
||||||
await s_taskExecuteRackDelivery.WaitAsync();
|
await s_task移走上升降区未生成预任务且满托的料架.WaitAsync();
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
// 读取上升降机的左右料架区配置
|
||||||
try
|
|
||||||
{
|
|
||||||
//// 判断是否 上升降机请求取满托
|
|
||||||
//bool 上升降机请求取满托 = await Floor2UpDownMachinecode_GetTag<bool>($"上升降机请求取满托{wmsMechanicalArmH.stackingposition}");
|
|
||||||
//LoggerFloor2RackDelivery.LogError($"【移走上升降区满托的料架】上升降机请求取满托{wmsMechanicalArmH.stackingposition} {上升降机请求取满托}");
|
|
||||||
//if (!上升降机请求取满托)
|
|
||||||
//{
|
|
||||||
// continue;
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.stackingcount == r.maxnum && r.maxnum != 0 && !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name) && r.mechanicalconfirm == 1).ToList();
|
||||||
|
|
||||||
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
|
{
|
||||||
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
iscreatepretask = 1
|
iscreatepretask = 1
|
||||||
@@ -1466,34 +1424,27 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
//await db.Updateable<WmsPointH>(r => new WmsPointH
|
|
||||||
//{
|
|
||||||
// is_lock = 1
|
|
||||||
//}).Where(r => r.id == endPoint.id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
||||||
if (!result.Item1)
|
if (!result.Item1)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogInformation($"未成功生成预任务");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 成功生成预任务 {result.Item2}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走上升降区满托的料架】 成功生成预任务 {result.Item2}");
|
||||||
|
|
||||||
s_taskExecuteRackDelivery.Release();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
|
||||||
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
s_taskExecuteRackDelivery.Release();
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
s_task移走上升降区未生成预任务且满托的料架.Release();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1524,24 +1475,18 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
#endregion
|
#endregion
|
||||||
using (var db = _repository.AsSugarClient().CopyNew())
|
using (var db = _repository.AsSugarClient().CopyNew())
|
||||||
{
|
{
|
||||||
// 读取下升降机的左右料架区配置
|
try
|
||||||
|
{
|
||||||
|
await s_task移走下升降区未生成预任务且空托的料架.WaitAsync();
|
||||||
|
|
||||||
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
// 读取下升降机的左右料架区配置
|
||||||
|
|
||||||
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
List<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => !string.IsNullOrEmpty(r.rackcode) && r.iscreatepretask == 0 && configs_upMachine.Contains(r.name)).ToList();
|
||||||
{
|
|
||||||
try
|
foreach (WmsMechanicalArmH wmsMechanicalArmH in WmsMechanicalArmHs)
|
||||||
{
|
{
|
||||||
//// 判断是否 上升降机请求取满托
|
|
||||||
//bool 下升降机请求取空托 = await Floor2UpDownMachinecode_GetTag<bool>($"下升降机请求取空托{wmsMechanicalArmH.stackingposition}");
|
|
||||||
//LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】下升降机请求取空托{wmsMechanicalArmH.stackingposition} {下升降机请求取空托}" );
|
|
||||||
//if (!下升降机请求取空托)
|
|
||||||
//{
|
|
||||||
// return false;
|
|
||||||
//}
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成 {wmsMechanicalArmH.point_code} {wmsMechanicalArmH.outbill} {wmsMechanicalArmH.barcodes}");
|
||||||
|
|
||||||
|
|
||||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||||
{
|
{
|
||||||
iscreatepretask = 1
|
iscreatepretask = 1
|
||||||
@@ -1554,7 +1499,7 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
if (startPoints.Count == 0)
|
if (startPoints.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 起点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 起点{wmsMechanicalArmH.point_id} {wmsMechanicalArmH.point_code}未在点位表维护对应的点位");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
WmsPointH startPoint = startPoints.First();
|
WmsPointH startPoint = startPoints.First();
|
||||||
@@ -1567,8 +1512,8 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
|
|
||||||
if (rackEndLocations.Count() == 0)
|
if (rackEndLocations.Count() == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogWarning($"【移走下升降区空托的料架】 暂存仓中没有可用的空库位 {rackEndLocations.ToSqlString()}");
|
//LoggerFloor2RackDelivery.LogWarning($"【移走下升降区空托的料架】 暂存仓中没有可用的空库位 {rackEndLocations.ToSqlString()}");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
BasLocation endLocation = rackEndLocations.First();
|
BasLocation endLocation = rackEndLocations.First();
|
||||||
@@ -1578,13 +1523,12 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
if (endPoints.Count == 0)
|
if (endPoints.Count == 0)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 终点库位{endLocation.location_code}未在点位表维护对应的点位");
|
LoggerFloor2RackDelivery.LogError($"【移走下升降区空托的料架】 终点库位{endLocation.location_code}未在点位表维护对应的点位");
|
||||||
return false;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
WmsPointH endPoint = endPoints.First();
|
WmsPointH endPoint = endPoints.First();
|
||||||
points.Add(endPoint);
|
points.Add(endPoint);
|
||||||
|
|
||||||
|
|
||||||
// 解除绑定料箱到料架
|
// 解除绑定料箱到料架
|
||||||
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
CarryBindFloor2UpDownMachineInput carryBindFloor2UpDownMachineInput = new() { };
|
||||||
carryBindFloor2UpDownMachineInput.carry_id = wmsMechanicalArmH.rackid;
|
carryBindFloor2UpDownMachineInput.carry_id = wmsMechanicalArmH.rackid;
|
||||||
@@ -1597,38 +1541,36 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
{
|
{
|
||||||
is_lock = 1
|
is_lock = 1
|
||||||
}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
}).Where(r => r.id == endLocation.id).ExecuteCommandAsync();
|
||||||
//await db.Updateable<WmsPointH>(r => new WmsPointH
|
|
||||||
//{
|
|
||||||
// is_lock = 1
|
|
||||||
//}).Where(r => r.id == endPoint.id).ExecuteCommandAsync();
|
|
||||||
|
|
||||||
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 开始执行预任务生成: 料架区为{wmsMechanicalArmH.name}{wmsMechanicalArmH.stackingposition} 料架为{wmsMechanicalArmH.rackcode}");
|
||||||
|
|
||||||
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
Tuple<bool, WmsPretaskH> result = await createPretask(points, wmsMechanicalArmH.rackid, wmsMechanicalArmH.rackcode, LoggerFloor2RackDelivery);
|
||||||
if (!result.Item1)
|
if (!result.Item1)
|
||||||
{
|
{
|
||||||
throw new Exception("未成功生成预任务");
|
LoggerFloor2RackDelivery.LogInformation($"【移走下升降区空托的料架】 未成功生成预任务 起点{startPoint.point_code} 终点{endPoint.point_code} 料架 {wmsMechanicalArmH.rackcode}");
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
return true;
|
||||||
{
|
}
|
||||||
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
catch (Exception ex)
|
||||||
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
{
|
||||||
}
|
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
||||||
|
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
s_task移走下升降区未生成预任务且空托的料架.Release();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 料架配送
|
// 料架配送
|
||||||
private async void Floor2RackDelivery(object args)
|
private async void Floor2RackDelivery(object args)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 检查机械臂料架区信号(下升降机满托1送到)
|
|
||||||
//await 检查机械臂料架区信号_下升降机满托1送到();
|
|
||||||
|
|
||||||
// 送空托到上升降区
|
// 送空托到上升降区
|
||||||
await 送空托到上升降区();
|
await 送空托到上升降区();
|
||||||
|
|
||||||
@@ -1642,17 +1584,14 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
await 移走下升降区未生成预任务且空托的料架();
|
await 移走下升降区未生成预任务且空托的料架();
|
||||||
|
|
||||||
_ = _wareHouseService.GenTaskExecute();
|
_ = _wareHouseService.GenTaskExecute();
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
LoggerFloor2RackDelivery.LogError(ex.ToString());
|
||||||
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
LoggerFloor2RackDelivery.LogError(ex.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
// 上下升降机生成预任务(补充料架、上升降机取货到料架、上升降机满托运走,下升降机拿货到输送线、下升降机空托运走)
|
||||||
private async Task<Tuple<bool, WmsPretaskH>> createPretask(List<WmsPointH> points, string carry_id, string carry_code, ILogger logger)
|
private async Task<Tuple<bool, WmsPretaskH>> createPretask(List<WmsPointH> points, string carry_id, string carry_code, ILogger logger)
|
||||||
{
|
{
|
||||||
@@ -1724,15 +1663,17 @@ where carry_code = '{coderesult}' and status = '{WmsWareHouseConst.TASK_BILL_STA
|
|||||||
["Value"] = value,
|
["Value"] = value,
|
||||||
};
|
};
|
||||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
|
|
||||||
|
return result.Contains("Ok");
|
||||||
|
|
||||||
// 测试
|
// 测试
|
||||||
|
//string DevName = "东面提升机输送线";
|
||||||
|
|
||||||
//JObject valueJson = new JObject();
|
//JObject valueJson = new JObject();
|
||||||
//valueJson["Value"] = value;
|
//valueJson["Value"] = value;
|
||||||
|
|
||||||
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
//return true;
|
//return true;
|
||||||
|
|
||||||
return result.Contains("Ok");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -716,15 +716,17 @@ namespace Tnb.WarehouseMgr
|
|||||||
["Value"] = value,
|
["Value"] = value,
|
||||||
};
|
};
|
||||||
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
string result = await HttpClientHelper.GetRequestAsync(_eleCtlCfg.WriteTagUrl, dicCommand);
|
||||||
|
|
||||||
|
return result.Contains("Ok");
|
||||||
|
|
||||||
// 测试
|
// 测试
|
||||||
|
//string DevName = "东面提升机输送线";
|
||||||
|
|
||||||
//JObject valueJson = new JObject();
|
//JObject valueJson = new JObject();
|
||||||
//valueJson["Value"] = value;
|
//valueJson["Value"] = value;
|
||||||
|
|
||||||
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
//bool res = await _redisData.HSet(DevName, tag, valueJson.ToString());
|
||||||
//return true;
|
//return true;
|
||||||
|
|
||||||
return result.Contains("Ok");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -746,7 +748,8 @@ namespace Tnb.WarehouseMgr
|
|||||||
//获取所有未下发的预任务申请
|
//获取所有未下发的预任务申请
|
||||||
Logger.Information("【GenTaskExecute】 开始获取未下发的预任务...");
|
Logger.Information("【GenTaskExecute】 开始获取未下发的预任务...");
|
||||||
|
|
||||||
ISugarQueryable<WmsPretaskH> sugarQueryable = db.Queryable<WmsPretaskH>().InnerJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
ISugarQueryable<WmsPretaskH> sugarQueryable = db.Queryable<WmsPretaskH>()
|
||||||
|
.LeftJoin<WmsCarryH>((a, b) => a.startlocation_id == b.location_id && a.carry_id == b.id)
|
||||||
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
.InnerJoin<WmsAreaH>((a, b, c) => a.area_id == c.id)
|
||||||
.InnerJoin<BasLocation>((a, b, c, d) => a.endlocation_id == d.id && d.is_use == "0")
|
.InnerJoin<BasLocation>((a, b, c, d) => a.endlocation_id == d.id && d.is_use == "0")
|
||||||
.Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && !string.IsNullOrWhiteSpace(a.startlocation_id))
|
.Where(a => a.status == WmsWareHouseConst.PRETASK_BILL_STATUS_DXF_ID && !string.IsNullOrWhiteSpace(a.startlocation_id))
|
||||||
@@ -2481,10 +2484,10 @@ namespace Tnb.WarehouseMgr
|
|||||||
carry_code = wmsCarryH.carry_code;
|
carry_code = wmsCarryH.carry_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(carry_id))
|
//if (string.IsNullOrEmpty(carry_id))
|
||||||
{
|
//{
|
||||||
throw new AppFriendlyException("起点库位上没有载具", 500);
|
// throw new AppFriendlyException("起点库位上没有载具", 500);
|
||||||
}
|
//}
|
||||||
|
|
||||||
if (input.visualDevInput != null)
|
if (input.visualDevInput != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -316,6 +316,11 @@ namespace Tnb.WarehouseMgr
|
|||||||
throw new ArgumentNullException(nameof(input));
|
throw new ArgumentNullException(nameof(input));
|
||||||
}
|
}
|
||||||
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == input.carryIds[0]).SingleAsync();
|
WmsCarryCode wmsCarryCode = await _db.Queryable<WmsCarryCode>().Where(r => r.carry_id == input.carryIds[0]).SingleAsync();
|
||||||
|
if (wmsCarryCode == null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning($"【ModifyAsync】载具{input.carryIds[0]}没有绑定物料条码");
|
||||||
|
return;
|
||||||
|
}
|
||||||
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCode.codeqty })
|
bool isOk = await _db.Updateable<WmsMaterialTransferD>().SetColumns(it => new WmsMaterialTransferD { yzqty = it.yzqty + wmsCarryCode.codeqty })
|
||||||
.Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
.Where(it => it.id == input.requireId).ExecuteCommandHasChangeAsync();
|
||||||
if (!isOk)
|
if (!isOk)
|
||||||
|
|||||||
Reference in New Issue
Block a user