wangliang 1 рік тому
батько
коміт
8a0326721a

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/activiti/listener/ProcessEventListener.java

@@ -83,12 +83,12 @@ public class ProcessEventListener implements ActivitiEventListener, Serializable
                                 && tfFlowLog.getApproveOperation() != FlowApproveOperationEnum.FINISH) {
                             List<TSJobRemind> tsJobRemindArrayList = new ArrayList<>();
                             if (Objects.nonNull(task.getAssignee())) {
-                                tsJobRemindArrayList.add(new TSJobRemind(JobQuartzTypeEnum.FLOW, tfCustomFlowEntity.getCode(), Long.parseLong(task.getId()), tfCustomFlow.getType().getTitle() + ";" + task.getTaskDefinitionKey(), JobTypeEnum.AFTER, Long.parseLong(task.getAssignee()), tfFlowLog.getApproveOperation(), sysUser.getId()));
+                                tsJobRemindArrayList.add(new TSJobRemind(JobQuartzTypeEnum.FLOW, tfCustomFlowEntity.getCode(), Long.parseLong(task.getId()), tfCustomFlow.getType().getTitle() + ";" + task.getName(), JobTypeEnum.AFTER, Long.parseLong(task.getAssignee()), tfFlowLog.getApproveOperation(), sysUser.getId()));
                             } else {
                                 List<IdentityLink> identityLinkList = taskService.getIdentityLinksForTask(task.getId());
                                 if (!CollectionUtils.isEmpty(identityLinkList)) {
                                     for (IdentityLink i : identityLinkList) {
-                                        tsJobRemindArrayList.add(new TSJobRemind(JobQuartzTypeEnum.FLOW, tfCustomFlowEntity.getCode(), Long.parseLong(i.getTaskId()), tfCustomFlow.getType().getTitle() + ";" + task.getTaskDefinitionKey(), JobTypeEnum.AFTER, Long.parseLong(i.getUserId()), tfFlowLog.getApproveOperation(), sysUser.getId()));
+                                        tsJobRemindArrayList.add(new TSJobRemind(JobQuartzTypeEnum.FLOW, tfCustomFlowEntity.getCode(), Long.parseLong(i.getTaskId()), tfCustomFlow.getType().getTitle() + ";" + task.getName(), JobTypeEnum.AFTER, Long.parseLong(i.getUserId()), tfFlowLog.getApproveOperation(), sysUser.getId()));
                                     }
                                 }
                             }

+ 17 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TSJobLog.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.JobQuartzTypeEnum;
 import com.qmth.sop.common.enums.JobTypeEnum;
 import io.swagger.annotations.ApiModel;
@@ -53,6 +54,22 @@ public class TSJobLog implements Serializable {
     @ApiModelProperty(value = "创建时间")
     private Long createTime;
 
+    public TSJobLog() {
+
+    }
+
+    public TSJobLog(TSJobRemind tsJobRemind) {
+        this.id = SystemConstant.getDbUuid();
+        this.jobRemindId = tsJobRemind.getId();
+        this.type = tsJobRemind.getType();
+        this.code = tsJobRemind.getCode();
+        this.objId = tsJobRemind.getObjId();
+        this.objName = tsJobRemind.getObjName();
+        this.remindType = tsJobRemind.getRemindType();
+        this.createId = tsJobRemind.getCreateId();
+        this.createTime = System.currentTimeMillis();
+    }
+
     public Long getId() {
         return id;
     }

+ 0 - 3
sop-business/src/main/java/com/qmth/sop/business/service/SysLevelRoleService.java

@@ -1,13 +1,10 @@
 package com.qmth.sop.business.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.sop.business.bean.result.SysCustomRoleResult;
 import com.qmth.sop.business.bean.result.SysLevelRoleResult;
 import com.qmth.sop.business.entity.SysLevelRole;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 服务档位角色配置表 服务类

+ 1 - 1
sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

@@ -93,7 +93,7 @@ public class SystemConstant {
     public static final int SEQUENCE_THREAD_SLEEP = 500;
     public static final String ERROR_METHOD = "method";
     public static final String LIST_JOIN_SPLIT = ",";
-    public static final String JOB_DATA = "jobDate";
+    public static final String JOB_DATA = "jobData";
 
     /**
      * 表达式

+ 1 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/JobEnum.java

@@ -15,7 +15,7 @@ public enum JobEnum {
 
     FLOW_TASK_REMIND_JOB_GROUP("流程任务提醒定时任务组"),
 
-    FLOW_TASK_REMIND_QUARTZ_JOB_GROUP("流程任务提醒一次性job group");
+    REMIND_QUARTZ_JOB_GROUP("任务提醒一次性job group");
 
     private String title;
 

+ 12 - 0
sop-task/src/main/java/com/qmth/sop/task/TaskApplication.java

@@ -2,12 +2,15 @@ package com.qmth.sop.task;
 
 //import com.qmth.sop.common.threadPool.MyThreadPool;
 
+import com.qmth.sop.task.listener.MyJobListener;
 import org.activiti.spring.boot.SecurityAutoConfiguration;
 import org.mybatis.spring.annotation.MapperScan;
+import org.quartz.Scheduler;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
@@ -29,4 +32,13 @@ public class TaskApplication {
 //    public TaskExecutor primaryTaskExecutor() {
 //        return new MyThreadPool();
 //    }
+
+    @Bean
+    public Scheduler scheduler(Scheduler scheduler) throws Exception {
+        // 添加Scheduler 监听器
+//        KeyMatcher<JobKey> keyMatcher = KeyMatcher.keyEquals(JobKey.jobKey(QuartzTaskEnum.MQ_ACTIVITY_JOB_NAME.name(), QuartzTaskEnum.MQ_ACTIVITY_JOB_GROUP_NAME.name()));
+//        scheduler.getListenerManager().addJobListener(new MyJobListener(), keyMatcher);
+        scheduler.getListenerManager().addJobListener(new MyJobListener());
+        return scheduler;
+    }
 }

+ 7 - 7
sop-task/src/main/java/com/qmth/sop/task/job/FlowTaskQuartzJob.java → sop-task/src/main/java/com/qmth/sop/task/job/RemindTaskJob.java

@@ -7,7 +7,7 @@ import com.qmth.sop.business.util.SmsSendUtil;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.JobQuartzTypeEnum;
 import com.qmth.sop.common.enums.JobTypeEnum;
-import org.quartz.JobDetail;
+import org.quartz.JobDataMap;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
@@ -27,8 +27,8 @@ import java.util.Objects;
  * @Author: wangliang
  * @Date: 2021/7/9
  */
-public class FlowTaskQuartzJob extends QuartzJobBean {
-    private final static Logger log = LoggerFactory.getLogger(FlowTaskQuartzJob.class);
+public class RemindTaskJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(RemindTaskJob.class);
 
     @Resource
     SmsSendUtil smsSendUtil;
@@ -41,10 +41,10 @@ public class FlowTaskQuartzJob extends QuartzJobBean {
     protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
         log.info("flowTaskQuartzJob,context:{}", context);
         try {
-            JobDetail jobDetail = context.getJobDetail();
-            String[] strings = jobDetail.getKey().toString().split("\\.");
-            if (Objects.nonNull(strings[1])) {
-                TSJobRemind tsJobRemind = tsJobRemindService.getById(Long.parseLong(strings[1]));
+            JobDataMap map = context.getJobDetail().getJobDataMap();
+            TSJobRemind tsJobRemindTask = (TSJobRemind) map.get(SystemConstant.JOB_DATA);
+            if (Objects.nonNull(tsJobRemindTask)) {
+                TSJobRemind tsJobRemind = tsJobRemindService.getById(tsJobRemindTask.getId());
                 if (Objects.nonNull(tsJobRemind)) {//数据还在则说明要发送提醒短信
                     if (tsJobRemind.getType() == JobQuartzTypeEnum.FLOW) {//流程发送短信
                         FlowTaskSmsResult flowTaskSmsResult = tsJobRemindService.getFlowTaskRemindSmsInfo(tsJobRemind.getId());

+ 12 - 8
sop-task/src/main/java/com/qmth/sop/task/job/service/impl/JobServiceImpl.java

@@ -9,7 +9,7 @@ import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.JobEnum;
 import com.qmth.sop.common.enums.JobQuartzTypeEnum;
-import com.qmth.sop.task.job.FlowTaskQuartzJob;
+import com.qmth.sop.task.job.RemindTaskJob;
 import com.qmth.sop.task.job.service.JobService;
 import com.qmth.sop.task.service.QuartzService;
 import org.slf4j.Logger;
@@ -61,17 +61,21 @@ public class JobServiceImpl implements JobService {
                                 SysConfig sysConfigBefore = commonCacheService.addSysConfigCache(SystemConstant.FLOW_JOB_BEFORE_TIME);
                                 Optional.ofNullable(sysConfigBefore).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("提前提醒任务时间未设置"));
                                 Long execTime = SystemConstant.processMiniuteMinus(t.getCreateTime(), Duration.ofMinutes(Long.parseLong(sysConfigBefore.getConfigValue())));
-                                t.setExecTime(execTime);
-                                this.setJobTime(execTime, t.getId().toString(), t, FlowTaskQuartzJob.class, JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP);
-                                tsJobRemindUpdateList.add(t);
+                                if (Objects.nonNull(execTime) && execTime.longValue() < System.currentTimeMillis()) {
+                                    t.setExecTime(execTime);
+                                    this.setJobTime(execTime, t.getId().toString(), t, RemindTaskJob.class, JobEnum.REMIND_QUARTZ_JOB_GROUP);
+                                    tsJobRemindUpdateList.add(t);
+                                }
                                 break;
                             case AFTER://超时提醒
                                 SysConfig sysConfigAfter = commonCacheService.addSysConfigCache(SystemConstant.FLOW_JOB_AFTER_TIME);
                                 Optional.ofNullable(sysConfigAfter).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("超时提醒任务时间未设置"));
                                 execTime = SystemConstant.processMiniutePlus(t.getCreateTime(), Duration.ofMinutes(Long.parseLong(sysConfigAfter.getConfigValue())));
-                                t.setExecTime(execTime);
-                                this.setJobTime(execTime, t.getId().toString(), t, FlowTaskQuartzJob.class, JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP);
-                                tsJobRemindUpdateList.add(t);
+                                if (Objects.nonNull(execTime) && execTime.longValue() > System.currentTimeMillis()) {
+                                    t.setExecTime(execTime);
+                                    this.setJobTime(execTime, t.getId().toString(), t, RemindTaskJob.class, JobEnum.REMIND_QUARTZ_JOB_GROUP);
+                                    tsJobRemindUpdateList.add(t);
+                                }
                                 break;
                             default:
                                 break;
@@ -81,7 +85,7 @@ public class JobServiceImpl implements JobService {
                     }
                 } else if (Objects.nonNull(t.getEnable()) && !t.getEnable()) {
                     //禁用需删除定时任务
-                    quartzService.deleteJob(t.getObjId().toString(), JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP.name());
+                    quartzService.deleteJob(t.getObjId().toString(), JobEnum.REMIND_QUARTZ_JOB_GROUP.name());
                     tsJobRemindIdList.add(t.getId());
                 }
             }

+ 20 - 18
sop-task/src/main/java/com/qmth/sop/task/listener/MyJobListener.java

@@ -1,6 +1,12 @@
 package com.qmth.sop.task.listener;
 
+import com.qmth.sop.business.entity.TSJobLog;
+import com.qmth.sop.business.entity.TSJobRemind;
+import com.qmth.sop.business.service.TSJobLogService;
+import com.qmth.sop.common.contant.SpringContextHolder;
+import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.JobEnum;
+import org.quartz.JobDataMap;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.quartz.JobListener;
@@ -35,24 +41,20 @@ public class MyJobListener implements JobListener {
     @Override
     public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
         JobEnum jobEnum = JobEnum.valueOf(context.getTrigger().getJobKey().getGroup());
-//        switch (jobEnum) {
-//            case EXAM_ACTIVITY_JOB_GROUP_NAME:
-//            case EXAM_STUDENT_JOB_GROUP_NAME:
-//            case MQ_ACTIVITY_JOB_GROUP_NAME:
-////            case EXAM_AUDIO_JOB_GROUP_NAME:
-//                try {
-//                    TSLogService tsLogService = SpringContextHolder.getBean(TSLogService.class);
-//                    tsLogService.save(new TSLog(LogEnum.JOB, JacksonUtil.parseJson(context.getTrigger().getJobKey()),
-//                            Objects.nonNull(context.getPreviousFireTime()) ? DateUtil.format(context.getPreviousFireTime(), Constants.DEFAULT_DATE_PATTERN) : null,
-//                            Objects.nonNull(context.getNextFireTime()) ? DateUtil.format(context.getNextFireTime(), Constants.DEFAULT_DATE_PATTERN) : null,
-//                            -1L));
-//                } catch (Exception e) {
-//                    log.error(SystemConstant.LOG_ERROR, e);
-//                }
-//                break;
-//            default:
-//                break;
-//        }
+        switch (jobEnum) {
+            case REMIND_QUARTZ_JOB_GROUP:
+                try {
+                    JobDataMap map = context.getJobDetail().getJobDataMap();
+                    TSJobRemind tsJobRemind = (TSJobRemind) map.get(SystemConstant.JOB_DATA);
+                    TSJobLogService tsJobLogService = SpringContextHolder.getBean(TSJobLogService.class);
+                    tsJobLogService.save(new TSJobLog(tsJobRemind));
+                } catch (Exception e) {
+                    log.error(SystemConstant.LOG_ERROR, e);
+                }
+                break;
+            default:
+                break;
+        }
         log.info("定时任务:{}-执行结束", context.getTrigger().getJobKey());
     }
 }