|
@@ -259,29 +259,30 @@ namespace WCS.Service.Works.SRM
|
|
|
//月台所有设备当前有的任务号
|
|
|
var taskidList = DockDevs.Select(v => v.Data2.Tasknum).Where(v => v > 10000).ToList();
|
|
|
//堆垛机设备
|
|
|
- var sc = obj.Entity.CODE;
|
|
|
+ var srm = obj.Entity.CODE;
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
//堆垛机当前是否有正在执行的任务
|
|
|
- if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == sc && d.STATUS == TaskStatus.堆垛机执行))
|
|
|
+ if (db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行))
|
|
|
throw new WarnException($"[{deviceCode}]有正在执行的出库任务");
|
|
|
//找出等待执行的出库任务
|
|
|
- var q = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
|
|
|
- .Where(v => v.DEVICE == sc)
|
|
|
+ var waitTask = db.Default.Set<WCS_TASK>().Where(v => v.STATUS == TaskStatus.新建)
|
|
|
+ .Where(v => v.DEVICE == srm)
|
|
|
.Where(v => v.TYPE == TaskType.出库)
|
|
|
- .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == sc && d.STATUS == TaskStatus.堆垛机执行)).ToList();
|
|
|
- //同一个目标地址同时只能有4(双工位,每一节设备可以存放两个任务)个正在执行的任务
|
|
|
- //考虑到有可能出现一次只发一个任务的情况,因此判断条件为3
|
|
|
- //连续两次只发一个任务的情况暂时不考虑
|
|
|
+ .Where(v => !db.Default.Set<WCS_TASK>().Any(d => d.DEVICE == srm && d.STATUS == TaskStatus.堆垛机执行)).ToList();
|
|
|
+ //同一个目标地址同时只能有两组正在执行的任务
|
|
|
//同时对结果进行排序,分组后取第一组任务
|
|
|
- //TODO:暂时不确定排序后进行分组是否会完全打乱排序,先按照这种按时执行,后续有异常再更改
|
|
|
- //TODO:暂时维考虑二楼环穿
|
|
|
- var outDepot = q.Where(v => db.Default.Set<WCS_TASK>()
|
|
|
- .Where(d => d.TYPE == TaskType.出库)
|
|
|
- .Where(d => d.STATUS > TaskStatus.新建)
|
|
|
- .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
|
|
|
- .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
|
|
|
- .Count() < 3)
|
|
|
+ var outDepot = waitTask.Where(v =>
|
|
|
+ {
|
|
|
+ var max = v.ADDRTO == "G1340" ? 4 : 2;
|
|
|
+ return db.Default.Set<WCS_TASK>()
|
|
|
+ .AsNoTracking()
|
|
|
+ .Where(d => d.TYPE == TaskType.出库)
|
|
|
+ .Where(d => d.STATUS > TaskStatus.新建)
|
|
|
+ .Where(d => d.STATUS < TaskStatus.已完成 || taskidList.Contains(d.ID))
|
|
|
+ .Where(d => d.ADDRTO == v.ADDRTO && d.FLOOR == v.FLOOR)
|
|
|
+ .GroupBy(d => d.TaskGroupKey).Count() < max;
|
|
|
+ })
|
|
|
.OrderByDescending(v => v.Priority)
|
|
|
.ThenBy(v => v.FLOOR == floor ? 0 : 1)
|
|
|
.ThenBy(v => v.CREATETIME)
|