|
@@ -120,14 +120,62 @@ namespace WCS.Service.Works
|
|
|
if (Ltc.Do(dev, v => v.Data.Mode != SCMode.远程)) return;
|
|
|
if (Ltc.Do(dev, v => v.Data.Status != SCRunStatus.空闲)) return;
|
|
|
|
|
|
+ var isTransfer = new List<WCS_TASK>();
|
|
|
+
|
|
|
DB.Do(db =>
|
|
|
{
|
|
|
var t = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == dev.Entity.CODE).Where(v => v.STATUS == TaskStatus.堆垛机执行).FirstOrDefault();
|
|
|
- if (t != null) throw new Exception($"[{deviceCode}]有正在执行的任务:[{t.ID}]");
|
|
|
+ if (t != null) throw new Exception($"[{deviceCode}]有正在执行的任务:" + t.ID);
|
|
|
+ //属于当前堆垛机未执行的移库任务
|
|
|
+ isTransfer = db.Default.Set<WCS_TASK>().AsNoTracking().Where(v => v.DEVICE == dev.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).ToList();
|
|
|
+ //判断是否存在调整优先级任务,存在初始化isTransfer值 让本次执行优先任务
|
|
|
+ if (db.Default.Set<WCS_TASK>().AsNoTracking().Any(v => v.DEVICE == dev.Entity.CODE && v.TYPE != TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行 && v.Priority > 0))
|
|
|
+ isTransfer = new List<WCS_TASK>();
|
|
|
});
|
|
|
|
|
|
var LastIsOut = dev.Entity.Get<bool>("LastIsOut");
|
|
|
dev.Entity.Set("LastIsOut", !LastIsOut);
|
|
|
+ if (isTransfer.Count > 0) //防止因为无当前堆垛机移库任务导致无法执行其他类型任务
|
|
|
+ {
|
|
|
+ #region 移库
|
|
|
+
|
|
|
+ Ltc.Log($"[{deviceCode}]开始获取移库任务");
|
|
|
+
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ //获取当前堆垛机未执行的任务
|
|
|
+ var task = db.Default.Set<WCS_TASK>().Where(v => v.DEVICE == dev.Entity.CODE && v.TYPE == TaskType.移库 && v.STATUS < TaskStatus.堆垛机执行).OrderBy(p => p.CREATETIME).FirstOrDefault();
|
|
|
+ if (task == null) return;
|
|
|
+ var loc = WMS.GetLocalIn(task.WMSTASK, task.TUNNEL, task.ADDRTO);
|
|
|
+ var locno = string.Format("{0}-{1}-{2}", loc.Row, loc.Colomn, loc.Layer);
|
|
|
+
|
|
|
+ task.STARTTIME = DateTime.Now;
|
|
|
+ task.UPDATETIME = DateTime.Now;
|
|
|
+ task.STATUS = WCS.Entity.TaskStatus.堆垛机执行;
|
|
|
+ task.DEVICE = dev.Entity.CODE;
|
|
|
+
|
|
|
+ task.TUNNEL = task.TUNNEL;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ task.CreateStatusLog(db);
|
|
|
+
|
|
|
+ Uploader.Upload(db);
|
|
|
+
|
|
|
+ dev.Data2.TaskID = task.ID;
|
|
|
+ var addrFrom = task.ADDRFROM.Split("-");
|
|
|
+ dev.Data2.SLine = short.Parse(addrFrom[1]);
|
|
|
+ dev.Data2.SCol = short.Parse(addrFrom[2]);
|
|
|
+ dev.Data2.SLayer = short.Parse(addrFrom[3]);
|
|
|
+
|
|
|
+ var addrTo = task.ADDRTO.Split("-");
|
|
|
+ dev.Data2.ELine = short.Parse(addrTo[1]);
|
|
|
+ dev.Data2.ECol = short.Parse(addrTo[2]);
|
|
|
+ dev.Data2.ELayer = short.Parse(addrTo[3]);
|
|
|
+
|
|
|
+ dev.Data2.Trigger = 1;
|
|
|
+ });
|
|
|
+
|
|
|
+ #endregion 移库
|
|
|
+ }
|
|
|
if (LastIsOut)
|
|
|
{
|
|
|
#region 入库
|