using Quartz;
|
using System.Diagnostics;
|
using WIDESEA_Comm.LogInfo;
|
|
namespace WIDESEA_WCS.Jobs
|
{
|
public class JobBase
|
{
|
/// <summary>
|
/// 执行指定任务
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="action"></param>
|
public string ExecuteJob(IJobExecutionContext context, Func<string> func)
|
{
|
//记录Job时间
|
Stopwatch stopwatch = new Stopwatch();
|
//JOBID
|
string jobid = context.JobDetail.Key.Name;
|
//JOB组名
|
string groupName = context.JobDetail.Key.Group;
|
//日志
|
string jobHistory = $"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行开始】【Id:{jobid},组别:{groupName}】";
|
//耗时
|
double taskSeconds = 0;
|
try
|
{
|
stopwatch.Start();
|
func();//执行任务
|
stopwatch.Stop();
|
jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行成功】";
|
}
|
catch (Exception ex)
|
{
|
JobExecutionException e2 = new JobExecutionException(ex);
|
//true 是立即重新执行任务
|
e2.RefireImmediately = true;
|
jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行失败:{ex.Message}】";
|
}
|
finally
|
{
|
taskSeconds = Math.Round(stopwatch.Elapsed.TotalSeconds, 3);
|
jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行结束】(耗时:{taskSeconds}秒)";
|
}
|
|
return jobHistory;
|
}
|
|
public void ExecuteJob(IJobExecutionContext context, Action<IJobExecutionContext> action)
|
{
|
//记录Job时间
|
Stopwatch stopwatch = new Stopwatch();
|
//JOBID
|
string jobid = context.JobDetail.Key.Name;
|
//JOB组名
|
string groupName = context.JobDetail.Key.Group;
|
//日志
|
string jobHistory = $"【组别:{groupName}】";
|
//耗时
|
double taskSeconds = 0;
|
try
|
{
|
stopwatch.Start();
|
action(context);//执行任务
|
stopwatch.Stop();
|
jobHistory += $",【执行成功】";
|
}
|
catch (Exception ex)
|
{
|
jobHistory += $",【执行失败:{ex.Message}】";
|
}
|
finally
|
{
|
taskSeconds = Math.Round(stopwatch.Elapsed.TotalSeconds,3);
|
jobHistory += $"(耗时:{taskSeconds}秒)";
|
if (taskSeconds > 1 || jobHistory.Contains("执行失败"))
|
WriteLog.Info(jobid + "执行记录").Write(jobHistory, jobid + "执行记录");
|
}
|
}
|
}
|
}
|