From aaa55aa7b0be807ddd6814b13307f9cb2cd9c67a Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期六, 12 十月 2024 11:06:14 +0800
Subject: [PATCH] 新增课程审核 ,短信提醒

---
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java                      |    5 
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java                       |    2 
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java |    7 +
 ruoyi-admin/src/main/resources/application-pro.yml                                                                   |    8 +
 exam-system/pom.xml                                                                                                  |    7 +
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourse.java                                     |    3 
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java       |   24 ++++++
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java      |   23 ++++-
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java                |   10 ++
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/CourseStatus.java                                  |   33 ++++++++
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseRespDTO.java                          |    4 +
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java     |    5 +
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseDTO.java                                  |    9 ++
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThBatchManagerController.java                 |    6 +
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentManagerService.java                     |    2 
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/utils/SendMessageUtil.java                               |   48 ++++++++++++
 16 files changed, 187 insertions(+), 9 deletions(-)

diff --git a/exam-system/pom.xml b/exam-system/pom.xml
index 6b53c53..6a85092 100644
--- a/exam-system/pom.xml
+++ b/exam-system/pom.xml
@@ -25,6 +25,13 @@
             <artifactId>ruoyi-file</artifactId>
         </dependency>
 
+        <!--        七牛云短信-->
+        <dependency>
+            <groupId>com.qiniu</groupId>
+            <artifactId>qiniu-java-sdk</artifactId>
+            <version>[7.2.0, 7.2.99]</version>
+        </dependency>
+
     </dependencies>
 
 </project>
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThBatchManagerController.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThBatchManagerController.java
index 01d6c7a..7934496 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThBatchManagerController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThBatchManagerController.java
@@ -31,4 +31,10 @@
     public AjaxResult getStudent(@PathVariable String batchUuid) {
         return AjaxResult.success(thBatchManagerService.getStudent(batchUuid));
     }
+
+    //发送短信提醒
+    @GetMapping("/sendMessage/{idcard}")
+    public AjaxResult sendMes(@PathVariable String idcard){
+        return thBatchManagerService.sendMes(idcard);
+    }
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java
index 2daf041..09a64d8 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/controller/ThCourseManagerController.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.institutionalaccess.controller;
 
+import com.gkhy.exam.institutionalaccess.entity.ThCourseDTO;
 import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery;
 import com.gkhy.exam.institutionalaccess.service.ThCourseManagerService;
 import com.ruoyi.common.core.controller.BaseController;
@@ -34,4 +35,13 @@
     public AjaxResult getStudent(@PathVariable String courseUuid) {
         return AjaxResult.success(courseManagerService.getSutdent(courseUuid));
     }
+
+    /**
+     * 课程审核
+     */
+    @PostMapping("/checkCourse")
+    public AjaxResult checkCourse(@RequestBody ThCourseDTO thCourseDTO){
+        return toAjax(courseManagerService.updateByCourse(thCourseDTO));
+    }
+
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourse.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourse.java
index a99f46c..1237d55 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourse.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourse.java
@@ -27,6 +27,9 @@
     //删除标志(0代表存在 2代表删除)
     private Byte delFlag;
 
