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;
- }
- }
- }
|