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); } }
protected void AddServiceLog(bool completed, string logInfo) { if (completed) { bool flag = this.TaskResult != TaskExecResult.Failure && this.TaskResult != TaskExecResult.Exception; if (flag) { this.TaskResult = TaskExecResult.Success; } this.LogInfoDetail.Add(string.Format("{0} A|成功 ", DateTime.Now.ToString()) + logInfo); } else { bool flag2 = this.TaskResult != TaskExecResult.Exception; if (flag2) { this.TaskResult = TaskExecResult.Failure; } this.LogInfoDetail.Add(string.Format("{0} B|失败 ", DateTime.Now.ToString()) + logInfo); } }
/// <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); }
public TaskBase() { this.CycleOption = new TaskCycleOption(); this.TaskResult = TaskExecResult.Success; }