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