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