| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 
							- using DBHelper;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using WCS.Core;
 
- using WCS.Entity;
 
- using WCS.Entity.Protocol;
 
- namespace WCS.Service.Works.Stations
 
- {
 
-     //[WorkTitle(typeof(ProductHandler), "出库交通管制", true)]
 
-     public class 出库交通管制 : DeviceWork<Device<IStation521, IStation520>>
 
-     { 
 
-         protected override void Do(Device<IStation521, IStation520> obj)
 
-         {
 
-             if (Ltc.Do(obj, v => v.Data2.CONFIRM == true))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.TASKNUM == 0))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.PH_STATUS == false))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.GOODSEND != v.Entity.Code()))
 
-                 return;
 
-             DB.Do(db =>
 
-             {
 
-                 var task = db.Default.Set<WCS_TASK>().Find(obj.Data.TASKNUM);
 
-                 if (task.TYPE == TaskType.出库)
 
-                 {
 
-                     //var outPath = obj.Entity.GetPath(task.ADDRTO);
 
-                     //var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TYPE == TaskType.入库 || v.TYPE == TaskType.组盘)
 
-                     //.Where(v => v.STATUS < WCS.Entity.TaskStatus.堆垛机执行 && v.STATUS > WCS.Entity.TaskStatus.新建)
 
-                     //.Where(v => v.ADDRFROM == task.ADDRTO).ToArray();
 
-                     ////tasks = tasks.Where(v => v.ID == 17328).ToArray();
 
-                     //var arr = tasks.Select(v =>
 
-                     //{
 
-                     //    var current = v.AddrCurrent(db);
 
-                     //    var path = Device.Find(current).GetPath(v.ADDRNEXT);
 
-                     //    if (path == null)
 
-                     //        path = new List<WCS_DEVICE>();
 
-                     //    return new
 
-                     //    {
 
-                     //        Task = v,
 
-                     //        Path = path.Concat(new List<WCS_DEVICE> { Device.Find(current) })
 
-                     //    };
 
-                     //}).ToArray(); 
 
-                     //var t = arr.Where(v => v.Path.Intersect(outPath).Where(v => v.IsConv()).Count() > 0).FirstOrDefault();
 
-                     //if (t != null)
 
-                     //{
 
-                     //    throw new Exception("交通管制,与任务" + t.Task.ID + "路径冲突");
 
-                     //}
 
-                     var any = false;
 
-                     if (obj.Entity.CODE == "2366")
 
-                         any = Device.Find("2123", "2125", "2126", "2327", "2128", "2131").Select(v => v.Device<IStation521>()).Where(v => v.Data.GOODSEND == 2153 || v.Data.GOODSEND == 2161).Any();
 
-                     else
 
-                         any = Device.Find("2114", "2116", "2117", "2328", "2119", "2122").Select(v => v.Device<IStation521>()).Where(v => v.Data.GOODSEND == 2359).Any();
 
-                     if (any)
 
-                         throw new Exception($"交通管制,有正在执行的入库任务");
 
-                     var q = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Status < AGVTaskStatus.完成扫码 && v.Status > AGVTaskStatus.新建);
 
-                     if (task.ADDRTO == "2086")
 
-                     { 
 
-                         q = q.Where(v => v.Station == "2088");
 
-                     }
 
-                     else
 
-                     {
 
-                         q = q.Where(v => v.Station == task.ADDRTO);
 
-                     }
 
-                     var agvtask = q.FirstOrDefault();
 
-                     if (agvtask != null)
 
-                     {
 
-                         throw new Exception("交通管制,与AGV任务" + agvtask.ID + "冲突");                      
 
-                     }
 
-                     task.ADDRNEXT = task.ADDRTO;
 
-                     task.UPDATETIME = DateTime.Now;
 
-                     db.Default.SaveChanges();
 
-                     obj.Data2.GOODSEND = short.Parse(task.ADDRNEXT);
 
-                     obj.Data2.TASKNUM = task.ID;
 
-                     obj.Data2.GOODSCODE = obj.Data.GOODSCODE;
 
-                     obj.Data2.GOODSSIZE = obj.Data.GOODSSIZE;
 
-                     obj.Data2.GOODSTYPE = obj.Data.GOODSTYPE;
 
-                     obj.Data2.HEIGHT = obj.Data.HEIGHT;
 
-                     obj.Data2.CONFIRM = true;
 
-                 }
 
-             });
 
-         } 
 
-         protected override bool SelectDevice(WCS_DEVICE dev)
 
-         {
 
-             return false;// new string[] { "2108" }.Contains(dev.CODE);
 
-         }
 
