示例#1
0
        private void TaskManager_OnTaskExecAfter(TaskExecLog taskExecLog, TaskExecResult result)
        {
            try
            {
                Ts_ExecLog tsLog = new Ts_ExecLog();
                tsLog.ExecEndTime = taskExecLog.ExecEndTime;
                result.Data       = result.Data ?? string.Empty;
                tsLog.ExecResult  = result.ToJson();
                if (tsLog.ExecResult.Length > 2000)
                {
                    tsLog.ExecResult = tsLog.ExecResult.Substring(0, 2000);
                }
                tsLog.ExecResultCode = result.Code;
                tsLog.ExecStatrtTime = taskExecLog.ExecStatrtTime;

                if (_ormExecLog.Update(tsLog, w => w.Id == taskExecLog.ExecLogId) != 1)
                {
                    log.Error(string.Format("执行后更新记录异常,logId={0},结果:{1}", taskExecLog.ExecLogId, tsLog.ExecResult));
                }
            }
            catch (Exception ex)
            {
                log.ErrorAndEmail(string.Format("保存执行日志结果异常TaskManager_OnTaskExecAfter,参数:{0}", taskExecLog.ToJson()), ex);
            }
            try
            {
                Ts_TaskExec taskExec = new Ts_TaskExec();
                taskExec.LastExecResultCode = result.Code;
                _ormTaskExec.Update(taskExec, w => w.TaskGuid == taskExecLog.ExecGuid);
            }
            catch (Exception ex)
            {
                log.ErrorAndEmail(string.Format("修改执行Code异常TaskManager_OnTaskExecAfter,参数:{0}", taskExecLog.ToJson()), ex);
            }

            if (result.Code != 0 && taskExecLog.IsErrorAlert)
            {
                _mailService.SendEmail(string.Format("任务【{0}】执行异常", taskExecLog.Title),
                                       string.Format("您的任务:{0}\r\n执行异常:\r\n{1}", taskExecLog.Title, result.Data),
                                       taskExecLog.ReceiveEmail);
            }
        }
示例#2
0
        /// <summary>
        /// 执行一个任务
        /// </summary>
        /// <param name="taskInfo"></param>
        /// <returns></returns>
        public Task <TaskExecResult> RunTask(ExecTaskInfo taskInfo)
        {
            Task <TaskExecResult> taskRun = Task.Run <TaskExecResult>(() =>
            {
                taskInfo.LastExecTime = DateTime.Now;
                int execLogId         = 0;
                if (OnTaskExecBefore != null)
                {
                    execLogId = OnTaskExecBefore(taskInfo);
                }

                TaskExecLog taskExecLog = new TaskExecLog()
                {
                    ExecGuid       = taskInfo.Guid,
                    ExecLogId      = execLogId,
                    IsErrorAlert   = taskInfo.IsErrorAlert,
                    Title          = taskInfo.Title,
                    ReceiveEmail   = taskInfo.ReceiveEmail,
                    ExecStatrtTime = taskInfo.LastExecTime
                };

                TaskExecResult execResult = new TaskExecResult();
                string rsp = null;
                if (taskInfo.ExecType == (int)ExecTypeEnum.HTTP)
                {
                    rsp = Net.HttpRequest(taskInfo.ExecUrl, taskInfo.Params, taskInfo.ExecMethod, taskInfo.Timeout, taskInfo.Encoding, taskInfo.IsResponseNorm || taskInfo.IsLogResult);
                    taskExecLog.ExecEndTime = DateTime.Now;

                    if (rsp.StartsWith(":("))
                    {
                        execResult.Code = -999;
                        execResult.Msg  = string.Format("任务:{0}, 调用异常 url:{1} ", taskInfo.Title, taskInfo.ExecUrl);
                        execResult.Data = rsp;
                        if (OnTaskExecAfter != null)
                        {
                            OnTaskExecAfter(taskExecLog, execResult);
                        }
                        return(execResult);
                    }
                    if (taskInfo.IsResponseNorm)
                    {
                        try
                        {
                            execResult = rsp.FromJson <TaskExecResult>();
                        }
                        catch (Exception ex)
                        {
                            execResult.Code = -900;
                            execResult.Msg  = string.Format("任务:{0},调用 url:{1} , 转换返回结果失败 结果:{1} ", taskInfo.Title, taskInfo.ExecUrl, rsp);
                            execResult.Data = ex;
                            if (OnTaskExecAfter != null)
                            {
                                OnTaskExecAfter(taskExecLog, execResult);
                            }
                            return(execResult);
                        }
                    }
                    else
                    {
                        if (taskInfo.IsLogResult)
                        {
                            execResult.Data = rsp;
                        }
                        execResult.Code = 0;
                        execResult.Msg  = string.Format("任务:{0},调用 url:{1} , 处理成功 ", taskInfo.Title, taskInfo.ExecUrl);
                    }
                }
                else if (taskInfo.ExecType == (int)ExecTypeEnum.EXE)
                {
                    if (ProcessUtil.StartProcess(taskInfo.ExecUrl, taskInfo.Params, taskInfo.Timeout, ref rsp, taskInfo.IsLogResult))
                    {
                        taskExecLog.ExecEndTime = DateTime.Now;
                        execResult.Code         = 0;
                        if (taskInfo.IsLogResult)
                        {
                            execResult.Data = rsp;
                        }
                        execResult.Msg = string.Format("任务:{0},调用 url:{1} , 处理成功 ", taskInfo.Title, taskInfo.ExecUrl);
                    }
                    else
                    {
                        taskExecLog.ExecEndTime = DateTime.Now;
                        execResult.Code         = -800;
                        execResult.Msg          = string.Format("任务:{0},调用 url:{1} , 转换返回结果失败 结果:{1} ", taskInfo.Title, taskInfo.ExecUrl, rsp);
                    }
                }
                else
                {
                    execResult.Code = -1;
                    execResult.Msg  = "执行类型不存在";
                }
                if (OnTaskExecAfter != null)
                {
                    OnTaskExecAfter(taskExecLog, execResult);
                }
                return(execResult);
            });

            return(taskRun);
        }