public static bool AddVersion(tb_version_model model)
        {
            tb_version_dal dal = new tb_version_dal();

            using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
            {
                PubConn.Open();
                return(dal.Add(PubConn, model));
            }
        }
        public JsonResult GetVersion(int taskid, int version)

        {
            // http: //10.1.13.28:8046/OpenApi/GetVersion
            return(this.Visit(Core.EnumUserRole.None, () =>
            {
                using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
                {
                    PubConn.Open();
                    tb_version_dal dal = new tb_version_dal();
                    tb_version_model model = dal.GetSimpleVersion(PubConn, taskid, version);
                    return Json(model);
                }
            }));
        }
        public JsonResult Copy(int id)
        {
            tb_task_model     model         = new tb_task_model();
            tb_version_model  vermodel      = new tb_version_model();
            tb_tempdata_model tempdatamodel = new tb_tempdata_model();

            return(this.Visit(Core.EnumUserRole.Admin, () =>
            {
                try
                {
                    tb_task_dal dal = new tb_task_dal();
                    tb_version_dal dalversion = new tb_version_dal();
                    tb_tempdata_dal tempdatadal = new tb_tempdata_dal();

                    using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
                    {
                        PubConn.Open();

                        //取出需要复制的数据
                        model = dal.GetOneTask(PubConn, id);
                        tempdatamodel = tempdatadal.GetByTaskID(PubConn, id);
                        vermodel = dalversion.GetCurrentVersion(PubConn, id, model.taskversion);

                        //分别插入
                        model.taskstate = 0;
                        model.taskcreatetime = DateTime.Now;
                        model.taskversion = 1;
                        int taskid = dal.AddTask(PubConn, model);

                        vermodel.taskid = taskid;
                        vermodel.version = 1;
                        vermodel.versioncreatetime = DateTime.Now;
                        vermodel.commit_id = string.Empty;
                        dalversion.Add(PubConn, vermodel);

                        tempdatamodel.taskid = taskid;
                        tempdatamodel.tempdatalastupdatetime = DateTime.Now;
                        tempdatadal.Add(PubConn, tempdatamodel);
                    }
                    return Json(new { code = 1, state = "复制成功" });
                }
                catch (Exception ex)
                {
                    return Json(new { code = -1, msg = ex.Message });
                }
            }));
        }
        public static tb_version_model GetSimpleVersion(int taskid, int version, DbConn conn = null)
        {
            tb_version_dal dal = new tb_version_dal();

            if (conn == null)
            {
                using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
                {
                    PubConn.Open();
                    return(dal.GetSimpleVersion(PubConn, taskid, version));
                }
            }
            else
            {
                return(dal.GetSimpleVersion(conn, taskid, version));
            }
        }
