JobBase.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using Quartz;
  2. using Ropin.Inspection.Common.Helper;
  3. using Ropin.Inspection.Service.Interface;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace Ropin.Inspection.Tasks.QuartzNet.Jobs
  11. {
  12. public class JobBase
  13. {
  14. public ITasksQzServices _tasksQzServices;
  15. /// <summary>
  16. /// 执行指定任务
  17. /// </summary>
  18. /// <param name="context"></param>
  19. /// <param name="action"></param>
  20. public async Task<string> ExecuteJob(IJobExecutionContext context, Func<Task> func)
  21. {
  22. //记录Job时间
  23. Stopwatch stopwatch = new Stopwatch();
  24. //JOBID
  25. int jobid = context.JobDetail.Key.Name.ObjToInt();
  26. //JOB组名
  27. string groupName = context.JobDetail.Key.Group;
  28. //日志
  29. string jobHistory = $"【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行开始】【Id:{jobid},组别:{groupName}】";
  30. //耗时
  31. double taskSeconds = 0;
  32. try
  33. {
  34. stopwatch.Start();
  35. await func();//执行任务
  36. stopwatch.Stop();
  37. jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行成功】";
  38. }
  39. catch (Exception ex)
  40. {
  41. JobExecutionException e2 = new JobExecutionException(ex);
  42. //true 是立即重新执行任务
  43. e2.RefireImmediately = true;
  44. jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行失败:{ex.Message}】";
  45. }
  46. finally
  47. {
  48. taskSeconds = Math.Round(stopwatch.Elapsed.TotalSeconds, 3);
  49. jobHistory += $",【{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}】【执行结束】(耗时:{taskSeconds}秒)";
  50. if (_tasksQzServices != null)
  51. {
  52. //var model = await _tasksQzServices.QueryById(jobid);
  53. //if (model != null)
  54. //{
  55. // model.RunTimes += 1;
  56. // var separator = "<br>";
  57. // // 这里注意数据库字段的长度问题,超过限制,会造成数据库remark不更新问题。
  58. // model.Remark =
  59. // $"{jobHistory}{separator}" + string.Join(separator, StringHelper.GetTopDataBySeparator(model.Remark, separator, 9));
  60. // await _tasksQzServices.Update(model);
  61. //}
  62. }
  63. }
  64. Console.Out.WriteLine(jobHistory);
  65. return jobHistory;
  66. }
  67. }
  68. }