using IWareCC.CacheInfo; using IWareCC.Extend; using IWareCC.ORM; using IWareCC.Properties; using IWareCommon.Enum.Common; using IWareCommon.Enum.Rgv; using IWareCommon.Enum.Srm; using IWareCommon.Help; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace IWareCC.Task { public class TaskService { private static object Lock = new object(); private TaskService() { } private static TaskService Instance = null; /// /// 获取单例的方法 /// /// 用户服务的单例实体 public static TaskService GetInstance() { if (Instance == null) { lock (Lock) { if (Instance == null) { Instance = new TaskService(); } } } return Instance; } /// /// 发送主任务 /// /// 任务号 /// 起始位置 /// 目标位置 /// 任务类型 /// 托盘类型 /// 出库类型 /// public bool CreateMainTask(int taskId, string sourcePlce, string toPlace, int taskType, int containerType, int storageno, int height, string containerName, ref string errMsg, int wmsTaskId) { try { if (!CheckDevIsOK(taskType, storageno, containerType, ref errMsg)) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "设备条件不满足," + errMsg); return false; } // LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendTask", "收到任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType); using (DbModel db = new DbModel()) { #region 增加是否重复了发送了任务 [Editby shaocx,2024-10-14] var _query_taskno = taskId.ToString(); var isExist = db.MainTasks.Where(x => x.wmsTaskId == wmsTaskId && x.taskno == _query_taskno).FirstOrDefault(); if (isExist != null) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "重复任务:" + taskId); return true; } #endregion MainTask task = new MainTask() { taskno = taskId.ToString(), wmsTaskId = wmsTaskId, containertype = containerType, taskcode = NumberHelp.GenerateRandomCodeForMainTask(), decompositiontimes = 0, decompositiontime = DateTime.Now, deliverytype = 0, priority = 1,//默认为1,原先是100 【EditBy shaocx,2022-10-21】 sendtime = DateTime.Now, sourceplace = sourcePlce, toplace = toPlace, tasktype = taskType, status = 0,//EMainTaskStatus.未分解 finishstatus = 0,//,使用枚举 EMainTaskFinishstatus heighttype = height, storageno = storageno, containername = containerName }; db.MainTasks.Add(task); if (task.tasktype == (int)EMainTaskType.常规出库)//检查设备是否空闲再下发 { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到出库任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType); var chaitask = db.PartTasks.OrderBy(x => x.updatetime).FirstOrDefault(x => x.eqtype == (int)EPartTaskType.堆垛机任务 && x.isfinished == (int)EYesOrNo.否 && x.storageno == storageno && x.maintasktype == (int)EMainTaskType.常规出库); if (chaitask != null && chaitask.id > 0) { var mainTask = db.MainTasks.Where(x => x.id == chaitask.maintaskid).FirstOrDefault();//增加显示WCS任务号 [EditBy shaocx,2022-09-26] LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到出库任务id={0},出库任务不满足", taskId); errMsg = "收到出库任务id" + taskId + ",出库任务不满足,前面有未结束的堆垛机任务,未结束的WCS任务号:" + mainTask.taskno; return false; } } if (task.tasktype == (int)EMainTaskType.入库拆盘)//检查设备是否空闲再下发 { int eqqid = 0; if (containerType == (int)EContainerType.大托盘) { eqqid = (int)EDeviceId.大盘拆盘机; } else { eqqid = (int)EDeviceId.小盘拆盘机; } LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到拆盘任务id={0},sourcePlce={1},toPlace={2},taskType={3}", taskId, sourcePlce, toPlace, taskType); var chaitask = db.PartTasks.OrderBy(x => x.updatetime).FirstOrDefault(x => x.eqtype == (int)EPartTaskType.拆叠机任务 && x.isfinished == (int)EYesOrNo.否 && x.eqid == eqqid && x.maintasktype == (int)EMainTaskType.入库拆盘); if (chaitask != null && chaitask.id > 0) { var mainTask = db.MainTasks.Where(x => x.id == chaitask.maintaskid).FirstOrDefault();//增加显示WCS任务号 [EditBy shaocx,2022-09-26] LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "收到拆盘任务id={0},拆盘任务不满足", taskId); errMsg = "收到拆盘任务id" + taskId + ",拆盘任务不满足,前面有未结束的任务,未结束的WCS任务号:" + mainTask.taskno; return false; } } if (task.tasktype == (int)EMainTaskType.常规入库) { task.heighttype = 0; task.toplace = "0"; } else { if (string.IsNullOrEmpty(toPlace)) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "toPlace为空"); errMsg = "目标位不能为空"; return false; } } if (task.tasktype == (int)EMainTaskType.出库叠盘) { var chaitask = db.PartTasks.FirstOrDefault(x => x.toplace == task.sourceplace && x.maintasktype == task.tasktype && x.isfinished == 0); if (chaitask != null) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "存在chaitask"); errMsg = "已经存在出库叠盘任务"; return false; } } if (task.tasktype == (int)EMainTaskType.空托出库 || task.tasktype == (int)EMainTaskType.满空托回库) { if (task.containertype == (int)EContainerType.小托盘) { if (task.tasktype == (int)EMainTaskType.空托出库) { var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘拆盘机); if (cdtask != null)//代表已经开始执行 { cdtask.status = 2; } } else { var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘叠盘机); if (cdtask != null) { cdtask.status = 2; } } } else { if (task.tasktype == (int)EMainTaskType.空托出库) { var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘拆盘机); if (cdtask != null) { cdtask.status = 2; } } else { var cdtask = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘叠盘机); if (cdtask != null) { cdtask.status = 2; } } } } bool bl = db.SaveChanges() > 0 ? true : false; if (!bl) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", "写入数据库失败!"); errMsg = "写入数据库失败"; } return bl; } } catch (Exception ex) { LogTextHelper.WriteLog("C:/CCSLog/SendTask", this.ToString(), "SendTask", ex.Message); errMsg = "出现异常:" + ex.Message; return false; } } public static string GenerateRandomCode() { var result = new StringBuilder(); for (var i = 0; i < 5; i++) { var r = new Random(Guid.NewGuid().GetHashCode()); result.Append(r.Next(0, 10)); } return result.ToString(); } /// /// 检查设备是否满足下发任务的条件 /// /// private bool CheckDevIsOK(int type, int storageno, int contype, ref string errMsg) { bool b1 = false; errMsg = "默认为FALSE"; //检验所有的设备是否在线 switch (type) { case (int)EMainTaskType.常规入库: b1 = IsDevOk(1, storageno, contype, ref errMsg); break; case (int)EMainTaskType.空托出库: b1 = IsDevOk(1, storageno, contype, ref errMsg); break; case (int)EMainTaskType.组盘出库: b1 = IsDevOk(1, storageno, contype, ref errMsg); break; case (int)EMainTaskType.常规出库: b1 = IsDevOk(2, storageno, contype, ref errMsg); break; case (int)EMainTaskType.余料回库: b1 = IsDevOk(2, storageno, contype, ref errMsg); break; case (int)EMainTaskType.满空托回库: b1 = IsDevOk(2, storageno, contype, ref errMsg); break; case (int)EMainTaskType.移库: b1 = IsDevOk(3, storageno, contype, ref errMsg); break; case (int)EMainTaskType.出库叠盘: b1 = IsDevOk(4, storageno, contype, ref errMsg); break; case (int)EMainTaskType.入库拆盘: b1 = IsDevOk(5, storageno, contype, ref errMsg); break; default: b1 = false; errMsg = "任务类型不合法"; break; } return b1; } public bool IsDevOk(int type, int storageno, int contype, ref string errMsg) { bool bl = false; errMsg = "默认返回FALSE"; var cy = CacheEntity.Conveyors.FirstOrDefault(); var srm1 = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == "Srm1"); var srm2 = CacheEntity.Srms.FirstOrDefault(x => x.SrmName == "Srm2"); var rgv1 = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == "Rgv1"); var rgv2 = CacheEntity.Rgvs.FirstOrDefault(x => x.RgvName == "Rgv2"); switch (type) { case 1: #region 入库测检测设备 if (cy.IsOnline && rgv1.IsOnline) { if (storageno == 1) { if (srm1.IsOnline) { bl = true; } else { bl = false; errMsg = "1号堆垛机不在线"; } } else { if (srm2.IsOnline) { bl = true; } else { bl = false; errMsg = "2号堆垛机不在线"; } } } else { bl = false; errMsg = "输送线或1号RGV不在线"; } //检验主要设备是否报警 if (!rgv1.RAlarm) { if (storageno == 1) { if (!srm1.RAlarm) { bl = true; } else { bl = false; errMsg = "1号堆垛机有报警"; } } else { if (!srm2.RAlarm) { bl = true; } else { bl = false; errMsg = "2号堆垛机有报警"; } } } else { bl = false; errMsg = "1号RGV有报警"; } //检验主要设备模式是否正确 if (rgv1.RMode == (int)ERgvMode.连机自动模式) { if (storageno == 1) { if (srm1.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "1号堆垛机是非自动模式"; } } else { if (srm2.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "2号堆垛机是非自动模式"; } } } else { bl = false; errMsg = "1号RGV是非连机自动模式"; } #endregion break; case 2: #region 出库测检测设备 if (cy.IsOnline && rgv2.IsOnline) { if (storageno == 1) { if (srm1.IsOnline) { bl = true; } else { bl = false; errMsg = "1号堆垛机不在线"; } } else { if (srm2.IsOnline) { bl = true; } else { bl = false; errMsg = "2号堆垛机不在线"; } } } else { bl = false; errMsg = "输送线或2号RGV不在线"; } //检验主要设备是否报警 if (!rgv2.RAlarm) { if (storageno == 1) { if (!srm1.RAlarm) { bl = true; } else { bl = false; errMsg = "1号堆垛机有报警"; } } else { if (!srm2.RAlarm) { bl = true; } else { bl = false; errMsg = "2号堆垛机有报警"; } } } else { bl = false; errMsg = "2号RGV有报警"; } //检验主要设备模式是否正确 if (rgv2.RMode == (int)ERgvMode.连机自动模式) { if (storageno == 1) { if (srm1.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "1号堆垛机是非自动模式"; } } else { if (srm2.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "2号堆垛机是非自动模式"; } } } else { bl = false; errMsg = "2号RGV是非连机自动模式"; } #endregion break; case 3: #region 移库检测设备 if (storageno == 1) { if (srm1.IsOnline) { bl = true; } else { bl = false; errMsg = "1号堆垛机不在线"; } } else { if (srm2.IsOnline) { bl = true; } else { bl = false; errMsg = "2号堆垛机不在线"; } } //检验主要设备是否报警 if (storageno == 1) { if (!srm1.RAlarm) { bl = true; } else { bl = false; errMsg = "1号堆垛机有报警"; } } else { if (!srm2.RAlarm) { bl = true; } else { bl = false; errMsg = "2号堆垛机有报警"; } } //检验主要设备模式是否正确 if (storageno == 1) { if (srm1.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "1号堆垛机是非自动模式"; } } else { if (srm2.RMode == (int)ESrmMode.自动模式) { bl = true; } else { bl = false; errMsg = "2号堆垛机是非自动模式"; } } #endregion break; case 4: if (cy.IsOnline && rgv2.IsOnline) { bl = true; } else { bl = false; errMsg = "输送线或2号RGV不在线"; } //检验主要设备是否报警 if (!rgv2.RAlarm) { bl = true; } else { bl = false; errMsg = "2号RGV有报警"; } //检验主要设备模式是否正确 if (rgv2.RMode == (int)ERgvMode.连机自动模式) { bl = true; } else { bl = false; errMsg = "2号RGV是非连机自动模式"; } if (contype == 1) { var cd1 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei2"); string msg = ""; bl = cd1.CanSendTask(cd1.DeviceId, out msg); if (bl == false) errMsg = "下发失败:" + msg; } else { var cd2 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei1"); string msg = ""; bl = cd2.CanSendTask(cd2.DeviceId, out msg); if (bl == false) errMsg = "下发失败:" + msg; } break; case 5: if (contype == 1) { var cd1 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei3"); string msg = ""; bl = cd1.CanSendTask(cd1.DeviceId, out msg); if (bl == false) errMsg = "下发失败:" + msg; } else { var cd2 = CacheEntity.ChaiDies.FirstOrDefault(x => x.ChaiDieName == "ChaiDei4"); string msg = ""; bl = cd2.CanSendTask(cd2.DeviceId, out msg); if (bl == false) errMsg = "下发失败:" + msg; } break; } return bl; } /// /// 获取任务是否完成(0带表未完成;1代表完成;2代表外形检测不通过) /// /// /// WMS任务ID /// public int GetTaskIsFinishOrCheckOk(int taskId, int wmsTaskId) { try { using (DbModel db = new DbModel()) { string taskid = taskId.ToString(); MainTask maintask = null; if (wmsTaskId != 0) { maintask = db.MainTasks.Where(x => x.taskno == taskid && x.wmsTaskId == wmsTaskId).OrderByDescending(x => x.id).FirstOrDefault(); } else { maintask = db.MainTasks.Where(x => x.taskno == taskid).OrderByDescending(x => x.id).FirstOrDefault(); } if (maintask != null) { #region 判定空托出库或者满盘回库的任务是否完成,完成的话则不再主动发送需要空头或满托的接口 //,使用枚举 EMainTaskFinishstatus if (maintask.finishstatus == 1 && (maintask.tasktype == (int)EMainTaskType.空托出库 || maintask.tasktype == (int)EMainTaskType.满空托回库)) { ChaiDieTransport cdt = new ChaiDieTransport(); if (maintask.tasktype == (int)EMainTaskType.空托出库) { if (maintask.containertype == (int)EContainerType.小托盘) { cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘拆盘机); } else { cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘拆盘机); } } else { if (maintask.containertype == (int)EContainerType.小托盘) { cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.小盘叠盘机); } else { cdt = db.ChaiDieTransports.FirstOrDefault(x => x.status == 0 && x.dev == (int)EDeviceId.大盘叠盘机); } } if (cdt != null && cdt.id > 0) { cdt.status = 2; db.SaveChanges(); } } #endregion return maintask.finishstatus;//,使用枚举 EMainTaskFinishstatus } else { return 0; } } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetTaskIsFinishOrCheckOk", ex.Message); return 0; } } public BackData GetCheckIsNeedOrSendcontainer() { try { using (DbModel db = new DbModel()) { var task = db.ChaiDieTransports.OrderBy(x => x.updatetime).ToList().FirstOrDefault(x => x.status == 0); if (task != null) { task.updatetime = DateTime.Now; db.SaveChanges(); int containertype = 1; if (task.devname == "小盘拆盘机" || task.devname == "小盘叠盘机") { containertype = 1; } else { containertype = 2; } return new BackData() { ContainerType = containertype, DevId = task.dev, DevName = task.devname, Type = task.type, Id = task.id }; } else { return null; } } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetCheckIsNeedOrSendcontainer", ex.Message); return null; } } /// /// 删除所有任务 /// /// /// public bool DealAllPartTask(string containerName) { try { using (DbModel db = new DbModel()) { bool b1 = false; string msg = ""; var task = db.PartTasks.Where(x => x.containername == containerName && x.isfinished == 0).ToList(); if (task != null && task.Count > 0) { task.ForEach(x => { if (x.eqtype == (int)EPartTaskType.堆垛机任务 && x.isreleased == 1) { var srm = CacheEntity.Srms.FirstOrDefault(y => y.DeviceId == x.eqid); if (srm.RAlarm || srm.RMode != (int)ESrmMode.自动模式) { b1 = srm.SendDelTask(x.eqid, int.Parse(x.taskcode), out msg); if (!b1) { b1 = srm.SendDelTask(x.eqid, int.Parse(x.taskcode), out msg); } } else { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealAllPartTask", "设备任务删除失败,只有设备报警或者非自动才允许删除"); } } else { b1 = true; } if (x.eqtype == (int)EPartTaskType.Rgv任务 && x.isreleased == 1) { var rgv = CacheEntity.Rgvs.FirstOrDefault(y => y.DeviceId == x.eqid); if (rgv.RAlarm || rgv.RMode != (int)ERgvMode.连机自动模式) { b1 = rgv.DeleteTask(x.eqid, int.Parse(x.taskcode), out msg); if (!b1) { b1 = rgv.DeleteTask(x.eqid, int.Parse(x.taskcode), out msg); } } else { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealAllPartTask", "设备任务删除失败,只有设备报警或者非自动才允许删除"); } } else { b1 = true; } if (x.eqtype == (int)EPartTaskType.输送线任务 && x.isreleased == 1) { string name = "Line" + x.sourceplace; var conve = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == name); b1 = conve.DeleteTask(x.eqid, out msg); if (!b1) { b1 = conve.DeleteTask(x.eqid, out msg); } string toname = ""; if (x.sourceplace == "1008" || x.sourceplace == "1003" || x.sourceplace == "1001") { toname = "Line" + x.sourceplace; } else { if (x.toplace == "1011" || x.toplace == "1005")//此两处要判断的是后一位的位置的光电信号 { toname = "Line" + (int.Parse(x.toplace) + 1).ToString(); } else { toname = "Line" + x.toplace; } } var TConveyor = CacheEntity.Conveyors.FirstOrDefault(y => y.ConveyorName == toname); if (TConveyor.RTaskNo == int.Parse(x.taskcode)) { if (!TConveyor.DeleteTask(x.eqid, out msg)) { TConveyor.DeleteTask(x.eqid, out msg); } } } else { b1 = true; } if (b1) { x.isreleased = 1; x.isfinished = 1; x.nexthandel = (int)ENextHandelTask.已全部完成; x.filereason = "任务已经被强制删除!"; } }); if (b1) { var maintask = db.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.containername == containerName); if (maintask != null && maintask.id > 0) { maintask.status = 1;//EMainTaskStatus.已分解,使用枚举 EMainTaskFinishstatus maintask.finishstatus = 1; maintask.decompositiontimes = 1; } db.SaveChanges(); return true; } else { return false; } } else { return false; } } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealPartTask", ex.Message); return false; } } /// /// 设置主任务任务权重 /// /// /// /// public bool SetMainTaskPriority(string taskno, int priority, int wmsTaskId) { try { using (DbModel db = new DbModel()) { MainTask task = null; if (wmsTaskId != 0) { task = db.MainTasks.Where(x => x.taskno == taskno && x.wmsTaskId == wmsTaskId).OrderByDescending(x => x.sendtime).FirstOrDefault(); } else { task = db.MainTasks.Where(x => x.taskno == taskno).OrderByDescending(x => x.sendtime).FirstOrDefault(); } if (task == null) { return false; } task.priority = priority; if (db.SaveChanges() < 1) { Thread.Sleep(1000); db.SaveChanges(); } return true; } } catch { return false; } } /// /// 设置子任务任务权重 /// /// /// /// public bool SetPartTaskPriority(string taskcode, int priority) { try { using (DbModel db = new DbModel()) { var task = db.PartTasks.Where(x => x.taskcode == taskcode).OrderByDescending(x => x.createtime).FirstOrDefault(); if (task == null) { return false; } task.priority = priority; if (db.SaveChanges() < 1) { Thread.Sleep(1000); db.SaveChanges(); } return true; } } catch { return false; } } /// /// 处理任务 /// /// 要处理的子任务号 /// 处理类型(1:强制完成;2:删除任务) /// public bool DealPartTask(int taskId, int type) { try { using (DbModel db = new DbModel()) { var task = db.PartTasks.FirstOrDefault(x => x.id == taskId); if (task != null) { if (type == 1) { task.isreleased = 1; task.isfinished = 1; if (task.nexthandel == (int)ENextHandelTask.已全部完成) { var maintask = db.MainTasks.OrderByDescending(x => x.id).FirstOrDefault(x => x.id == task.maintaskid); if (maintask != null) { maintask.finishstatus = 1;//,使用枚举 EMainTaskFinishstatus } } } else if (type == 2) { db.PartTasks.Remove(task); } db.SaveChanges(); return true; } else { return false; } } } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DealPartTask", ex.Message); return false; } } internal List GetDevAlert(int pageIndex, int pagecount, out int totalNum, Dictionary parm) { try { using (DbModel db = new DbModel()) { var sqlParamsCount = new List(); var sqlParamsData = new List(); string sqlCount = "SELECT COUNT(*) FROM DevAlert WHERE 1=1"; string sqlData = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY finishtime desc ) AS ROWNUM from DevAlert where 1=1"; if (parm.Count > 0) { if (!parm.Keys.Contains("?")) { foreach (var key in parm.Keys) { if (parm[key] != null && !string.IsNullOrEmpty(parm[key] + "")) { sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlCount += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); } } } } pageIndex = pageIndex < 1 ? 1 : pageIndex; pagecount = pagecount < 1 ? 10 : pagecount; sqlParamsData.Add(new SqlParameter("@PI_Start", (pageIndex - 1) * pagecount + 1)); sqlParamsData.Add(new SqlParameter("@PI_End", pageIndex * pagecount)); sqlData += string.Format(") t Where t.ROWNUM between {0} and {1} ", "@PI_Start", "@PI_End"); totalNum = db.Database.SqlQuery(sqlCount, sqlParamsCount.ToArray()).ToList()[0]; var datas = db.Database.SqlQuery(sqlData, sqlParamsData.ToArray()).ToList(); if (datas != null) { return datas; } else { return new List(); } } } catch (Exception ex) { totalNum = 0; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetDevAlert", ex.Message); return new List(); } } internal List GetPartTask(int pageIndex, int pagecount, out int totalNum, Dictionary parm) { try { using (DbModel db = new DbModel()) { var sqlParamsCount = new List(); var sqlParamsData = new List(); string sqlCount = "SELECT COUNT(*) FROM PartTask WHERE 1=1"; string sqlData = "SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY maintaskid ) AS ROWNUM from PartTask where 1=1"; if (parm.Count > 0) { if (!parm.Keys.Contains("?")) { foreach (var key in parm.Keys) { if (parm[key] != null && !string.IsNullOrEmpty(parm[key] + "")) { sqlParamsCount.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlParamsData.Add(new SqlParameter("@S_" + key, "%" + parm[key] + "%")); sqlCount += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); sqlData += string.Format(" AND {0} LIKE {1}", key, "@S_" + key); } } } } pageIndex = pageIndex < 1 ? 1 : pageIndex; pagecount = pagecount < 1 ? 10 : pagecount; sqlParamsData.Add(new SqlParameter("@PI_Start", (pageIndex - 1) * pagecount + 1)); sqlParamsData.Add(new SqlParameter("@PI_End", pageIndex * pagecount)); sqlData += string.Format(") t Where t.ROWNUM between {0} and {1} ", "@PI_Start", "@PI_End"); totalNum = db.Database.SqlQuery(sqlCount, sqlParamsCount.ToArray()).ToList()[0]; var datas = db.Database.SqlQuery(sqlData, sqlParamsData.ToArray()).ToList(); if (datas != null) { return datas; } else { return new List(); } } } catch (Exception ex) { totalNum = 0; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "GetPartTask", ex.Message); return new List(); } } } }