예제 #5
0
        public ActionResult Add(IFormFile TaskDll, tb_task_model model, string tempdatajson)
        {
            return(this.Visit(EnumUserRole.Admin, () =>
            {
                string filename = TaskDll.FileName;
                byte[] dllbyte;
                using (var dll = TaskDll.OpenReadStream())
                {
                    dllbyte = new byte[dll.Length];
                    dll.Read(dllbyte, 0, Convert.ToInt32(dll.Length));
                }

                tb_task_dal dal = new tb_task_dal();
                tb_version_dal dalversion = new tb_version_dal();
                tb_tempdata_dal tempdatadal = new tb_tempdata_dal();
                //model.taskcreateuserid = Common.GetUserId(this);
                using (DbConn PubConn = DbConn.CreateConn(Config.TaskConnectString))
                {
                    PubConn.Open();
                    model.taskcreatetime = DateTime.Now;
                    model.taskversion = 1;
                    int taskid = dal.AddTask(PubConn, model);
                    dalversion.Add(PubConn, new tb_version_model()
                    {
                        taskid = taskid,
                        version = 1,
                        versioncreatetime = DateTime.Now,
                        zipfile = dllbyte,
                        zipfilename = System.IO.Path.GetFileName(filename)
                    });
                    tempdatadal.Add(PubConn, new tb_tempdata_model()
                    {
                        taskid = taskid,
                        tempdatajson = tempdatajson,
                        tempdatalastupdatetime = DateTime.Now
                    });
                }
                return RedirectToAction("index");
            }));
        }
 public ActionResult Add(HttpPostedFileBase TaskDll, tb_task_model model, string tempdatajson)
 {
     return(this.Visit(Core.EnumUserRole.Admin, () =>
     {
         string filename = TaskDll.FileName;
         Stream dll = TaskDll.InputStream;
         byte[] dllbyte = new byte[dll.Length];
         dll.Read(dllbyte, 0, Convert.ToInt32(dll.Length));
         tb_task_dal dal = new tb_task_dal();
         tb_version_dal dalversion = new tb_version_dal();
         tb_tempdata_dal tempdatadal = new tb_tempdata_dal();
         //model.taskcreateuserid = Common.GetUserId(this);
         using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
         {
             PubConn.Open();
             model.taskcreatetime = DateTime.Now;
             model.taskversion = 1;
             ConvertServiceTypeToFlag(model);
             int taskid = dal.AddTask(PubConn, model);
             dalversion.Add(PubConn, new tb_version_model()
             {
                 taskid = taskid,
                 version = 1,
                 versioncreatetime = DateTime.Now,
                 zipfile = dllbyte,
                 zipfilename = System.IO.Path.GetFileName(filename),
                 commit_id = string.Empty
             });
             tempdatadal.Add(PubConn, new tb_tempdata_model()
             {
                 taskid = taskid,
                 tempdatajson = tempdatajson,
                 tempdatalastupdatetime = DateTime.Now
             });
         }
         return RedirectToAction("index");
     }));
 }
예제 #7
0
 public ActionResult Update(int taskid)
 {
     return(this.Visit(Core.EnumUserRole.None, () =>
     {
         using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
         {
             PubConn.Open();
             tb_task_dal dal = new tb_task_dal();
             tb_task_model model = dal.GetOneTask(PubConn, taskid);
             tb_tempdata_model tempdatamodel = new tb_tempdata_dal().GetByTaskID(PubConn, taskid);
             List <tb_version_model> Version = new tb_version_dal().GetTaskVersion(PubConn, taskid);
             List <tb_category_model> Category = new tb_category_dal().GetList(PubConn, "");
             List <tb_node_model> Node = new tb_node_dal().GetListAll(PubConn);
             List <tb_user_model> User = new tb_user_dal().GetAllUsers(PubConn);
             ViewBag.Node = Node;
             ViewBag.Category = Category;
             ViewBag.Version = Version;
             ViewBag.User = User;
             ViewBag.TempData = tempdatamodel;
             return View(model);
         }
     }));
 }
