| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 | 
							- using SqlSugar;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using WCS.Data;
 
- using WCS.Data.Models;
 
- using WCS.PLC;
 
- using WCS.PLC.Model.Equipment;
 
- namespace WCS.Workflow
 
- {
 
-     public class SRM_Tray : Base_Srm
 
-     {
 
-         private string Conv_1508 = "1508";
 
-         private string Conv_1509 = "1509";
 
-         //private string Conv_1445 = "1445";
 
-         //private string Conv_1447 = "1447";
 
-         //private string Conv_1449 = "1449";
 
-         /// <summary>
 
-         /// 涂布车间出口集合
 
-         /// </summary>
 
-         private List<string> CoatingWorkshopList = new List<string>();
 
-         /// <summary>
 
-         /// 原膜卷出口集合(二楼)
 
-         /// </summary>
 
-         private List<string> OriginalFilmRollOutList = new List<string>();
 
-         /// <summary>
 
-         /// 一楼发货口集合
 
-         /// </summary>
 
-         private List<string> SendGoodsConvList = new List<string>();
 
-         #region Constructor
 
-         public SRM_Tray() : base()
 
-         {
 
-             CoatingWorkshopList.Add("1097");//4#涂布车间
 
-             CoatingWorkshopList.Add("1104");//5#涂布车间
 
-             CoatingWorkshopList.Add("1107");//6#涂布车间
 
-             CoatingWorkshopList.Add("1112");//7#涂布车间
 
-             CoatingWorkshopList.Add("1072");//空原膜托盘二坐标位置
 
-             OriginalFilmRollOutList.Add("Pvc_4_A");
 
-             OriginalFilmRollOutList.Add("Pvc_4_B");
 
-             OriginalFilmRollOutList.Add("Pvc_4_C");
 
-             OriginalFilmRollOutList.Add("Pvc_5_D");
 
-             OriginalFilmRollOutList.Add("Pvc_5_E");
 
-             OriginalFilmRollOutList.Add("Pvc_5_F");
 
-             OriginalFilmRollOutList.Add("Pvc_6_G");
 
-             OriginalFilmRollOutList.Add("Pvc_6_H");
 
-             OriginalFilmRollOutList.Add("Pvc_6_J");
 
-             OriginalFilmRollOutList.Add("Pvc_7_AA");
 
-             OriginalFilmRollOutList.Add("Pvc_7_AB");
 
-             OriginalFilmRollOutList.Add("Pvc_7_AK");
 
-             OriginalFilmRollOutList.Add("1036");
 
-             OriginalFilmRollOutList.Add("1035");
 
-             SendGoodsConvList.Add("1445");
 
-             SendGoodsConvList.Add("1447");
 
-             SendGoodsConvList.Add("1449");
 
-         }
 
-         #endregion;
 
-         protected override WCS_EQUIPMENTROUTE QueryOutEquRouteItem(WCS_TASK task, List<WCS_EQUIPMENTROUTE> routeSet)
 
-         {
 
-             WCS_EQUIPMENTROUTE routeItem = null;
 
-             if (task.TASK_POSIDTO == "Out_Area_A")
 
-             {
 
-                 if (task.FromRow == 1 || task.FromRow == 2)
 
-                 {
 
-                     routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1455");
 
-                 }
 
-                 else
 
-                 {
 
-                     routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1454");
 
-                 }
 
-             }
 
-             else if (task.TASK_POSIDTO == "1454")
 
-             {
 
-                 routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1454");
 
-             }
 
-             else if (task.TASK_POSIDTO == "1455")
 
-             {
 
-                 routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1455");
 
-             }
 
-             else if (task.TASK_FromTunnelNum == "1")
 
-             {
 
-                 routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1036");
 
-             }
 
-             else if (task.TASK_FromTunnelNum == "2")
 
-             {
 
-                 routeItem = routeSet.FirstOrDefault(v => v.ROUTE_SONPOS == "1035");
 
-             }
 
-             else
 
-             {
 
-                 routeItem = base.QueryOutEquRouteItem(task, routeSet);
 
-             }
 
-             return routeItem;
 
-         }
 
-         protected override bool CheckAreaOutAddress(WCS_TASK task, WCS_EQUIPMENTROUTE route)
 
-         {
 
-             bool result = true;
 
-             if (task.TASK_POSIDTO == "Out_Area_A")
 
-             {
 
-                 if (task.FromRow == 1 || task.FromRow == 2)
 
-                 {
 
-                     if (route.ROUTE_SONPOS == "1454")
 
-                     {
 
-                         result = false;
 
-                         //var cv = ConveyorHelper.GetConveyorSignal("conveyor01", "1455");
 
-                         //if (cv.DB521_Request == false && cv.DB521_Tasknum == 0 && cv.CvDB51_PH_Status == false)
 
-                         //{
 
-                         //    result = false;
 
-                         //}
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     if (route.ROUTE_SONPOS == "1455")
 
-                     {
 
-                         var cv = ConveyorHelper.GetConveyorSignal("conveyor01", "1454");
 
-                         if (cv.DB521_Request == false && cv.DB521_Tasknum == 0 && cv.CvDB51_PH_Status == false)
 
-                         {
 
-                             result = false;
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             if (route.ROUTE_SONPOS == "1036")
 
-             {
 
-                 if (task.TASK_FromTunnelNum != "1")
 
-                 {
 
-                     result = false;
 
-                 }
 
-             }
 
-             else if (route.ROUTE_SONPOS == "1035")
 
-             {
 
-                 if (task.TASK_FromTunnelNum != "2")
 
-                 {
 
-                     result = false;
 
-                 }
 
-             }
 
-             return result;
 
-         }
 
-         protected override WCS_TASK QueryInConvTask(WCS_SrmOutInInfo outininfo, WCS_TASK tasks)
 
-         {
 
-             return base.QueryInConvTask(outininfo, tasks);  
 
-         }
 
-         protected override WCS_TASK QueryOutTask(SqlSugarClient db, List<WCS_TASK> taskSet)
 
-         {
 
-             WCS_TASK taskitem = null;
 
-             List<WCS_TASK> taskList = new List<WCS_TASK>();
 
-             if (PlcName == "srm01")
 
-             {
 
-                 var lastTask = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_SRMNO == PlcName && v.TASK_WKSTATUS <= 1 && v.TASK_COMTYPE == 2 && (OriginalFilmRollOutList.Contains(v.TASK_POSIDTO))).OrderBy(v => v.TASK_ADDDATETIME).First();
 
-                 //var lastTask = taskSet.OrderBy(v => v.TASK_ADDDATETIME).FirstOrDefault();
 
-                 if (lastTask != null)
 
-                 {
 
-                     if (lastTask.TASK_ADDDATETIME.AddMinutes(60) < db.GetDate())//1小时未动作
 
-                     {
 
-                         //查询到2条任务
 
-                         var temptasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_ITEM8 == lastTask.TASK_ITEM8 && v.TASK_WKSTATUS <= 1 && v.TASK_COMTYPE == 2 && v.TASK_SRMNO == PlcName).ToList();
 
-                         //查询当前巷道任务
 
-                         var curTunnelSet = temptasks.Where(v => taskSet.Any(t => t.TASK_NO == v.TASK_NO));
 
-                         if (curTunnelSet.Count() > 0)
 
-                         {
 
-                             taskList.AddRange(curTunnelSet);
 
-                         }
 
-                         //查询非当前巷道任务
 
-                         var noCurTunnelSet = temptasks.Where(v => !taskSet.Any(t => t.TASK_NO == v.TASK_NO));
 
-                         if (noCurTunnelSet.Count() > 0)
 
-                         {
 
-                             taskList.AddRange(noCurTunnelSet);
 
-                         }
 
-                         //taskList.AddRange(temptasks);
 
-                     }
 
-                 }
 
-                 var taskgroup_1 = taskSet.Where(v => v.TASK_FromTunnelNum == "1").OrderBy(v => v.TASK_ADDDATETIME)
 
-                                        .GroupBy(v => v.TASK_ITEM8)
 
-                                        .Select(g => new { agvId = g.Key, count = g.Count() }).OrderByDescending(v => v.count);
 
-                 var taskgroup_2 = taskSet.Where(v => v.TASK_FromTunnelNum == "2").OrderBy(v => v.TASK_ADDDATETIME)
 
-                                   .GroupBy(v => v.TASK_ITEM8)
 
-                                   .Select(g => new { agvId = g.Key, count = g.Count() }).OrderByDescending(v => v.count);
 
-                 if (EquSignal.DB521_ToRowPos == 1 || EquSignal.DB521_ToRowPos == 2)
 
-                 {
 
-                     //添加1巷道分组排序任务
 
-                     foreach (var item in taskgroup_1)
 
-                     {
 
-                         if (!taskList.Any(v => v.TASK_ITEM8 == item.agvId))
 
-                         {
 
-                             taskList.AddRange(taskSet.Where(v => v.TASK_ITEM8 == item.agvId));
 
-                         }
 
-                     }
 
-                     //添加2巷道分组排序任务
 
-                     foreach (var item in taskgroup_2)
 
-                     {
 
-                         if (!taskList.Any(v => v.TASK_ITEM8 == item.agvId))
 
-                         {
 
-                             taskList.AddRange(taskSet.Where(v => v.TASK_ITEM8 == item.agvId));
 
-                         }
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     //添加2巷道分组排序任务
 
-                     foreach (var item in taskgroup_2)
 
-                     {
 
-                         if (!taskList.Any(v => v.TASK_ITEM8 == item.agvId))
 
-                         {
 
-                             taskList.AddRange(taskSet.Where(v => v.TASK_ITEM8 == item.agvId));
 
-                         }
 
-                     }
 
-                     //添加1巷道分组排序任务
 
-                     foreach (var item in taskgroup_1)
 
-                     {
 
-                         if (!taskList.Any(v => v.TASK_ITEM8 == item.agvId))
 
-                         {
 
-                             taskList.AddRange(taskSet.Where(v => v.TASK_ITEM8 == item.agvId));
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 taskList = taskSet;
 
-             }
 
-             foreach (var task in taskList)
 
-             {
 
-                 if (task.TASK_POSIDTO == Conv_1508)
 
-                 {
 
-                     if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == Conv_1508 && (v.TASK_WKSTATUS == 2 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9)))
 
-                     {
 
-                         taskitem = task;
 
-                         break;
 
-                     }
 
-                 }
 
-                 else if (task.TASK_POSIDTO == Conv_1509)
 
-                 {
 
-                     if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDTO == Conv_1509 && (v.TASK_WKSTATUS == 2 || v.TASK_WKSTATUS == 7 || v.TASK_WKSTATUS == 9)))
 
-                     {
 
-                         taskitem = task;
 
-                         break;
 
-                     }
 
-                 }
 
-                 if (CoatingWorkshopList.Contains(task.TASK_POSIDTO) && (PlcName == "srm05" || PlcName == "srm04"))
 
-                 {
 
-                     //string taryType = string.IsNullOrWhiteSpace(task.TASK_ITEM2) ? string.Empty : task.TASK_ITEM2.Trim();
 
-                     //string isEmpty = string.IsNullOrWhiteSpace(task.TASK_ITEM3) ? string.Empty : task.TASK_ITEM3.Trim();
 
-                     if (task.TASK_POSIDTO == "1072")
 
-                     {
 
-                         //检查缓存数量
 
-                         var count = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_WKSTATUS > 1 && v.TASK_POSIDTO == "1072").Count();
 
-                         if (count < 3)
 
-                         {
 
-                             taskitem = task;
 
-                             break;
 
-                         }
 
-                     }
 
-                     else
 
-                     {
 
-                         //检查缓存数量
 
-                         var count = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_WKSTATUS == 2 && (v.TASK_POSIDNEXT == "1085")).Count();
 
-                         if (count < 10)
 
-                         {
 
-                             taskitem = task;
 
-                             break;
 
-                         }
 
-                     }
 
-                 }
 
-                 else if (SendGoodsConvList.Contains(task.TASK_POSIDTO))
 
-                 {
 
-                     int taskcount = QueryOutConvTaskCount(task.TASK_POSIDTO);
 
-                     if (taskcount < 2)
 
-                     {
 
-                         taskitem = task;
 
-                         break;
 
-                     }
 
-                 }
 
-                 else if (OriginalFilmRollOutList.Contains(task.TASK_POSIDTO) && PlcName == "srm01")
 
-                 {
 
-                     if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1036"))
 
-                     {
 
-                         break;
 
-                     }
 
-                     var originalTrayTasks = SugarBase.DB.Queryable<WCS_TASK>().Where(v => v.TASK_WKSTATUS == 2 && v.TASK_POSIDNEXT == "1072").ToList();
 
-                     //检查是否已组盘一个卷,未组盘第二卷
 
-                     var originalTrayTask = originalTrayTasks.FirstOrDefault(v => string.IsNullOrWhiteSpace(v.TASK_ITEM6));
 
-                     if (originalTrayTask != null)//已组盘第一个
 
-                     {
 
-                         if (task.TASK_ITEM1.Trim() == originalTrayTask.TASK_ITEM1.Trim())
 
-                         {
 
-                             taskitem = task;
 
-                             break;
 
-                         }
 
-                         if (SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_WKSTATUS == 2 && (v.TASK_POSIDNEXT == "1036" || v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1070") && v.TASK_ITEM1 == originalTrayTask.TASK_ITEM1))
 
-                         {
 
-                             if (CheckOutTask(task))
 
-                             {
 
-                                 taskitem = task;
 
-                                 break;
 
-                             }
 
-                         }
 
-                         //if (task.TASK_ITEM1.Trim() == originalTrayTask.TASK_ITEM1.Trim() ||
 
-                         //    SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_WKSTATUS == 2 && (v.TASK_POSIDNEXT == "1036" || v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1070") && v.TASK_ITEM1 == originalTrayTask.TASK_ITEM1))
 
-                         //{
 
-                         //    taskitem = task;
 
-                         //    break;
 
-                         //}
 
-                     }
 
-                     else
 
-                     {
 
-                         //查询已出库的原膜卷任务
 
-                         var originalTask = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_POSIDNEXT == "1036" || v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1070");
 
-                         if (originalTask == null)//二楼没有出库待组盘的原膜卷
 
-                         {
 
-                             if (CheckOutTask(task))
 
-                             {
 
-                                 taskitem = task;
 
-                                 break;
 
-                             }
 
-                         }
 
-                         else if (originalTask.TASK_ITEM1.Trim() == task.TASK_ITEM1.Trim())
 
-                         {
 
-                             //二楼已经出库一个待组盘的原膜卷
 
-                             taskitem = task;
 
-                             break;
 
-                         }
 
-                         else if (SugarBase.DB.Queryable<WCS_TASK>().Count(v => v.TASK_WKSTATUS <= 1 && v.TASK_SRMNO == "srm01" && v.TASK_ITEM1 == originalTask.TASK_ITEM1) == 0)//二楼出库的原膜卷是单卷
 
-                         {
 
-                             if (CheckOutTask(task))
 
-                             {
 
-                                 taskitem = task;
 
-                                 break;
 
-                             }
 
-                         }
 
-                         ////查询已出库的原膜卷任务
 
-                         //var originalTask = SugarBase.DB.Queryable<WCS_TASK>().Single(v => v.TASK_POSIDNEXT == "1036" || v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1070");
 
-                         //if (originalTask == null || //二楼没有出库待组盘的原膜卷
 
-                         //   originalTask.TASK_ITEM1.Trim() == task.TASK_ITEM1.Trim() || //二楼已经出库一个待组盘的原膜卷
 
-                         //   SugarBase.DB.Queryable<WCS_TASK>().Count(v => v.TASK_WKSTATUS <= 1 && v.TASK_SRMNO == "srm01" && v.TASK_ITEM1 == originalTask.TASK_ITEM1) == 0)//二楼出库的原膜卷是单卷
 
-                         //{
 
-                         //    taskitem = task;
 
-                         //    break;
 
-                         //}
 
-                     }
 
-                 }
 
-                 else if (task.TASK_POSIDTO.Contains("Pvc_18"))
 
-                 {
 
-                     int count = SugarBase.DB.Queryable<WCS_TASK>().Count(v => v.TASK_WKSTATUS > 1 && v.TASK_POSIDTO.Contains("Pvc_18"));
 
-                     if (count < 9)
 
-                     {
 
-                         taskitem = task;
 
-                         break;
 
-                     }
 
-                 }
 
-                 else
 
-                 {
 
-                     taskitem = task;
 
-                     break;
 
-                 }
 
-             }
 
-             return taskitem;
 
-         }
 
-         private int QueryOutConvTaskCount(string conv)
 
-         {
 
-             int taskcount = 0;
 
-             var cv = ConveyorHelper.GetConveyorSignal("conveyor01", conv);
 
-             if (cv.DB521_Tasknum > 0) taskcount++;
 
-             int count = SugarBase.DB.Queryable<WCS_TASK>().Count(v => v.TASK_POSIDTO == conv && v.TASK_POSIDCUR != conv && v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS < 99);
 
-             taskcount = taskcount + count;
 
-             return taskcount;
 
-         }
 
-         private bool CheckOutTask(WCS_TASK task)
 
-         {
 
-             string srm01 = "srm01";
 
-             bool isOk = false;
 
-             string tunnelNum = string.Empty;
 
-             var inTask = SugarBase.DB.Queryable<WCS_TASK>().First(v => v.TASK_SRMNO == srm01 && v.TASK_COMTYPE == 1 && v.TASK_WKSTATUS == 2);
 
-             if (inTask == null)
 
-             {
 
-                 if (EquSignal.DB521_ToRowPos == 1 || EquSignal.DB521_ToRowPos == 2)
 
-                 {
 
-                     tunnelNum = "1";
 
-                 }
 
-                 else
 
-                 {
 
-                     tunnelNum = "2";
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 tunnelNum = inTask.TASK_EndTunnelNum;
 
-             }
 
-             if (tunnelNum == "1")
 
-             {
 
-                 if (task.TASK_FromTunnelNum == "1")
 
-                 {
 
-                     isOk = true;
 
-                 }
 
-                 else
 
-                 {
 
-                     //没有1号巷道的未执行出库任务
 
-                     if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_SRMNO == srm01 &&
 
-                                                                      v.TASK_COMTYPE == 2 &&
 
-                                                                      v.TASK_WKSTATUS <= 1 &&
 
-                                                                      v.TASK_FromTunnelNum == "1" &&
 
-                                                                      v.TASK_POSIDTO == "1036"))
 
-                     {
 
-                         isOk = true;
 
-                     }
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 if (task.TASK_FromTunnelNum == "2")
 
-                 {
 
-                     isOk = true;
 
-                 }
 
-                 else
 
-                 {
 
-                     //没有2号巷道的未执行出库任务
 
-                     if (!SugarBase.DB.Queryable<WCS_TASK>().Any(v => v.TASK_SRMNO == srm01 &&
 
-                                                                      v.TASK_COMTYPE == 2 &&
 
-                                                                      v.TASK_WKSTATUS <= 1 &&
 
-                                                                      v.TASK_FromTunnelNum == "2" &&
 
-                                                                      v.TASK_POSIDTO == "1035"))
 
-                     {
 
-                         isOk = true;
 
-                     }
 
-                 }
 
-             }
 
-             return isOk;
 
-         }
 
-     }
 
- }
 
 
  |