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/FlowTime.java |   95 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 95 insertions(+), 0 deletions(-)

diff --git a/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/FlowTime.java b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/FlowTime.java
new file mode 100644
index 0000000..ad053d8
--- /dev/null
+++ b/jnpf-flowable/jnpf-flowable-biz/src/main/java/jnpf/flowable/job/FlowTime.java
@@ -0,0 +1,95 @@
+package jnpf.flowable.job;
+
+import cn.hutool.core.util.ObjectUtil;
+import jnpf.base.UserInfo;
+import jnpf.config.ConfigValueUtil;
+import jnpf.database.util.TenantDataSourceUtil;
+import jnpf.flowable.model.task.FlowModel;
+import jnpf.flowable.model.templatenode.nodejson.NodeModel;
+import jnpf.flowable.model.templatenode.nodejson.TimeConfig;
+import jnpf.flowable.model.time.FlowTimeModel;
+import jnpf.flowable.util.OverTimeUtil;
+import jnpf.flowable.util.TimeUtil;
+import jnpf.util.JsonUtil;
+import jnpf.util.RedisUtil;
+import jnpf.util.UserProvider;
+import jnpf.util.context.SpringContext;
+import org.quartz.*;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+
+@DisallowConcurrentExecution
+public class FlowTime extends QuartzJobBean {
+
+    private static RedisUtil redisUtil;
+    private static ConfigValueUtil configValueUtil;
+    private static OverTimeUtil overTimeUtil;
+
+
+    static {
+        redisUtil = SpringContext.getBean(RedisUtil.class);
+        configValueUtil = SpringContext.getBean(ConfigValueUtil.class);
+        overTimeUtil = SpringContext.getBean(OverTimeUtil.class);
+    }
+
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        JobDetail jobDetail = context.getJobDetail();
+        String jobName = jobDetail.getKey().getName();
+        JobDataMap jobDataMap = jobDetail.getJobDataMap();
+        FlowTimeModel model = FlowJobUtil.getModel(JsonUtil.getJsonToBean(jobDataMap, FlowTimeModel.class), redisUtil);
+        boolean isModel = model == null;
+        FlowTimeModel timeModel = isModel ? JsonUtil.getJsonToBean(jobDataMap, FlowTimeModel.class) : model;
+        if (timeModel != null) {
+            FlowModel flowModel = timeModel.getFlowModel();
+            UserInfo userInfo = flowModel.getUserInfo();
+            if (configValueUtil.isMultiTenancy()) {
+                TenantDataSourceUtil.switchTenant(userInfo.getTenantId());
+                UserProvider.setLoginUser(userInfo);
+                UserProvider.setLocalLoginUser(userInfo);
+            }
+            try {
+                overTimeUtil.overMsg(timeModel);
+                Boolean isPause = timeModel.getIsPause();
+                timeModel.setIsPause(false);
+                boolean overTime = timeModel.getOverTime();
+                FlowJobUtil.insertModel(timeModel, redisUtil);
+                if (overTime) {
+                    if (Boolean.TRUE.equals(isPause)) {
+                        return;
+                    }
+                    NodeModel nodeModel = timeModel.getChildNode();
+                    TimeConfig timeConfig = nodeModel.getOverTimeConfig();
+                    //瓒呮椂鑷姩瀹℃壒
+                    Boolean overAutoApprove = timeConfig.getOverAutoApprove();
+                    if (Boolean.TRUE.equals(overAutoApprove)) {
+                        Integer autoNum = timeConfig.getOverAutoApproveTime();
+                        if (ObjectUtil.equals(timeModel.getNum(), autoNum)) {
+                            // 鏀惧湪鍙︿竴涓猺edis鐨刱ey(鐢ㄤ簬鑷姩瀹℃壒)
+                            FlowJobUtil.insertOperator(timeModel, redisUtil);
+                        }
+                    } else {
+                        Integer transferNum = timeConfig.getOverAutoTransferTime();
+                        if (ObjectUtil.equals(timeModel.getTransferNum(), transferNum)) {
+                            FlowJobUtil.insertTransfer(timeModel, redisUtil);
+                        }
+                    }
+                } else {
+                    // 涓嬩竴娆℃椂闂村ぇ浜庣粨鏉熸椂闂� 鍒犻櫎鎻愰啋缂撳瓨
+                    if (timeModel.getEndDate().getTime() < context.getNextFireTime().getTime()) {
+                        FlowJobUtil.removeModel(timeModel, redisUtil);
+                        TimeUtil.deleteJob(jobName);
+                    }
+                }
+            } catch (Exception e) {
+                FlowJobUtil.removeModel(timeModel, redisUtil);
+                TimeUtil.deleteJob(jobName);
+            }
+        } else {
+            TimeUtil.deleteJob(jobName);
+            FlowJobUtil.removeModel(model, redisUtil);
+        }
+    }
+
+
+}

--
Gitblit v1.8.0