二楼下升降机机械手边调度逻辑
This commit is contained in:
@@ -440,6 +440,12 @@ namespace Tnb.WarehouseMgr
|
||||
/// <returns></returns>
|
||||
public async Task<bool> Floor2MechanicalComplete(WmsDistaskH disTask, string action)
|
||||
{
|
||||
List<string> rackAreaPoints = new List<string>();
|
||||
// 二楼料架区点位
|
||||
rackAreaPoints.Add("AS01");
|
||||
rackAreaPoints.Add("AS02");
|
||||
rackAreaPoints.Add("AX01");
|
||||
rackAreaPoints.Add("AX02");
|
||||
if (disTask.area_code == "E")
|
||||
{
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】收到到货完成信号 传入参数: {disTask.bill_code} {action}");
|
||||
@@ -447,53 +453,80 @@ namespace Tnb.WarehouseMgr
|
||||
|
||||
if (action == "UNLOAD")
|
||||
{
|
||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.endpoint_code);
|
||||
if (WmsMechanicalArmHs.Count() == 0)
|
||||
// 去料架区放货
|
||||
if (rackAreaPoints.Contains(disTask.endlocation_code))
|
||||
{
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||
return false;
|
||||
}
|
||||
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.endpoint_code);
|
||||
if (WmsMechanicalArmHs.Count() == 0)
|
||||
{
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行终点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||
return false;
|
||||
}
|
||||
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
||||
|
||||
// 回写料架和AGV确认
|
||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||
// 回写料架和AGV确认
|
||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||
{
|
||||
agvconfirm = 1,
|
||||
rackid = disTask.carry_id,
|
||||
rackcode = disTask.carry_code
|
||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV已到货");
|
||||
}
|
||||
else // 去暂存仓放货
|
||||
{
|
||||
agvconfirm = 1,
|
||||
rackid = disTask.carry_id,
|
||||
rackcode = disTask.carry_code
|
||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV已到货");
|
||||
// 回写料架料箱绑定表的库位
|
||||
ISugarQueryable<WmsCarrybindH> wmsCarryHs = db.Queryable<WmsCarrybindH>().Where(r => r.carry_code == disTask.carry_code);
|
||||
var wmsCarryHList = wmsCarryHs.ToList();
|
||||
wmsCarryHList.ForEach(r =>
|
||||
{
|
||||
r.location_id = disTask.endlocation_id;
|
||||
r.location_code = disTask.endlocation_code;
|
||||
r.source_id = disTask.id;
|
||||
r.source_code = disTask.bill_code;
|
||||
});
|
||||
await db.Updateable(wmsCarryHList).ExecuteCommandAsync();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.startpoint_code);
|
||||
if (WmsMechanicalArmHs.Count() == 0)
|
||||
// 去暂存仓取货
|
||||
if (rackAreaPoints.Contains(disTask.endlocation_code))
|
||||
{
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||
return false;
|
||||
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV在暂存仓取货完成");
|
||||
}
|
||||
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
||||
|
||||
//回写出库单状态
|
||||
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r=>new WmsEmptyOutstockH
|
||||
else // 去料架区取货
|
||||
{
|
||||
bindrackcomplete = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID
|
||||
}).Where(r => r.bill_code == target.outbill).ExecuteCommandAsync();
|
||||
ISugarQueryable<WmsMechanicalArmH> WmsMechanicalArmHs = db.Queryable<WmsMechanicalArmH>().Where(r => r.point_code == disTask.startpoint_code);
|
||||
if (WmsMechanicalArmHs.Count() == 0)
|
||||
{
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】 任务执行起点{disTask.endpoint_code} 与料架区的点位不匹配");
|
||||
return false;
|
||||
}
|
||||
WmsMechanicalArmH target = WmsMechanicalArmHs.First();
|
||||
|
||||
// 重置料架区
|
||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||
{
|
||||
stackingcount = 0,
|
||||
barcodes = "",
|
||||
outbill = "",
|
||||
maxnum = 0,
|
||||
iscreatepretask = 0,
|
||||
rackcode = "",
|
||||
rackid = "",
|
||||
agvconfirm = 0,
|
||||
mechanicalconfirm = 0
|
||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV已到货");
|
||||
//回写出库单状态
|
||||
await db.Updateable<WmsEmptyOutstockH>().SetColumns(r => new WmsEmptyOutstockH
|
||||
{
|
||||
bindrackcomplete = WmsWareHouseConst.BILLSTATUS_COMPLETE_ID
|
||||
}).Where(r => r.bill_code == target.outbill).ExecuteCommandAsync();
|
||||
|
||||
// 重置料架区
|
||||
await db.Updateable<WmsMechanicalArmH>().SetColumns(r => new WmsMechanicalArmH
|
||||
{
|
||||
stackingcount = 0,
|
||||
barcodes = "",
|
||||
outbill = "",
|
||||
maxnum = 0,
|
||||
iscreatepretask = 0,
|
||||
rackcode = "",
|
||||
rackid = "",
|
||||
agvconfirm = 0,
|
||||
mechanicalconfirm = 0
|
||||
}).Where(r => r.id == target.id).ExecuteCommandAsync();
|
||||
Logger.Information($"【二楼机械臂Floor2MechanicalComplete】{disTask.bill_code} AGV在料架区取货完成");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@@ -547,9 +580,9 @@ namespace Tnb.WarehouseMgr
|
||||
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));
|
||||
//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()!;
|
||||
@@ -845,8 +878,8 @@ namespace Tnb.WarehouseMgr
|
||||
var InTasks = CTUTasks.Where(a => a.task_type == WmsWareHouseConst.WMS_PRETASK_INSTOCK_TYPE_ID).ToList();
|
||||
var OutTasks = CTUTasks.Where(a => a.task_type == WmsWareHouseConst.WMS_PRETASK_OUTSTOCK_TYPE_ID).ToList();
|
||||
|
||||
Logger.Information($@"【CTUTaskExecute】 获取任务InTasks: {JsonConvert.SerializeObject(InTasks)}");
|
||||
Logger.Information($@"【CTUTaskExecute】 获取任务OutTasks: {JsonConvert.SerializeObject(OutTasks)}");
|
||||
//Logger.Information($@"【CTUTaskExecute】 获取任务InTasks: {JsonConvert.SerializeObject(InTasks)}");
|
||||
//Logger.Information($@"【CTUTaskExecute】 获取任务OutTasks: {JsonConvert.SerializeObject(OutTasks)}");
|
||||
|
||||
var OriginDistaskHs = await db.Queryable<WmsDistaskH>()
|
||||
.InnerJoin<WmsAreaH>((a, b) => a.area_id == b.id)
|
||||
@@ -855,7 +888,7 @@ namespace Tnb.WarehouseMgr
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
Logger.Information($@"【CTUTaskExecute】 OriginDistaskHs: {JsonConvert.SerializeObject(OriginDistaskHs)}");
|
||||
//Logger.Information($@"【CTUTaskExecute】 OriginDistaskHs: {JsonConvert.SerializeObject(OriginDistaskHs)}");
|
||||
|
||||
|
||||
List<WmsDistaskH> DistaskHs = new List<WmsDistaskH>();
|
||||
@@ -992,7 +1025,7 @@ namespace Tnb.WarehouseMgr
|
||||
var time = int.Parse(db.Queryable<BasFactoryConfig>().Where(P => P.key == "getinterval").First().value);
|
||||
timer = new Timer(TimerExec, null, TimeSpan.FromMinutes(time), TimeSpan.FromMinutes(time));
|
||||
}
|
||||
Logger.Information($@"【CTUTaskExecute】 可执行的CTU任务inCtuExec: {JsonConvert.SerializeObject(inCtuExec)}");
|
||||
//Logger.Information($@"【CTUTaskExecute】 可执行的CTU任务inCtuExec: {JsonConvert.SerializeObject(inCtuExec)}");
|
||||
if (inCtuExec.Count > 0)
|
||||
{
|
||||
Logger.Information($"开始执行CTU入库任务: {JsonConvert.SerializeObject(inCtuExec)}");
|
||||
@@ -1004,7 +1037,7 @@ namespace Tnb.WarehouseMgr
|
||||
await CallingCTU(inCtuExec, Ctu.Token, 1);
|
||||
Ctu.Dispose();
|
||||
}
|
||||
Logger.Information($@"【CTUTaskExecute】 可执行的CTU任务outCtuExec: {JsonConvert.SerializeObject(outCtuExec)}");
|
||||
//Logger.Information($@"【CTUTaskExecute】 可执行的CTU任务outCtuExec: {JsonConvert.SerializeObject(outCtuExec)}");
|
||||
if (outCtuExec.Count > 0)
|
||||
{
|
||||
Logger.Information($"开始执行CTU出库任务: {JsonConvert.SerializeObject(outCtuExec)}");
|
||||
@@ -1121,7 +1154,7 @@ namespace Tnb.WarehouseMgr
|
||||
reqBody.taskChainPriority = 0;
|
||||
reqBody.taskList = v;
|
||||
reqBody.inOut = type;
|
||||
Logger.Information($"【CallingCTU】 CTU任务下发 开始请求联核/task-chain/create接口 请求地址:{url} 请求参数:{reqBody} type:{(type == 0 ? "CTU出库" : "CTU入库")}");
|
||||
Logger.Information($"【CallingCTU】 CTU任务下发 开始请求联核/task-chain/create接口 请求地址:{url} 请求参数:{JsonConvert.SerializeObject(reqBody)} type:{(type == 0 ? "CTU出库" : "CTU入库")}");
|
||||
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
|
||||
Logger.Information($"【CallingCTU】 CTU任务下发 接收到联核/task-chain/create接口信息:{respBody}");
|
||||
}
|
||||
@@ -1327,6 +1360,7 @@ namespace Tnb.WarehouseMgr
|
||||
{
|
||||
Logger.Information("【AgvDispatch】 Agv任务执行....");
|
||||
List<string> kiva = new List<string>();
|
||||
// 一楼中储仓
|
||||
kiva.Add("ZSSSXCTU02");
|
||||
kiva.Add("ZSSSXCTU01");
|
||||
//调用AGV创建任务链接口
|
||||
@@ -1363,7 +1397,7 @@ namespace Tnb.WarehouseMgr
|
||||
reqBody.taskChainPriority = 0;
|
||||
reqBody.taskList = v;
|
||||
reqBody.floor = dis.end_floor;
|
||||
Logger.Information($"【AgvDispatch】 Agv任务执行 开始请求联核/task-chain/create接口 请求地址:{url} 请求参数:{reqBody} ");
|
||||
Logger.Information($"【AgvDispatch】 Agv任务执行 开始请求联核/task-chain/create接口 请求地址:{url} 请求参数:{JsonConvert.SerializeObject(reqBody)} ");
|
||||
dynamic respBody = await HttpClientHelper.PostStreamAsync(url, reqBody, token);
|
||||
Logger.Information($"【AgvDispatch】 Agv任务执行 接收到联核/task-chain/create接口信息:{respBody}");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user