Exemple #1
0
 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);
     }
 }
Exemple #2
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;
                }
            }
        }
Exemple #3
0
        /// <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));
            }
        }