| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package jnpf.flowable.job;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.Method;
- import jnpf.base.UserInfo;
- import jnpf.config.ConfigValueUtil;
- import jnpf.database.util.TenantDataSourceUtil;
- import jnpf.flowable.entity.TemplateJsonEntity;
- import jnpf.flowable.model.trigger.TimeTriggerModel;
- import jnpf.flowable.model.trigger.TriggerModel;
- import jnpf.flowable.service.TemplateJsonService;
- import jnpf.util.AuthUtil;
- import jnpf.util.Constants;
- import jnpf.util.JsonUtil;
- import jnpf.util.RedisUtil;
- import jnpf.util.context.SpringContext;
- import org.quartz.JobDataMap;
- import org.quartz.JobDetail;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
- import org.springframework.scheduling.quartz.QuartzJobBean;
- /**
- * 类的描述
- *
- * @author JNPF@YinMai Info. Co., Ltd
- * @version 5.0.x
- * @since 2024/9/20 9:28
- */
- //@DisallowConcurrentExecution
- public class TimeTriggerJob extends QuartzJobBean {
- private static RedisUtil redisUtil;
- private static ConfigValueUtil configValueUtil;
- private static TemplateJsonService templateJsonService;
- static {
- redisUtil = SpringContext.getBean(RedisUtil.class);
- configValueUtil = SpringContext.getBean(ConfigValueUtil.class);
- templateJsonService = SpringContext.getBean(TemplateJsonService.class);
- }
- @Override
- protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
- JobDetail jobDetail = context.getJobDetail();
- String jobName = jobDetail.getKey().getName();
- JobDataMap jobDataMap = jobDetail.getJobDataMap();
- TimeTriggerModel jsonToBean = JsonUtil.getJsonToBean(jobDataMap, TimeTriggerModel.class);
- TimeTriggerModel timeTriggerModel = TriggerJobUtil.getModel(jsonToBean, redisUtil);
- TimeTriggerModel model = timeTriggerModel == null ? jsonToBean : timeTriggerModel;
- UserInfo userInfo = model.getUserInfo();
- if (configValueUtil.isMultiTenancy()) {
- TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
- }
- TemplateJsonEntity jsonEntity = templateJsonService.getById(model.getFlowId());
- if (null != jsonEntity && ObjectUtil.equals(jsonEntity.getState(), 1)) {
- long currentTimeMillis = System.currentTimeMillis();
- model.setTime(currentTimeMillis);
- Integer num = model.getNum();
- Integer endTimeType = model.getEndTimeType();
- Integer endLimit = model.getEndLimit();
- int currentNum = num + 1;
- boolean isNext = true;
- // 触发次数、指定时间
- if (ObjectUtil.equals(endTimeType, 1)) {
- isNext = currentNum <= endLimit;
- } else if (ObjectUtil.equals(endTimeType, 2)) {
- isNext = currentTimeMillis <= model.getEndTime();
- }
- model.setNum(currentNum);
- if (isNext) {
- TriggerJobUtil.insertModel(model, redisUtil);
- String token = AuthUtil.loginTempUser(userInfo.getUserId(), userInfo.getTenantId(), true);
- String url = configValueUtil.getApiDomain() + "/api/workflow/trigger/TimeExecute";
- TriggerModel triggerModel = new TriggerModel();
- triggerModel.setUserInfo(userInfo);
- triggerModel.setId(model.getFlowId());
- HttpRequest request = HttpRequest.of(url).method(Method.POST).body(JsonUtil.getObjectToString(triggerModel));
- request.header(Constants.AUTHORIZATION, token);
- request.execute().body();
- } else {
- TriggerJobUtil.removeModel(model, redisUtil);
- QuartzJobUtil.deleteJob(jobName);
- }
- } else {
- TriggerJobUtil.removeModel(model, redisUtil);
- QuartzJobUtil.deleteJob(jobName);
- }
- }
- }
|