| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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);
- }
- }
- }
|