Ver Fonte

武大考务数据对接-增加短信通知

xiaof há 3 anos atrás
pai
commit
11fc891bfe

+ 3 - 3
pom.xml

@@ -10,10 +10,10 @@
     <properties>
     <properties>
         <java.version>1.8</java.version>
         <java.version>1.8</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
         <qmth.boot.version>1.0.3</qmth.boot.version>
         <qmth.boot.version>1.0.3</qmth.boot.version>
-        <java.version>11</java.version>
+        <java.version>1.8</java.version>
         <swagger2.version>2.9.2</swagger2.version>
         <swagger2.version>2.9.2</swagger2.version>
         <fastjson.version>1.2.68</fastjson.version>
         <fastjson.version>1.2.68</fastjson.version>
         <fileupload.version>1.4</fileupload.version>
         <fileupload.version>1.4</fileupload.version>

+ 36 - 0
src/main/java/com/qmth/eds/bean/dto/ExamSyncTotalDownloadDto.java

@@ -0,0 +1,36 @@
+package com.qmth.eds.bean.dto;
+
+import com.qmth.eds.entity.ExamSyncTotal;
+
+public class ExamSyncTotalDownloadDto extends ExamSyncTotal {
+
+    private Long userId;
+
+    private String userName;
+
+    private String mobileNumber;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+}

+ 21 - 147
src/main/java/com/qmth/eds/domain/SmsDomain.java

