|
@@ -206,8 +206,9 @@ namespace WCS.WorkEngineering.Systems
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
+ taskList = taskList.OrderBy(x => x.Item1.Depth).ToList();
|
|
|
//一工位取深度较大的任务
|
|
|
- var taskInfo = taskList.MaxBy(x => x.Item1.Depth);
|
|
|
+ var taskInfo = taskList[1];
|
|
|
task = taskInfo.Item1;
|
|
|
dev = taskInfo.Item2;
|
|
|
obj.Data.TaskNumber1 = task.ID;
|
|
@@ -220,7 +221,7 @@ namespace WCS.WorkEngineering.Systems
|
|
|
obj.Data.ELayer1 = task.Layer.ToShort();
|
|
|
obj.Data.EDepth1 = task.Depth.ToShort();
|
|
|
//二工位取深度较少的值
|
|
|
- taskInfo = taskList.MinBy(x => x.Item1.Depth);
|
|
|
+ taskInfo = taskList[0];
|
|
|
task = taskInfo.Item1;
|
|
|
dev = taskInfo.Item2;
|
|
|
obj.Data.TaskNumber2 = task.ID;
|
|
@@ -253,47 +254,106 @@ namespace WCS.WorkEngineering.Systems
|
|
|
|
|
|
//获取当前堆垛机所有的取货站台
|
|
|
var arrOut = PutDevices.First(v => v.Key == obj.Entity.Code).Value;
|
|
|
-
|
|
|
if (!arrOut.Any()) throw new KnownException($"机械臂{obj.Entity.Code}无放货路径点", LogLevelEnum.High);
|
|
|
|
|
|
//获取可以放货的设备集合
|
|
|
arrOut = arrOut.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status)).ToList();//无光电
|
|
|
-
|
|
|
if (!arrOut.Any()) throw new KnownException($"[{obj.Entity.Code}]等待出库任务输送到位", LogLevelEnum.Mid);
|
|
|
|
|
|
- WCS_TaskInfo taskInfo = null;
|
|
|
+ List<WCS_TaskInfo> taskInfoList = new List<WCS_TaskInfo>();
|
|
|
+ string nextAdd = "";
|
|
|
|
|
|
SqlSugarHelper.Do(db =>
|
|
|
{
|
|
|
+ //所有出库点设备号,即
|
|
|
var allOutCode = arrOut.Select(v => v.Entity.Code).ToList();
|
|
|
|
|
|
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
|
|
|
- .Where(v => allOutCode.Contains(v.SrmStation))
|
|
|
- .OrderByDescending(v => v.Priority)
|
|
|
- .OrderBy(v => v.AddTime)
|
|
|
- .First() ?? throw new KnownException($"{obj.Entity.Code}未找到出库任务", LogLevelEnum.High);
|
|
|
-
|
|
|
- task.Status = Entity.TaskStatus.StackerExecution;
|
|
|
- task.LastInteractionPoint = task.Device;
|
|
|
- task.EditWho = "WCS";
|
|
|
- db.Default.Updateable(task).ExecuteCommand();
|
|
|
- task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
|
|
|
- taskInfo = task;
|
|
|
+ var taskInfos = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.Type == TaskType.OutDepot && v.Status == Entity.TaskStatus.WaitingToExecute)
|
|
|
+ .Where(v => allOutCode.Contains(v.SrmStation)).ToList()
|
|
|
+ .OrderBy(x => x.ProdLine)
|
|
|
+ .ThenBy(x => x.AddTime)
|
|
|
+ .Take(2);
|
|
|
+ if (taskInfos!.MinBy(x => x.Depth).Depth + 1 != taskInfos.MaxBy(x => x.Depth).Depth)
|
|
|
+ {
|
|
|
+ taskInfos = taskInfos!.OrderBy(x => x.ProdLine).Take(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach (var task in taskInfos)
|
|
|
+ {
|
|
|
+ task.Status = Entity.TaskStatus.StackerExecution;
|
|
|
+ task.LastInteractionPoint = task.Device;
|
|
|
+ task.EditWho = "WCS";
|
|
|
+ nextAdd = task.SrmStation;
|
|
|
+ db.Default.Updateable(task).ExecuteCommand();
|
|
|
+ task.AddWCS_TASK_DTL(db.Default, task.Device, task.SrmStation, "任务下发机械臂执行");
|
|
|
+ taskInfoList!.Add(task);
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
- if (taskInfo == null) throw new KnownException("数据更新错误", LogLevelEnum.High);
|
|
|
- var addrFrom = taskInfo.AddrFrom.Split("-");
|
|
|
- obj.Data.TaskNumber1 = taskInfo.ID;
|
|
|
- obj.Data.SLine1 = addrFrom[0].ToShort();
|
|
|
- obj.Data.SCol1 = addrFrom[1].ToShort();
|
|
|
- obj.Data.SLayer1 = addrFrom[2].ToShort();
|
|
|
- obj.Data.SDepth1 = addrFrom[3].ToShort();
|
|
|
- obj.Data.ELine1 = taskInfo.SrmStation.ToShort();
|
|
|
- obj.Data.ECol1 = taskInfo.ProdLine;
|
|
|
- obj.Data.TaskSum = 1;
|
|
|
- obj.Data.GoodsType = 1;
|
|
|
- obj.Data.TaskType = 4;
|
|
|
- obj.Data.VoucherNo++;
|
|
|
+ if (!taskInfoList.Any()) return;
|
|
|
+
|
|
|
+ switch (taskInfoList.Count)
|
|
|
+ {
|
|
|
+ case 1:
|
|
|
+ var task = taskInfoList.FirstOrDefault();
|
|
|
+ //下发任务
|
|
|
+ obj.Data.TaskNumber1 = task.ID;
|
|
|
+ obj.Data.SLine1 = task.Line.ToShort();
|
|
|
+ obj.Data.SCol1 = task.Col.ToShort();
|
|
|
+ obj.Data.SLayer1 = task.Layer.ToShort();
|
|
|
+ obj.Data.SDepth1 = task.Depth.ToShort();
|
|
|
+ obj.Data.ELine1 = nextAdd.ToShort();
|
|
|
+ obj.Data.ECol1 = task.ProdLine;
|
|
|
+ obj.Data.ELayer1 = 0;
|
|
|
+ obj.Data.EDepth1 = 0;
|
|
|
+ obj.Data.TaskNumber2 = 0;
|
|
|
+ obj.Data.SLine2 = 0;
|
|
|
+ obj.Data.SCol2 = 0;
|
|
|
+ obj.Data.SLayer2 = 0;
|
|
|
+ obj.Data.SDepth2 = 0;
|
|
|
+ obj.Data.ELine2 = 0;
|
|
|
+ obj.Data.ECol2 = 0;
|
|
|
+ obj.Data.ELayer2 = 0;
|
|
|
+ obj.Data.EDepth2 = 0;
|
|
|
+ obj.Data.TaskSum = taskInfoList.Count.ToShort();
|
|
|
+ obj.Data.GoodsType = 1;
|
|
|
+ obj.Data.TaskType = 4;
|
|
|
+ obj.Data.VoucherNo++;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 2:
|
|
|
+ taskInfoList = taskInfoList.OrderBy(x => x.Depth).ToList();
|
|
|
+ //一工位取深度较大的任务
|
|
|
+ var taskInfo = taskInfoList[1];
|
|
|
+ obj.Data.TaskNumber1 = taskInfo.ID;
|
|
|
+ obj.Data.SLine1 = taskInfo.Line.ToShort();
|
|
|
+ obj.Data.SCol1 = taskInfo.Col.ToShort();
|
|
|
+ obj.Data.SLayer1 = taskInfo.Layer.ToShort();
|
|
|
+ obj.Data.SDepth1 = taskInfo.Depth.ToShort();
|
|
|
+ obj.Data.ELine1 = nextAdd.ToShort();
|
|
|
+ obj.Data.ECol1 = taskInfo.ProdLine;
|
|
|
+ obj.Data.ELayer1 = 0;
|
|
|
+ obj.Data.EDepth1 = 0;
|
|
|
+ //二工位取深度较少的值
|
|
|
+ taskInfo = taskInfoList[0];
|
|
|
+ obj.Data.TaskNumber2 = taskInfo.ID;
|
|
|
+ obj.Data.SLine2 = taskInfo.Line.ToShort();
|
|
|
+ obj.Data.SCol2 = taskInfo.Col.ToShort();
|
|
|
+ obj.Data.SLayer2 = taskInfo.Layer.ToShort();
|
|
|
+ obj.Data.SDepth2 = taskInfo.Depth.ToShort();
|
|
|
+ obj.Data.ELine2 = nextAdd.ToShort();
|
|
|
+ obj.Data.ECol2 = taskInfo.ProdLine;
|
|
|
+ obj.Data.ELayer2 = 0;
|
|
|
+ obj.Data.EDepth2 = 0;
|
|
|
+ obj.Data.TaskSum = taskInfoList.Count.ToShort();
|
|
|
+ obj.Data.GoodsType = 1;
|
|
|
+ obj.Data.TaskType = 4;
|
|
|
+ obj.Data.VoucherNo++;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ throw new KnownException($"无法执行多个任务", LogLevelEnum.Mid);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|