فهرست منبع

task job开发

wangliang 1 سال پیش
والد
کامیت
82096f0c54

+ 5 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TSJobRemind.java

@@ -84,6 +84,11 @@ public class TSJobRemind implements Serializable {
         this.enable = true;
     }
 
+    public void updateExecInfo(Long execTime) {
+        this.execTime = execTime;
+        this.exec = true;
+    }
+
     public Boolean getEnable() {
         return enable;
     }

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/BasicVerifyCodeServiceImpl.java

@@ -77,9 +77,9 @@ public class BasicVerifyCodeServiceImpl extends ServiceImpl<BasicVerifyCodeMappe
                 Optional.ofNullable(sysConfigSmsExpiredTime).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置短信验证码有效时间"));
                 Integer codeExpiredTime = Integer.parseInt(sysConfigSmsExpiredTime.getConfigValue());
                 if (Objects.isNull(basicVerifyCode)) {
-                    basicVerifyCode = new BasicVerifyCode(sysUser.getId(), sysUser.getOrgId(), mobileNumber, SystemConstant.processMiniute(Duration.ofMinutes(2)), codeExpiredTime, verifyCode);
+                    basicVerifyCode = new BasicVerifyCode(sysUser.getId(), sysUser.getOrgId(), mobileNumber, SystemConstant.processMiniutePlus(Duration.ofMinutes(2)), codeExpiredTime, verifyCode);
                 } else {
-                    basicVerifyCode.updateVerifyCodeInfo(sysUser.getId(), sysUser.getOrgId(), SystemConstant.processMiniute(Duration.ofMinutes(2)), codeExpiredTime, verifyCode);
+                    basicVerifyCode.updateVerifyCodeInfo(sysUser.getId(), sysUser.getOrgId(), SystemConstant.processMiniutePlus(Duration.ofMinutes(2)), codeExpiredTime, verifyCode);
                 }
                 this.saveOrUpdate(basicVerifyCode);
             } else {

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java

@@ -63,7 +63,7 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         authRole.add(RoleTypeEnum.REGION_COORDINATOR);
         authRole.add(RoleTypeEnum.ASSISTANT_ENGINEER);
 
-        Long remainValidTime = SystemConstant.processMiniute(Duration.ofDays(remainValidDay));
+        Long remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
         IPage<UserArchivesResult> page = this.baseMapper.findUserArchivesPage(new Page<>(pageNumber, pageSize), city, supplierId, archivesName, roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidTime, System.currentTimeMillis());
         for (UserArchivesResult record : page.getRecords()) {
             List<RoleTypeEnum> roleTypeEnumList = new ArrayList<>();
@@ -269,7 +269,7 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         if (archivesName != null && archivesName.length() > 0) {
             archivesName = SystemConstant.translateSpecificSign(archivesName);
         }
-        Long remainValidTime = SystemConstant.processMiniute(Duration.ofDays(remainValidDay));
+        Long remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
         List<UserArchivesImportDto> userArchivesImportDtoList = this.baseMapper.findExportData(city, supplierId, archivesName, roleType, authenticationStatus,
                 archivesTimeStart, archivesTimeEnd, remainValidTime, System.currentTimeMillis());
 

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

@@ -93,6 +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";
 
     /**
      * 表达式
@@ -151,9 +152,9 @@ public class SystemConstant {
     public static final String PREFIX_URL_VIOLATION = "/admin/tb/violation";
     public static final String PREFIX_URL_VIOLATION_DETAIL = "/admin/tb/violation/detail";
     public static final String PREFIX_URL_DING = "/admin/tb/ding";
-    public static final String PREFIX_URL_QUALITY_PROBLEM_APPLY= "/admin/tb/quality/problem/apply";
-    public static final String PREFIX_URL_CRM= "/admin/tb/crm";
-    public static final String PREFIX_URL_DING_EXCEPTION_APPLY= "/admin/ding/exception/apply";
+    public static final String PREFIX_URL_QUALITY_PROBLEM_APPLY = "/admin/tb/quality/problem/apply";
+    public static final String PREFIX_URL_CRM = "/admin/tb/crm";
+    public static final String PREFIX_URL_DING_EXCEPTION_APPLY = "/admin/ding/exception/apply";
     public static final String PREFIX_URL_PRODUCT = "/admin/tb/product";
 
     /**
@@ -239,6 +240,7 @@ public class SystemConstant {
 
     public static final Long LOCK_FLOW_TIME_OUT = 60L * 2 * 1000;
     public static final Long LOCK_SEQUENCE_TIME_OUT = 60L * 1 * 1000;
+
     /**
      * 获取数据库uuid
      *
@@ -314,12 +316,24 @@ public class SystemConstant {
      * @param duration
      * @return
      */
-    public static Long processMiniute(Duration duration) {
+    public static Long processMiniutePlus(Duration duration) {
         LocalDateTime nowTime = LocalDateTime.now();
         LocalDateTime newDateTime = nowTime.plus(duration);
         return newDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
     }
 
+    /**
+     * 时间相减
+     *
+     * @param duration
+     * @return
+     */
+    public static Long processMiniuteMinus(Duration duration) {
+        LocalDateTime nowTime = LocalDateTime.now();
+        LocalDateTime newDateTime = nowTime.minus(duration);
+        return newDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
+    }
+
     /**
      * string id 转化为long
      *

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

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

+ 34 - 0
sop-task/src/main/java/com/qmth/sop/task/job/FlowTaskQuartzJob.java

@@ -0,0 +1,34 @@
+package com.qmth.sop.task.job;
+
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.task.job.service.JobService;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import javax.annotation.Resource;
+
+/**
+ * @Description: 流程任务提醒job
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/7/9
+ */
+public class FlowTaskQuartzJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(FlowTaskQuartzJob.class);
+
+    @Resource
+    JobService jobService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        try {
+            jobService.flowTaskRemindTask();
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+}

+ 2 - 1
sop-task/src/main/java/com/qmth/sop/task/job/service/JobService.java

@@ -21,8 +21,9 @@ public interface JobService {
      *
      * @param finishTime
      * @param jobName
+     * @param o
      * @param cls
      * @param jobEnum
      */
-    void setJobTime(Long finishTime, String jobName, Class cls, JobEnum jobEnum);
+    void setJobTime(Long finishTime, String jobName, Object o, Class cls, JobEnum jobEnum);
 }

+ 60 - 5
sop-task/src/main/java/com/qmth/sop/task/job/service/impl/JobServiceImpl.java

@@ -1,17 +1,25 @@
 package com.qmth.sop.task.job.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.sop.business.cache.CommonCacheService;
+import com.qmth.sop.business.entity.SysConfig;
+import com.qmth.sop.business.entity.TSJobRemind;
+import com.qmth.sop.business.service.TSJobRemindService;
 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.task.job.FlowTaskQuartzJob;
 import com.qmth.sop.task.job.service.JobService;
 import com.qmth.sop.task.service.QuartzService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.Map;
+import java.time.Duration;
+import java.util.*;
 
 /**
  * @Description: job service impl
@@ -27,12 +35,57 @@ public class JobServiceImpl implements JobService {
     @Resource
     QuartzService quartzService;
 
+    @Resource
+    TSJobRemindService tsJobRemindService;
+
+    @Resource
+    CommonCacheService commonCacheService;
+
     /**
      * 流程任务提醒task
      */
     @Override
+    @Transactional
     public void flowTaskRemindTask() {
-
+        List<TSJobRemind> tsJobRemindList = tsJobRemindService.list(new QueryWrapper<TSJobRemind>().lambda().eq(TSJobRemind::getExec, false).last("limit 0,100"));
+        if (!CollectionUtils.isEmpty(tsJobRemindList)) {
+            List<TSJobRemind> tsJobRemindUpdateList = new ArrayList<>(tsJobRemindList.size());
+            List<Long> tsJobRemindIdList = new ArrayList<>(tsJobRemindList.size());
+            for (TSJobRemind t : tsJobRemindList) {
+                if (Objects.nonNull(t.getEnable()) && t.getEnable()) {//新建定时任务
+                    switch (t.getRemindType()) {
+                        case BEFORE://提前提醒
+                            SysConfig sysConfigBefore = commonCacheService.addSysConfigCache(SystemConstant.JOB_BEFORE_TIME);
+                            Optional.ofNullable(sysConfigBefore).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("提前提醒任务时间未设置"));
+                            Long execTime = SystemConstant.processMiniuteMinus(Duration.ofHours(Long.parseLong(sysConfigBefore.getConfigValue())));
+                            t.updateExecInfo(execTime);
+                            this.setJobTime(execTime, t.getObjId().toString(), t, FlowTaskQuartzJob.class, JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP);
+                            tsJobRemindUpdateList.add(t);
+                            break;
+                        case AFTER://超时提醒
+                            SysConfig sysConfigAfter = commonCacheService.addSysConfigCache(SystemConstant.JOB_AFTER_TIME);
+                            Optional.ofNullable(sysConfigAfter).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("超时提醒任务时间未设置"));
+                            execTime = SystemConstant.processMiniutePlus(Duration.ofHours(Long.parseLong(sysConfigAfter.getConfigValue())));
+                            t.updateExecInfo(execTime);
+                            this.setJobTime(execTime, t.getObjId().toString(), t, FlowTaskQuartzJob.class, JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP);
+                            tsJobRemindUpdateList.add(t);
+                            break;
+                        default:
+                            break;
+                    }
+                } else if (Objects.nonNull(t.getEnable()) && !t.getEnable()) {
+                    //禁用需删除定时任务
+                    quartzService.deleteJob(t.getObjId().toString(), JobEnum.FLOW_TASK_REMIND_QUARTZ_JOB_GROUP.name());
+                    tsJobRemindIdList.add(t.getId());
+                }
+            }
+            if (!CollectionUtils.isEmpty(tsJobRemindUpdateList)) {
+                tsJobRemindService.saveOrUpdateBatch(tsJobRemindUpdateList);
+            }
+            if (!CollectionUtils.isEmpty(tsJobRemindIdList)) {
+                tsJobRemindService.removeByIds(tsJobRemindIdList);
+            }
+        }
     }
 
     /**
@@ -40,11 +93,12 @@ public class JobServiceImpl implements JobService {
      *
      * @param finishTime
      * @param jobName
+     * @param o
      * @param cls
      * @param jobEnum
      */
     @Override
-    public void setJobTime(Long finishTime, String jobName, Class cls, JobEnum jobEnum) {
+    public void setJobTime(Long finishTime, String jobName, Object o, Class cls, JobEnum jobEnum) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTimeInMillis(finishTime);
 //        calendar.add(Calendar.SECOND, 30);
@@ -60,6 +114,7 @@ public class JobServiceImpl implements JobService {
             //执行一次性延时任务
             Map mapJob = new HashMap();
             mapJob.put(SystemConstant.NAME, jobName);
+            mapJob.put(SystemConstant.JOB_DATA, o);
             quartzService.addJob(cls, jobName, jobEnum.name(), cron, mapJob);
         }
     }