|
|
@@ -35,29 +35,29 @@ namespace WCS.WorkEngineering.Systems
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
//获取所有的新建任务,组盘任务不需要
|
|
|
- taskInfos = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status == 0).ToList()
|
|
|
- .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot") && x.BusType!="芯股用空托盘入库" && !x.BarCode.Contains("Error")).Select(x => x.ID).ToList();
|
|
|
+ taskInfos = db.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status == 0).ToList()
|
|
|
+ .Where(x => x.Type != TaskType.SetPlate || (x.Type == TaskType.SetPlate && x.AddrFrom != "Robot") && x.BusType != "芯股用空托盘入库" && !x.BarCode.Contains("Error")).Select(x => x.ID).ToList();
|
|
|
var time = DateTime.Now.AddMinutes(-20);
|
|
|
var time1 = DateTime.Now.AddMinutes(-40);
|
|
|
- var timeOut = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
|
|
|
+ var timeOut = db.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
|
|
|
if (timeOut > 0) World.Log($"共有{timeOut}个车间叫料任务超过二十分钟未执行,请检查相关相关任务对应的堆垛机是否正常、堆垛机放货点是否卡任务等", LogLevelEnum.High);
|
|
|
|
|
|
- var timeOut1 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time1);
|
|
|
+ var timeOut1 = db.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "车间叫料" && x.Status < TaskStatus.StackerExecution && x.AddTime < time1);
|
|
|
if (timeOut1 > 0) World.Log($"共有{timeOut1}个车间叫料任务超过四十分钟未执行,请检查相关相关任务对应的堆垛机是否正常、堆垛机放货点是否卡任务等", LogLevelEnum.High);
|
|
|
|
|
|
- var timeOut2 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "皮盘入库" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
|
|
|
+ var timeOut2 = db.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "皮盘入库" && x.Status < TaskStatus.StackerExecution && x.AddTime < time);
|
|
|
if (timeOut2 > 0) World.Log($"共有{timeOut2}个皮盘入库任务超过二十分钟未执行,请检查相关相关任务及对应agv设备", LogLevelEnum.High);
|
|
|
|
|
|
- var timeOut3 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "皮盘入库" && x.Status < TaskStatus.StackerExecution && x.AddTime < time1);
|
|
|
+ var timeOut3 = db.Queryable<WCS_TaskInfo>().NoLock().Count(x => x.BusType == "皮盘入库" && x.Status < TaskStatus.StackerExecution && x.AddTime < time1);
|
|
|
if (timeOut3 > 0) World.Log($"共有{timeOut3}个皮盘入库任务超过四十分钟未执行,请检查相关相关任务及对应agv设备", LogLevelEnum.High);
|
|
|
|
|
|
var time3 = DateTime.Now.AddHours(-24);
|
|
|
- var timeOut4 = db.Default.Queryable<BillInvnow>().NoLock().Count(x => x.AddTime < time3 && x.ContGrpBarCode.Contains("TPB"));
|
|
|
+ var timeOut4 = db.Queryable<BillInvnow>().NoLock().Count(x => x.AddTime < time3 && x.ContGrpBarCode.Contains("TPB"));
|
|
|
if (timeOut4 > 0) World.Log($"共有{timeOut4}个库存信息超过24小时未执行,请检查相关库存信息并处理", LogLevelEnum.High);
|
|
|
|
|
|
var time4 = DateTime.Now.AddHours(-12);
|
|
|
- var timeOut5 = db.Default.Queryable<WCS_Palletizing>().NoLock().Where(x => x.AddTime < time4 && !x.Finish).ToList();
|
|
|
- if (timeOut5.Count > 0) World.Log($"共有{timeOut5.Count}个桁架码垛信息超过12小时未结束,请检查相关码垛信息并处理,具体在{JsonConvert.SerializeObject(timeOut5.Select(x=>x.PalletizingStation).ToList())}", LogLevelEnum.High);
|
|
|
+ var timeOut5 = db.Queryable<WCS_Palletizing>().NoLock().Where(x => x.AddTime < time4 && !x.Finish).ToList();
|
|
|
+ if (timeOut5.Count > 0) World.Log($"共有{timeOut5.Count}个桁架码垛信息超过12小时未结束,请检查相关码垛信息并处理,具体在{JsonConvert.SerializeObject(timeOut5.Select(x => x.PalletizingStation).ToList())}", LogLevelEnum.High);
|
|
|
});
|
|
|
if (!taskInfos.Any())
|
|
|
{
|
|
|
@@ -73,7 +73,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().RowLock().Where(t => t.ID == item && t.Status== TaskStatus.NewBuild).First();
|
|
|
+ var task = db.Queryable<WCS_TaskInfo>().RowLock().Where(t => t.ID == item && t.Status == TaskStatus.NewBuild).First();
|
|
|
|
|
|
switch (task.Type)
|
|
|
{
|
|
|
@@ -82,8 +82,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
//更新任务状态
|
|
|
task.Status = TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息");
|
|
|
isEnd = true;
|
|
|
}
|
|
|
break;
|
|
|
@@ -103,11 +103,11 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
task.AgvTaskID = agv.ID;
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化单独返皮盘任务");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化单独返皮盘任务");
|
|
|
}
|
|
|
else if (task.BusType == TaskBusType.芯股用空托盘入库.GetDescription()) return;
|
|
|
else if (task.BusType == TaskBusType.人工满托入库.GetDescription())
|
|
|
@@ -127,23 +127,23 @@ namespace WCS.WorkEngineering.Systems
|
|
|
"2S" => "3135",
|
|
|
_ => "2535"
|
|
|
},
|
|
|
- AddWho = "WCS",
|
|
|
+ AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
task.AgvTaskID = agv.ID;
|
|
|
task.Device = task.WarehouseCode switch
|
|
|
{
|
|
|
"1N" => "TY1",
|
|
|
"1S" => "TY2",
|
|
|
"2N" => "TY3",
|
|
|
- "2S" => "TY4",
|
|
|
+ "2S" => "TY4",
|
|
|
_ => "TY1"
|
|
|
};
|
|
|
task.Height = 1;
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.Device, x.Height }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化人工满托入库任务");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.Device, x.Height }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化人工满托入库任务");
|
|
|
}
|
|
|
else if (task.BusType == TaskBusType.UT人工满托入库.GetDescription())
|
|
|
{
|
|
|
@@ -165,7 +165,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
task.AgvTaskID = agv.ID;
|
|
|
task.Device = task.WarehouseCode switch
|
|
|
{
|
|
|
@@ -177,17 +177,17 @@ namespace WCS.WorkEngineering.Systems
|
|
|
};
|
|
|
task.Height = 1;
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.Device, x.Height }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化UT人工满托入库任务");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.Device, x.Height }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化UT人工满托入库任务");
|
|
|
}
|
|
|
else if (task.BusType == TaskBusType.重绕满托入库.GetDescription())
|
|
|
{
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息");
|
|
|
}
|
|
|
else if (task.BusType == TaskBusType.帘线退料重绕.GetDescription())
|
|
|
- {
|
|
|
+ {
|
|
|
var agv = new WCS_AgvTaskInfo()
|
|
|
{
|
|
|
ID = db.GetAgvTaskId(),
|
|
|
@@ -199,13 +199,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
Station = "9001",
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
- };
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ };
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
task.AgvTaskID = agv.ID;
|
|
|
task.AddrTo = agv.Station;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status,x.AgvTaskID,x.AddrTo }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.AddrTo }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -238,8 +238,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.AddrNext = path1.Points[1].Code;
|
|
|
task.SrmStation = task.BarCode.Contains("TPA") || task.BarCode.Contains("TPB") ? task.AddrFrom : path1.Points[2].Code;
|
|
|
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Device, x.AddrNext, x.SrmStation }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化入库任务信息");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Device, x.AddrNext, x.SrmStation }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化入库任务信息");
|
|
|
}
|
|
|
|
|
|
isEnd = true;
|
|
|
@@ -249,7 +249,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
if (task.Device.Contains("Robot")) //机器人任务
|
|
|
{
|
|
|
- var lastTask = db.Default.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.AddrTo == task.AddrTo && x.Status > TaskStatus.WaitingToExecute && x.Status < TaskStatus.Finish);
|
|
|
+ var lastTask = db.Queryable<WCS_TaskInfo>().NoLock().First(x => x.Type == TaskType.OutDepot && x.AddrTo == task.AddrTo && x.Status > TaskStatus.WaitingToExecute && x.Status < TaskStatus.Finish);
|
|
|
if (lastTask != null)
|
|
|
{
|
|
|
World.Log($"等待任务结束:{task.AddrTo}上一组码垛任务未结束,等待{lastTask.ID}任务完成后开始初始化当前任务{task.ID}");
|
|
|
@@ -261,8 +261,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
task.Col = pos[1].ToShort();
|
|
|
task.Layer = pos[2].ToShort();
|
|
|
task.Depth = pos[3].ToShort();
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Line, x.Col, x.Layer, x.Depth }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.Line, x.Col, x.Layer, x.Depth }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
isEnd = true;
|
|
|
}
|
|
|
else if (task.Device == "FJXG") //芯股仓库的任务
|
|
|
@@ -281,7 +281,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
}
|
|
|
var agvId = DateTime.Now.GetFormat(GetFormatterEnum.only) + task.ID;
|
|
|
var agvTask = new WCS_AgvTaskInfo()
|
|
|
@@ -297,8 +297,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AgvID = agvId
|
|
|
};
|
|
|
//开始处理车间叫料AGV任务任务
|
|
|
- db.Default.InsertableRowLock(agvTask).SplitTable().ExecuteCommand();
|
|
|
- agvTask = db.Default.Queryable<WCS_AgvTaskInfo>().RowLock().SplitTable(x => x.Take(2)).Single(x => x.TaskId == task.ID && x.TaskType == AGVTaskType.CallMaterial);
|
|
|
+ db.InsertableRowLock(agvTask).SplitTable().ExecuteCommand();
|
|
|
+ agvTask = db.Queryable<WCS_AgvTaskInfo>().RowLock().SplitTable(x => x.Take(2)).Single(x => x.TaskId == task.ID && x.TaskType == AGVTaskType.CallMaterial);
|
|
|
if (agvTask.Status != AGVTaskStatus.NewBuild)
|
|
|
{
|
|
|
World.Log($"AGV任务{agvTask.ID}状态不是新建", LogLevelEnum.High);
|
|
|
@@ -307,13 +307,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
agvId = agvTask.AgvID;
|
|
|
agvTask.Status = AGVTaskStatus.Confirm;
|
|
|
agvTask.AgvStatus = AGVTaskStatus.Confirm;
|
|
|
- db.Default.UpdateableRowLock(agvTask).UpdateColumns(x => new { x.AgvID, x.Status, x.AgvStatus }).SplitTable(x => x.Take(2)).ExecuteCommand();
|
|
|
+ db.UpdateableRowLock(agvTask).UpdateColumns(x => new { x.AgvID, x.Status, x.AgvStatus }).SplitTable(x => x.Take(2)).ExecuteCommand();
|
|
|
task.Status = TaskStatus.AGVExecution;
|
|
|
task.AgvTaskID = agvTask.ID;
|
|
|
task.EditTime = DateTime.Now;
|
|
|
task.EditWho = "WCS";
|
|
|
- db.Default.Updateable(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.EditTime, x.EditWho }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.AddrFrom, "AGV", $"任务下发至AGV{agvId}");
|
|
|
+ db.Updateable(task).UpdateColumns(x => new { x.Status, x.AgvTaskID, x.EditTime, x.EditWho }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.AddrFrom, "AGV", $"任务下发至AGV{agvId}");
|
|
|
var res = AgvApi.机台叫料(task.AddrFrom, task.WorkBench, agvId);
|
|
|
|
|
|
isEnd = true;
|
|
|
@@ -359,8 +359,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
//开始计算当前这个任务要从哪个站台出
|
|
|
//计算两个站台小于取货完成数量的AGV任务
|
|
|
- var agv1 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[0]).Count();
|
|
|
- var agv2 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[1]).Count();
|
|
|
+ var agv1 = db.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[0]).Count();
|
|
|
+ var agv2 = db.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[1]).Count();
|
|
|
task.SrmStation = "";
|
|
|
//if (srmStation[0] == "2534"/* || srmStation[0] == "2934"*/)
|
|
|
//{
|
|
|
@@ -370,7 +370,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
task.AddrTo = agv1 > agv2 ? srmStation[1] : srmStation[0];
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
|
|
|
{
|
|
|
@@ -385,8 +384,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
//更新任务状态
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.SrmStation, x.AddrTo, x.Status }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.SrmStation, x.AddrTo, x.Status }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
isEnd = true;
|
|
|
}
|
|
|
else if (task.Device == "CR")
|
|
|
@@ -405,13 +404,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
}
|
|
|
//更新任务状态
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
task.AddrTo = task.WorkBench;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new {x.Status , x.AddrTo }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,重绕组盘区{task.AddrFrom}");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,重绕组盘区{task.AddrFrom}");
|
|
|
isEnd = true;
|
|
|
break;
|
|
|
}
|
|
|
@@ -456,8 +455,8 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
//开始计算当前这个任务要从哪个站台出
|
|
|
//计算两个站台小于取货完成数量的AGV任务
|
|
|
- var agv1 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[0]).Count();
|
|
|
- var agv2 = db.Default.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[1]).Count();
|
|
|
+ var agv1 = db.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[0]).Count();
|
|
|
+ var agv2 = db.Queryable<WCS_TaskInfo>().NoLock().Where(x => x.Status <= TaskStatus.StackerExecution && x.AddrTo == srmStation[1]).Count();
|
|
|
task.SrmStation = "";
|
|
|
//if (srmStation[0] == "2534"/* || srmStation[0] == "2934"*/)
|
|
|
//{
|
|
|
@@ -467,7 +466,6 @@ namespace WCS.WorkEngineering.Systems
|
|
|
{
|
|
|
task.AddrTo = agv1 > agv2 ? srmStation[1] : srmStation[0];
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
if (task.SrmStation.IsNullOrEmpty()) //如果没有指定放货站台
|
|
|
{
|
|
|
@@ -496,12 +494,12 @@ namespace WCS.WorkEngineering.Systems
|
|
|
AddWho = "WCS",
|
|
|
AddTime = DateTime.Now
|
|
|
};
|
|
|
- db.Default.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
+ db.InsertableRowLock(agv).SplitTable().ExecuteCommand();
|
|
|
}
|
|
|
//更新任务状态
|
|
|
task.Status = Entity.TaskStatus.WaitingToExecute;
|
|
|
- db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.SrmStation, x.AddrTo, x.Status }).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
+ db.UpdateableRowLock(task).UpdateColumns(x => new { x.SrmStation, x.AddrTo, x.Status }).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db, task.Device, $"初始化出库任务信息,放货站台:{task.SrmStation}");
|
|
|
isEnd = true;
|
|
|
}
|
|
|
break;
|
|
|
@@ -528,14 +526,13 @@ namespace WCS.WorkEngineering.Systems
|
|
|
return dev.Code == nameof(NoInteractionSystems);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 获取AGV的目标站台
|
|
|
/// </summary>
|
|
|
/// <param name="task">任务信息</param>
|
|
|
/// <param name="db">数据库操作对象</param>
|
|
|
/// <returns>目标站台</returns>
|
|
|
- private string GetAgvStation(WCS_TaskInfo task, SqlSugarHelper db)
|
|
|
+ private string GetAgvStation(WCS_TaskInfo task, SqlSugarProvider db)
|
|
|
{
|
|
|
// 默认站台
|
|
|
var defaultStation = "2701";
|
|
|
@@ -570,7 +567,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
sta = task.WarehouseCode.Contains("N") ? stationPair.N : stationPair.S;
|
|
|
|
|
|
// 配置值获取
|
|
|
- var num = db.Default.Queryable<fjSysConfig>()
|
|
|
+ var num = db.Queryable<fjSysConfig>()
|
|
|
.NoLock()
|
|
|
.First(x => x.Code == "SameSideTaskNum")?.SContent.ToInt() ?? 5;
|
|
|
|
|
|
@@ -592,21 +589,21 @@ namespace WCS.WorkEngineering.Systems
|
|
|
}
|
|
|
|
|
|
// 配置值获取
|
|
|
- num = db.Default.Queryable<fjSysConfig>()
|
|
|
+ num = db.Queryable<fjSysConfig>()
|
|
|
.NoLock()
|
|
|
.First(x => x.Code == "TasksInSameWarehouse")?.SContent.ToInt() ?? 10;
|
|
|
|
|
|
// 判断是否需要在三个分拣中心中选取任务数量较少的一侧进行分配
|
|
|
currentTaskCount = GetStationTaskCount(db, sta);
|
|
|
var otherSide = stationMap.First(x => x.Value.N == sta || x.Value.S == sta);
|
|
|
- currentTaskCount += GetStationTaskCount(db, otherSide.Value.N==sta ? otherSide.Value.S : otherSide.Value.N);
|
|
|
+ currentTaskCount += GetStationTaskCount(db, otherSide.Value.N == sta ? otherSide.Value.S : otherSide.Value.N);
|
|
|
if (currentTaskCount > num)
|
|
|
{
|
|
|
- sta = db.Default.Queryable<WCS_AgvTaskInfo>()
|
|
|
+ sta = db.Queryable<WCS_AgvTaskInfo>()
|
|
|
.NoLock()
|
|
|
.Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 &&
|
|
|
v.TaskType == AGVTaskType.EnterDepot &&
|
|
|
- (v.Station != "2535" && v.Station != "2735" && v.Station != "2935" && v.Station != "3135" && !v.Station.StartsWith("9")))
|
|
|
+ (v.Station != "2535" && v.Station != "2735" && v.Station != "2935" && v.Station != "3135" && !v.Station.StartsWith("9")))
|
|
|
.SplitTable(v => v.Take(2))
|
|
|
.ToList()
|
|
|
.GroupBy(x => x.Station)
|
|
|
@@ -622,9 +619,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// <summary>
|
|
|
/// 获取指定站台的任务数量
|
|
|
/// </summary>
|
|
|
- private int GetStationTaskCount(SqlSugarHelper db, string station)
|
|
|
+ private int GetStationTaskCount(SqlSugarProvider db, string station)
|
|
|
{
|
|
|
- return db.Default.Queryable<WCS_AgvTaskInfo>()
|
|
|
+ return db.Queryable<WCS_AgvTaskInfo>()
|
|
|
.NoLock()
|
|
|
.Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 &&
|
|
|
v.TaskType == AGVTaskType.EnterDepot && v.Station == station)
|
|
|
@@ -635,7 +632,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// <summary>
|
|
|
/// 获取北侧和南侧的任务数量
|
|
|
/// </summary>
|
|
|
- private (int NorthCount, int SouthCount) GetNorthAndSouthTaskCounts(SqlSugarHelper db,
|
|
|
+ private (int NorthCount, int SouthCount) GetNorthAndSouthTaskCounts(SqlSugarProvider db,
|
|
|
(string N, string S) stationPair)
|
|
|
{
|
|
|
var northCount = GetStationTaskCount(db, stationPair.N);
|
|
|
@@ -649,7 +646,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
/// <param name="task"></param>
|
|
|
/// <param name="db"></param>
|
|
|
/// <returns></returns>
|
|
|
- private string GetAgvStation1(WCS_TaskInfo task, SqlSugarHelper db)
|
|
|
+ private string GetAgvStation1(WCS_TaskInfo task, SqlSugarProvider db)
|
|
|
{
|
|
|
string sta = "";
|
|
|
var n = 0;
|
|
|
@@ -670,9 +667,10 @@ namespace WCS.WorkEngineering.Systems
|
|
|
}
|
|
|
|
|
|
#region 判断是否需要在同一分拣库的两侧进行均分
|
|
|
+
|
|
|
//获取配置值
|
|
|
var num = 5;
|
|
|
- var config = db.Default.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "SameSideTaskNum");
|
|
|
+ var config = db.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "SameSideTaskNum");
|
|
|
if (config != null)
|
|
|
{
|
|
|
num = config.SContent.ToInt();
|
|
|
@@ -690,36 +688,36 @@ namespace WCS.WorkEngineering.Systems
|
|
|
};
|
|
|
|
|
|
//获取当前侧的已有任务数量
|
|
|
- var staNumber = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
|
|
|
+ var staNumber = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
|
|
|
v.Status >= AGVTaskStatus.Confirm &&
|
|
|
v.Status < AGVTaskStatus.Complete1 &&
|
|
|
v.TaskType == AGVTaskType.EnterDepot && v.Station == sta)
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
//当前侧任务数量已大于配置任务数量
|
|
|
- if (staNumber > num)
|
|
|
+ if (staNumber > num)
|
|
|
{
|
|
|
//同侧之间均分
|
|
|
if (warehouseCode.Contains("1"))
|
|
|
{
|
|
|
- n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="2501")
|
|
|
+ n = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "2501")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
- s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="2701")
|
|
|
+ s = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "2701")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
sta = n > s ? "2701" : "2501";
|
|
|
}
|
|
|
else if (warehouseCode.Contains("2"))
|
|
|
{
|
|
|
- n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="2901")
|
|
|
+ n = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "2901")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
- s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="3101")
|
|
|
+ s = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "3101")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
sta = n > s ? "3101" : "2901";
|
|
|
}
|
|
|
else if (warehouseCode.Contains("3"))
|
|
|
{
|
|
|
- n = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="3301")
|
|
|
+ n = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "3301")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
- s = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station=="3501")
|
|
|
+ s = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot && v.Station == "3501")
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
sta = n > s ? "3501" : "3301";
|
|
|
}
|
|
|
@@ -729,34 +727,33 @@ namespace WCS.WorkEngineering.Systems
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
+ #endregion 判断是否需要在同一分拣库的两侧进行均分
|
|
|
|
|
|
#region 判断是否需要在三个分拣中心中选取任务数量较少的一侧进行分配
|
|
|
|
|
|
- staNumber = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
|
|
|
+ staNumber = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v =>
|
|
|
v.Status >= AGVTaskStatus.Confirm &&
|
|
|
v.Status < AGVTaskStatus.Complete1 &&
|
|
|
v.TaskType == AGVTaskType.EnterDepot && v.Station == sta)
|
|
|
.SplitTable(v => v.Take(2)).Count();
|
|
|
- num = 10;
|
|
|
- config = db.Default.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "TasksInSameWarehouse");
|
|
|
+ num = 10;
|
|
|
+ config = db.Queryable<fjSysConfig>().NoLock().First(x => x.Code == "TasksInSameWarehouse");
|
|
|
if (config != null)
|
|
|
{
|
|
|
num = config.SContent.ToInt();
|
|
|
}
|
|
|
if (staNumber > num)
|
|
|
{
|
|
|
- sta = db.Default.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot
|
|
|
- && (v.Station != "2535" && v.Station != "2735" && v.Station != "2935" && v.Station != "3135" && !v.Station.StartsWith("9")))//过滤掉人工满托入库和重绕区任务
|
|
|
+ sta = db.Queryable<WCS_AgvTaskInfo>().NoLock().Where(v => v.Status >= AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.Complete1 && v.TaskType == AGVTaskType.EnterDepot
|
|
|
+ && (v.Station != "2535" && v.Station != "2735" && v.Station != "2935" && v.Station != "3135" && !v.Station.StartsWith("9")))//过滤掉人工满托入库和重绕区任务
|
|
|
.SplitTable(v => v.Take(2)).ToList().GroupBy(x => x.Station).Select(x => new { x.Key, Count = x.Count() }).MinBy(x => x.Count).Key;
|
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
+ #endregion 判断是否需要在三个分拣中心中选取任务数量较少的一侧进行分配
|
|
|
|
|
|
return sta;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 获取AGV返空可用目标站台
|
|
|
/// </summary>
|