@@ -5,50 +5,36 @@ package com.qmth.eds.domain;
  */
  */
 public class SmsDomain {
 public class SmsDomain {
 
 
-    String smsNormalCode;
-    Integer codeExpiredTime;
-    Integer codeSendInterval;
+    String normalCode;
+    Integer expiredTime;
+    Integer sendInterval;
     String aliyunSMSKey;
     String aliyunSMSKey;
     String aliyunSMSSecret;
     String aliyunSMSSecret;
     String aliyunSMSSignName;
     String aliyunSMSSignName;
-    String aliyunSMSTplCode;
-    String aliyunSMSAuditPassCode;
-    String aliyunSMSAuditNotPassCode;
-    String aliyunSMSExamTaskCreatedCode;
-    String aliyunSMSExamTaskWillExpireCode;
-    String aliyunSMSExamTaskOverdueCode;
-    String aliyunSMSAllocationWillExpireCode;
-    String aliyunSMSAllocationOverdueCode;
-    String aliyunSMSAuditCreatedCode;
-    String aliyunSMSAuditReviewCode;
-    String aliyunSMSAuditWillExpireCode;
-    String aliyunSMSAuditOverdueCode;
-    String aliyunSMSAuditRejectCode;
-    String aliyunSMSUploadStructureCode;
-    String aliyunSMSAuditCopyUserCode;
-
-    public String getSmsNormalCode() {
-        return smsNormalCode;
+    String teachDataChangeNoticeCode;
+
+    public String getNormalCode() {
+        return normalCode;
     }
     }
 
 
-    public void setSmsNormalCode(String smsNormalCode) {
-        this.smsNormalCode = smsNormalCode;
+    public void setNormalCode(String normalCode) {
+        this.normalCode = normalCode;
     }
     }
 
 
-    public Integer getCodeExpiredTime() {
-        return codeExpiredTime;
+    public Integer getExpiredTime() {
+        return expiredTime;
     }
     }
 
 
-    public void setCodeExpiredTime(Integer codeExpiredTime) {
-        this.codeExpiredTime = codeExpiredTime;
+    public void setExpiredTime(Integer expiredTime) {
+        this.expiredTime = expiredTime;
     }
     }
 
 
-    public Integer getCodeSendInterval() {
-        return codeSendInterval;
+    public Integer getSendInterval() {
+        return sendInterval;
     }
     }
 
 
-    public void setCodeSendInterval(Integer codeSendInterval) {
-        this.codeSendInterval = codeSendInterval;
+    public void setSendInterval(Integer sendInterval) {
+        this.sendInterval = sendInterval;
     }
     }
 
 
     public String getAliyunSMSKey() {
     public String getAliyunSMSKey() {
@@ -75,123 +61,11 @@ public class SmsDomain {
         this.aliyunSMSSignName = aliyunSMSSignName;
         this.aliyunSMSSignName = aliyunSMSSignName;
     }
     }
 
 
-    public String getAliyunSMSTplCode() {
-        return aliyunSMSTplCode;
-    }
-
-    public void setAliyunSMSTplCode(String aliyunSMSTplCode) {
-        this.aliyunSMSTplCode = aliyunSMSTplCode;
-    }
-
-    public String getAliyunSMSAuditPassCode() {
-        return aliyunSMSAuditPassCode;
-    }
-
-    public void setAliyunSMSAuditPassCode(String aliyunSMSAuditPassCode) {
-        this.aliyunSMSAuditPassCode = aliyunSMSAuditPassCode;
-    }
-
-    public String getAliyunSMSAuditNotPassCode() {
-        return aliyunSMSAuditNotPassCode;
-    }
-
-    public void setAliyunSMSAuditNotPassCode(String aliyunSMSAuditNotPassCode) {
-        this.aliyunSMSAuditNotPassCode = aliyunSMSAuditNotPassCode;
-    }
-
-    public String getAliyunSMSExamTaskCreatedCode() {
-        return aliyunSMSExamTaskCreatedCode;
-    }
-
-    public void setAliyunSMSExamTaskCreatedCode(String aliyunSMSExamTaskCreatedCode) {
-        this.aliyunSMSExamTaskCreatedCode = aliyunSMSExamTaskCreatedCode;
-    }
-
-    public String getAliyunSMSExamTaskWillExpireCode() {
-        return aliyunSMSExamTaskWillExpireCode;
-    }
-
-    public void setAliyunSMSExamTaskWillExpireCode(String aliyunSMSExamTaskWillExpireCode) {
-        this.aliyunSMSExamTaskWillExpireCode = aliyunSMSExamTaskWillExpireCode;
-    }
-
-    public String getAliyunSMSExamTaskOverdueCode() {
-        return aliyunSMSExamTaskOverdueCode;
-    }
-
-    public void setAliyunSMSExamTaskOverdueCode(String aliyunSMSExamTaskOverdueCode) {
-        this.aliyunSMSExamTaskOverdueCode = aliyunSMSExamTaskOverdueCode;
-    }
-
-    public String getAliyunSMSAllocationWillExpireCode() {
-        return aliyunSMSAllocationWillExpireCode;
-    }
-
-    public void setAliyunSMSAllocationWillExpireCode(String aliyunSMSAllocationWillExpireCode) {
-        this.aliyunSMSAllocationWillExpireCode = aliyunSMSAllocationWillExpireCode;
-    }
-
-    public String getAliyunSMSAllocationOverdueCode() {
-        return aliyunSMSAllocationOverdueCode;
-    }
-
-    public void setAliyunSMSAllocationOverdueCode(String aliyunSMSAllocationOverdueCode) {
-        this.aliyunSMSAllocationOverdueCode = aliyunSMSAllocationOverdueCode;
-    }
-
-    public String getAliyunSMSAuditCreatedCode() {
-        return aliyunSMSAuditCreatedCode;
-    }
-
-    public void setAliyunSMSAuditCreatedCode(String aliyunSMSAuditCreatedCode) {
-        this.aliyunSMSAuditCreatedCode = aliyunSMSAuditCreatedCode;
-    }
-
-    public String getAliyunSMSAuditReviewCode() {
-        return aliyunSMSAuditReviewCode;
-    }
-
-    public void setAliyunSMSAuditReviewCode(String aliyunSMSAuditReviewCode) {
-        this.aliyunSMSAuditReviewCode = aliyunSMSAuditReviewCode;
-    }
-
-    public String getAliyunSMSAuditWillExpireCode() {
-        return aliyunSMSAuditWillExpireCode;
-    }
-
-    public void setAliyunSMSAuditWillExpireCode(String aliyunSMSAuditWillExpireCode) {
-        this.aliyunSMSAuditWillExpireCode = aliyunSMSAuditWillExpireCode;
-    }
-
-    public String getAliyunSMSAuditOverdueCode() {
-        return aliyunSMSAuditOverdueCode;
-    }
-
-    public void setAliyunSMSAuditOverdueCode(String aliyunSMSAuditOverdueCode) {
-        this.aliyunSMSAuditOverdueCode = aliyunSMSAuditOverdueCode;
-    }
-
-    public String getAliyunSMSAuditRejectCode() {
-        return aliyunSMSAuditRejectCode;
-    }
-
-    public void setAliyunSMSAuditRejectCode(String aliyunSMSAuditRejectCode) {
-        this.aliyunSMSAuditRejectCode = aliyunSMSAuditRejectCode;
-    }
-
-    public String getAliyunSMSUploadStructureCode() {
-        return aliyunSMSUploadStructureCode;
-    }
-
-    public void setAliyunSMSUploadStructureCode(String aliyunSMSUploadStructureCode) {
-        this.aliyunSMSUploadStructureCode = aliyunSMSUploadStructureCode;
-    }
-
-    public String getAliyunSMSAuditCopyUserCode() {
-        return aliyunSMSAuditCopyUserCode;
+    public String getTeachDataChangeNoticeCode() {
+        return teachDataChangeNoticeCode;
     }
     }
 
 
-    public void setAliyunSMSAuditCopyUserCode(String aliyunSMSAuditCopyUserCode) {
-        this.aliyunSMSAuditCopyUserCode = aliyunSMSAuditCopyUserCode;
+    public void setTeachDataChangeNoticeCode(String teachDataChangeNoticeCode) {
+        this.teachDataChangeNoticeCode = teachDataChangeNoticeCode;
     }
     }
 }
 }

+ 4 - 49
src/main/java/com/qmth/eds/entity/BasicMessage.java

@@ -1,22 +1,22 @@
 package com.qmth.eds.entity;
 package com.qmth.eds.entity;
 
 
-import java.io.Serializable;
-
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.eds.base.BaseEntity;
 import com.qmth.eds.base.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
+import java.io.Serializable;
+
 /**
 /**
  * <p>
  * <p>
- * 
+ *
  * </p>
  * </p>
  *
  *
  * @author wangliang
  * @author wangliang
  * @since 2022-05-14
  * @since 2022-05-14
  */
  */
-@ApiModel(value="BasicMessage对象", description="")
+@ApiModel(value = "BasicMessage对象", description = "")
 public class BasicMessage extends BaseEntity implements Serializable {
 public class BasicMessage extends BaseEntity implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
@@ -25,10 +25,6 @@ public class BasicMessage extends BaseEntity implements Serializable {
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     private Long schoolId;
     private Long schoolId;
 
 
-    @ApiModelProperty(value = "机构id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long orgId;
-
     @ApiModelProperty(value = "消息接收人用户")
     @ApiModelProperty(value = "消息接收人用户")
     @JsonSerialize(using = ToStringSerializer.class)
     @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
     private Long userId;
@@ -39,12 +35,6 @@ public class BasicMessage extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "电话号码")
     @ApiModelProperty(value = "电话号码")
     private String mobileNumber;
     private String mobileNumber;
 
 
-    @ApiModelProperty(value = "试卷编号")
-    private String paperNumber;
-
-    @ApiModelProperty(value = "课程代码")
-    private String courseCode;
-
     @ApiModelProperty(value = "消息类型")
     @ApiModelProperty(value = "消息类型")
     private String messageType;
     private String messageType;
 
 
@@ -73,9 +63,6 @@ public class BasicMessage extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "备注")
     @ApiModelProperty(value = "备注")
     private String remark;
     private String remark;
 
 
-    @ApiModelProperty(value = "重试次数")
-    private Integer resendCount;
-
     public Long getSchoolId() {
     public Long getSchoolId() {
         return schoolId;
         return schoolId;
     }
     }
@@ -84,14 +71,6 @@ public class BasicMessage extends BaseEntity implements Serializable {
         this.schoolId = schoolId;
         this.schoolId = schoolId;
     }
     }
 
 
-    public Long getOrgId() {
-        return orgId;
-    }
-
-    public void setOrgId(Long orgId) {
-        this.orgId = orgId;
-    }
-
     public Long getUserId() {
     public Long getUserId() {
         return userId;
         return userId;
     }
     }
@@ -116,22 +95,6 @@ public class BasicMessage extends BaseEntity implements Serializable {
         this.mobileNumber = mobileNumber;
         this.mobileNumber = mobileNumber;
     }
     }
 
 
