public bool DeleteTaskBinding(int bindingId) { using (RLib.DB.DbConn dbconn = Pub.GetConn()) { //var bindmodel = taskdal.GetTaskBinding(dbconn, bindingId); //if (bindmodel.LocalState != 0 || bindmodel.ServerState != 0) //{ // throw new MException("请选停止节点上的该任务!"); //} var versions = taskdal.DeleteBind(dbconn, bindingId); return(versions > 0); } }
public int TaskEdit(Task model) { using (RLib.DB.DbConn dbconn = Pub.GetConn()) { if (string.IsNullOrWhiteSpace(model.Title)) { throw new MException("标题不能为空!"); } var taskmodel = taskdal.GetDetail(dbconn, model.TaskId); if (taskmodel == null || taskmodel.State == -1) { throw new MException("任务不存在!"); } SetDefaultNodeBind(model); taskmodel.DispatchClass = model.DispatchClass; taskmodel.EnterClass = model.EnterClass; taskmodel.EnterDll = model.EnterDll; taskmodel.Remark = model.Remark; taskmodel.RunCron = model.RunCron; taskmodel.State = model.State; taskmodel.TaskConfig = model.TaskConfig; taskmodel.Title = model.Title; taskmodel.TaskType = model.TaskType; taskmodel.UpdateTime = DateTime.Now; taskmodel.TaskBindings = taskdal.GetTaskBindings(dbconn, model.TaskId); var delnodes = new List <int>(); foreach (var t in taskmodel.TaskBindings) { if (!model.TaskBindings.Exists(x => t.NodeId == x.NodeId)) { if (t.LocalState == 1) { throw new Exception("节点" + t.Node + "本在状态为运行中,不能删除!"); } } } taskmodel.TaskBindings.Select(x => x.NodeId).Except(model.TaskBindings.Select(x => x.NodeId)).ToList(); var addnodes = model.TaskBindings.Select(x => x.NodeId).Except(taskmodel.TaskBindings.Select(x => x.NodeId)).ToList(); dbconn.BeginTransaction(); try { taskdal.Update(dbconn, taskmodel); foreach (var a in delnodes) { taskdal.DeleteBind(dbconn, model.TaskId, a); } foreach (var a in addnodes) { taskdal.AddBinding(dbconn, new Model.TaskBinding() { TaskId = taskmodel.TaskId, NodeId = a }); } dbconn.Commit(); return(taskmodel.TaskId); } catch (Exception ex) { dbconn.Rollback(); throw; } } }
/// <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)); } }