-     }
 
-     [WorkTitle(typeof(ProductHandler), "交管2325", true)]
 
-     public class 交管2325 : DeviceWork<Device<IStation521, IStation520>>
 
-     {
 
-         protected override void Do(Device<IStation521, IStation520> obj)
 
-         {
 
-             if (Ltc.Do(obj, v => v.Data2.CONFIRM == true))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.TASKNUM == 0))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.PH_STATUS == false))
 
-                 return;
 
-             if (Ltc.Do(obj, v => v.Data.GOODSEND != v.Entity.Code()))
 
-                 return;
 
-             //if (Ltc.Do(obj, v => !v.Entity.WakeupOn(5000, "交通管制")))
 
-             //    return;
 
-             DB.Do(db =>
 
-             {
 
-                 var task = db.Default.Set<WCS_TASK>().Find(obj.Data.TASKNUM);
 
-                 if (task.TYPE == TaskType.出库)
 
-                 {
 
-                     var rgv = Device.Find("RGV5").Device<IRGV521, IRGV520>();
 
-                     if (rgv.Data2.Trigger == 1)
 
-                         throw new Exception("等待WCS与RGV5交互完成");
 
-                     var outqty = (rgv.Data.DestPosition == 2081 && rgv.Data.SystemStatus != RGVRunStatus.空闲) ? 1 : 0;
 
-                     outqty += Device.Where(v => "2325,2081,2083,2084,2086".Split(',').Contains(v.CODE)).Select(v => v.Device<IStation521, IStation520>())
 
-                     .Where(v => v.Data.GOODSEND == 2086 || (v.Data2.GOODSEND == 2086 && v.Data2.CONFIRM))
 
-                     .Count();
 
-                     if (outqty >= 2)
 
-                     {
 
-                         throw new Exception($"流量控制,放行任务数已达{outqty}");
 
-                     }
 
-                     var inqty = Device.Where(v => "2081,2083,2088".Split(',').Contains(v.CODE)).Select(v => v.Device<IStation521,IStation520>())
 
-                     .Where(v => v.Data.GOODSEND == 2324||(v.Data2.GOODSEND==2324&&v.Data2.CONFIRM))
 
-                     .Count();
 
-                     if (inqty > 0)
 
-                     {
 
-                         throw new Exception($"交通管制,正在入库的任务数{inqty}");
 
-                     }
 
-                     //var outPath = obj.Entity.GetPath(task.ADDRTO);
 
-                     //var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TYPE == TaskType.入库).Where(v => v.ADDRFROM == "2088")
 
-                     //.Where(v => v.STATUS < WCS.Entity.TaskStatus.堆垛机执行 && v.STATUS > WCS.Entity.TaskStatus.新建).ToArray();
 
-                     //var arr = tasks.Select(v =>
 
-                     //{
 
-                     //    var current = v.AddrCurrent(db);
 
-                     //    var path = Device.Find(current).GetPath(v.ADDRNEXT);
 
-                     //    if (path == null)
 
-                     //        path = new List<WCS_DEVICE>();
 
-                     //    return new
 
-                     //    {
 
-                     //        Task = v,
 
-                     //        Path = path.Concat(new List<WCS_DEVICE> { Device.Find(current) })
 
-                     //    };
 
-                     //}).ToArray();
 
-                     //var t = arr.Where(v => v.Path.Intersect(outPath).Where(v => v.IsConv()).Count() > 0).FirstOrDefault();
 
-                     //if (t != null)
 
-                     //{
 
-                     //    throw new Exception("交通管制,与任务" + t.Task.ID + "路径冲突");
 
-                     //}
 
-                     task.ADDRNEXT = task.ADDRTO;
 
-                     task.UPDATETIME = DateTime.Now;
 
-                     db.Default.SaveChanges();
 
-                     obj.Data2.GOODSEND = short.Parse(task.ADDRNEXT);
 
-                     obj.Data2.TASKNUM = task.ID;
 
-                     obj.Data2.GOODSCODE = obj.Data.GOODSCODE;
 
-                     obj.Data2.GOODSSIZE = obj.Data.GOODSSIZE;
 
-                     obj.Data2.GOODSTYPE = obj.Data.GOODSTYPE;
 
-                     obj.Data2.HEIGHT = obj.Data.HEIGHT;
 
-                     obj.Data2.CONFIRM = true;
 
-                 }
 
-             });
 
-         }
 
-         protected override bool SelectDevice(WCS_DEVICE dev)
 
-         {
 
-             return new string[] {  "2325" }.Contains(dev.CODE);
 
-         }
 
-     }
 
- }
 
 
  |