+    //审核字段(0待审核,1审核通过,2审核驳回)
+    private Byte status;
+
     /** 创建者 */
     private String createBy;
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseDTO.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseDTO.java
new file mode 100644
index 0000000..a58dab5
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/entity/ThCourseDTO.java
@@ -0,0 +1,9 @@
+package com.gkhy.exam.institutionalaccess.entity;
+
+import lombok.Data;
+
+@Data
+public class ThCourseDTO {
+    private Long id;
+    private Byte status;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/CourseStatus.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/CourseStatus.java
new file mode 100644
index 0000000..1a680d1
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/enums/CourseStatus.java
@@ -0,0 +1,33 @@
+package com.gkhy.exam.institutionalaccess.enums;
+
+
+public enum CourseStatus {
+
+    REVIEWED((byte)1,"待审核"),
+    PASS((byte)2,"审核通过"),
+    REJECT((byte)3,"审核驳回");
+
+    private Byte status;
+    private String desc;
+
+    CourseStatus(Byte status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    public Byte getStatus() {
+        return status;
+    }
+
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseRespDTO.java
index 9c55cc0..7d8a49d 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseRespDTO.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/model/resp/ThCourseRespDTO.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.institutionalaccess.model.resp;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.models.auth.In;
 import lombok.Data;
@@ -21,6 +22,9 @@
     //删除标志(0代表存在 2代表删除)
     private Byte delFlag;
 
+    //审核字段
+    private Byte status;
+
     private String createBy;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java
index 3948add..817f30e 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThBatchManagerService.java
@@ -7,6 +7,7 @@
 import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO;
 import com.gkhy.exam.institutionalaccess.model.vo.ThBatchCourseVO;
 import com.gkhy.exam.institutionalaccess.model.vo.ThBatchVO;
+import com.ruoyi.common.core.domain.AjaxResult;
 
 import java.util.List;
 
@@ -17,4 +18,5 @@
 
     List<ThStudentStudyRespDTO> getStudent(String batchUuid);
 
+    AjaxResult sendMes(String idcard);
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java
index ab825c3..eaca7a7 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThCourseManagerService.java
@@ -1,7 +1,6 @@
 package com.gkhy.exam.institutionalaccess.service;
 
-import com.gkhy.exam.institutionalaccess.entity.ThStudent;
-import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch;
+import com.gkhy.exam.institutionalaccess.entity.ThCourseDTO;
 import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery;
 import com.gkhy.exam.institutionalaccess.model.resp.ThCourseRespDTO;
 import com.gkhy.exam.institutionalaccess.model.resp.ThStudentStudyRespDTO;
@@ -15,5 +14,7 @@
 
     List<ThStudentStudyRespDTO> getSutdent(String courseUuid);
 
+    Boolean updateByCourse(ThCourseDTO thCourseDTO);
+
     //List<ThStudentBatchR> getStudent(String );
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentManagerService.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentManagerService.java
index 3543e91..aedd20b 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentManagerService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/ThStudentManagerService.java
@@ -7,4 +7,6 @@
 
 public interface ThStudentManagerService {
     List<ThStudent> listByPage(ThStudentQuery query);
+
+    ThStudent findByIdCard(String idcard);
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java
index 34efd7f..be08ff3 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThBatchManagerServiceImpl.java
@@ -10,6 +10,8 @@
 import com.gkhy.exam.institutionalaccess.model.vo.*;
 import com.gkhy.exam.institutionalaccess.service.*;
 import com.gkhy.exam.institutionalaccess.utils.ConvertTimeUtils;
+import com.gkhy.exam.institutionalaccess.utils.SendMessageUtil;
+import com.ruoyi.common.core.domain.AjaxResult;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -18,6 +20,7 @@
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -35,6 +38,11 @@
     private ThBatchCourseChapterService thBatchCourseChapterService;
     @Autowired
     private ThSubjectTypeService subjectTypeService;
+    @Autowired
+    private ThStudentManagerService thStudentManagerService;
+
+    @Autowired
+    private SendMessageUtil sendMessageUtil;
 
     @Override
     public List<ThBatchVO> listByPage(ThBatchQuery query) {
@@ -180,6 +188,22 @@
         return respDTOS;
     }
 
+    //短信提醒
+    @Override
+    public AjaxResult sendMes(String idcard) {
+        ThStudent thStudent = thStudentManagerService.findByIdCard(idcard);
+        if (StringUtils.isEmpty(thStudent.getPhone()) || thStudent.getPhone().equals("-")){
+            return AjaxResult.error("该学员未绑定手机号");
+        }
+        //调用短信接口
+        String[] phone={thStudent.getPhone()};
+        HashMap<String, String> map = new HashMap<>();
+        map.put("name",thStudent.getName());
+        map.put("platform",thStudent.getInstitutionName());
+        sendMessageUtil.sendMessageCheck(phone,map);
+        return AjaxResult.success();
+    }
+
     public String getObtainSuperiors(String code){
         List<ThSubjectType> subjectTypeList = subjectTypeService.getSubjectTypeList();
         if(StringUtils.isEmpty(code)){
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java
index bcccccd..744e76c 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThCourseManagerServiceImpl.java
@@ -1,9 +1,7 @@
 package com.gkhy.exam.institutionalaccess.service.serviceImpl;
 
-import com.gkhy.exam.institutionalaccess.entity.ThBatchCourse;
-import com.gkhy.exam.institutionalaccess.entity.ThCourse;
-import com.gkhy.exam.institutionalaccess.entity.ThCourseChapter;
-import com.gkhy.exam.institutionalaccess.entity.ThStudentBatch;
+import com.gkhy.exam.institutionalaccess.entity.*;
+import com.gkhy.exam.institutionalaccess.enums.CourseStatus;
 import com.gkhy.exam.institutionalaccess.enums.FinishStatus;
 import com.gkhy.exam.institutionalaccess.model.query.ThCourseQuery;
 import com.gkhy.exam.institutionalaccess.model.resp.ThCourseChapterRespDTO;
@@ -22,7 +20,6 @@
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -147,6 +144,22 @@
         return respDTOS;
     }
 
+    //课程审核
+    @Override
+    public Boolean updateByCourse(ThCourseDTO thCourseDTO) {
+        if (StringUtils.isEmpty(thCourseDTO.getStatus()) || StringUtils.isEmpty(thCourseDTO.getId())){
+            return false;
+        }
+        ThCourse byUuid = courseService.getById(thCourseDTO.getId());
+        if (!byUuid.getStatus().equals(CourseStatus.REVIEWED.getStatus())){
+            return false;
+        }
+        ThCourse thCourse = new ThCourse();
+        thCourse.setId(thCourseDTO.getId());
+        thCourse.setStatus(thCourseDTO.getStatus());
+        return  courseService.updateById(thCourse);
+    }
+
     //获取章节
     private List<ThCourseChapterRespDTO> getChildren(List<ThCourseChapterVO> courseChapterVOS, String parentUuid) {
         List<ThCourseChapterRespDTO> chapterList = courseChapterVOS
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java
index f2f66ea..2305ace 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudentManagerServiceImpl.java
@@ -24,4 +24,9 @@
                 .like(!StringUtils.isEmpty(query.getName()),ThStudent::getName, query.getName())
                 .eq(ThStudent::getDelFlag, DeleteStatusEnum.NO.getStatus()).orderByDesc(ThStudent::getUpdateTime));
     }
+
+    @Override
+    public ThStudent findByIdCard(String idcard) {
+        return thStudentService.getByIdcard(idcard);
+    }
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java
index 0f36892..0d5d89f 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/ThStudyRecordManagerServiceImpl.java
@@ -19,6 +19,7 @@
 import com.ruoyi.common.signature.AESUtils;
 import com.ruoyi.system.domain.ThAccessAddress;
 import com.ruoyi.system.service.ThAccessAddressService;
+import lombok.extern.log4j.Log4j2;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -31,6 +32,7 @@
 import java.util.stream.Collectors;
 
 @Service("ThStudyRecordManagerService")
+@Log4j2
 public class ThStudyRecordManagerServiceImpl implements ThStudyRecordManagerService {
     private Logger logger = LoggerFactory.getLogger(ThStudyRecordManagerServiceImpl.class);
 
@@ -131,9 +133,11 @@
         Map<String,String> params = new HashMap<>();
         params.put("idcard",query.getIdcard());
         String json = HttpClientUtil.doGet(accessAddress.getUrl(), params);
+        log.info("调用机构接口返回结果: "+json);
 
         ReturnVO<String> returnVo = JSONObject.parseObject(json, new TypeReference<ReturnVO<String>>() {});
-        if(returnVo.getCode() == null || returnVo.getCode() != 200){
+        log.info("获得第三方数据:"+returnVo);
+        if(returnVo==null || returnVo.getCode() == null || returnVo.getCode() != 200){
             throw new ServiceException("获取三方数据数据异常");
         }
         ThPlatformStudentRespDTO thPlatformStudentRespDTO = null;
@@ -141,6 +145,7 @@
             String decrypt = "";
             try {
                 decrypt = AESUtils.decrypt(returnVo.getData());
+                log.info("解密后的数据为:"+decrypt);
             }catch (Exception e){
                 throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR,"解密异常");
             }
diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/utils/SendMessageUtil.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/utils/SendMessageUtil.java
new file mode 100644
index 0000000..17c9e0f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/utils/SendMessageUtil.java
@@ -0,0 +1,48 @@
+package com.gkhy.exam.institutionalaccess.utils;
+
+import com.qiniu.common.QiniuException;
+import com.qiniu.http.Response;
+import com.qiniu.sms.SmsManager;
+import com.qiniu.util.Auth;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+public class SendMessageUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(SendMessageUtil.class);
+
+    @Value("${safecheckqiniuymes.accesskey}")
+    private String accesskey;
+
+    @Value("${safecheckqiniuymes.secretkey}")
+    private String secretkey;
+
+    @Value("${safecheckqiniuymes.templateid}")
+    private String templateid;
+ 
+    /**
+     * 发送短信提示
+     */
+    @Async("SocketTaskExecutor")
+    public Boolean sendMessageCheck(String[] phone, Map<String, String> map){
+        Auth auth = Auth.create(accesskey, secretkey);
+        SmsManager smsManager = new SmsManager(auth);
+        try {
+            Response resp = smsManager.sendMessage(templateid, phone , map);
+            if(resp.statusCode == 200){
+                return true;
+            }else {
+                return false;
+            }
+        } catch (QiniuException e) {
+            log.info("发生短信异常 =======================" ,e);
+        }
+        return false;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-pro.yml b/ruoyi-admin/src/main/resources/application-pro.yml
index f615957..cb188b5 100644
--- a/ruoyi-admin/src/main/resources/application-pro.yml
+++ b/ruoyi-admin/src/main/resources/application-pro.yml
@@ -122,4 +122,10 @@
     queueCapacity: 10000
     scheduling:
         #控制线程是否执行 true:执行;false:不执行
-        enabled: true
\ No newline at end of file
+        enabled: true
+
+# 七牛云相关信息
+safecheckqiniuymes:
+    accesskey: 5YprpjY0BJiyjII2VqlHed7UhBEvvkPZicbwd8Kl
+    secretkey: m3gGQNQ9cLmVBBZwPXZ5-Wzr0duzyAPPmJUx4_ay
+    templateid: 1844221365930962944
\ No newline at end of file

--
Gitblit v1.9.2