using HH.WCS.ZhongCeJinTan.device; using HH.WCS.ZhongCeJinTan.dispatch; using HH.WCS.ZhongCeJinTan.util; using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Services.Description; using System.Xml.Linq; using static HH.WCS.ZhongCeJinTan.util.Settings; using static HH.WCS.ZhongCeJinTan.wms.WcsModel; namespace HH.WCS.ZhongCeJinTan.wms { internal class TaskHelper { internal static string GenerateTaskNo() { var date = DateTime.Now.ToString("yyMMdd"); var id = SYSHelper.GetSerialNumber("任务号", "TN" + date); return $"TN{date}{id.ToString().PadLeft(4, '0')}"; } internal static string GenerateTrayNo() { var id = SYSHelper.GetSerialNumber("托盘号", "TP"); var date = DateTime.Now.ToString("yyMMdd"); return $"TP{date}{id.ToString().PadLeft(4, '0')}"; } internal static bool UpdateStatus(WMSTask task, string status) { var res = false; var db = new SqlHelper().GetInstance(); task.S_B_STATE = status; task.N_B_STATE = 1; db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE,it.N_B_STATE }).ExecuteCommand(); return res; } internal static WMSTask GetTask(string no) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CODE.Trim() == no).First(); return task; } //查找WCS立库任务 参数作业编码,调度类型 agv/wcs internal static WMSTask GetTaskByWorkNo(string no,string type) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_OP_CODE == no && a.S_SCHEDULE_TYPE== type).First(); return task; } internal static WMSTask GetTaskByCntrCode(string cntrCode) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CNTR_CODE.Trim() == cntrCode && a.S_B_STATE!= "取消" && a.S_B_STATE != "失败").First(); return task; } internal static List GetTask() { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(b => b.S_B_STATE == "已推送" || b.S_B_STATE == "执行中" || b.S_B_STATE == "完成" || b.S_B_STATE == "取消").OrderByDescending(a => a.T_CREATE).ToList(); } internal static WMSTask GetTaskByKwName(string kwName,bool flag,int gzId) { var db = new SqlHelper().GetInstance(); var task = new WMSTask(); if (flag) { //起点库位名称 //task = db.Queryable().Where(a => a.stratKwName==kwName && a.GZ_ID==gzId && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" ).OrderByDescending(b=> b.T_CREATE).First(); } else { //终点库位名称 //task = db.Queryable().Where(a => a.endKwName == kwName && a.GZ_ID == gzId && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" ).OrderByDescending(b => b.T_CREATE).First(); } return task; } /// /// 查找起点有执行的任务 /// /// /// internal static WMSTask GetTaskByStartLoc(string loc) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_START_LOC == loc && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" && a.S_B_STATE != "已完成").OrderByDescending(b => b.T_CREATE).First(); return task; } /// /// 查找终点有执行的任务 /// /// /// internal static WMSTask GetTaskByEndLoc(string loc) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_END_LOC == loc && a.S_B_STATE != "完成" && a.S_B_STATE != "取消" && a.S_B_STATE != "失败" && a.S_B_STATE != "已完成").OrderByDescending(b => b.T_CREATE).First(); return task; } internal static List GetTask(long start, long end) { var db = new SqlHelper().GetInstance(); var tasks = db.Queryable().Where(a => SqlFunc.Between(SqlFunc.ToInt64(SqlFunc.Substring(a.S_CODE, 2, a.S_CODE.Length)), start, end)).ToList(); return tasks; } internal static List GetTaskByStart(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_START_LOC.Trim() == bit.Trim()).ToList(); return task; } internal static List GetTaskByEnd(string bit) { var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_END_LOC.Trim() == bit.Trim()).ToList(); return task; } internal static List GetTaskByType(string taskType) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_TYPE.Trim() == taskType).ToList(); } internal static bool CreateTask(string no, string from, string to, string taskType, int pri, string cntrInfo, int cntrCount = 1, int startLayer = 1, int endLayer = 1) { var fromLoc = LocationHelper.GetLocOne(from); var endLoc = LocationHelper.GetLocOne(to); WMSTask wmsTask = new WMSTask() { S_CODE = GenerateTaskNo(), S_START_AREA = fromLoc.S_AREA_CODE, S_END_AREA = endLoc.S_AREA_CODE, S_START_LOC = from, S_END_LOC = to, S_TYPE = taskType, N_PRIORITY = pri, S_B_STATE = "未执行", S_CNTR_CODE = cntrInfo, S_START_SITE_LAYER = startLayer, S_END_SITE_LAYER = endLayer, N_CNTR_COUNT = cntrCount, }; LogHelper.Info("任务创建:" + JsonConvert.SerializeObject(wmsTask),"任务"); return CreateTask(wmsTask); } /// /// 根据作业创建对应任务 /// /// 作业模型 public static void CreateTask(WmsWork operation) { // 根据任务类型创建不同的任务 switch (operation.N_TYPE) { case 0: //钢丝 纤维满托出一段任务 CreateOneTask(operation); break; case 1: //入库两段任务 CreateInTowTask(operation); break; case 2: //85纤维 95钢丝一段任务入三层货架 if (operation.TOOLSTYPE == "85" || operation.TOOLSTYPE == "95") { CreateOneTask(operation); } else { //半桶回库二段任务入立库区 CreateInTowTask(operation); } break; case 3: //空托入库作业,没接驳位就一段任务 if (string.IsNullOrEmpty(operation.CONNECTION)) { CreateOneTask(operation); } else { CreateInTowTask(operation); } break; case 4: //胎面呼叫空托出库两段任务 CreateOutTowTask(operation); break; case 5: //钢丝 纤维空托出一段任务 CreateOneTask(operation); break; case 7: CreateOutTowTask(operation); break; case 9: //85纤维 95钢丝一段任务从三层货架取 if (operation.TOOLSTYPE == "85" || operation.TOOLSTYPE == "95") { CreateOneTask(operation); } else { //呼叫胶料出库两段任务 CreateOutTowTask(operation); } break; case 12: CreateOneTask(operation); break; case 20: CreateOneTask(operation); break; } } /// /// 创建一条任务 /// /// private static void CreateOneTask(WmsWork operation) { var tasks = new List(); // 任务1 var task1 = new WMSTask() { // 作业编码 S_OP_CODE = operation.S_CODE, // 任务号 S_CODE = operation.S_CODE + "_1", // 任务类型 N_TYPE = operation.N_TYPE, // 任务类型 S_TYPE = operation.S_TYPE, // 起点货位 S_START_LOC = operation.S_START_LOC, // 起点库区 S_START_AREA = operation.S_START_AREA, //起点库区名称 S_START_AREA_NAME = operation.S_START_AREA_NAME, //终点库区名称 S_END_AREA_NAME = operation.S_END_AREA_NAME, // 终点货位 S_END_LOC = operation.S_END_LOC, // 终点库区 S_END_AREA = operation.S_END_AREA, // 设备类型 N_SCHEDULE_TYPE = 1, // 设备类型 S_SCHEDULE_TYPE = "agv", // 容器编码 S_CNTR_CODE = operation.S_CNTR_CODE, //任务状态 S_B_STATE = "未执行", // 优先级 N_PRIORITY = operation.N_PRIORITY, //工装类型 TOOLSTYPE = operation.TOOLSTYPE, }; try { // 修改作业状态为执行中 operation.N_B_STATE = 1; operation.S_B_STATE = "执行"; if (CreateTask(task1)) { LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2); LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1); LogHelper.Info($"任务{task1.S_OP_CODE}创建成功", "任务"); var db = new SqlHelper().GetInstance(); db.Updateable(operation).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); } else { LogHelper.Info($"任务{task1.S_OP_CODE}创建失败", "任务"); } } catch (Exception e) { LogHelper.Info("CreateOneTask异常信息" + e.Message, "任务"); throw; } } /// /// 创建两条任务(两段任务) /// /// private static void CreateInTowTask(WmsWork operation) { var ConnectionLoc = LocationHelper.GetLocOne(operation.CONNECTION); // 任务1 var task1 = new WMSTask() { // 作业编码 S_OP_CODE = operation.S_CODE, // 任务号 S_CODE = operation.S_CODE+"_1", // 任务类型 N_TYPE = operation.N_TYPE, // 任务类型 S_TYPE = operation.S_TYPE, // 起点货位 S_START_LOC = operation.S_START_LOC, // 起点库区 S_START_AREA = operation.S_START_AREA, // 终点货位 S_END_LOC = operation.CONNECTION, // 终点库区 S_END_AREA = ConnectionLoc.S_AREA_CODE, // 设备类型 N_SCHEDULE_TYPE = 2, // 设备类型 S_SCHEDULE_TYPE = "agv", // 容器编码 S_CNTR_CODE = operation.S_CNTR_CODE, //任务状态 S_B_STATE = "未执行", // 优先级 N_PRIORITY = operation.N_PRIORITY, //工装类型 TOOLSTYPE = operation.TOOLSTYPE, //起点库区名称 S_START_AREA_NAME = operation.S_START_AREA_NAME, //终点库区名称 S_END_AREA_NAME = operation.CONNECTION_AREA, }; // 任务2 var task2 = new WMSTask() { // 作业编码 S_OP_CODE = operation.S_CODE, // 任务号 S_CODE = operation.S_CODE + "_2", // 任务类型 N_TYPE = operation.N_TYPE, // 任务类型 S_TYPE = operation.S_TYPE, // 起点货位 S_START_LOC = operation.CONNECTION, // 起点库区 S_START_AREA = ConnectionLoc.S_AREA_CODE, // 终点货位 S_END_LOC = operation.S_END_LOC, // 终点库区 S_END_AREA = operation.S_END_AREA, // 设备类型 N_SCHEDULE_TYPE = 3, // 设备类型 S_SCHEDULE_TYPE = "wcs", // 容器编码 S_CNTR_CODE = operation.S_CNTR_CODE, //任务状态 S_B_STATE = "未执行", // 优先级 N_PRIORITY = operation.N_PRIORITY, //工装类型 TOOLSTYPE = operation.TOOLSTYPE, //起点库区名称 S_START_AREA_NAME = operation.CONNECTION_AREA, //终点库区名称 S_END_AREA_NAME = operation.S_END_AREA_NAME, }; try { // 修改作业状态为执行中 operation.N_B_STATE = 1; operation.S_B_STATE = "执行"; if (CreateTask(task1) && CreateTask(task2)) { LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2); LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1); LocationHelper.LockLoc(operation.CONNECTION, "其他锁", 3); LogHelper.Info($"任务{task1.S_CODE},{task2.S_CODE}创建成功", "任务"); var db = new SqlHelper().GetInstance(); db.Updateable(operation).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); } else { LogHelper.Info($"任务{task1.S_CODE},{task2.S_CODE}创建失败", "任务"); } } catch (Exception e) { LogHelper.Info("CreateOneTask异常信息" + e.Message, "任务"); throw; } } private static void CreateOutTowTask(WmsWork operation) { var ConnectionLoc = LocationHelper.GetLocOne(operation.CONNECTION); // 任务1 var task1 = new WMSTask() { // 作业编码 S_OP_CODE = operation.S_CODE, // 任务号 S_CODE = operation.S_CODE + "_1", // 任务类型 N_TYPE = operation.N_TYPE, // 任务类型 S_TYPE = operation.S_TYPE, // 起点货位 S_START_LOC = operation.S_START_LOC, // 起点库区 S_START_AREA = operation.S_START_AREA, // 终点货位 S_END_LOC = operation.CONNECTION, // 终点库区 S_END_AREA = ConnectionLoc.S_AREA_CODE, // 设备类型 N_SCHEDULE_TYPE = 2, // 设备类型 S_SCHEDULE_TYPE = "wcs", // 容器编码 S_CNTR_CODE = operation.S_CNTR_CODE, //任务状态 S_B_STATE = "未执行", // 优先级 N_PRIORITY = operation.N_PRIORITY, //工装类型 TOOLSTYPE = operation.TOOLSTYPE, //起点库区名称 S_START_AREA_NAME = operation.S_START_AREA_NAME, //终点库区名称 S_END_AREA_NAME = operation.CONNECTION_AREA, }; // 任务2 var task2 = new WMSTask() { // 作业编码 S_OP_CODE = operation.S_CODE, // 任务号 S_CODE = operation.S_CODE + "_2", // 任务类型 N_TYPE = operation.N_TYPE, // 任务类型 S_TYPE = operation.S_TYPE, // 起点货位 S_START_LOC = operation.CONNECTION, // 起点库区 S_START_AREA = ConnectionLoc.S_AREA_CODE, // 终点货位 S_END_LOC = operation.S_END_LOC, // 终点库区 S_END_AREA = operation.S_END_AREA, // 设备类型 N_SCHEDULE_TYPE = 3, // 设备类型 S_SCHEDULE_TYPE = "agv", // 容器编码 S_CNTR_CODE = operation.S_CNTR_CODE, //任务状态 S_B_STATE = "未执行", // 优先级 N_PRIORITY = operation.N_PRIORITY, //工装类型 TOOLSTYPE = operation.TOOLSTYPE, //起点库区名称 S_START_AREA_NAME = operation.CONNECTION_AREA, //终点库区名称 S_END_AREA_NAME = operation.S_END_AREA_NAME, }; try { // 修改作业状态为执行中 operation.N_B_STATE = 1; operation.S_B_STATE = "执行"; if (CreateTask(task1) && CreateTask(task2)) { LocationHelper.LockLoc(operation.S_START_LOC, "出库锁", 2); LocationHelper.LockLoc(operation.S_END_LOC, "入库锁", 1); LocationHelper.LockLoc(operation.CONNECTION, "入库锁", 1); LogHelper.Info($"任务{task1.S_CODE},{task2.S_CODE}创建成功", "任务"); var db = new SqlHelper().GetInstance(); db.Updateable(operation).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE }).ExecuteCommand(); } else { LogHelper.Info($"任务{task1.S_CODE},{task2.S_CODE}创建失败", "任务"); } } catch (Exception e) { LogHelper.Info("CreateOneTask异常信息" + e.Message, "任务"); throw; } } internal static bool CheckExist(string no) { return GetTask(no.Trim()) != null; } internal static bool UpdateStatus(string no, string status) { var res = false; var db = new SqlHelper().GetInstance(); var task = db.Queryable().Where(a => a.S_CODE.Trim() == no).First(); //if (task != null) { task.S_B_STATE = status; //需要判断任务是否失败或者已完成,不允许再修改 res = db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE }).ExecuteCommand() > 0; //} return res; } internal static bool AddActionRecord(string no, int state, string forkliftNo, string extData = "0") { var db = new SqlHelper().GetInstance(); var action = new WmsTaskAction() { S_ACTION = state.ToString(), S_TASK_CODE = no, S_EQ_CODE = forkliftNo, S_EQ_TYPE = "agv", S_DATA = extData }; return db.Insertable(action).ExecuteCommand() > 0; } internal static WmsTaskAction GetActionRecord(string taskNo,string action) { var db = new SqlHelper().GetInstance(); var ac = db.Queryable().Where(a => a.S_TASK_CODE == taskNo && a.S_ACTION == action).First(); return ac; } /// /// 任务拦截 /// /// /// internal static bool Intercept() { var db = new SqlHelper().GetInstance(); var model = db.Queryable().First(); if (model != null && model.State == "Y") { return false; } else { return true; } } internal static bool WcsAddActionRecord(string no, string state, string forkliftNo, string extData = "0") { var db = new SqlHelper().GetInstance(); var action = new WmsTaskAction() { S_ACTION = state.ToString(), S_TASK_CODE = no, S_EQ_CODE = forkliftNo, S_EQ_TYPE = "wcs", S_DATA = extData }; return db.Insertable(action).ExecuteCommand() > 0; } internal static bool CheckActionRecordExist(string no, string code) { var db = new SqlHelper().GetInstance(); return db.Queryable().Count(a => a.S_TASK_CODE.Trim() == no.Trim() && a.S_ACTION == code) > 0; } //internal static void Begin(WMSTask task,string avgNo) { // var db = new SqlHelper().GetInstance(); // if (task != null) { // if (task.S_B_STATE.Trim() == "已推送") { // task.S_B_STATE = "执行中"; // task.T_START_TIME = DateTime.Now; // task.S_EQ_NO = avgNo; // db.Updateable(task).UpdateColumns(it => new { it.S_B_STATE, it.T_START_TIME,it.S_EQ_NO }).ExecuteCommand(); // } // } //} internal static WcsRfidCheckoutEntitys GetRfid(string TaskCode) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a=> a.S_TASK_NO== TaskCode).First(); } internal static void Begin(WMSTask task, string avgNo="") { var db = new SqlHelper().GetInstance(); if (task != null) { if (task.N_B_STATE == 1) { task.N_B_STATE = 2; task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); task.S_EQ_NO = avgNo; task.T_START_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_START_TIME,it.S_EQ_NO }).ExecuteCommand(); } } } internal static void TmSafety(WMSTask wmsTask) { safetyLocation safety1 = null; if (wmsTask.S_TYPE.Contains("入库")) { safety1 = Settings.safetyLocations.Where(a => a.Area.Contains(wmsTask.S_START_AREA)).FirstOrDefault(); if (safety1 != null) { if (safety1.type==2) { var safety = Settings.TmDeviceInfos.Where(a => a.locCode.Contains(wmsTask.S_START_LOC)).FirstOrDefault(); if (safety != null) { LogHelper.Info($"胎面入库任务开始,任务号={wmsTask.S_CODE}需要和胎面机台交互,地址{safety.beginAddr}写入1", "胎面交互"); ModbusHelper.WriteSingleRegister(safety.beginAddr, 1); } } } } else if (wmsTask.S_TYPE.Contains("出库")) { safety1 = Settings.safetyLocations.Where(a => a.Area.Contains(wmsTask.S_END_AREA)).FirstOrDefault(); if (safety1 != null) { if (safety1.type == 2) { var safety = Settings.TmDeviceInfos.Where(a => a.locCode.Contains(wmsTask.S_END_LOC)).FirstOrDefault(); if (safety != null) { LogHelper.Info($"胎面出库任务开始,任务号={wmsTask.S_CODE}需要和胎面机台交互,地址{safety.beginAddr}写入1", "胎面交互"); ModbusHelper.WriteSingleRegister(safety.beginAddr, 1); } } } } } internal static void End(WMSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { task.N_B_STATE = 3; task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); task.T_END_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE, it.T_END_TIME }).ExecuteCommand(); } if (task.S_TYPE.Contains("出库") && task.S_SCHEDULE_TYPE.Contains("wcs")) { LocationHelper.LockLoc(task.S_END_LOC, "出库锁", 2); } if (task.S_TYPE.Contains("出库")&&task.S_SCHEDULE_TYPE.Contains("agv") ) { var location = db.Queryable().Where(a => a.S_CODE == task.S_END_LOC).First(); location.N_CURRENT_NUM = 0; db.Updateable(location).UpdateColumns(it => new { it.N_CURRENT_NUM}).ExecuteCommand(); db.Deleteable().Where(it => it.S_CODE == task.S_CNTR_CODE).ExecuteCommand(); db.Deleteable().Where(it => it.S_CNTR_CODE == task.S_CNTR_CODE).ExecuteCommand(); db.Deleteable().Where(it => it.S_CNTR_CODE == task.S_CNTR_CODE).ExecuteCommand(); } } internal static void Fail(WMSTask task) { var db = new SqlHelper().GetInstance(); if (task != null) { task.N_B_STATE = 5; task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE); task.T_END_TIME = DateTime.Now; db.Updateable(task).UpdateColumns(it => new { it.N_B_STATE, it.S_B_STATE,it.T_END_TIME}).ExecuteCommand(); } } internal static bool CreateTask(WMSTask wmsTask) { var db = new SqlHelper().GetInstance(); return db.Insertable(wmsTask).ExecuteCommand() > 0; } /// /// 保存到mes任务记录 /// /// /// //public bool SaveTask(MesTask task) //{ // var db = new SqlHelper().GetInstance(); // try // { // db.BeginTran(); // if (db.Insertable(task).ExecuteCommand() > 0) // { // db.CommitTran(); // LogHelper.Info($"保存Mes任务{task.task_no}记录成功:","Mes任务下发"); // return true; // } // else { // db.RollbackTran(); // LogHelper.Info($"保存Mes任务{task.task_no}记录失败:", "Mes任务下发"); // return false; // } // } // catch (Exception ex) // { // db.RollbackTran(); // LogHelper.Info($"保存Mes任务{task.task_no}记录异常:" + ex.Message, "Mes任务下发"); // return false; // } //} //根据流程编号查找作业流程 public static WorkFlow selectWorkFlow(string flowCode){ var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.FLOWCODE == flowCode).First(); } //根据流程编号和工装类型查找作业流程 public static WorkFlow selectWorkFlowByType(string flowCode,string type="") { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.FLOWCODE == flowCode && a.TOOLSTYPE == type).First(); } //根据流程编号和起点库区查找作业流程 public static WorkFlow selectWorkFlowByStratArea(string flowCode, string startArea) { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.FLOWCODE == flowCode && a.STARTAREA==startArea).First(); } /// /// 根据任务状态获取agv任务 /// /// /// internal static List GetTaskListByState(string state,string eq) { try { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE.Trim() == state && a.S_SCHEDULE_TYPE.Contains(eq)).OrderByDescending(a=>a.N_PRIORITY).OrderBy(s=>s.T_CREATE).ToList(); } catch (Exception ex) { LogHelper.Error(ex.Message, ex); return new List(); } } /// /// 根据任务状态获取任务 /// /// /// internal static List GetWcsTaskListByState(string state, string eq, string type) { try { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE.Trim() == state && a.S_SCHEDULE_TYPE.Contains(eq) && a.S_TYPE.Contains(type)).OrderByDescending(a => a.N_PRIORITY).OrderBy(s => s.T_CREATE).ToList(); } catch (Exception ex) { LogHelper.Error(ex.Message, ex); return new List(); } } /// /// 根据任务状态和作业编码和设备类型获取单个任务 /// /// /// internal static WMSTask GetTaskByState(string state, string eq,string opCode,string type) { try { var db = new SqlHelper().GetInstance(); return db.Queryable().Where(a => a.S_B_STATE.Trim() == state && a.S_SCHEDULE_TYPE.Contains(eq) && a.S_OP_CODE.Contains(opCode) && a.S_TYPE.Contains(type)).First(); } catch (Exception ex) { LogHelper.Error(ex.Message, ex); return new WMSTask(); } } internal static bool CreateMesKtTask(MesKtTask cntr) { try { var db = new SqlHelper().GetInstance(); return db.Insertable(cntr).ExecuteCommand() > 0; } catch (Exception ex) { Console.WriteLine(ex.Message); LogHelper.Info($"添加Mes空托缓存异常" + ex.Message, "Mes任务下发"); throw; } } } }