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.message.model.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);
|
}
|
}
|
}
|