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)); } }
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"); })); }
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); } })); }
/// <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}"); } } }