-    public String getPaperNumber() {
-        return paperNumber;
-    }
-
-    public void setPaperNumber(String paperNumber) {
-        this.paperNumber = paperNumber;
-    }
-
-    public String getCourseCode() {
-        return courseCode;
-    }
-
-    public void setCourseCode(String courseCode) {
-        this.courseCode = courseCode;
-    }
-
     public String getMessageType() {
     public String getMessageType() {
         return messageType;
         return messageType;
     }
     }
@@ -203,12 +166,4 @@ public class BasicMessage extends BaseEntity implements Serializable {
     public void setRemark(String remark) {
     public void setRemark(String remark) {
         this.remark = remark;
         this.remark = remark;
     }
     }
-
-    public Integer getResendCount() {
-        return resendCount;
-    }
-
-    public void setResendCount(Integer resendCount) {
-        this.resendCount = resendCount;
-    }
 }
 }

+ 3 - 38
src/main/java/com/qmth/eds/enums/MessageEnum.java

@@ -4,49 +4,14 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * @Description: 发送消息枚举类
- * @Author: CaoZixuan
- * @Date: 2021-04-28
+ * 发送消息枚举类
  */
  */
 public enum MessageEnum {
 public enum MessageEnum {
 
 
     /**
     /**
-     * 审核结果通知(考务老师审核触发,业务id为命题任务id,短信发送给命题老师 examTask.getUserId())
+     * 数据变动通知
      */
      */
-    NOTICE_OF_AUDIT_PASS("审核通过通知", "${userName}您好,${courseName}课程、${paperNumber}试卷入库申请已通过,您可在卷库里进行查看已审核通过的试卷!"),
-    NOTICE_OF_AUDIT_NOT_PASS("审核不通过通知", "${userName}您好,${courseName}课程、${paperNumber}试卷入库申请未通过,您可查看审核意见后重新提交入库申请!"),
-
-    /**
-     * 命题任务待办提醒
-     */
-    NOTICE_OF_EXAM_TASK_CREATED("命题任务待办生成通知","${userName}您好,您有${count}条新命题待办生成,请您处理!"),
-    // 定时任务查询触发,业务id为命题老师id,短信发送给命题老师
-    NOTICE_OF_EXAM_TASK_WILL_EXPIRE("命题任务待办到期预警通知","${userName}您好,您还有${count}条命题待办即将逾期,请您尽快处理!"),
-    NOTICE_OF_EXAM_TASK_OVERDUE("命题任务待办逾期通知","${userName}您好,您今日新增${count}条命题待办逾期,请您尽快处理!"),
-
-    /**
-     * 命题分配待办提醒(定时任务查询触发,业务id为考务老师id,短信发送给考务老师)
-     */
-    NOTICE_OF_ALLOCATION_WILL_EXPIRE("命题分配待办到期预警通知","${userName}您好,您还有${count}条命题任务尚未分配命题老师,任务即将逾期,请您尽快处理!"),
-    NOTICE_OF_ALLOCATION_OVERDUE("命题分配待办逾期通知","${userName}您好,您今日新增${count}条命题分配待办逾期,请您尽快处理!"),
-
-    /**
-     * 审核待办提醒
-     */
-    // 命题任务被命题老师提交后触发,业务id为命题任务id,短信发送给考务老师 examTask.getCreateId()
-    NOTICE_OF_AUDIT_CREATED("审核待办生成通知","${userName}您好,${courseName}试卷已提交入库,请您尽快审核!"),
-    NOTICE_OF_AUDIT_REVIEW("审核待办修改申请通知","${userName}您好,${courseName}试卷重新提交修改申请,请您尽快审核!"),
-    // 定时任务查询触发,业务id为考务老师id,短信发送给考务老师
-    NOTICE_OF_AUDIT_WILL_EXPIRE("审核待办到期预警通知","${userName}您好,您还有${count}条审核待办即将逾期,请您尽快处理!"),
-    NOTICE_OF_AUDIT_OVERDUE("审核待办逾期通知","${userName}您好,您有${count}条审核待办已逾期!"),
-
-    NOTICE_OF_AUDIT_REJECT("审核驳回生成通知","${userName}您好,${courseName}试卷审核未通过,请您尽快处理!"),
-    NOTICE_OF_UPLOAD_STRUCTURE("试卷结构标答上传通知","${userName}您好,${courseName}试卷印刷任务已经完成,请上传试卷结构及标答生成阅卷任务,请您尽快处理!"),
-
-    /**
-     * 审核抄送
-     */
-    NOTICE_OF_AUDIT_COPY_USER("审核抄送生成通知","${userName}您好,${courseName}相关命题任务已经提交,由${auditUserNames}负责审核,请您查看!");
+    NOTICE_OF_TEACH_DATA_CHANGE("考务数据变动通知", "${userName}您好,${courseName}相关命题任务已经提交,由${auditUserNames}负责审核,请您查看!");
 
 
     MessageEnum(String name, String template) {
     MessageEnum(String name, String template) {
         this.name = name;
         this.name = name;

+ 6 - 0
src/main/java/com/qmth/eds/mapper/ExamSyncTotalMapper.java

@@ -1,10 +1,16 @@
 package com.qmth.eds.mapper;
 package com.qmth.eds.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto;
 import com.qmth.eds.entity.ExamSyncTotal;
 import com.qmth.eds.entity.ExamSyncTotal;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 /**
 /**
  * 考务数据同步记录表 Mapper 接口
  * 考务数据同步记录表 Mapper 接口
  */
  */
 public interface ExamSyncTotalMapper extends BaseMapper<ExamSyncTotal> {
 public interface ExamSyncTotalMapper extends BaseMapper<ExamSyncTotal> {
+
+    List<ExamSyncTotalDownloadDto> listDownloadRecordInfos(@Param("schoolId") Long schoolId, @Param("semesterId") Long semesterId, @Param("examTypeId") Long examTypeId);
 }
 }

+ 1 - 1
src/main/java/com/qmth/eds/mapper/SysUserMapper.java

@@ -1,7 +1,7 @@
 package com.qmth.eds.mapper;
 package com.qmth.eds.mapper;
 
 
-import com.qmth.eds.entity.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.eds.entity.SysUser;
 
 
 /**
 /**
  * <p>
  * <p>

+ 2 - 0
src/main/java/com/qmth/eds/service/BasicMessageService.java

@@ -13,4 +13,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
  */
 public interface BasicMessageService extends IService<BasicMessage> {
 public interface BasicMessageService extends IService<BasicMessage> {
 
 
+
+    void sendTeachDataChangeNotice(Long schoolId, Long semesterId, Long examTypeId);
 }
 }

+ 4 - 0
src/main/java/com/qmth/eds/service/ExamSyncTotalService.java

@@ -2,9 +2,11 @@ package com.qmth.eds.service;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto;
 import com.qmth.eds.entity.ExamSyncTotal;
 import com.qmth.eds.entity.ExamSyncTotal;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 
 /**
 /**
  * 考务数据同步记录 服务类
  * 考务数据同步记录 服务类
@@ -16,4 +18,6 @@ public interface ExamSyncTotalService extends IService<ExamSyncTotal> {
     void download(Long id, Boolean writeLog, HttpServletResponse response);
     void download(Long id, Boolean writeLog, HttpServletResponse response);
 
 
     void updateDownloadStatusBySchoolIdAndSemesterIdAndExamTypeId(Long schoolId, Long semesterId, Long examTypeId);
     void updateDownloadStatusBySchoolIdAndSemesterIdAndExamTypeId(Long schoolId, Long semesterId, Long examTypeId);
+
+    List<ExamSyncTotalDownloadDto> listDownloadRecordInfos(Long schoolId, Long semesterId, Long examTypeId);
 }
 }

+ 93 - 2
src/main/java/com/qmth/eds/service/impl/BasicMessageServiceImpl.java

@@ -1,14 +1,26 @@
 package com.qmth.eds.service.impl;
 package com.qmth.eds.service.impl;
 
 
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto;
+import com.qmth.eds.contant.SystemConstant;
 import com.qmth.eds.entity.BasicMessage;
 import com.qmth.eds.entity.BasicMessage;
+import com.qmth.eds.enums.ExceptionResultEnum;
+import com.qmth.eds.enums.MessageEnum;
 import com.qmth.eds.mapper.BasicMessageMapper;
 import com.qmth.eds.mapper.BasicMessageMapper;
 import com.qmth.eds.service.BasicMessageService;
 import com.qmth.eds.service.BasicMessageService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.eds.service.ExamSyncTotalService;
+import com.qmth.eds.util.SmsUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
 /**
 /**
  * <p>
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  * </p>
  *
  *
  * @author wangliang
  * @author wangliang
@@ -17,4 +29,83 @@ import org.springframework.stereotype.Service;
 @Service
 @Service
 public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, BasicMessage> implements BasicMessageService {
 public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, BasicMessage> implements BasicMessageService {
 
 
+    @Resource
+    private ExamSyncTotalService examSyncTotalService;
+
+    @Resource
+    private SmsUtils smsUtils;
+
+    @Override
+    public void sendTeachDataChangeNotice(Long schoolId, Long semesterId, Long examTypeId) {
+        List<ExamSyncTotalDownloadDto> examSyncTotalDownloadDtos = examSyncTotalService.listDownloadRecordInfos(schoolId, semesterId, examTypeId);
+        if (!examSyncTotalDownloadDtos.isEmpty()) {
+            for (ExamSyncTotalDownloadDto examSyncTotalDownloadDto : examSyncTotalDownloadDtos) {
+                // todo 参数拼接
+                String variableParams = "{}";
+                String remark = "下载的文件有变动,请重新下载";
+                saveMessageSendLog(schoolId, examSyncTotalDownloadDto.getUserId(), examSyncTotalDownloadDto.getUserName(), examSyncTotalDownloadDto.getMobileNumber(), variableParams, MessageEnum.NOTICE_OF_TEACH_DATA_CHANGE, examSyncTotalDownloadDto.getId(), remark);
+            }
+        }
+    }
+
+
+    /**
+     * 保存短信发送日志
+     *
+     * @param schoolId       学校
+     * @param userId         用户ID
+     * @param userName       用户名
+     * @param mobileNumber   手机号(接收短信)
+     * @param variableParams 短信参数
+     * @param messageType    日志类型
+     * @param businessId     涉及数据ID
+     * @param remark         备注
+     */
+    public void saveMessageSendLog(Long schoolId, Long userId, String userName, String mobileNumber, String variableParams, MessageEnum messageType, Long businessId, String remark) {
+        BasicMessage basicMessage = new BasicMessage();
+        String templateCode = null;
+        try {
+            String templateCodeParam = "templateCode";
+            // code和content
+            Map<String, String> stringMap = smsUtils.getCodeAndContentByEnum(messageType);
+            if (!stringMap.containsKey(templateCodeParam) || StringUtils.isBlank(stringMap.get(templateCodeParam))) {
+                throw ExceptionResultEnum.ERROR.exception("未配置短信模板Code");
+            }
+            templateCode = stringMap.get(templateCodeParam);
+
+            // 参数校验
+            if (StringUtils.isBlank(userName)) {
+                throw ExceptionResultEnum.ERROR.exception("用户名称必填");
+            }
+            if (StringUtils.isBlank(mobileNumber)) {
+                throw ExceptionResultEnum.ERROR.exception("用户手机号必填");
+            }
+
+            // 调用阿里云短信平台发送短信
+            SendSmsResponse sendSmsResponse = smsUtils.sendSms(mobileNumber, templateCode, variableParams);
+            if (sendSmsResponse == null) {
+                throw ExceptionResultEnum.ERROR.exception("阿里云短信发送接口调用失败");
+            }
+            basicMessage.setSendStatus(sendSmsResponse.getCode());
+            basicMessage.setSendResult(sendSmsResponse.getMessage());
+
+        } catch (Exception e) {
+            basicMessage.setSendStatus("SYSTEM_ERROR");
+            basicMessage.setSendResult(e.getMessage());
+        } finally {
+            basicMessage.setId(SystemConstant.getDbUuid());
+            basicMessage.setSchoolId(schoolId);
+            basicMessage.setUserId(userId);
+            basicMessage.setUserName(userName);
+            basicMessage.setMobileNumber(mobileNumber);
+            basicMessage.setTemplateCode(templateCode);
+            basicMessage.setVariableParams(variableParams);
+            basicMessage.setMessageType(messageType.name());
+            basicMessage.setBusinessOperate(messageType.getName());
+            basicMessage.setBusinessId(businessId);
+            basicMessage.setRemark(remark);
+            basicMessage.setCreateTime(System.currentTimeMillis());
+            this.save(basicMessage);
+        }
+    }
 }
 }

+ 6 - 0
src/main/java/com/qmth/eds/service/impl/DataSyncServiceImpl.java

@@ -54,6 +54,9 @@ public class DataSyncServiceImpl implements DataSyncService {
     @Resource
     @Resource
     private ExamSyncTotalService examSyncTotalService;
     private ExamSyncTotalService examSyncTotalService;
 
 
+    @Resource
+    private BasicMessageService basicMessageService;
+
 
 
     @Async
     @Async
     @Override
     @Override
@@ -134,6 +137,9 @@ public class DataSyncServiceImpl implements DataSyncService {
                 examSyncTotal.setFileName(excelFile.getName());
                 examSyncTotal.setFileName(excelFile.getName());
                 examSyncTotal.setFilePath(excelFile.getPath());
                 examSyncTotal.setFilePath(excelFile.getPath());
                 examSyncTotalService.updateById(examSyncTotal);
                 examSyncTotalService.updateById(examSyncTotal);
+
+                // 下载过学校+学期+考试类型  文件的实施人员发送短信
+//                basicMessageService.sendTeachDataChangeNotice(schoolId, semesterId, examTypeId);
             }
             }
             result = TaskResultEnum.SUCCESS;
             result = TaskResultEnum.SUCCESS;
         } catch (ApiException | IOException e) {
         } catch (ApiException | IOException e) {

+ 7 - 0
src/main/java/com/qmth/eds/service/impl/ExamSyncTotalServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto;
 import com.qmth.eds.contant.SystemConstant;
 import com.qmth.eds.contant.SystemConstant;
 import com.qmth.eds.entity.ExamDownloadRecord;
 import com.qmth.eds.entity.ExamDownloadRecord;
 import com.qmth.eds.entity.ExamSyncTotal;
 import com.qmth.eds.entity.ExamSyncTotal;
@@ -21,6 +22,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.File;
+import java.util.List;
 
 
 @Service
 @Service
 public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, ExamSyncTotal> implements ExamSyncTotalService {
 public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, ExamSyncTotal> implements ExamSyncTotalService {
@@ -82,4 +84,9 @@ public class ExamSyncTotalServiceImpl extends ServiceImpl<ExamSyncTotalMapper, E
                 .eq(ExamSyncTotal::getExamTypeId, examTypeId);
                 .eq(ExamSyncTotal::getExamTypeId, examTypeId);
         this.update(updateWrapper);
         this.update(updateWrapper);
     }
     }
+
+    @Override
+    public List<ExamSyncTotalDownloadDto> listDownloadRecordInfos(Long schoolId, Long semesterId, Long examTypeId) {
+        return this.baseMapper.listDownloadRecordInfos(schoolId, semesterId, examTypeId);
+    }
 }
 }

