فهرست منبع

feature 代码提交

xiahan 1 سال پیش
والد
کامیت
3356d25dbf

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

@@ -126,11 +126,15 @@ public class SaveConstans {
         /**
          * 培训截止提醒
          */
-        public static final String CUT_OFF_TRAIN_TITLE = "培训截止提醒";
+        public static final String CUT_OFF_TRAIN_TITLE = "课程截止提醒";
+        /**
+         * 培训截止提醒
+         */
+        public static final String CUT_OFF_PAPER_TITLE = "考试截止提醒";
         /**
          * 我的培训
          */
-        public static final String TRAIN_NOTIFY_TITLE = "培训试卷提醒";
+        public static final String TRAIN_NOTIFY_TITLE = "考试提醒";
 
         public static final String COURSE_NOTIFY_TITLE = "培训课程提醒";
         /**
@@ -160,19 +164,23 @@ public class SaveConstans {
         /**
          * 培训截止提醒内容
          */
-        public static final String CUT_OFF_TRAIN_CONTENT = "培训课程:%s,将于%tF截止,请及时完成培训!";
+        public static final String CUT_OFF_TRAIN_CONTENT = "%s,将于%tF截止,请及时完成培训!";
+        /**
+         * 培训截止提醒内容
+         */
+        public static final String CUT_OFF_PAPER_CONTENT = "%s,将于%tF截止,请及时完成考试!";
         /**
-         * 我的培训提醒内容
+         * 考试试卷提醒内容
          */
-        public static final String TRAIN_NOTIFY_CONTENT = "%s,培训时间:%tF至%tF";
+        public static final String TRAIN_NOTIFY_CONTENT = "考试:%s已发布,截止时间:%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 已取消,请知悉!;";
         /**
          * 培训需求调查提醒内容
          */

+ 5 - 1
rw-training/training-common/src/main/java/com/rongwei/trainingcommon/sys/service/TrainingSendNotifyService.java

@@ -1,5 +1,7 @@
 package com.rongwei.trainingcommon.sys.service;
 
+import com.rongwei.rwcommon.base.R;
+
 /**
  * SendNotifyService class
  *
@@ -11,7 +13,9 @@ public interface TrainingSendNotifyService {
     /**
      * 考试截止提醒邮件
      */
-    void endReminderEmail();
+    R endReminderEmail();
+
+    R endReminderPaperMail();
 
     void trainingPlan();
 

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

@@ -6,12 +6,10 @@ import com.rongwei.rwadmincommon.system.domain.SysUserDo;
 import com.rongwei.rwadmincommon.system.service.SysUserOrgService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.BaseDo;
+import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
-import com.rongwei.training.domain.EmpCourseDo;
-import com.rongwei.training.domain.PlanCourseDo;
-import com.rongwei.training.domain.PlanDo;
-import com.rongwei.training.domain.TrainingDemandSurveyBackupsDo;
+import com.rongwei.training.domain.*;
 import com.rongwei.trainingcommon.sys.service.EmpExamService;
 import com.rongwei.trainingcommon.sys.service.PlanPaperService;
 import com.rongwei.trainingcommon.sys.service.PlanService;
@@ -61,19 +59,20 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
     private static final String TRAINING_PLAN_PUBLISH = "y";
 
     @Override
-    public void endReminderEmail() {
+    public R endReminderEmail() {
         // 获取培训计划
         List<PlanDo> planDoList = planService.list(new LambdaQueryWrapper<PlanDo>().eq(BaseDo::getDeleted, "0")
                 .eq(PlanDo::getPublish, TRAINING_PLAN_PUBLISH)
                 .last("and( DATEDIFF(TRAININGENDTIMT, NOW()) =3 or DATEDIFF(TRAININGENDTIMT, NOW()) =0)"));
         if (planDoList.isEmpty()) {
-            return;
+            return R.ok();
         }
         log.info("获取到培训计划:{}", planDoList);
         List<String> planId = planDoList.stream().map(PlanDo::getId).collect(Collectors.toList());
         List<PlanCourseDo> planCourseDoList = planCourseService.list(new LambdaQueryWrapper<PlanCourseDo>()
                 .eq(BaseDo::getDeleted, "0")
                 .in(PlanCourseDo::getTrainingplanid,planId));
+
         // 根据培训计划获取对应的试卷信息
 //        List<PlanPaperDo> planPaperList = planPaperService.list(new LambdaQueryWrapper<PlanPaperDo>()
 //                .eq(BaseDo::getDeleted, "0")
@@ -94,29 +93,70 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
 //        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).collect(Collectors.toList()))
-                        .last("and COURSETIME*60 <> ifnull(COURSEUSETIME,0)")
-                );
+                .eq(BaseDo::getDeleted, "0")
+                .in(EmpCourseDo::getPlanid, planId)
+                .in(EmpCourseDo::getPlancourseid, planCourseDoList.stream().map(PlanCourseDo::getId).collect(Collectors.toList()))
+                .last("and COURSETIME*60 <> ifnull(COURSEUSETIME,0)")
+        );
         if (toTestInfoList.isEmpty()) {
-            return;
+            return R.ok();
         }
         // 对数据按照 培训计划已经课程信息进行分组
         Map<String, Map<String, List<String>>> collect = toTestInfoList.stream()
                 .collect(Collectors.groupingBy(EmpCourseDo::getPlanid, Collectors.groupingBy(EmpCourseDo::getCoursename,
                         Collectors.mapping(EmpCourseDo::getEmpid,Collectors.toList()))));
 
-        // 发送考试截止提醒邮件
+        // 发送培训课程截止提醒邮件
         collect.forEach((k, v) -> {
             PlanDo planDo = planDoList.stream().filter(info -> info.getId().equals(k)).findFirst().get();
-            v.forEach((courseName,infos)->{
+            v.forEach((courseName, infos) -> {
                 log.info("准备发送课程截止提醒邮件");
-                CXCommonUtils.sendNotify(CUT_OFF_TRAIN_TITLE, String.format(CUT_OFF_TRAIN_CONTENT,planDo.getCoursename(), planDo.getTrainingendtimt()), "",
-                       infos.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList())
-                        , planDo.getId(), TRAINING);
+                CXCommonUtils.sendNotify(CUT_OFF_TRAIN_TITLE, String.format(CUT_OFF_TRAIN_CONTENT, planDo.getCoursename(), planDo.getTrainingendtimt()), "",
+                        infos.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList())
+                        , planDo.getId(), COURSE);
             });
         });
+        return R.ok();
+    }
+
+    /**
+     * 培训试卷截止提醒
+     * @return
+     */
+    @Override
+    public R endReminderPaperMail() {
+        // 获取培训计划
+        List<PlanDo> planDoList = planService.list(new LambdaQueryWrapper<PlanDo>().eq(BaseDo::getDeleted, "0")
+                .eq(PlanDo::getPublish, TRAINING_PLAN_PUBLISH));
+        if (planDoList.isEmpty()) {
+            return R.ok();
+        }
+        List<String> planIds = planDoList.stream().map(PlanDo::getId).collect(Collectors.toList());
+        // 获取培训计划中 截止日期在3天和0填的试卷信息
+        List<PlanPaperDo> planPaperDos = planPaperService.list(new LambdaQueryWrapper<PlanPaperDo>()
+                .in(PlanPaperDo::getTrainingplanid, planIds)
+                .eq(BaseDo::getDeleted, "0")
+                .last("and( DATEDIFF(deadline, NOW()) =3 or DATEDIFF(deadline, NOW()) =0)")
+        );
+        List<String> planPaperIds = planPaperDos.stream().map(PlanPaperDo::getId).collect(Collectors.toList());
+        // 获取所有未考试的用户信息
+        List<EmpExamDo> examDoList = empExamService.list(new LambdaQueryWrapper<EmpExamDo>().eq(BaseDo::getDeleted, "0")
+                .in(EmpExamDo::getPlanid, planIds)
+                .in(EmpExamDo::getPlanpaperid,planPaperIds)
+                .eq(EmpExamDo::getExamstatus, "待考试")
+        );
+        Map<String, List<String>> paperMap = new HashMap<>();
+        // 对试卷按照试卷名称分组
+        Map<String, List<EmpExamDo>> collect = examDoList.stream().collect(Collectors.groupingBy(EmpExamDo::getPapername, Collectors.toList()));
+        collect.forEach((k,v)->{
+            paperMap.put(k, examDoList.stream().map(EmpExamDo::getEmpid).distinct().collect(Collectors.toList()));
+        });
+        // 培训课程取消提醒
+        paperMap.forEach((k, v) -> {
+            CXCommonUtils.sendNotify(CUT_OFF_PAPER_TITLE, String.format(CUT_OFF_PAPER_CONTENT, k), "",
+                    v, null, TRAINING);
+        });
+        return R.ok();
     }
 
 
