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