+ 9 - 66
src/main/java/com/qmth/eds/util/SmsUtils.java

@@ -8,8 +8,8 @@ import com.aliyuncs.exceptions.ClientException;
 import com.aliyuncs.http.MethodType;
 import com.aliyuncs.http.MethodType;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
 import com.aliyuncs.profile.IClientProfile;
-import com.qmth.eds.enums.MessageEnum;
 import com.qmth.eds.config.DictionaryConfig;
 import com.qmth.eds.config.DictionaryConfig;
+import com.qmth.eds.enums.MessageEnum;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -17,7 +17,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
- * @Date: 2021/11/5.
+ * 短信发送公共方法
  */
  */
 @Component
 @Component
 public class SmsUtils {
 public class SmsUtils {
@@ -28,11 +28,9 @@ public class SmsUtils {
     /**
     /**
      * 发送短信
      * 发送短信
      *
      *
-     * @param mobileNumber
-     * @param templateCode
-     * @param variableParams
-     * @return
-     * @throws ClientException
+     * @param mobileNumber   手机号
+     * @param templateCode   短信模板Code
+     * @param variableParams 参数值
      */
      */
     public SendSmsResponse sendSms(String mobileNumber, String templateCode, String variableParams) throws ClientException {
     public SendSmsResponse sendSms(String mobileNumber, String templateCode, String variableParams) throws ClientException {
         System.setProperty("sun.net.client.defaultConnectTimeout", "180000");
         System.setProperty("sun.net.client.defaultConnectTimeout", "180000");
@@ -66,71 +64,16 @@ public class SmsUtils {
 //             request.setOutId("yourOutId");
 //             request.setOutId("yourOutId");
         // 请求失败这里会抛ClientException异常
         // 请求失败这里会抛ClientException异常
 
 
-        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
-        return sendSmsResponse;
+        return acsClient.getAcsResponse(request);
     }
     }
 
 
     public Map<String, String> getCodeAndContentByEnum(MessageEnum messageEnum) {
     public Map<String, String> getCodeAndContentByEnum(MessageEnum messageEnum) {
         Map<String, String> result = new HashMap<>();
         Map<String, String> result = new HashMap<>();
         String templateContent = null;
         String templateContent = null;
         String templateCode = null;
         String templateCode = null;
-        switch (messageEnum) {
-            case NOTICE_OF_AUDIT_PASS:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditPassCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_NOT_PASS:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditNotPassCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_EXAM_TASK_CREATED:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSExamTaskCreatedCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_EXAM_TASK_WILL_EXPIRE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSExamTaskWillExpireCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_EXAM_TASK_OVERDUE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSExamTaskOverdueCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_ALLOCATION_WILL_EXPIRE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAllocationWillExpireCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_ALLOCATION_OVERDUE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAllocationOverdueCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_CREATED:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditCreatedCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_REVIEW:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditReviewCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_WILL_EXPIRE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditWillExpireCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_OVERDUE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditOverdueCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_REJECT:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditRejectCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_UPLOAD_STRUCTURE:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSUploadStructureCode();
-                templateContent = messageEnum.getTemplate();
-                break;
-            case NOTICE_OF_AUDIT_COPY_USER:
-                templateCode = dictionaryConfig.smsDomain().getAliyunSMSAuditCopyUserCode();
-                templateContent = messageEnum.getTemplate();
-                break;
+        if (messageEnum.equals(MessageEnum.NOTICE_OF_TEACH_DATA_CHANGE)) {
+            templateCode = dictionaryConfig.smsDomain().getTeachDataChangeNoticeCode();
+            templateContent = messageEnum.getTemplate();
         }
         }
         result.put("templateContent", templateContent);
         result.put("templateContent", templateContent);
         result.put("templateCode", templateCode);
         result.put("templateCode", templateCode);

+ 7 - 0
src/main/resources/application-36dev.properties

@@ -111,6 +111,13 @@ spring.quartz.properties.org.quartz.threadPool.threadCount=10
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 
 
+sms.config.normalCode=kwsj
+sms.config.expiredTime=2
+sms.config.sendInterval=60
+sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
+sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
+sms.config.teachDataChangeNoticeCode=SMS_147416565
 
 
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=

+ 7 - 0
src/main/resources/application-dev.properties

@@ -111,6 +111,13 @@ spring.quartz.properties.org.quartz.threadPool.threadCount=10
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 
 
+sms.config.normalCode=kwsj
+sms.config.expiredTime=2
+sms.config.sendInterval=60
+sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
+sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
+sms.config.teachDataChangeNoticeCode=SMS_147416565
 
 
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=

+ 7 - 0
src/main/resources/application-release.properties

@@ -111,6 +111,13 @@ spring.quartz.properties.org.quartz.threadPool.threadCount=10
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 
 
+sms.config.normalCode=kwsj
+sms.config.expiredTime=2
+sms.config.sendInterval=60
+sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
+sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
+sms.config.teachDataChangeNoticeCode=SMS_147416565
 
 
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=

+ 7 - 0
src/main/resources/application-test.properties

@@ -111,6 +111,13 @@ spring.quartz.properties.org.quartz.threadPool.threadCount=10
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 # \u8BBE\u7F6E\u7EBF\u7A0B\u7684\u4F18\u5148\u7EA7(\u53EF\u4EE5\u662FThread.MIN_PRIORITY\uFF08\u53731\uFF09\u548CThread.MAX_PRIORITY\uFF08\u8FD9\u662F10\uFF09\u4E4B\u95F4\u7684\u4EFB\u4F55int \u3002\u9ED8\u8BA4\u503C\u4E3AThread.NORM_PRIORITY\uFF085\uFF09\u3002)
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 spring.quartz.properties.org.quartz.threadPool.threadPriority=5
 
 
+sms.config.normalCode=kwsj
+sms.config.expiredTime=2
+sms.config.sendInterval=60
+sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
+sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
+sms.config.teachDataChangeNoticeCode=SMS_147416565
 
 
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appKey=DD1198B44CD624B6E0530107010AF5DF
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=
 whu.config.appSecret=MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAojkSbVqi/6v7hNdHZIPU4EKLyyxO7akNAIXilJ0+c0sYHV4Z6vctSrds4LIPp3fXUuMA9F7d1vp6s7HOQfuIfwIDAQABAkBiCowQew635oEEL/d90A7/2jgSepzZFao9/qyJlN8BXg8M6zwBFiEB51GbW0642bWTftFT0Arrq6ipYkXTyH7BAiEA8oMCG7HqUYXX4bt6h9Bz8LIwI4oFx3x90RpK+b0iPmMCIQCrPuAZB90EJtr4fOE3+lQBORoKVOF/cwFQX14mBXRKNQIhAKLeVVYgQMwLZZcWgA4icxsdsLLNiWAWPbFnRR9AZHUdAiA5tGJHjQLJF17KRSqPdmdAUkGYIaorDFHxB3HuVgAt0QIgIMcILJ3lJx6URAEG9e055KXh8J+nXItScHZ4bXMWls4=

+ 0 - 5
src/main/resources/db/eds-v1.0.0.sql

@@ -45,18 +45,14 @@ DROP TABLE IF EXISTS `basic_message`;
 CREATE TABLE `basic_message`  (
 CREATE TABLE `basic_message`  (
   `id` bigint(20) NOT NULL COMMENT '主键',
   `id` bigint(20) NOT NULL COMMENT '主键',
   `school_id` bigint(20) NULL DEFAULT NULL COMMENT '学校id',
   `school_id` bigint(20) NULL DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint(20) NULL DEFAULT NULL COMMENT '机构id',
   `user_id` bigint(20) NOT NULL COMMENT '消息接收人用户',
   `user_id` bigint(20) NOT NULL COMMENT '消息接收人用户',
   `user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
   `user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
   `mobile_number` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话号码',
   `mobile_number` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话号码',
-  `paper_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '试卷编号',
-  `course_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程代码',
   `message_type` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息类型',
   `message_type` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息类型',
   `business_operate` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '业务操作',
   `business_operate` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '业务操作',
   `business_id` bigint(20) NULL DEFAULT NULL COMMENT '业务id',
   `business_id` bigint(20) NULL DEFAULT NULL COMMENT '业务id',
   `template_code` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息模板代码',
   `template_code` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '消息模板代码',
   `variable_params` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '变量参数内容',
   `variable_params` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '变量参数内容',
-  `template_content` mediumtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '模板内容',
   `send_status` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息发送状态',
   `send_status` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息发送状态',
   `send_result` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息发送结果',
   `send_result` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息发送结果',
   `remark` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '备注',
   `remark` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '备注',
@@ -64,7 +60,6 @@ CREATE TABLE `basic_message`  (
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
   `create_time` bigint(20) NULL DEFAULT NULL COMMENT '创建时间',
   `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
   `update_id` bigint(20) NULL DEFAULT NULL COMMENT '更新人',
   `update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间',
   `update_time` bigint(20) NULL DEFAULT NULL COMMENT '更新时间',
-  `resend_count` int(11) NULL DEFAULT NULL COMMENT '重试次数',
   PRIMARY KEY (`id`) USING BTREE
   PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
 
 

+ 21 - 0
src/main/resources/mapper/ExamSyncTotalMapper.xml

@@ -1,4 +1,25 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.qmth.eds.mapper.ExamSyncTotalMapper">
 <mapper namespace="com.qmth.eds.mapper.ExamSyncTotalMapper">
+    <select id="listDownloadRecordInfos" resultType="com.qmth.eds.bean.dto.ExamSyncTotalDownloadDto">
+        SELECT est.id,
+               est.school_id      schoolId,
+               est.school_name    schoolName,
+               est.semester_id    semesterId,
+               est.semester_name  semesterName,
+               est.exam_type_id   examTypeId,
+               est.exam_type_name examTypeName,
+               est.file_name      fileName,
+               su.id              userId,
+               su.real_name       userName,
+               su.mobile_number   mobileNumber
+        FROM sys_user su
+                 JOIN
+             exam_download_record edr ON su.id = edr.user_id
+                 JOIN
+             exam_sync_total est ON edr.sync_total_id = est.id
+        WHERE est.school_id = #{schoolId}
+          AND est.semester_id = #{semesterId}
+          AND est.exam_type_id = #{examTypeId}
+    </select>
 </mapper>
 </mapper>