[HttpPost, Route("taskversiondetail")] //HttpPost
        public ResponseBase <LoadTaskVersionResponse> TaskVersionDetail(LoadTaskVersionRequest req)
        {
            var taskversion = taskversionrep.FindSingle(x => x.id == req.TaskVersionId && x.taskid == req.TaskId);

            if (taskversion != null)
            {
                var           task            = taskrep.FindSingle(x => x.id == req.TaskId);
                List <int>    useridlist      = string.IsNullOrEmpty(task.alarmuserid)?new List <int>(): task.alarmuserid.ConvertToList();
                List <string> AlarmEmailList  = new List <string>();
                List <string> AlarmMobileList = new List <string>();
                userrepository.Find(x => useridlist.Contains(x.id)).ToList().ForEach(x =>
                {
                    if (task.alarmtype == (int)AlarmType.Email)
                    {
                        if (!string.IsNullOrEmpty(x.useremail))
                        {
                            AlarmEmailList.Add(x.useremail);
                        }
                    }
                    else if (task.alarmtype == (int)AlarmType.SMS)
                    {
                        if (!string.IsNullOrEmpty(x.usermobile))
                        {
                            AlarmEmailList.Add(x.usermobile);
                        }
                    }
                });
                return(ResponseToClient <LoadTaskVersionResponse>(ResponesStatus.Success, "", new LoadTaskVersionResponse()
                {
                    TaskVersionDetail = taskversion, TaskDetail = task, AlarmEmailList = (AlarmEmailList.Count <= 0 ? "" : string.Join(",", AlarmEmailList)), AlarmMobileList = (AlarmMobileList.Count <= 0 ? "" : string.Join(",", AlarmMobileList))
                }));
            }
            return(ResponseToClient <LoadTaskVersionResponse>(ResponesStatus.Failed, "未找到该任务版本号对应的信息"));
        }
示例#2
0
        public ActionResult Edit(int taskid = 0, int taskversionid = 0)
        {
            ViewBag.taskid        = taskid;
            ViewBag.taskversionid = taskversionid;
            var taskversionreq = new LoadTaskVersionRequest()
            {
                TaskId = taskid, TaskVersionId = taskversionid, Source = Source.Web
            };
            var r = PostToServer <LoadTaskVersionResponse, LoadTaskVersionRequest>(ClientProxy.TaskVersionDetail_Url, taskversionreq);

            if (r.Status != ResponesStatus.Success)
            {
                return(View(new LoadTaskVersionResponse()));
            }
            return(View(r.Data));
        }
