|
|
@@ -341,54 +341,78 @@ namespace WCS.Service.Works.SRM
|
|
|
{
|
|
|
#region 移库
|
|
|
|
|
|
+ var finishTaskList = new List<FinishTaskList<SrmFork, Task>>();
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
- //获取当前堆垛机未执行的任务的组ID
|
|
|
- var taskGroupKey = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == deviceCode && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).OrderBy(p => p.CREATETIME).FirstOrDefault()!.TaskGroupKey;
|
|
|
+ //获取当前堆垛机未执行的任务
|
|
|
+ var taskList = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == srmDevice.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).OrderBy(p => p.CREATETIME);
|
|
|
//通过任务的组ID找到本组的所有任务
|
|
|
- var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == taskGroupKey);
|
|
|
-
|
|
|
- var taskList = tasks.Select(v => v.Create<Task>());
|
|
|
- foreach (var item in taskList)
|
|
|
- {
|
|
|
- }
|
|
|
+ var tasks = taskList.ToList().GetOutTask();
|
|
|
|
|
|
- //双工位 货架列单数为一工位取放点 货架列双数为二工位取放点
|
|
|
- foreach (var task in tasks)
|
|
|
+ for (var i = 0; i < tasks.Length; i++)
|
|
|
{
|
|
|
- var addFrom = task.ADDRFROM.Split("-");
|
|
|
- var addrTo = task.ADDRTO.Split("-");
|
|
|
-
|
|
|
- var oldTaskStatus = task.STATUS;
|
|
|
+ var item = tasks[i];
|
|
|
+ var task = db.Default.Set<WCS_TASK>().Find(item.ID);
|
|
|
+ var oldTaskStatus = task!.STATUS;
|
|
|
task.STARTTIME = DateTime.Now;
|
|
|
task.UPDATETIME = DateTime.Now;
|
|
|
task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
|
|
|
- task.DEVICE = deviceCode;
|
|
|
- db.Default.SaveChanges();
|
|
|
- Uploader.Upload(db);
|
|
|
- task.CreateStatusLog(db, $"状态由[{oldTaskStatus}]变更为[{task.STATUS}]", this.GetType());
|
|
|
+ task.DEVICE = srmDevice.Entity.CODE;
|
|
|
+ task.TaskGroupKey = tasks.Length switch
|
|
|
+ {
|
|
|
+ 1 => $"{tasks[0].ID}_0",
|
|
|
+ 2 => $"{tasks[0].ID}_{tasks[1].ID}",
|
|
|
+ _ => throw new WarnException($"可用任务数异常{tasks.Length}"),
|
|
|
+ };
|
|
|
+ var fork = srmDevice.GetFork(item, i);
|
|
|
+ var msg = "";
|
|
|
+ msg = fork == SrmFork.货叉1 ? $"状态由[{oldTaskStatus}]变更为[{task.STATUS}]" : $"状态由[{oldTaskStatus}]变更为[{task.STATUS}]";
|
|
|
+ task.CreateStatusLog(db, msg, this.GetType());
|
|
|
+ finishTaskList.Add(new FinishTaskList<SrmFork, Task>(fork, item));
|
|
|
+ }
|
|
|
|
|
|
- if (addFrom[2].ToShort().OddNumberOrEven())
|
|
|
+ db.Default.SaveChanges();
|
|
|
+
|
|
|
+ //此处只做标记,表示当前事务已经提交
|
|
|
+ foreach (var finish in finishTaskList)
|
|
|
+ {
|
|
|
+ switch (finish.FinishCode)
|
|
|
{
|
|
|
- srmDevice.Data.TaskID_1 = task.ID;
|
|
|
- srmDevice.Data.SLine_1 = addFrom[0].ToShort();
|
|
|
- srmDevice.Data.SCol_1 = addFrom[1].ToShort();
|
|
|
- srmDevice.Data.SLayer_1 = addFrom[2].ToShort();
|
|
|
- srmDevice.Data.ELine_1 = addrTo[0].ToShort();
|
|
|
- srmDevice.Data.ECol_1 = addrTo[1].ToShort();
|
|
|
- srmDevice.Data.ELayer_1 = addrTo[2].ToShort();
|
|
|
- srmDevice.Data.VoucherNo_1++;
|
|
|
+ // 列数较小的放一工位
|
|
|
+ case SrmFork.货叉1:
|
|
|
+ obj.Data.TaskID_1 = finish.Station.ID;
|
|
|
+ break;
|
|
|
+ //列数较大的放二工位
|
|
|
+ case SrmFork.货叉2:
|
|
|
+ obj.Data.TaskID_2 = finish.Station.ID;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
}
|
|
|
- else
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ //检查标记好的出库任务,并将出库任务下达至堆垛机
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ //此处只做标记,表示当前事务已经提交
|
|
|
+ foreach (var finish in finishTaskList)
|
|
|
+ {
|
|
|
+ var task = db.Default.Set<WCS_TASK>().Find(finish.Station.ID).Create<Task>();
|
|
|
+ switch (finish.FinishCode)
|
|
|
{
|
|
|
- srmDevice.Data.TaskID_2 = task.ID;
|
|
|
- srmDevice.Data.SLine_2 = addFrom[0].ToShort();
|
|
|
- srmDevice.Data.SCol_2 = addFrom[1].ToShort();
|
|
|
- srmDevice.Data.SLayer_2 = addFrom[2].ToShort();
|
|
|
- srmDevice.Data.ELine_2 = addrTo[0].ToShort();
|
|
|
- srmDevice.Data.ECol_2 = addrTo[1].ToShort();
|
|
|
- srmDevice.Data.ELayer_2 = addrTo[2].ToShort();
|
|
|
- srmDevice.Data.VoucherNo_2++;
|
|
|
+ // 列数较小的放一工位
|
|
|
+ case SrmFork.货叉1:
|
|
|
+ obj.WriteTask1(task, (short)finishTaskList.Count);
|
|
|
+ break;
|
|
|
+ //列数较大的放二工位
|
|
|
+ case SrmFork.货叉2:
|
|
|
+ obj.WriteTask2(task, (short)finishTaskList.Count);
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ throw new ArgumentOutOfRangeException();
|
|
|
}
|
|
|
}
|
|
|
});
|