From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/TimeTriggerJob.java | 98 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 98 insertions(+), 0 deletions(-)
diff --git a/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/TimeTriggerJob.java b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/TimeTriggerJob.java
new file mode 100644
index 0000000..4393497
--- /dev/null
+++ b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/TimeTriggerJob.java
@@ -0,0 +1,98 @@
+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.enums.TemplateJsonStatueEnum;
+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(), TemplateJsonStatueEnum.START.getCode())) {
+ 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);
+ }
+ }
+}
--
Gitblit v1.8.0