示例#3
0
        /// <summary>
        /// 执行
        /// </summary>
        public override RunCommandResult Execute()
        {
            string taskid        = CommandQueue.taskid.ToString();
            string taskversionid = CommandQueue.taskversionid.ToString();

            try
            {
                var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());
                if (taskruntimeinfo != null)
                {
                    ShowCommandLog("任务已在运行中");
                    UploadStatus(taskid, taskversionid, TaskScheduleStatus.Scheduling, "");
                    return(new RunCommandResult()
                    {
                        ExecuteStatus = ExecuteStatus.ExecuteFailed, Message = "任务已在运行中"
                    });
                }
                taskruntimeinfo          = new NodeTaskRunTimeInfo();
                taskruntimeinfo.TaskLock = new TaskLock();
                //读取任务版本信息
                var taskversionreq = new LoadTaskVersionRequest()
                {
                    TaskId = CommandQueue.taskid, TaskVersionId = CommandQueue.taskversionid, Source = Source.Node
                };
                var r = NodeProxy.PostToServer <LoadTaskVersionResponse, LoadTaskVersionRequest>(ProxyUrl.TaskVersionDetail_Url, taskversionreq);
                if (r.Status != ResponesStatus.Success)
                {
                    ShowCommandLog("获取任务版本号详情失败,请求Url:" + ProxyUrl.TaskVersionDetail_Url + ",请求参数:" + JsonConvert.SerializeObject(taskversionreq) + ",返回参数:" + JsonConvert.SerializeObject(r));
                    return(new RunCommandResult()
                    {
                        ExecuteStatus = ExecuteStatus.ExecuteFailed, Message = "获取任务版本号详情失败"
                    });
                }
                taskruntimeinfo.TaskVersionModel = r.Data.TaskVersionDetail;
                taskruntimeinfo.TaskModel        = r.Data.TaskDetail;
                ShowCommandLog("开始创建缓存目录,域安装目录,拷贝共享程序集...");
                string filelocalcachepath = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalNodeConfig.TaskDllCompressFileCacheDir + @"\" + taskid + @"\" + r.Data.TaskVersionDetail.version + @"\" + r.Data.TaskVersionDetail.zipfilename;
                string domaininstallpath  = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalNodeConfig.TaskDllDir + "\\" + taskid + "\\";
                // string domaininstallmainclassdllpath = domaininstallpath + @"\" + taskruntimeinfo.TaskModel.taskclassname;
                string taskshareddlldir = AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\\') + "\\" + GlobalNodeConfig.TaskSharedDllsDir;
                //通知节点TaskProvider任务执行
                IOHelper.CreateDirectory(filelocalcachepath);
                IOHelper.CreateDirectory(domaininstallpath);
                File.WriteAllBytes(filelocalcachepath, taskruntimeinfo.TaskVersionModel.zipfile);
                CompressHelper.UnCompress(filelocalcachepath, domaininstallpath);
                IOHelper.CopyDirectory(taskshareddlldir, domaininstallpath);//拷贝共享程序集到域安装路径
                ShowCommandLog("目录操作完成,拷贝共享程序集完成,开始创建任务的AppDomain域");
                try
                {
                    var          dllpath = Path.Combine(domaininstallpath, taskruntimeinfo.TaskVersionModel.zipfilename + ".dll");
                    AbstractTask dllTask = new AppDomainLoaderHelper <AbstractTask>().CreateDomain(dllpath.Replace(".rar", "").Replace("zip", ""), taskruntimeinfo.TaskModel.taskclassname, out taskruntimeinfo.Domain);
                    dllTask.SetAlarmList(r.Data.AlarmEmailList, r.Data.AlarmMobileList);//设置任务报警信息
                    tb_task        cloneTaskModel        = taskruntimeinfo.TaskModel.CloneObj <tb_task>();
                    tb_taskversion cloneTaskVersionModel = taskruntimeinfo.TaskVersionModel.CloneObj <tb_taskversion>();
                    dllTask.TaskDetail        = cloneTaskModel;
                    dllTask.TaskVersionDetail = cloneTaskVersionModel;
                    dllTask.AppConfig         = new TaskAppConfigInfo();

                    //CommandParams cmdparams= JsonConvert.DeserializeObject<CommandParams>(CommandQueue.commandparams);
                    //if (!string.IsNullOrEmpty(cmdparams.TaskParams))
                    //{
                    //    dllTask.AppConfig = JsonConvert.DeserializeObject<TaskAppConfigInfo>(cmdparams.TaskParams);
                    //}
                    //else
                    //{
                    if (!string.IsNullOrEmpty(taskruntimeinfo.TaskVersionModel.taskparams))
                    {
                        dllTask.AppConfig = JsonConvert.DeserializeObject <TaskAppConfigInfo>(taskruntimeinfo.TaskVersionModel.taskparams);
                    }
                    //}
                    taskruntimeinfo.DllTask = dllTask;
                    string nextruntime = "2099-12-30";
                    TaskPoolManager.CreateInstance().Add(taskid.ToString(), taskruntimeinfo, ref nextruntime);
                    ShowCommandLog("加载AppDomain域成功,开始添加到任务池等待执行");
                    //上报任务执行日志,并更新调度状态为调度中
                    UploadStatus(taskid, taskversionid, TaskScheduleStatus.Scheduling, nextruntime);
                    ShowCommandLog("添加到任务池成功,开启任务成功");
                    return(new RunCommandResult()
                    {
                        ExecuteStatus = ExecuteStatus.ExecuteSucess
                    });
                }
                catch (Exception ex)
                {
                    ShowCommandLog("加载任务应用程序域异常,异常信息:" + JsonConvert.SerializeObject(ex));
                    UploadStatus(taskid, taskversionid, TaskScheduleStatus.StopSchedule);
                    return(new RunCommandResult()
                    {
                        ExecuteStatus = ExecuteStatus.ExecuteException, Message = ex.Message, Ex = ex
                    });
                }
            }
            catch (Exception ex)
            {
                ShowCommandLog("开启任务命令异常,异常信息:" + JsonConvert.SerializeObject(ex));
                UploadStatus(taskid, taskversionid, TaskScheduleStatus.StopSchedule);
                return(new RunCommandResult()
                {
                    ExecuteStatus = ExecuteStatus.ExecuteException, Message = ex.Message, Ex = ex
                });
            }
        }