public int TaskAdd(Task model) { using (RLib.DB.DbConn dbconn = Pub.GetConn()) { if (string.IsNullOrWhiteSpace(model.Title)) { throw new MException("标题不能为空!"); } SetDefaultNodeBind(model); Model.Task taskmodel = new Model.Task() { CreateTime = DateTime.Now, CurrVersionId = 0, DispatchClass = model.DispatchClass, EnterClass = model.EnterClass, EnterDll = model.EnterDll, ExpireMins = 1000, Remark = model.Remark, RunCron = model.RunCron, State = model.State, TaskConfig = model.TaskConfig, TaskId = model.TaskId, TaskTags = 0, Title = model.Title, TaskType = model.TaskType, UpdateTime = null, }; dbconn.BeginTransaction(); try { taskmodel = taskdal.Add(dbconn, taskmodel); foreach (var a in model.TaskBindings) { taskdal.AddBinding(dbconn, new Model.TaskBinding() { TaskId = taskmodel.TaskId, NodeId = a.NodeId }); } dbconn.Commit(); return(taskmodel.TaskId); } catch (Exception ex) { dbconn.Rollback(); throw; } } }
public bool AddTaskBinding(int taskId, string nodeIds) { var nodes = RLib.Utils.StringHelper.SplitToIntList(nodeIds ?? "", new char[] { ',', ' ' }); if (nodes.Count == 0) { throw new MException("请选择节点!"); } using (RLib.DB.DbConn dbconn = Pub.GetConn()) { dbconn.BeginTransaction(); try { foreach (var n in nodes) { taskdal.AddBinding(dbconn, new TaskBinding() { NodeId = n, ServerState = 0, TaskId = taskId }); } dbconn.Commit(); return(true); } catch (Exception ex) { dbconn.Rollback(); throw ex; } } }
/// <summary> /// 任务自动绑定或删除主节点 返回任务详情和当前所有绑定 /// </summary> /// <param name="taskId"></param> /// <returns></returns> public static Tuple <Model.Task, List <Model.TaskBinding> > ToRightTaskNodes(int taskId, List <int> filterNodeIdds, bool checkThrow) { var taskdal = new DAL.TaskDal(); var nodedal = new DAL.NodeDal(); using (RLib.DB.DbConn dbconn = Pub.GetConn()) { var taskmodel = taskdal.GetDetail(dbconn, taskId); if (taskmodel == null || taskmodel.State != 0) { throw new MException("任务不存在或已删除!"); } var taskbinds = taskdal.GetTaskBindings(dbconn, taskId); foreach (var a in taskbinds) { a.Node = nodedal.Detail(dbconn, a.NodeId); } Exception throex = null; //添加控制节点 if (taskmodel.TaskType == 1 && taskbinds.Count(x => x.Node.NodeType == 1) == 0) { var mainnodes = nodedal.GetMainNode(dbconn); if (mainnodes.Count == 0) { throex = new MException("没有控制节点,不能运行调度任务!"); } else if (mainnodes.Count > 1) { throex = new MException("有多个控制节点,请手动添加控制节点!"); } else { var binding = taskdal.AddBinding(dbconn, new Model.TaskBinding() { BindId = 0, LastRunTime = null, LocalState = 0, ServerState = 0, NodeId = mainnodes.First().NodeId, RunVersion = 0, TaskId = taskmodel.TaskId }); binding.Node = mainnodes.First(); taskbinds.Add(binding); } } if (checkThrow == true && throex != null) { throw throex; } //删除控制节点 if (taskmodel.TaskType == 0 && taskbinds.Count(x => x.Node.NodeType == 1) > 0) { var mainnodes = taskbinds.Where(x => x.Node.NodeType == 1).ToList(); foreach (var a in mainnodes) { taskdal.DeleteBind(dbconn, a.BindId); taskbinds.Remove(a); } } if (filterNodeIdds != null && filterNodeIdds.Count > 0) { taskbinds.RemoveAll(x => !filterNodeIdds.Contains(x.NodeId)); } taskbinds = taskbinds.OrderByDescending(x => x.Node.NodeType).ToList(); return(new Tuple <Model.Task, List <Model.TaskBinding> >(taskmodel, taskbinds)); } }