private TaskState GetTaskState(TaskEntity paraTask) { DateTime dtNow = DateTime.Now; if (paraTask.Enable == false) return TaskState.已删除; if (paraTask.DateEnd < dtNow) return TaskState.超时; if (paraTask.DateStart > dtNow) return TaskState.等待执行; return TaskState.正在执行; }
public static void ReseveMappingTaskEntity(TaskEntity paraTaskEntity, ref TaskDataSet.PL_TimerTaskRow paraRow) { paraRow.Name = paraTaskEntity.Name; paraRow.CreateDate = DateTime.Now; paraRow.DateEnd = paraTaskEntity.DateEnd; paraRow.DateStart = paraTaskEntity.DateStart; paraRow.Enable = paraTaskEntity.Enable.ToString(); paraRow.ExtraParaStr = paraTaskEntity.ExtraParaStr; paraRow.Name = paraTaskEntity.Name; paraRow.RunSpaceTimeSecs = paraTaskEntity.RunSpaceTime; paraRow.RunSpaceType = paraTaskEntity.RunSpaceType.ToString(); paraRow.RunTimeOutSecs = paraTaskEntity.RunTimeOutSecs; paraRow.TaskAppName = paraTaskEntity.RegestesAppName; }
public Int64 AddTask(TaskEntity paraTask) { try { TaskDataSet.PL_TimerTaskRow taskRow = _DataSet.PL_TimerTask.NewPL_TimerTaskRow(); Mapper.DataMapper.ReseveMappingTaskEntity(paraTask, ref taskRow); _DataSet.PL_TimerTask.AddPL_TimerTaskRow(taskRow); this.Save2DB(); paraTask.SetKeyID(taskRow.ID); return taskRow.ID; } catch { throw; } }
/// <summary> /// Adds the task. /// </summary> /// <param name="paraEntity">The para entity.</param> /// <returns></returns> public TaskEntity AddTask(TaskEntity paraEntity) { try { return AddTask(paraEntity.Name, paraEntity.DateStart, paraEntity.DateEnd, paraEntity.RegestesAppName, paraEntity.RunSpaceTime, paraEntity.RunSpaceType, paraEntity.ExtraParaStr, paraEntity.RunTimeOutSecs); } catch { throw; } }
/// <summary> /// 修改引擎中的任务 /// </summary> /// <param name="paraTask"></param> public void ModifyTask(TaskEntity paraTask) { lock (((ICollection)_TaskList).SyncRoot) { IWorkingTask task = _TaskList.Find(delegate(IWorkingTask wt) { return wt.Task.TaskEntity.ID == paraTask.ID; }); if (task != null) { task.UpdateTask(paraTask); //task.Task.TaskEntity.Name = paraTask.Name; //task.Task.TaskEntity.DateEnd = paraTask.DateEnd; //task.Task.TaskEntity.DateStart = paraTask.DateStart; //task.Task.TaskEntity.Enable = paraTask.Enable; //task.Task.TaskEntity.ExtraParaStr = paraTask.ExtraParaStr; //task.Task.TaskEntity.RegestesAppName = paraTask.RegestesAppName; //task.Task.TaskEntity.RunSpaceTime = paraTask.RunSpaceTime; //task.Task.TaskEntity.RunSpaceType = paraTask.RunSpaceType; //task.Task.TaskEntity.RunTimeOutSecs = paraTask.RunTimeOutSecs; //task.RebuildTaskRunTimeList(); Console.WriteLine("更新一条任务:{0}", paraTask.ToString()); } else { Console.WriteLine("需要更新的任务在任务列表中没有({0})", paraTask.ToString()); } } }
/// <summary> /// 修改方式 /// </summary> /// <param name="paraTask"></param> public FrmTaskEdit(TaskEntity paraTask, IBLLLogic paraLogic) : this(paraLogic) { _Task = paraTask; }
private void FrmTaskEdit_Load(object sender, EventArgs e) { this.cbx_Apps.DataSource = _BLL.GetRegestedApp(); this.cbx_Frequnce.DataSource = Enum.GetNames(typeof(Model.Enums.TaskFrequence)); if (_Task == null) { _Task = new TaskEntity(); this.Text = "新增任务"; } this.InitControls(); }
public void ModifyTask(Int64 paraTaskId, TaskEntity paraTask) { try { this.LoadTaskDataFromDB(); TaskDataSet.PL_TimerTaskRow taskRow = _DataSet.PL_TimerTask.FindByID(paraTaskId); if (taskRow == null) { throw new Exception("修改任务错误:传入的任务ID非法!"); } else { Mapper.DataMapper.ReseveMappingTaskEntity(paraTask, ref taskRow); } this.Save2DB(); } catch { throw; } }
/// <summary> /// 检查并设置任务的频率 /// [对用户输入的信息做检验] /// </summary> /// <param name="paraTask">The para task.</param> public static void CheckAndSetTaskFrequence(ref TaskEntity paraTask) { switch (paraTask.RunSpaceType) { case TaskFrequence.Day: paraTask.RunSpaceTime = 24 * 60 * 60; break; case TaskFrequence.Hour: paraTask.RunSpaceTime = 60 * 60; break; case TaskFrequence.Minute: paraTask.RunSpaceTime = 60; break; case TaskFrequence.Week: paraTask.RunSpaceTime = 7 * 24 * 60 * 60; break; case TaskFrequence.Once: //如果执行一次,设置间隔为2分钟,结束时间为开始时间+20秒(给20秒的缓冲区) paraTask.RunSpaceTime = 2 * 60; paraTask.DateEnd = paraTask.DateStart.AddSeconds(20); break; } }
/// <summary> /// 更新任务 /// </summary> /// <param name="paraTaskID"></param> /// <param name="paraName"></param> /// <param name="paraDateStart"></param> /// <param name="paraDateEnd"></param> /// <param name="paraAppName"></param> /// <param name="paraRunSpaceTimeSecs"></param> /// <param name="paraRunSpaceType"></param> /// <param name="paraExtraStr"></param> /// <param name="paraRunTimeOutSecs"></param> /// <returns></returns> public void UpdateTask(Int64 paraTaskID, string paraName, DateTime paraDateStart, DateTime paraDateEnd, string paraAppName, Int64 paraRunSpaceTimeSecs, TaskFrequence paraRunSpaceType, string paraExtraStr, Int64 paraRunTimeOutSecs) { try { TaskAssembly assembly = BLLFactory.GetBllRegistApp().GetRegestedApp(paraAppName); if (assembly == null) { throw new Exception(string.Format("更新的计划的程序(RegestesAppName){0}尚未在配置文件(RegistedApps.xml)中注册", paraAppName)); } else { TaskEntity entity = new TaskEntity(paraTaskID, paraName, true, paraDateStart, paraDateEnd, paraRunSpaceTimeSecs, paraRunSpaceType, paraExtraStr, paraRunTimeOutSecs, paraAppName); //发送消息同步到任务管理器中 string message = MessageParser.BuildMessage(null, null, new List<TaskEntity>() { entity }, null, null, null); //一定要保证先发送,后保存 this.SendXMLSocket2Server(message); _DataAccess.ModifyTask(paraTaskID, entity); } } catch { throw; } }
/// <summary> /// Updates the task. /// </summary> /// <param name="paraEntity">The para entity.</param> /// <returns></returns> public void UpdateTask(TaskEntity paraEntity) { try { this.UpdateTask( paraEntity.ID, paraEntity.Name, paraEntity.DateStart, paraEntity.DateEnd, paraEntity.RegestesAppName, paraEntity.RunSpaceTime, paraEntity.RunSpaceType, paraEntity.ExtraParaStr, paraEntity.RunTimeOutSecs); } catch { throw; } }
/// <summary> /// 获取计划富实体 /// </summary> /// <param name="paraEntity"></param> /// <returns></returns> public Task GetTask(TaskEntity paraEntity) { List<TaskAssembly> assList = this.GetRegistedApps(); List<Task> list = new List<Task>(); TaskAssembly assembly = assList.Find(delegate(TaskAssembly a) { return a.UserName == paraEntity.RegestesAppName; }); if (assembly != null) { Task task = new Task(paraEntity, assembly); return task; } return null; }
/// <summary> /// 翻译一条消息 /// </summary> /// <param name="paraMessage">The para message.</param> /// <param name="paraAddedTasks">The para added tasks.</param> /// <param name="paraDeletedTasks">The para deleted tasks.</param> /// <param name="paraUpdateTasks">The para update tasks.</param> /// <param name="paraRunImmediateTask">The para run immediate task.</param> /// <param name="paraRunType">Type of the para run.</param> /// <param name="paraStopTask">The para stop task.</param> public static void ParseMessage(string paraMessage, out List<TaskEntity> paraAddedTasks, out List<Int64> paraDeletedTasks, out List<TaskEntity> paraUpdateTasks, out List<Int64> paraRunImmediateTask, out List<RunTaskType> paraRunType, out List<Int64> paraStopTask) { paraAddedTasks = new List<TaskEntity>(); paraDeletedTasks = new List<long>(); paraUpdateTasks = new List<TaskEntity>(); paraRunImmediateTask = new List<long>(); paraRunType = new List<RunTaskType>(); paraStopTask = new List<long>(); XmlDocument doc = new XmlDocument(); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(paraMessage)); doc.Load(ms); XmlNode iNode = doc.SelectSingleNode("Root"); XmlNode addNode = iNode.SelectSingleNode("AddList"); foreach (XmlElement ele in addNode.ChildNodes) { TaskEntity entity = new TaskEntity(); entity.SetKeyID(long.Parse(ele.GetAttribute("ID"))); entity.Name = ele.GetAttribute("Name"); entity.Enable = bool.Parse(ele.GetAttribute("Enable")); entity.DateStart = DateTime.Parse(ele.GetAttribute("DateStart")); entity.DateEnd = DateTime.Parse(ele.GetAttribute("DateEnd")); entity.RunSpaceTime = Int64.Parse(ele.GetAttribute("RunSpaceTime")); entity.RunSpaceType = (TaskFrequence)Enum.Parse(typeof(TaskFrequence), ele.GetAttribute("RunSpaceType")); entity.ExtraParaStr = ele.GetAttribute("ExtraParaStr"); entity.RunTimeOutSecs = Int64.Parse(ele.GetAttribute("RunTimeOutSecs")); entity.RegestesAppName = ele.GetAttribute("RegestesAppName"); CheckAndSetTaskFrequence(ref entity); paraAddedTasks.Add(entity); } XmlNode mdfNode = iNode.SelectSingleNode("UpdateList"); foreach (XmlElement ele in mdfNode.ChildNodes) { TaskEntity entity = new TaskEntity(); entity.Name = ele.GetAttribute("Name"); entity.Enable = bool.Parse(ele.GetAttribute("Enable")); entity.DateStart = DateTime.Parse(ele.GetAttribute("DateStart")); entity.DateEnd = DateTime.Parse(ele.GetAttribute("DateEnd")); entity.RunSpaceTime = Int64.Parse(ele.GetAttribute("RunSpaceTime")); entity.RunSpaceType = (TaskFrequence)Enum.Parse(typeof(TaskFrequence), ele.GetAttribute("RunSpaceType")); entity.ExtraParaStr = ele.GetAttribute("ExtraParaStr"); entity.RunTimeOutSecs = Int64.Parse(ele.GetAttribute("RunTimeOutSecs")); entity.RegestesAppName = ele.GetAttribute("RegestesAppName"); entity.SetKeyID(Int64.Parse(ele.GetAttribute("ID"))); CheckAndSetTaskFrequence(ref entity); paraUpdateTasks.Add(entity); } XmlNode delNode = iNode.SelectSingleNode("DeleteList"); foreach (XmlElement ele in delNode.ChildNodes) { paraDeletedTasks.Add( Int64.Parse(ele.GetAttribute("ID"))); } XmlNode runNode = iNode.SelectSingleNode("RunList"); foreach (XmlElement ele in runNode.ChildNodes) { paraRunImmediateTask.Add( Int64.Parse(ele.GetAttribute("ID"))); paraRunType.Add((RunTaskType)Enum.Parse(typeof(RunTaskType),ele.GetAttribute("Type"))); } //释放内存流 ms.Close(); ms.Dispose(); }
/// <summary> /// 向引擎中添加任务 /// </summary> /// <param name="paraTask"></param> public void AddWorkingTask(TaskEntity paraTask) { IWorkingTask itask = null; lock (((ICollection)_TaskList).SyncRoot) { itask = GetWorkingTask(_IBLLLogic.GetTask(paraTask)); _TaskList.Add(itask); } Console.WriteLine("新增一条任务,下次执行时间为:{0}:{1}", itask.NextRunTime, paraTask.ToString()); }
/// <summary> /// 添加定时任务 /// </summary> /// <param name="paraName"></param> /// <param name="paraDateStart"></param> /// <param name="paraDateEnd"></param> /// <param name="paraAppName"></param> /// <param name="paraRunSpaceTimeSecs">周期数(秒)</param> /// <param name="paraRunSpaceType">周期类型(便于存储和下次查看)</param> /// <param name="paraExtraStr"></param> /// <param name="paraRunTimeOutSecs">执行超时时间,如果不限定,则给-1,如果限定了,在指定时间内未执行完成,则强制结束(exe直接结束进程,dll通过接口通知结束)</param> /// <returns></returns> public TaskEntity AddTask(string paraName, DateTime paraDateStart, DateTime paraDateEnd, string paraAppName, Int64 paraRunSpaceTimeSecs, TaskFrequence paraRunSpaceType, string paraExtraStr, Int64 paraRunTimeOutSecs) { try { TaskAssembly assembly = BLLFactory.GetBllRegistApp().GetRegestedApp(paraAppName); if (assembly == null) { throw new Exception(string.Format("添加的计划的程序(RegestesAppName){0}尚未在配置文件(RegistedApps.xml)中注册", paraAppName)); } else { TaskEntity entity = new TaskEntity(); entity.DateEnd = paraDateEnd; entity.DateStart = paraDateStart; entity.Enable = true; entity.ExtraParaStr = paraExtraStr; entity.Name = paraName; entity.RunSpaceTime = paraRunSpaceTimeSecs; entity.RunSpaceType = paraRunSpaceType; entity.RunTimeOutSecs = paraRunTimeOutSecs; entity.RegestesAppName = paraAppName; //先校验,后保存 //输入校验 MessageParser.CheckAndSetTaskFrequence(ref entity); //保存到数据库 Int64 id = _DataAccess.AddTask(entity); if (id >= 0) {//保存成功 entity.SetKeyID(id); try { //发送消息同步到任务管理器中 string message = MessageParser.BuildMessage(new List<TaskEntity>() { entity }, null, null, null, null, null); this.SendXMLSocket2Server(message); return entity; } catch { this.DelTaskComplet(id); throw; } } else {//未保存成功 this.WriteLog(-1, entity.Name, "计划保存到数据库没有成功", LogType.TaskAdd2DBError); throw new Exception("计划保存到数据库没有成功"); } } } catch { throw; } }
/// <summary> /// 更新任务属性 /// </summary> /// <param name="taskEntity">The task entity.</param> public void UpdateTask(TaskEntity taskEntity) { this._Task.TaskEntity.Name = taskEntity.Name; this._Task.TaskEntity.DateEnd = taskEntity.DateEnd; this._Task.TaskEntity.DateStart = taskEntity.DateStart; this._Task.TaskEntity.Enable = taskEntity.Enable; this._Task.TaskEntity.ExtraParaStr = taskEntity.ExtraParaStr; this._Task.TaskEntity.RegestesAppName = taskEntity.RegestesAppName; this._Task.TaskEntity.RunSpaceTime = taskEntity.RunSpaceTime; this._Task.TaskEntity.RunSpaceType = taskEntity.RunSpaceType; this._Task.TaskEntity.RunTimeOutSecs = taskEntity.RunTimeOutSecs; this.RebuildTaskRunTimeList(); }
public Task(TaskEntity paraEntity, TaskAssembly paraAssembly) { _TaskEntity = paraEntity; _TaskAssembly = paraAssembly; }