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"; /// /// 涂布车间出口集合 /// private List CoatingWorkshopList = new List(); /// /// 原膜卷出口集合(二楼) /// private List OriginalFilmRollOutList = new List(); /// /// 一楼发货口集合 /// private List SendGoodsConvList = new List(); #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 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 taskSet) { WCS_TASK taskitem = null; List taskList = new List(); if (PlcName == "srm01") { var lastTask = SugarBase.DB.Queryable().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().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().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().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().Where(v => v.TASK_WKSTATUS > 1 && v.TASK_POSIDTO == "1072").Count(); if (count < 3) { taskitem = task; break; } } else { //检查缓存数量 var count = SugarBase.DB.Queryable().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().Any(v => v.TASK_POSIDNEXT == "1035" || v.TASK_POSIDNEXT == "1036")) { break; } var originalTrayTasks = SugarBase.DB.Queryable().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().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().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().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().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().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().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().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().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().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().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().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; } } }