TimeTriggerJob.java 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package jnpf.flowable.job;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import cn.hutool.http.HttpRequest;
  4. import cn.hutool.http.Method;
  5. import jnpf.base.UserInfo;
  6. import jnpf.config.ConfigValueUtil;
  7. import jnpf.database.util.TenantDataSourceUtil;
  8. import jnpf.flowable.entity.TemplateJsonEntity;
  9. import jnpf.flowable.model.trigger.TimeTriggerModel;
  10. import jnpf.flowable.model.trigger.TriggerModel;
  11. import jnpf.flowable.service.TemplateJsonService;
  12. import jnpf.util.AuthUtil;
  13. import jnpf.util.Constants;
  14. import jnpf.util.JsonUtil;
  15. import jnpf.util.RedisUtil;
  16. import jnpf.util.context.SpringContext;
  17. import org.quartz.JobDataMap;
  18. import org.quartz.JobDetail;
  19. import org.quartz.JobExecutionContext;
  20. import org.quartz.JobExecutionException;
  21. import org.springframework.scheduling.quartz.QuartzJobBean;
  22. /**
  23. * 类的描述
  24. *
  25. * @author JNPF@YinMai Info. Co., Ltd
  26. * @version 5.0.x
  27. * @since 2024/9/20 9:28
  28. */
  29. //@DisallowConcurrentExecution
  30. public class TimeTriggerJob extends QuartzJobBean {
  31. private static RedisUtil redisUtil;
  32. private static ConfigValueUtil configValueUtil;
  33. private static TemplateJsonService templateJsonService;
  34. static {
  35. redisUtil = SpringContext.getBean(RedisUtil.class);
  36. configValueUtil = SpringContext.getBean(ConfigValueUtil.class);
  37. templateJsonService = SpringContext.getBean(TemplateJsonService.class);
  38. }
  39. @Override
  40. protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
  41. JobDetail jobDetail = context.getJobDetail();
  42. String jobName = jobDetail.getKey().getName();
  43. JobDataMap jobDataMap = jobDetail.getJobDataMap();
  44. TimeTriggerModel jsonToBean = JsonUtil.getJsonToBean(jobDataMap, TimeTriggerModel.class);
  45. TimeTriggerModel timeTriggerModel = TriggerJobUtil.getModel(jsonToBean, redisUtil);
  46. TimeTriggerModel model = timeTriggerModel == null ? jsonToBean : timeTriggerModel;
  47. UserInfo userInfo = model.getUserInfo();
  48. if (configValueUtil.isMultiTenancy()) {
  49. TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
  50. }
  51. TemplateJsonEntity jsonEntity = templateJsonService.getById(model.getFlowId());
  52. if (null != jsonEntity && ObjectUtil.equals(jsonEntity.getState(), 1)) {
  53. long currentTimeMillis = System.currentTimeMillis();
  54. model.setTime(currentTimeMillis);
  55. Integer num = model.getNum();
  56. Integer endTimeType = model.getEndTimeType();
  57. Integer endLimit = model.getEndLimit();
  58. int currentNum = num + 1;
  59. boolean isNext = true;
  60. // 触发次数、指定时间
  61. if (ObjectUtil.equals(endTimeType, 1)) {
  62. isNext = currentNum <= endLimit;
  63. } else if (ObjectUtil.equals(endTimeType, 2)) {
  64. isNext = currentTimeMillis <= model.getEndTime();
  65. }
  66. model.setNum(currentNum);
  67. if (isNext) {
  68. TriggerJobUtil.insertModel(model, redisUtil);
  69. String token = AuthUtil.loginTempUser(userInfo.getUserId(), userInfo.getTenantId(), true);
  70. String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/TimeExecute";
  71. TriggerModel triggerModel = new TriggerModel();
  72. triggerModel.setUserInfo(userInfo);
  73. triggerModel.setId(model.getFlowId());
  74. HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(triggerModel));
  75. request.header(Constants.AUTHORIZATION, token);
  76. request.execute().body();
  77. } else {
  78. TriggerJobUtil.removeModel(model, redisUtil);
  79. QuartzJobUtil.deleteJob(jobName);
  80. }
  81. } else {
  82. TriggerJobUtil.removeModel(model, redisUtil);
  83. QuartzJobUtil.deleteJob(jobName);
  84. }
  85. }
  86. }