ny
23 小时以前 b6f169fe43a2b13f351aefc152374fc7f0bc8cb7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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 (isPause) {
                        return;
                    }
                    NodeModel nodeModel = timeModel.getChildNode();
                    TimeConfig time = nodeModel.getOverTimeConfig();
                    Integer num = time.getOverAutoApproveTime();
                    Boolean overAutoApprove = timeModel.getChildNode().getOverTimeConfig().getOverAutoApprove();
                    if (overAutoApprove && ObjectUtil.equals(timeModel.getNum(), num)) {
                        // 放在另一个redis的key(用于自动审批)
                        FlowJobUtil.insertOperator(timeModel, redisUtil);
                    }
                    Boolean overAutoTransfer = timeModel.getChildNode().getOverTimeConfig().getOverAutoTransfer();
                    Integer transferNum = time.getOverAutoTransferTime();
                    if (!overAutoApprove && overAutoTransfer && 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);
        }
    }
 
 
}