@@ -217,13 +257,19 @@ public class TrainingSendNotifyServiceImpl implements TrainingSendNotifyService
     /**
      * 培训计划取消提醒
      *
-     * @param planAndUserIdMap
+     * @param courseMap
+     * @param paperMap
      */
-    public void sendTrainingPlanCancelNotify(Map<String, List<String>> planAndUserIdMap) {
-        planAndUserIdMap.forEach((k, v) -> {
+    public void sendTrainingPlanCancelNotify(Map<String, List<String>> courseMap,
+                                             Map<String, List<String>> paperMap) {
+        courseMap.forEach((k, v) -> {
             CXCommonUtils.sendNotify(CANCEL_TRAIN_TITLE, String.format(CANCEL_TRAIN_CONTENT, k), "",
                     v, null, COURSE);
         });
+        paperMap.forEach((k, v) -> {
+            CXCommonUtils.sendNotify(CANCEL_TRAIN_TITLE, String.format(CANCEL_TRAIN_CONTENT, k), "",
+                    v, null, TRAINING);
+        });
     }
 
 

+ 34 - 16
rw-training/training-server/src/main/java/com/rongwei/training/controller/PlanController.java

@@ -26,8 +26,11 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.COURSE_NOTIFY_CONTENT;
+import static com.rongwei.safecommon.utils.SaveConstans.NotifyContent.TRAIN_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")
@@ -36,6 +39,8 @@ public class PlanController {
     @Autowired
     private PlanService planService;
     @Autowired
+    private PlanPaperService planPaperService;
+    @Autowired
     private SysUserOrgService userOrgService;
     @Autowired
     private EmpCourseService empCourseService;
@@ -48,8 +53,6 @@ public class PlanController {
     @Autowired
     private PlanCourseService planCourseService;
     @Autowired
-    private PlanPaperService PlanPaperService;
-    @Autowired
     private TrainingSendNotifyServiceImpl sendNotifyService;
 
     /**
@@ -105,11 +108,14 @@ public class PlanController {
                                         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()){
+                        planPaperList.forEach(data->{
+                            CXCommonUtils.sendNotify(TRAIN_NOTIFY_TITLE, String.format(TRAIN_NOTIFY_CONTENT, data.getPapername(),
+                                            data.getDeadline()), "", new ArrayList<>(userIds) ,
+                                    row.getId(), TRAINING);
+                        });
+
+                    }
                     // 获取参与过本次培训计划的员工
                     QueryWrapper<EmpExamDo> queryWrapper = new QueryWrapper<>();
                     queryWrapper.eq("PLANID", row.getId());
@@ -276,7 +282,8 @@ public class PlanController {
 
         List<PlanCourseDo> planCourseDoList = planCourseService.list(new LambdaQueryWrapper<PlanCourseDo>()
                 .in(PlanCourseDo::getTrainingplanid, ids));
-
+        List<PlanPaperDo> planPaperDoList = planPaperService.list(new LambdaQueryWrapper<PlanPaperDo>()
+                .in(PlanPaperDo::getTrainingplanid, ids));
 
         LambdaUpdateWrapper<PlanCourseDo> lambdaUpdateEmpWrapper = new LambdaUpdateWrapper<PlanCourseDo>();
         lambdaUpdateEmpWrapper.in(PlanCourseDo::getTrainingplanid, ids).set(BaseDo::getDeleted, 1);
@@ -284,27 +291,38 @@ public class PlanController {
         // 删除 training_plan_paper 表记录
         LambdaUpdateWrapper<PlanPaperDo> lambdaUpdatepaperWrapper = new LambdaUpdateWrapper<PlanPaperDo>();
         lambdaUpdatepaperWrapper.in(PlanPaperDo::getTrainingplanid, ids).set(BaseDo::getDeleted, 1);
-        PlanPaperService.update(lambdaUpdatepaperWrapper);
+        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 = new HashMap<>();
+        // 获取未考试的用户信息
+        List<EmpExamDo> examDoList = empExamService.list(new LambdaQueryWrapper<EmpExamDo>().eq(BaseDo::getDeleted, "0")
+                .in(EmpExamDo::getPlanid, ids)
+                .in(EmpExamDo::getPlanpaperid, planPaperDoList.stream().map(PlanPaperDo::getId).collect(Collectors.toList()))
+                .eq(EmpExamDo::getExamstatus, "待考试")
+        );
+
+        Map<String, List<String>> courseMap = new HashMap<>();
         planService.listByIds(ids).forEach(info->{
             List<String> empIds = toTestInfoList.stream()
                     .filter(data -> data.getPlanid().equals(info.getId()))
                     .map(EmpCourseDo::getEmpid).collect(Collectors.toList());
-            collect.put(info.getCoursename(),empIds);
+            courseMap.put(info.getCoursename(),empIds);
+        });
+        Map<String, List<String>> paperMap = new HashMap<>();
+        // 对试卷按照试卷名称分组
+        Map<String, List<EmpExamDo>> collect = examDoList.stream().collect(Collectors.groupingBy(EmpExamDo::getPapername, Collectors.toList()));
+        collect.forEach((k,v)->{
+            paperMap.put(k, examDoList.stream().map(EmpExamDo::getEmpid).distinct().collect(Collectors.toList()));
         });
         // 培训课程取消提醒
-        sendNotifyService.sendTrainingPlanCancelNotify(collect);
+        sendNotifyService.sendTrainingPlanCancelNotify(courseMap,paperMap);
         return R.ok();
     }
 
@@ -333,7 +351,7 @@ public class PlanController {
             // 删除 training_plan_paper 表记录
             LambdaUpdateWrapper<PlanPaperDo> lambdaUpdatepaperWrapper = new LambdaUpdateWrapper<PlanPaperDo>();
             lambdaUpdatepaperWrapper.in(PlanPaperDo::getTrainingplanid, planIds).set(BaseDo::getDeleted, 1);
-            PlanPaperService.update(lambdaUpdatepaperWrapper);
+            planPaperService.update(lambdaUpdatepaperWrapper);
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
             Map<PlanDo, Set<String>> planAndUserIdMap = new HashMap<>();
             // 删除之前发送培训计划取消邮件

+ 11 - 3
rw-training/training-server/src/main/java/com/rongwei/training/controller/SendNotifyController.java

@@ -1,5 +1,6 @@
 package com.rongwei.training.controller;
 
+import com.rongwei.rwcommon.base.R;
 import com.rongwei.trainingcommon.sys.service.impl.TrainingSendNotifyServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,9 +24,16 @@ public class SendNotifyController {
 
     @Scheduled(cron = "0 0 0 ? * *")
     @PostMapping("/end/reminder-email")
-    public void endReminderMail() {
-        log.info("开始发送考试截止提醒邮件");
-        sendNotifyService.endReminderEmail();
+    public R endReminderMail() {
+        log.info("开始发送培训课程提醒邮件");
+        return sendNotifyService.endReminderEmail();
+    }
+
+    @Scheduled(cron = "0 0 0 ? * *")
+    @PostMapping("/end/reminder-email/paper")
+    public R endReminderPaperMail() {
+        log.info("开始发送培训试卷截止提醒邮件");
+        return sendNotifyService.endReminderPaperMail();
     }