예제 #8
0
        /// <summary>
        /// 任务的开启
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public bool Start(int taskid)
        {
            var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());

            if (taskruntimeinfo != null)
            {
                throw new Exception("任务已在运行中");
            }

            taskruntimeinfo          = new NodeTaskRuntimeInfo();
            taskruntimeinfo.TaskLock = new TaskLock();
            SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
            {
                tb_task_dal taskdal              = new tb_task_dal();
                taskruntimeinfo.TaskModel        = taskdal.Get(c, taskid);
                tb_version_dal versiondal        = new tb_version_dal();
                taskruntimeinfo.TaskVersionModel = versiondal.GetCurrentVersion(c, taskid, taskruntimeinfo.TaskModel.taskversion);
            });
            string filelocalcachepath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskDllCompressFileCacheDir + @"\" + taskruntimeinfo.TaskModel.id + @"\" + taskruntimeinfo.TaskModel.taskversion + @"\" +
                                        taskruntimeinfo.TaskVersionModel.zipfilename;
            string fileinstallpath             = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskDllDir + @"\" + taskruntimeinfo.TaskModel.id;
            string fileinstallmainclassdllpath = fileinstallpath + @"\" + taskruntimeinfo.TaskModel.taskmainclassdllfilename;
            string taskshareddlldir            = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskSharedDllsDir;

            BSF.Tool.IOHelper.CreateDirectory(filelocalcachepath);
            BSF.Tool.IOHelper.CreateDirectory(fileinstallpath);
            System.IO.File.WriteAllBytes(filelocalcachepath, taskruntimeinfo.TaskVersionModel.zipfile);

            CompressHelper.UnCompress(filelocalcachepath, fileinstallpath);
            //拷贝共享程序集
            BSF.Tool.IOHelper.CopyDirectory(taskshareddlldir, fileinstallpath);
            try
            {
                new TaskAssemblyRedirect().TryRebulidDll(fileinstallmainclassdllpath, taskruntimeinfo.TaskModel.taskmainclassnamespace);
                var dlltask      = new AppDomainLoader <BaseDllTask>().Load(fileinstallmainclassdllpath, taskruntimeinfo.TaskModel.taskmainclassnamespace, out taskruntimeinfo.Domain);
                var sdktaskmodel = new BSF.BaseService.TaskManager.Model.tb_task_model();
                PropertyHelper.Copy(taskruntimeinfo.TaskModel, sdktaskmodel);
                dlltask.SystemRuntimeInfo = new TaskSystemRuntimeInfo()
                {
                    TaskConnectString = GlobalConfig.TaskDataBaseConnectString,
                    TaskModel         = sdktaskmodel
                };
                //加载AppConfig配置
                var appconfig = new TaskAppConfigInfo();
                if (!string.IsNullOrEmpty(taskruntimeinfo.TaskModel.taskappconfigjson))
                {
                    appconfig = new BSF.Serialization.JsonProvider().Deserialize <TaskAppConfigInfo>(taskruntimeinfo.TaskModel.taskappconfigjson);
                }
                SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
                {
                    tb_config_dal configdal = new tb_config_dal();
                    var cs = configdal.GetList(c);
                    foreach (var o in cs)
                    {
                        if (!appconfig.ContainsKey(o.configkey))
                        {
                            appconfig.Add(o.configkey, o.configvalue);
                        }
                    }
                });

                dlltask.AppConfig       = appconfig;
                taskruntimeinfo.DllTask = dlltask;
                bool r = TaskPoolManager.CreateInstance().Add(taskid.ToString(), taskruntimeinfo);
                SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
                {
                    tb_task_dal taskdal = new tb_task_dal();
                    taskdal.UpdateTaskState(c, taskid, (int)EnumTaskState.Running);
                });
                LogHelper.AddTaskLog("节点开启任务成功", taskid);
                return(r);
            }
            catch (Exception exp)
            {
                DisposeTask(taskid, taskruntimeinfo, true);
                throw exp;
            }
        }
 public ActionResult Update(HttpPostedFileBase TaskDll, tb_task_model model, string tempdatajson)
 {
     return(this.Visit(Core.EnumUserRole.Admin, () =>
     {
         try
         {
             tb_task_dal dal = new tb_task_dal();
             tb_version_dal dalversion = new tb_version_dal();
             tb_tempdata_dal tempdatadal = new tb_tempdata_dal();
             byte[] dllbyte = null;
             string filename = "";
             int change = model.taskversion;
             if (change == -1)
             {
                 if (TaskDll == null)
                 {
                     throw new Exception("没有文件!");
                 }
                 filename = TaskDll.FileName;
                 Stream dll = TaskDll.InputStream;
                 dllbyte = new byte[dll.Length];
                 dll.Read(dllbyte, 0, Convert.ToInt32(dll.Length));
                 //model.taskcreateuserid = Common.GetUserId(this);
             }
             using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
             {
                 PubConn.Open();
                 var task = dal.GetOneTask(PubConn, model.id);
                 if (task.taskstate == (int)Dyd.BaseService.TaskManager.Core.EnumTaskState.Running)
                 {
                     throw new Exception("当前任务在运行中,请停止后提交");
                 }
                 if (change == -1)
                 {
                     model.taskversion = dalversion.GetVersion(PubConn, model.id) + 1;
                 }
                 model.taskupdatetime = DateTime.Now;
                 ConvertServiceTypeToFlag(model);
                 dal.UpdateTask(PubConn, model);
                 if (change == -1)
                 {
                     dalversion.Add(PubConn, new tb_version_model()
                     {
                         taskid = model.id,
                         version = model.taskversion,
                         versioncreatetime = DateTime.Now,
                         zipfile = dllbyte,
                         zipfilename = System.IO.Path.GetFileName(filename),
                         commit_id = string.Empty
                     });
                 }
                 tempdatadal.UpdateByTaskID(PubConn, new tb_tempdata_model()
                 {
                     taskid = model.id,
                     tempdatajson = tempdatajson,
                     tempdatalastupdatetime = DateTime.Now
                 });
                 return RedirectToAction("index");
             }
         }
         catch (Exception exp)
         {
             ModelState.AddModelError("", exp.Message);
             return View();
         }
     }));
 }
        public JsonResult Update(HttpPostedFileBase TaskDll, tb_task_model model, string tempdatajson)
        {
            HttpPostedFileBase file = Request.Files[0];

            return(this.Visit(Core.EnumUserRole.Admin, () =>
            {
                try
                {
                    tb_task_dal dal = new tb_task_dal();
                    tb_version_dal dalversion = new tb_version_dal();
                    tb_tempdata_dal tempdatadal = new tb_tempdata_dal();
                    byte[] dllbyte = null;
                    string filename = "";
                    int change = model.taskversion;
                    if (change == -1)
                    {
                        if (TaskDll == null)
                        {
                            return Json(new { code = -1, message = "没有文件" });
                        }
                        filename = TaskDll.FileName;
                        Stream dll = TaskDll.InputStream;
                        dllbyte = new byte[dll.Length];
                        dll.Read(dllbyte, 0, Convert.ToInt32(dll.Length));
                        //model.taskcreateuserid = Common.GetUserId(this);
                    }
                    using (DbConn PubConn = DbConfig.CreateConn(Config.TaskConnectString))
                    {
                        PubConn.Open();
                        var task = dal.GetOneTask(PubConn, model.id);
                        if (task.taskstate == (int)Dyd.BaseService.TaskManager.Core.EnumTaskState.Running)
                        {
                            return Json(new { code = -1, message = "当前任务在运行中,请停止后提交" });
                        }
                        if (change == -1)
                        {
                            model.taskversion = dalversion.GetVersion(PubConn, model.id) + 1;
                        }
                        model.taskupdatetime = DateTime.Now;
                        dal.UpdateTask(PubConn, model);
                        if (change == -1)
                        {
                            dalversion.Add(PubConn, new tb_version_model()
                            {
                                taskid = model.id,
                                version = model.taskversion,
                                versioncreatetime = DateTime.Now,
                                zipfile = dllbyte,
                                zipfilename = System.IO.Path.GetFileName(filename)
                            });
                        }
                        tempdatadal.UpdateByTaskID(PubConn, new tb_tempdata_model()
                        {
                            taskid = model.id,
                            tempdatajson = tempdatajson,
                            tempdatalastupdatetime = DateTime.Now
                        });
                        return Json(new { code = 0, message = "上传成功" });
                    }
                }
                catch (Exception exp)
                {
                    return Json(new { code = -1, message = exp.Message });
                }
            }));
        }
        /// <summary>
        /// 任务的开启
        /// </summary>
        /// <param name="taskid"></param>
        /// <returns></returns>
        public bool Start(int taskid)
        {
            var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());

            if (taskruntimeinfo != null)
            {
                throw new Exception("任务已在运行中");
            }

            taskruntimeinfo          = new NodeTaskRuntimeInfo();
            taskruntimeinfo.TaskLock = new TaskLock();
            SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
            {
                tb_task_dal taskdal              = new tb_task_dal();
                taskruntimeinfo.TaskModel        = taskdal.Get(c, taskid);
                tb_version_dal versiondal        = new tb_version_dal();
                taskruntimeinfo.TaskVersionModel = versiondal.GetCurrentVersion(c, taskid, taskruntimeinfo.TaskModel.taskversion);
                //taskruntimeinfo.ProcessId=taskdal.GetProcess(c, taskid);
            });
            //如果异常退出,进程后没有更新

            /*if (taskruntimeinfo.TaskModel.task_type == TaskType.Service.Code)
             * {
             *
             * }*/
            string filelocalcachepath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskDllCompressFileCacheDir + @"\" + taskruntimeinfo.TaskModel.id + @"\" + taskruntimeinfo.TaskModel.taskversion + @"\" +
                                        taskruntimeinfo.TaskVersionModel.zipfilename;
            string fileinstallpath             = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskDllDir + @"\" + taskruntimeinfo.TaskModel.id;
            string fileinstallmainclassdllpath = fileinstallpath + @"\" + taskruntimeinfo.TaskModel.taskmainclassdllfilename;
            string taskshareddlldir            = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskSharedDllsDir;
            string shelldlldir = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalConfig.TaskShellDir;

            XXF.Common.IOHelper.CreateDirectory(filelocalcachepath);
            XXF.Common.IOHelper.CreateDirectory(fileinstallpath);
            // File.WriteAllBytes(filelocalcachepath, taskruntimeinfo.TaskVersionModel.zipfile);
            FileStream fs = new FileStream(filelocalcachepath, FileMode.Create, FileAccess.ReadWrite);

            SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
            {
                tb_version_dal versiondal = new tb_version_dal();
                versiondal.FillByteToFile(c, taskid, taskruntimeinfo.TaskModel.taskversion, fs);
            });
            fs.Close();
            if (Directory.Exists(fileinstallpath))
            {
                File.SetAttributes(fileinstallpath, FileAttributes.Normal);
                Directory.Delete(fileinstallpath, true);
            }
            CompressHelper.UnCompress(filelocalcachepath, fileinstallpath);
            //拷贝共享程序集

            XXF.Common.IOHelper.CopyDirectory(taskshareddlldir, fileinstallpath);
            //如果是module



            if (taskruntimeinfo.TaskModel.IsModule)
            {
                XXF.Common.IOHelper.CopyDirectory(shelldlldir, fileinstallpath);
            }
            LogHelper.AddTaskLog($"原程序集版本:{taskruntimeinfo.TaskVersionModel.assemblyversion}", taskid);
            //LogHelper.AddTaskLog($"程序集文件:{fileinstallmainclassdllpath}",taskid);
            string assemblyVersion = null;

            byte[] bytes = Encoding.Default.GetBytes(taskruntimeinfo.TaskModel
                                                     .taskappconfigjson);
            string jsonConfig = Convert.ToBase64String(bytes);
            bool   r          = false;

            if (taskruntimeinfo.TaskModel.task_type == TaskType.Service.Code)
            {
                bool            is_module = taskruntimeinfo.TaskModel.IsModule;
                IProcessBuilder builder;
                //当
                //
                try
                {
                    // string assemblyVersion = GetAssemblyVersion(fileinstallmainclassdllpath);
                    Process result;

                    string flag = taskruntimeinfo.TaskModel.ServiceFlag;



                    var startupParam = new ProcessStartupParam()
                    {
                        Flag             = flag, FileName = fileinstallmainclassdllpath,
                        FilePatten       = taskruntimeinfo.TaskModel.taskmainclassdllfilename,
                        Config           = jsonConfig, WorkDir = fileinstallpath,
                        Cron             = taskruntimeinfo.TaskModel.taskcron,
                        NameSpace        = taskruntimeinfo.TaskModel.taskmainclassnamespace,
                        TaskDbConnection = GlobalConfig.TaskDataBaseConnectString,
                        TaskModel        = taskruntimeinfo.TaskModel,
                        AppConfig        = new XXF.Serialization.JsonHelper().Deserialize <TaskAppConfigInfo>(taskruntimeinfo
                                                                                                              .TaskModel
                                                                                                              .taskappconfigjson)
                    };

                    builder = ProcessStart.GetInstance().GetBuilder(startupParam);
                    builder.GetMainFileName();
                    assemblyVersion = builder.GetAssemblyVersion();
                    //     taskruntimeinfo.TaskModel.taskmainclassdllfilename = builder.StartupParam.FileName;
                    result = builder.StartProcess();



                    r = StartProcess(taskid, taskruntimeinfo, result);
                }
                catch (Exception ex)
                {
                    LogHelper.AddTaskLog($"节点开启任务失败{ex.Message}", taskid);
                    throw;
                }
                // bool r = TaskPoolManager.CreateInstance().Add(taskid.ToString(), taskruntimeinfo);
                SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
                {
                    tb_task_dal taskdal = new tb_task_dal();
                    //更新类型
                    taskdal.Edit(c, taskruntimeinfo.TaskModel);
                    taskdal.UpdateTaskState(c, taskid, (int)EnumTaskState.Running);
                    taskdal.UpdateProcess(c, taskid, taskruntimeinfo.Process.Id);
                    //程序集版本更新
                    if (!string.IsNullOrEmpty(assemblyVersion))
                    {
                        if (taskruntimeinfo.TaskVersionModel.assemblyversion != assemblyVersion)
                        {
                            taskruntimeinfo.TaskVersionModel.assemblyversion = assemblyVersion;
                            tb_version_dal versiondal = new tb_version_dal();
                            versiondal.UpdateAssemblyVersion(c, taskruntimeinfo.TaskVersionModel.id, assemblyVersion);
                        }
                    }
                });
                //
                if (taskruntimeinfo.TaskModel.IsRegister == 1)
                {
                    ConsulRegisteration item = _consulRegisterMgr.Parse(taskruntimeinfo.TaskModel);
                    item.Service = builder.GetService();
                    taskruntimeinfo.RegistService = item;
                    _consulRegisterMgr.Register(item);
                }

                LogHelper.AddTaskLog("节点开启任务成功", taskid);
                return(r);
            }
            else
            {
                //以dll加载的方式处理,基本已废弃
                assemblyVersion = GetAssemblyVersion(fileinstallmainclassdllpath);

                if (!string.IsNullOrEmpty(taskruntimeinfo.TaskModel.ServiceFlag))
                {
                    return(StartTaskProcess(taskid, taskruntimeinfo, fileinstallmainclassdllpath,
                                            fileinstallpath, jsonConfig, assemblyVersion));
                }
                else
                {
                    try
                    {
                        var dlltask = new AppDomainLoader <BaseDllTask>().Load(fileinstallmainclassdllpath,
                                                                               taskruntimeinfo.TaskModel.taskmainclassnamespace, out taskruntimeinfo.Domain);
                        //  dlltask.Domain = taskruntimeinfo.Domain;
                        var sdktaskmodel = new XXF.BaseService.TaskManager.model.tb_task_model();
                        PropertyHelper.Copy(taskruntimeinfo.TaskModel, sdktaskmodel);
                        dlltask.SystemRuntimeInfo = new TaskSystemRuntimeInfo()
                        {
                            TaskConnectString = GlobalConfig.TaskDataBaseConnectString,
                            TaskModel         = sdktaskmodel
                        };

                        dlltask.AppConfig = new TaskAppConfigInfo();
                        if (!string.IsNullOrEmpty(taskruntimeinfo.TaskModel.taskappconfigjson))
                        {
                            dlltask.AppConfig =
                                new XXF.Serialization.JsonHelper().Deserialize <TaskAppConfigInfo>(taskruntimeinfo
                                                                                                   .TaskModel
                                                                                                   .taskappconfigjson);
                        }

                        taskruntimeinfo.DllTask = dlltask;

                        /*   if (dlltask is IMicroService)
                         * {
                         *     taskruntimeinfo.TaskModel.task_type = TaskType.Service.Code;
                         * }
                         * else
                         * {
                         *     taskruntimeinfo.TaskModel.task_type = TaskType.Task.Code;
                         *
                         * }*/

                        r = TaskPoolManager.CreateInstance().Add(taskid.ToString(), taskruntimeinfo);
                        SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
                        {
                            tb_task_dal taskdal = new tb_task_dal();
                            //更新类型
                            taskdal.Edit(c, taskruntimeinfo.TaskModel);
                            taskdal.UpdateTaskState(c, taskid, (int)EnumTaskState.Running);
                            //程序集版本更新
                            if (!string.IsNullOrEmpty(assemblyVersion))
                            {
                                if (taskruntimeinfo.TaskVersionModel.assemblyversion != assemblyVersion)
                                {
                                    taskruntimeinfo.TaskVersionModel.assemblyversion = assemblyVersion;
                                    tb_version_dal versiondal = new tb_version_dal();
                                    versiondal.UpdateAssemblyVersion(c, taskruntimeinfo.TaskVersionModel.id,
                                                                     assemblyVersion);
                                }
                            }
                        });

                        LogHelper.AddTaskLog("节点开启任务成功", taskid);
                        return(r);
                    }
                    catch (Exception exp)
                    {
                        DisposeTask(taskid, taskruntimeinfo, true);
                        throw exp;
                    }
                }
            }
        }
        private bool StartTaskProcess(int taskid, NodeTaskRuntimeInfo taskruntimeinfo, string
                                      fileinstallmainclassdllpath, string fileinstallpath, string jsonConfig,
                                      string assemblyVersion)
        {
            bool is_module = taskruntimeinfo.TaskModel.IsModule;

            //当
            //
            try
            {
                Process result;

                string flag = taskruntimeinfo.TaskModel.ServiceFlag;



                var startupParam = new ProcessStartupParam()
                {
                    Flag             = flag,
                    FileName         = fileinstallmainclassdllpath,
                    Config           = jsonConfig,
                    WorkDir          = fileinstallpath,
                    Cron             = taskruntimeinfo.TaskModel.taskcron,
                    NameSpace        = taskruntimeinfo.TaskModel.taskmainclassnamespace,
                    TaskDbConnection = GlobalConfig.TaskDataBaseConnectString,
                    TaskModel        = taskruntimeinfo.TaskModel
                };

                result = ProcessStart.GetInstance().Load(startupParam);



                StartProcess(taskid, taskruntimeinfo, result);
            }
            catch (Exception ex)
            {
                LogHelper.AddTaskLog($"节点开启任务失败{ex.Message}", taskid);
                throw;
            }
            bool r = TaskPoolManager.CreateInstance().Add(taskid.ToString(), taskruntimeinfo);

            SqlHelper.ExcuteSql(GlobalConfig.TaskDataBaseConnectString, (c) =>
            {
                tb_task_dal taskdal = new tb_task_dal();
                //更新类型
                taskdal.Edit(c, taskruntimeinfo.TaskModel);
                taskdal.UpdateTaskState(c, taskid, (int)EnumTaskState.Running);
                taskdal.UpdateProcess(c, taskid, taskruntimeinfo.Process.Id);
                //程序集版本更新
                if (!string.IsNullOrEmpty(assemblyVersion))
                {
                    if (taskruntimeinfo.TaskVersionModel.assemblyversion != assemblyVersion)
                    {
                        taskruntimeinfo.TaskVersionModel.assemblyversion = assemblyVersion;
                        tb_version_dal versiondal = new tb_version_dal();
                        versiondal.UpdateAssemblyVersion(c, taskruntimeinfo.TaskVersionModel.id, assemblyVersion);
                    }
                }
            });
            //

            LogHelper.AddTaskLog("节点开启任务成功", taskid);
            return(r);
        }
        static void RunCommond()
        {
            lock (_lockRunLoop)
            {
                try
                {
                    List <tb_command_model> commands = new List <tb_command_model>();
                    try
                    {
                        SqlHelper.ExcuteSql(GlobalConfig.ConnectionString, (conn) =>
                        {
                            tb_command_dal commanddal = new tb_command_dal();
                            if (lastMaxID < 0)
                            {
                                lastMaxID = commanddal.GetMaxCommandID(conn);
                            }
                            commands = commanddal.GetNodeCommands(conn, GlobalConfig.NodeID, lastMaxID);
                        });
                    }
                    catch (Exception ex)
                    {
                        LogHelper.AddNodeError("获取当前节点命令集错误", ex);
                    }
                    if (commands.Count > 0)
                    {
                        LogHelper.AddNodeLog("当前节点扫描到" + commands.Count + "条命令,并执行中....");
                    }
                    foreach (var c in commands)
                    {
                        EnumTaskCommandState enumTaskCommandState = EnumTaskCommandState.Error;
                        EnumTaskState        enumTaskState        = EnumTaskState.UnInstall;
                        try
                        {
                            SqlHelper.ExcuteSql(GlobalConfig.ConnectionString, (conn) =>
                            {
                                tb_task_dal taskDAL = new tb_task_dal();
                                var task            = taskDAL.GetOneTask(conn, c.taskid);

                                tb_version_dal versionDAL = new tb_version_dal();
                                var version = versionDAL.GetVersionByTaskID(conn, c.taskid);

                                string path = $"{AppDomain.CurrentDomain.BaseDirectory}{task.taskname}";
                                if (!Directory.Exists(path))
                                {
                                    Directory.CreateDirectory(path);
                                    if (version != null)
                                    {
                                        string zipFilePath = $"{path}\\{version.zipfilename}";
                                        ///数据库二进制转压缩文件
                                        CompressHelper.ConvertToFile(version.zipfile, zipFilePath);
                                        CompressHelper.UnCompress(zipFilePath, path);
                                        ///删除压缩文件
                                        File.Delete(zipFilePath);
                                        ///初始化shell脚本
                                        InitScript.InstallScript(task.taskname, task.taskmainclassdllfilename);

                                        InitScript.UninstallScript(task.taskname);

                                        InitScript.StartScript(task.taskname);

                                        InitScript.StopScript(task.taskname);
                                    }
                                    else
                                    {
                                        throw new Exception($"在tb_version表中未查到taskid:{c.taskid}数据");
                                    }
                                }
                                if (c.commandname == EnumTaskCommandName.StartTask.Tostring())
                                {
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.UnInstall)
                                    {
                                        CommandFactory.Execute(path + "\\install.bat");
                                    }

                                    ///线程睡眠5s,等待服务安装完成
                                    Thread.Sleep(5000);
                                    CommandFactory.Execute(path + "\\start.bat");

                                    ///线程睡眠2s,等到脚本执行完成
                                    Thread.Sleep(2000);
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.Running)
                                    {
                                        enumTaskCommandState = EnumTaskCommandState.Success;
                                        enumTaskState        = EnumTaskState.Running;
                                    }
                                }
                                else if (c.commandname == EnumTaskCommandName.ReStartTask.Tostring())
                                {
                                    CommandFactory.Execute(path + "\\start.bat");
                                    ///线程睡眠2s,等到脚本执行完成
                                    Thread.Sleep(2000);
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.Running)
                                    {
                                        enumTaskCommandState = EnumTaskCommandState.Success;
                                        enumTaskState        = EnumTaskState.Running;
                                    }
                                }
                                else if (c.commandname == EnumTaskCommandName.StopTask.Tostring())
                                {
                                    CommandFactory.Execute(path + "\\stop.bat");

                                    ///线程睡眠2s,等到脚本执行完成
                                    Thread.Sleep(2000);
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.Stop)
                                    {
                                        enumTaskCommandState = EnumTaskCommandState.Success;
                                        enumTaskState        = EnumTaskState.Stop;
                                    }
                                }
                                else if (c.commandname == EnumTaskCommandName.UninstallTask.Tostring())
                                {
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.Running)
                                    {
                                        CommandFactory.Execute(path + "\\stop.bat");
                                        Thread.Sleep(2000);
                                    }
                                    CommandFactory.Execute(path + "\\uninstall.bat");

                                    ///线程睡眠2s,等到脚本执行完成
                                    Thread.Sleep(2000);
                                    if (ServiceHelper.ServiceState(task.taskname) == EnumTaskState.UnInstall)
                                    {
                                        enumTaskCommandState = EnumTaskCommandState.Success;
                                    }
                                }
                                ///更新命令状态
                                new tb_command_dal().UpdateCommandState(conn, c.id, (int)enumTaskCommandState);
                                ///更新服务状态
                                new tb_task_dal().UpdateTaskState(conn, c.taskid, (int)enumTaskState);

                                if (enumTaskCommandState == EnumTaskCommandState.Success)
                                {
                                    LogHelper.AddNodeLog($"节点:{c.nodeid}成功执行任务:{c.taskid}……");
                                }
                            });
                        }
                        catch (Exception ex)
                        {
                            LogHelper.AddTaskError("任务执行错误", c.taskid, ex);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.AddNodeLog($"节点执行错误,错误原因:{ex.Message}");
                }
            }
        }