using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using WCS.Data; using WCS.Data.Models; using WCS.Data.Utils; using WCS.PLC; using WCS.PLC.Model.Equipment; namespace WCS.Workflow { public class WCSWorkflow { /// /// 查询重复使用的数据 /// public static void RefreshData() { var result = TryCachHelper.TryExecute((db) => { Current.TaskSet = db.Queryable().ToList().Where(v => Current.WareNameList.Contains(v.TASK_WHID)).ToList(); Current.AgvTaskSet = db.Queryable().ToList().Where(v => Current.WareNameList.Contains(v.Task_Whid)).ToList(); Current.AgvCachePostionSet = db.Queryable().ToList(); Current.WCS_TASKTIMEPOINTSet = db.Queryable().ToList(); Current.SysSets = db.Queryable().ToList(); Current.WCS_SrmOutInInfoSet = db.Queryable().ToList().Where(v => Current.PlcSet.Any(t => t.PLC_NAME == v.SRMOUTIN_CONVPLCNAME)).ToList(); Current.WCS_CacheInfoSet = SugarBase.DB.Queryable().ToList(); Current.WCS_RGVOutInInfoSet = SugarBase.DB.Queryable().ToList().Where(v => Current.PlcSet.Any(t => t.PLC_NAME == v.PLCNAME)).ToList(); }); } /// /// 查询最新1000条日志信息 /// public static void RefreshLogData() { TryCachHelper.TryExecute((db) => { BaseCurrent.Wcs_LogSet = db.Queryable().OrderBy(v => v.LOG_ID, SqlSugar.OrderByType.Desc).ToPageList(0, 1000); //Current.SysSets = db.Queryable().ToList(); }); } private static int _UpdateTaskCurAddress = 0; public static void UpdateTaskCurAddress() { if (Interlocked.Exchange(ref _UpdateTaskCurAddress, 1) == 0) { TryCachHelper.TryExecute((db) => { foreach (var plc in Current.PlcSet) { if (plc.PLC_ISENABLE == false) continue; foreach (var equipment in plc.WCS_EquipmentInfoSet) { if (equipment.Equ_Type == EquipmentType.conveyor.ToString()) { var cs = equipment.EquSignal_Conv; if (cs != null && cs.DB521_Tasknum > 0) { var task = db.Queryable().First(v => v.TASK_NO == cs.DB521_Tasknum); if (task != null && task.TASK_POSIDCUR != equipment.Equ_No && task.TASK_WKSTATUS != 13) { db.Updateable(it => new WCS_TASK() { TASK_POSIDCUR = equipment.Equ_No, TASK_EDITDATETIME = DateTime.Now }) .Where(it => it.TASK_NO == task.TASK_NO) .ExecuteCommand(); } } } else if (equipment.Equ_Type == EquipmentType.rgv.ToString()) { var rs = equipment.EquSignal_Rgv; if (rs == null) continue; if (rs.DB521_TaskID_1 > 0 && rs.DB521_PH_Status_1) { var rgvoutininfoSet = Current.WCS_RGVOutInInfoSet.Where(v => v.RGVOUTIN_RGVNO == equipment.Equ_No).ToList(); bool isExitConvTask = false; foreach (var item in rgvoutininfoSet) { var conv = ConveyorHelper.GetConveyorSignal(item.PLCNAME, item.RGVOUTIN_CONVNO); if (conv.DB521_Tasknum == rs.DB521_TaskID_1) { isExitConvTask = true; break; } } if (isExitConvTask == false) { var task = db.Queryable().First(v => v.TASK_NO == rs.DB521_TaskID_1); if (task != null && task.TASK_POSIDCUR != equipment.Equ_No && (task.TASK_WKSTATUS == 7 || task.TASK_WKSTATUS == 3 || task.TASK_WKSTATUS == 4)) { db.Updateable(it => new WCS_TASK() { TASK_POSIDCUR = equipment.Equ_No, TASK_EDITDATETIME = DateTime.Now }) .Where(it => it.TASK_NO == task.TASK_NO) .ExecuteCommand(); } } } if (rs.DB521_TaskID_2 > 0 && rs.DB521_PH_Status_2) { var rgvoutininfoSet = Current.WCS_RGVOutInInfoSet.Where(v => v.RGVOUTIN_RGVNO == equipment.Equ_No).ToList(); bool isExitConvTask = false; foreach (var item in rgvoutininfoSet) { var conv = ConveyorHelper.GetConveyorSignal(item.PLCNAME, item.RGVOUTIN_CONVNO); if (conv.DB521_Tasknum == rs.DB521_TaskID_2) { isExitConvTask = true; break; } } if (isExitConvTask == false) { var task = db.Queryable().First(v => v.TASK_NO == rs.DB521_TaskID_2); if (task != null && task.TASK_POSIDCUR != equipment.Equ_No && (task.TASK_WKSTATUS == 7 || task.TASK_WKSTATUS == 3 || task.TASK_WKSTATUS == 4)) { db.Updateable(it => new WCS_TASK() { TASK_POSIDCUR = equipment.Equ_No, TASK_EDITDATETIME = DateTime.Now }) .Where(it => it.TASK_NO == task.TASK_NO) .ExecuteCommand(); } } } } } } }); Interlocked.Exchange(ref _UpdateTaskCurAddress, 0); } } private static int _updateExceptionTask = 0; public static void UpdateExceptionTask() { if (Interlocked.Exchange(ref _updateExceptionTask, 1) == 0) { try { int milliseconds = 1000 * 60 * 10;//延时10分钟 Thread.Sleep(milliseconds); var task = SugarBase.DB.Queryable().First(v => v.TASK_COMTYPE == 6 && v.TASK_WKSTATUS > 1 && v.TASK_WKSTATUS < 99); var dt = SugarBase.DB.GetDate(); if (task != null && task.TASK_EDITDATETIME.AddHours(8) < dt)//8小时未完成,自动完成 { SugarBase.DB.Updateable(it => new WCS_TASK() { TASK_WKSTATUS = 99, TASK_EDITDATETIME = dt }) .Where(it => it.TASK_NO == task.TASK_NO) .ExecuteCommand(); } } catch (Exception ex) { LogMessageHelper.RecordLogMessage(ex); } finally { Interlocked.Exchange(ref _updateExceptionTask, 0); } } } #region AGV相关 #endregion; } }