Bläddra i källkod

feature 代码提交

xiahan 1 år sedan
förälder
incheckning
64fdc888a6

+ 15 - 0
bs-common/src/main/java/com/rongwei/safecommon/utils/CXCommonUtils.java

@@ -18,6 +18,9 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -159,4 +162,16 @@ public class CXCommonUtils {
         return currUser;
     }
 
+    /**
+     * 计算时间和当前时间相差几天
+     * @param startDate
+     * @return
+     */
+    public static long aFewDaysApart(Date startDate) {
+        Calendar startInstance = Calendar.getInstance();
+        startInstance.setTime(startDate);
+        LocalDate startLocalDate = LocalDate.of(startInstance.get(Calendar.YEAR), startInstance.get(Calendar.MONTH) + 1, startInstance.get(Calendar.DAY_OF_MONTH));
+        return startLocalDate.toEpochDay() - LocalDate.now().toEpochDay();
+    }
+
 }

+ 3 - 3
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -160,7 +160,7 @@ public class SaveConstans {
         /**
          * 培训截止提醒内容
          */
-        public static final String CUT_OFF_TRAIN_CONTENT = "培训考试将于%tF截止,请尽快参加考试。";
+        public static final String CUT_OFF_TRAIN_CONTENT = "培训课程:%s,将于%tF截止,请及时完成培训!";
         /**
          * 我的培训提醒内容
          */
@@ -168,11 +168,11 @@ public class SaveConstans {
         /**
          * 我的培训课程提醒内容
          */
-        public static final String COURSE_NOTIFY_CONTENT = "%s,培训时间:%tF至%tF";
+        public static final String COURSE_NOTIFY_CONTENT = "培训课程:%s 已发布,培训时间:%tF至%tF,请及时完成培训!";
         /**
          * 培训取消提醒内容
          */
-        public static final String CANCEL_TRAIN_CONTENT = "%s已取消";
+        public static final String CANCEL_TRAIN_CONTENT = "培训课程:%s 已取消,请知悉!;";
         /**
          * 培训需求调查提醒内容
          */

+ 3 - 0
cx-safe-check/cx-save-check-server/src/main/java/com/rongwei/savecheck/controller/SafeSendNotifyController.java

@@ -23,11 +23,14 @@ public class SafeSendNotifyController {
 
     @Autowired
     private SafeCheckSendNotifyServiceImpl sendNotifyService;
+
     @PostMapping("/dangerousDailyNotify")
     public void dangerousNotify(){
         log.info("开始发送每日危险作业处罚提醒");
         sendNotifyService.dangerousDailyNotify();
     }
+
+
     @PostMapping("/dangerousNotify/{id}")
     public R dangerousTimelyNotify(@PathVariable String id) {
         try {

+ 2 - 1
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingDemandServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.rongwei.safecommon.utils.CXCommonUtils.aFewDaysApart;
 import static com.rongwei.safecommon.utils.SaveConstans.DemandState.RELEASE;
 
 /**
@@ -325,7 +326,7 @@ public class TrainingDemandServiceImpl implements TrainingDemandService {
             log.debug("问卷调查发布状态异常");
             return R.error("问卷调查已关闭");
         }
-        if (trainingDemandSurveyDo.getDeadline() != null && new Date().compareTo(trainingDemandSurveyDo.getDeadline()) > 0) {
+        if (trainingDemandSurveyDo.getDeadline() != null && aFewDaysApart(trainingDemandSurveyDo.getDeadline()) < 0) {
             log.debug("问卷调查发布状态异常");
             return R.error("问卷调查已结束");
         }

+ 55 - 50
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/impl/TrainingSendNotifyServiceImpl.java

@@ -9,14 +9,8 @@ import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.BaseDo;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
-import com.rongwei.training.domain.EmpExamDo;
-import com.rongwei.training.domain.PlanDo;
-import com.rongwei.training.domain.PlanPaperDo;
-import com.rongwei.training.domain.TrainingDemandSurveyBackupsDo;
-import com.rongwei.trainingcommon.sys.service.EmpExamService;
-import com.rongwei.trainingcommon.sys.service.PlanPaperService;
-import com.rongwei.trainingcommon.sys.service.PlanService;
-import com.rongwei.trainingcommon.sys.service.TrainingSendNotifyService;
+import com.rongwei.training.domain.*;
+import com.rongwei.trainingcommon.sys.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,12 +34,6 @@ import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.*;
 @Service
 public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService {
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
-    public static final ThreadPoolExecutor threadPool = ExecutorBuilder.create()
-            .setCorePoolSize(8)
-            .setMaxPoolSize(16)
-            .setKeepAliveTime(0, TimeUnit.SECONDS)
-            .build();
-
     @Autowired
     private PlanService planService;
     @Autowired
@@ -60,6 +48,10 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
     private TrainingSendNotifyServiceImpl sendNotifyService;
     @Autowired
     private TrainingDemandSurveyBackupsServiceImpl demandSurveyBackupsService;
+    @Autowired
+    private PlanCourseServiceImpl planCourseService;
+    @Autowired
+    private EmpCourseServiceImpl empCourseService;
 
 
     // 培训计划已发布
@@ -69,45 +61,58 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
     public void endReminderEmail() {
         // 获取培训计划
         List<PlanDo> planDoList = planService.list(new LambdaQueryWrapper<PlanDo>().eq(BaseDo::getDeleted, "0")
-                .eq(PlanDo::getPublish, TRAINING_PLAN_PUBLISH));
+                .eq(PlanDo::getPublish, TRAINING_PLAN_PUBLISH)
+                .last("and( DATEDIFF(TRAININGENDTIMT, NOW()) =3 or DATEDIFF(TRAININGENDTIMT, NOW()) =0)"));
         if (planDoList.isEmpty()) {
             return;
         }
         log.info("获取到培训计划:{}", planDoList);
-        // 根据培训计划获取对应的试卷信息
-        List<PlanPaperDo> planPaperList = planPaperService.list(new LambdaQueryWrapper<PlanPaperDo>()
+        List<String> planId = planDoList.stream().map(PlanDo::getId).collect(Collectors.toList());
+        List<PlanCourseDo> planCourseDoList = planCourseService.list(new LambdaQueryWrapper<PlanCourseDo>()
                 .eq(BaseDo::getDeleted, "0")
-                .in(PlanPaperDo::getTrainingplanid, planDoList.stream().map(PlanDo::getId).collect(Collectors.toSet())));
-        log.info("获取到的试卷信息:{}", planPaperList);
+                .in(PlanCourseDo::getTrainingplanid,planId));
+        // 根据培训计划获取对应的试卷信息
+//        List<PlanPaperDo> planPaperList = planPaperService.list(new LambdaQueryWrapper<PlanPaperDo>()
+//                .eq(BaseDo::getDeleted, "0")
+//                .in(PlanPaperDo::getTrainingplanid, planDoList.stream().map(PlanDo::getId).collect(Collectors.toSet())));
+
+        log.info("获取到的课程信息:{}", planCourseDoList);
         // 筛选出距离截止日期还有3天的试卷信息
-        List<PlanPaperDo> closePlanPaper = planPaperList
-                .parallelStream()
-                .filter(planPaper -> planPaper.getDeadline() != null && sendMailService.aFewDaysApart(planPaper.getDeadline()) == 3)
-                .collect(Collectors.toList());
-        if (closePlanPaper.isEmpty()) {
-            return;
-        }
+//        List<PlanPaperDo> closePlanPaper = planPaperList
+//                .parallelStream()
+//                .filter(planPaper -> planPaper.getDeadline() != null && sendMailService.aFewDaysApart(planPaper.getDeadline()) == 3)
+//                .collect(Collectors.toList());
+//        if (closePlanPaper.isEmpty()) {
+//            return;
+//        }
         // 即将截止的试卷Id
-        Set<String> paperId = closePlanPaper.stream().map(PlanPaperDo::getPaperid).collect(Collectors.toSet());
-        // 试卷所属的培训计划
-        Set<String> planId = closePlanPaper.stream().map(PlanPaperDo::getTrainingplanid).collect(Collectors.toSet());
-        /*****获取没有参与考试的培训员工******/
-        List<EmpExamDo> toTestInfoList = empExamService.list(new LambdaQueryWrapper<EmpExamDo>()
-                .eq(BaseDo::getDeleted, "0").eq(EmpExamDo::getExamstatus, "待考试").in(EmpExamDo::getPlanid, planId)
-                .in(EmpExamDo::getPaperid, paperId));
+//        Set<String> paperId = closePlanPaper.stream().map(PlanPaperDo::getPaperid).collect(Collectors.toSet());
+//        // 试卷所属的培训计划
+//        Set<String> planId = closePlanPaper.stream().map(PlanPaperDo::getTrainingplanid).collect(Collectors.toSet());
+        /*****获取没有参与课程培训的培训员工******/
+        List<EmpCourseDo> toTestInfoList = empCourseService.list(new LambdaQueryWrapper<EmpCourseDo>()
+                .eq(BaseDo::getDeleted, "0")
+                .in(EmpCourseDo::getPlanid, planId)
+                        .in(EmpCourseDo::getPlancourseid,planCourseDoList.stream().map(PlanCourseDo::getId))
+                        .last("and COURSETIME*60 <> ifnull(COURSEUSETIME,0)")
+                );
         if (toTestInfoList.isEmpty()) {
             return;
         }
-        // 按照培训计划ID 进行分组
-        Map<String, List<EmpExamDo>> infoMap = toTestInfoList.stream()
-                .collect(Collectors.groupingBy(EmpExamDo::getPlanid, Collectors.toList()));
+        // 对数据按照 培训计划已经课程信息进行分组
+        Map<String, Map<String, List<String>>> collect = toTestInfoList.stream()
+                .collect(Collectors.groupingBy(EmpCourseDo::getPlanid, Collectors.groupingBy(EmpCourseDo::getCoursename,
+                        Collectors.mapping(EmpCourseDo::getEmpid,Collectors.toList()))));
+
         // 发送考试截止提醒邮件
-        infoMap.forEach((k, v) -> {
+        collect.forEach((k, v) -> {
             PlanDo planDo = planDoList.stream().filter(info -> info.getId().equals(k)).findFirst().get();
-            log.info("准备发送考试截止提醒邮件");
-            CXCommonUtils.sendNotify(CUT_OFF_TRAIN_TITLE, String.format(CUT_OFF_TRAIN_CONTENT, planDo.getTrainingendtimt()), "",
-                    v.stream().map(EmpExamDo::getEmpid).distinct().filter(StringUtils::isNotBlank).collect(Collectors.toList())
-                    , planDo.getId(), TRAINING);
+            v.forEach((courseName,infos)->{
+                log.info("准备发送课程截止提醒邮件");
+                CXCommonUtils.sendNotify(CUT_OFF_TRAIN_TITLE, String.format(CUT_OFF_TRAIN_CONTENT,courseName, planDo.getTrainingendtimt()), "",
+                       infos.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList())
+                        , planDo.getId(), TRAINING);
+            });
         });
     }
 
@@ -196,12 +201,12 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
     public void sendTrainingPlanNotify(Map<PlanDo, Set<String>> planAndUserIdMap) {
         // 获取用户id
         planAndUserIdMap.forEach((k, v) -> {
-            CXCommonUtils.sendNotify(TRAIN_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, k.getCoursename(),
-                            k.getTrainingstarttime(), k.getTrainingendtimt()), "", new ArrayList<>(v),
-                    k.getId(), TRAINING);
-            CXCommonUtils.sendNotify(COURSE_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, k.getCoursename(),
-                            k.getTrainingstarttime(), k.getTrainingendtimt()), "", new ArrayList<>(v),
-                    k.getId(), COURSE);
+//            CXCommonUtils.sendNotify(TRAIN_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, k.getCoursename(),
+//                            k.getTrainingstarttime(), k.getTrainingendtimt()), "", new ArrayList<>(v),
+//                    k.getId(), TRAINING);
+//            CXCommonUtils.sendNotify(COURSE_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, k.getCoursename(),
+//                            k.getTrainingstarttime(), k.getTrainingendtimt()), "", new ArrayList<>(v),
+//                    k.getId(), COURSE);
         });
 
     }
@@ -211,10 +216,10 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
      *
      * @param planAndUserIdMap
      */
-    public void sendTrainingPlanCancelNotify(Map<PlanDo, Set<String>> planAndUserIdMap) {
+    public void sendTrainingPlanCancelNotify(Map<String, List<String>> planAndUserIdMap) {
         planAndUserIdMap.forEach((k, v) -> {
-            CXCommonUtils.sendNotify(CANCEL_TRAIN_TITLE, String.format(CANCEL_TRAIN_CONTENT, k.getCoursename()), "",
-                    new ArrayList<>(v), null, TRAINING);
+            CXCommonUtils.sendNotify(CANCEL_TRAIN_TITLE, String.format(CANCEL_TRAIN_CONTENT, k), "",
+                    v, null, TRAINING);
         });
     }
 

+ 45 - 10
rw-training/training-server/src/main/java/com/rongwei/training/controller/PlanController.java

@@ -1,6 +1,7 @@
 package com.rongwei.training.controller;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.rongwei.rwadmincommon.system.domain.SysUserDo;
@@ -14,6 +15,7 @@ import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import com.rongwei.training.domain.*;
 import com.rongwei.trainingcommon.sys.service.*;
+import com.rongwei.trainingcommon.sys.service.impl.EmpCourseServiceImpl;
 import com.rongwei.trainingcommon.sys.service.impl.TrainingSendNotifyServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,11 +25,9 @@ import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.TRAIN_NOTIFY_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.COURSE_NOTIFY_CONTENT;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.COURSE_NOTIFY_TITLE;
-import static com.rongwei.safecommon.utils.SaveConstans.NotifyTitle.TRAIN_NOTIFY_TITLE;
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.COURSE;
-import static com.rongwei.safecommon.utils.SaveConstans.NotifyType.TRAINING;
 
 @RestController
 @RequestMapping("plan")
@@ -101,15 +101,15 @@ public class PlanController {
                         return R.errorWithMsg("单一培训计划只可对应一张试卷");
                     }
                     if(!planCourseList.isEmpty()){
-                        CXCommonUtils.sendNotify(COURSE_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, row.getCoursename(),
+                        CXCommonUtils.sendNotify(COURSE_NOTIFY_TITLE, String.format(COURSE_NOTIFY_CONTENT, row.getCoursename(),
                                         row.getTrainingstarttime(), row.getTrainingendtimt()), "", new ArrayList<>(userIds) ,
                                 row.getId(), COURSE);
                     }
-                    if(!planPaperList.isEmpty()){
-                        CXCommonUtils.sendNotify(TRAIN_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, row.getCoursename(),
-                                        row.getTrainingstarttime(), row.getTrainingendtimt()), "", new ArrayList<>(userIds) ,
-                                row.getId(), TRAINING);
-                    }
+//                    if(!planPaperList.isEmpty()){
+//                        CXCommonUtils.sendNotify(TRAIN_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, row.getCoursename(),
+//                                        row.getTrainingstarttime(), row.getTrainingendtimt()), "", new ArrayList<>(userIds) ,
+//                                row.getId(), TRAINING);
+//                    }
                     // 获取参与过本次培训计划的员工
                     QueryWrapper<EmpExamDo> queryWrapper = new QueryWrapper<>();
                     queryWrapper.eq("PLANID", row.getId());
@@ -271,6 +271,41 @@ public class PlanController {
 
     }
 
+    @PostMapping("/cancel")
+    public R cancelTrain(@RequestBody List<String> ids){
+
+        List<PlanCourseDo> planCourseDoList = planCourseService.list(new LambdaQueryWrapper<PlanCourseDo>()
+                .in(PlanCourseDo::getTrainingplanid, ids));
+
+
+        LambdaUpdateWrapper<PlanCourseDo> lambdaUpdateEmpWrapper = new LambdaUpdateWrapper<PlanCourseDo>();
+        lambdaUpdateEmpWrapper.in(PlanCourseDo::getTrainingplanid, ids).set(BaseDo::getDeleted, 1);
+        planCourseService.update(lambdaUpdateEmpWrapper);
+        // 删除 training_plan_paper 表记录
+        LambdaUpdateWrapper<PlanPaperDo> lambdaUpdatepaperWrapper = new LambdaUpdateWrapper<PlanPaperDo>();
+        lambdaUpdatepaperWrapper.in(PlanPaperDo::getTrainingplanid, ids).set(BaseDo::getDeleted, 1);
+        PlanPaperService.update(lambdaUpdatepaperWrapper);
+
+        planService.update(new LambdaUpdateWrapper<PlanDo>().set(PlanDo::getPublish,"c").in(PlanDo::getId,ids));
+
+        List<EmpCourseDo> toTestInfoList = empCourseService.list(new LambdaQueryWrapper<EmpCourseDo>()
+                .eq(BaseDo::getDeleted, "0")
+                .in(EmpCourseDo::getPlanid, ids)
+                .in(EmpCourseDo::getPlancourseid,planCourseDoList.stream().map(PlanCourseDo::getId).collect(Collectors.toList()))
+                .last("and COURSETIME*60 <> ifnull(COURSEUSETIME,0)")
+        );
+        if (toTestInfoList.isEmpty()) {
+            return R.ok();
+        }
+
+
+        Map<String, List<String>> collect = toTestInfoList.stream().collect(Collectors.groupingBy(EmpCourseDo::getCoursename,
+                Collectors.mapping(EmpCourseDo::getEmpid, Collectors.toList())));
+        // 培训课程取消提醒
+        sendNotifyService.sendTrainingPlanCancelNotify(collect);
+        return R.ok();
+    }
+
 
     /**
      * 删除
@@ -331,7 +366,7 @@ public class PlanController {
             });
             planService.removeByIds(planIds);
             // 培训计划取消提醒
-            sendNotifyService.sendTrainingPlanCancelNotify(planAndUserIdMap);
+//            sendNotifyService.sendTrainingPlanCancelNotify(planAndUserIdMap);
 
             return R.ok();
         } catch (Exception e) {

+ 2 - 1
rw-training/training-server/src/main/java/com/rongwei/training/controller/SendNotifyController.java

@@ -21,13 +21,14 @@ public class SendNotifyController {
     @Autowired
     private TrainingSendNotifyServiceImpl sendNotifyService;
 
+    @Scheduled(cron = "0 0 0 ? * *")
     @PostMapping("/end/reminder-email")
     public void endReminderMail() {
         log.info("开始发送考试截止提醒邮件");
         sendNotifyService.endReminderEmail();
     }
 
-    @Scheduled(cron = "0 0 0 ? * *")
+
     @PostMapping("/training/plan")
     public void trainingPlan() {
         log.info("开始发送考试提醒通知");