Преглед на файлове

Merge branch 'dev' into release
update

wangliang преди 4 години
родител
ревизия
f673dcea09
променени са 43 файла, в които са добавени 584 реда и са изтрити 127 реда
  1. 163 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicMessage.java
  2. 35 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MessageEnum.java
  3. 12 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicMessageMapper.java
  4. 4 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java
  5. 24 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicMessageService.java
  6. 4 2
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java
  7. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java
  8. 3 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java
  9. 0 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicCardRuleServiceImpl.java
  10. 137 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicMessageServiceImpl.java
  11. 0 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java
  12. 8 9
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CommonServiceImpl.java
  13. 10 10
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  14. 13 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java
  15. 28 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java
  16. 39 32
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java
  17. 1 1
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java
  18. 33 1
      distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml
  19. 6 6
      distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml
  20. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicAttachmentController.java
  21. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCardRuleController.java
  22. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java
  23. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamRuleController.java
  24. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSchoolController.java
  25. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java
  26. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java
  27. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java
  28. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java
  29. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java
  30. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java
  31. 5 6
      distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java
  32. 2 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysConfigController.java
  33. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  34. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java
  35. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysPrivilegeController.java
  36. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleController.java
  37. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java
  38. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskController.java
  39. 0 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java
  40. 4 4
      distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java
  41. 11 14
      distributed-print/src/main/resources/application.properties
  42. 23 6
      distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java
  43. 16 0
      pom.xml

+ 163 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/BasicMessage.java

@@ -0,0 +1,163 @@
+package com.qmth.distributed.print.business.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.distributed.print.business.base.BaseEntity;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 短信消息表
+ * @Author: CaoZixuan
+ * @Date: 2021-04-28
+ */
+@TableName("basic_message")
+public class BasicMessage extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 手机号
+     */
+    @TableField("mobile_number")
+    private String mobileNumber;
+
+    /**
+     * 业务id
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    @TableField("business_id")
+    private Long businessId;
+
+    /**
+     * 业务操作
+     */
+    @TableField("business_operate")
+    private String businessOperate;
+
+    /**
+     * 消息模板代码
+     */
+    @TableField("template_code")
+    private String templateCode;
+
+    /**
+     * 变量参数内容
+     */
+    @TableField("variable_params")
+    private String variableParams;
+
+    /**
+     * 模板内容
+     */
+    @TableField("template_content")
+    private String templateContent;
+
+    /**
+     * 消息类型
+     */
+    @TableField("message_type")
+    private MessageEnum messageType;
+
+    /**
+     * 消息发送状态
+     */
+    @TableField("send_status")
+    private String sendStatus;
+
+    /**
+     * 消息发送结果
+     */
+    @TableField("send_result")
+    private String sendResult;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public Long getBusinessId() {
+        return businessId;
+    }
+
+    public void setBusinessId(Long businessId) {
+        this.businessId = businessId;
+    }
+
+    public String getBusinessOperate() {
+        return businessOperate;
+    }
+
+    public void setBusinessOperate(String businessOperate) {
+        this.businessOperate = businessOperate;
+    }
+
+    public String getTemplateCode() {
+        return templateCode;
+    }
+
+    public void setTemplateCode(String templateCode) {
+        this.templateCode = templateCode;
+    }
+
+    public String getVariableParams() {
+        return variableParams;
+    }
+
+    public void setVariableParams(String variableParams) {
+        this.variableParams = variableParams;
+    }
+
+    public String getTemplateContent() {
+        return templateContent;
+    }
+
+    public void setTemplateContent(String templateContent) {
+        this.templateContent = templateContent;
+    }
+
+    public MessageEnum getMessageType() {
+        return messageType;
+    }
+
+    public void setMessageType(MessageEnum messageType) {
+        this.messageType = messageType;
+    }
+
+    public String getSendStatus() {
+        return sendStatus;
+    }
+
+    public void setSendStatus(String sendStatus) {
+        this.sendStatus = sendStatus;
+    }
+
+    public String getSendResult() {
+        return sendResult;
+    }
+
+    public void setSendResult(String sendResult) {
+        this.sendResult = sendResult;
+    }
+}

+ 35 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/enums/MessageEnum.java

@@ -0,0 +1,35 @@
+package com.qmth.distributed.print.business.enums;
+
+/**
+ * @Description: 发送消息枚举类
+ * @Author: CaoZixuan
+ * @Date: 2021-04-28
+ */
+public enum MessageEnum {
+
+    NOTICE_OF_AUDIT_PASS("审核通过通知","SMS_1474165652","【审核通过】XX您好,【XXXX】(课程)、【XXXX】(试卷编号)试卷入库申请已通过,您可在卷库里进行查看已审核通过的试卷!"),
+    NOTICE_OF_AUDIT_NOT_PASS("审核不通过通知","SMS_147416565","【审核不通过】XX您好,【XXXX】(课程)、【XXXX】(试卷编号)试卷入库申请未通过,您可查看审核意见后重新提交入库申请!"),
+    ;
+
+    MessageEnum(String name, String templateCode, String templateContent) {
+        this.name = name;
+        this.templateCode = templateCode;
+        this.templateContent = templateContent;
+    }
+
+    private final String name;
+    private final String templateCode;
+    private final String templateContent;
+
+    public String getName() {
+        return name;
+    }
+
+    public String getTemplateCode() {
+        return templateCode;
+    }
+
+    public String getTemplateContent() {
+        return templateContent;
+    }
+}

+ 12 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/BasicMessageMapper.java

@@ -0,0 +1,12 @@
+package com.qmth.distributed.print.business.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.distributed.print.business.entity.BasicMessage;
+
+/**
+ * @Description: 短信消息发送接口
+ * @Author: CaoZixuan
+ * @Date: 2021-04-28
+ */
+public interface BasicMessageMapper extends BaseMapper<BasicMessage> {
+}

+ 4 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/ExamDetailCourseMapper.java

@@ -25,4 +25,8 @@ public interface ExamDetailCourseMapper extends BaseMapper<ExamDetailCourse> {
     List<BasicCourse> listCoursesByPrintPlanId(@Param("param") String param, @Param("printPlanId") Long printPlanId);
 
     List<String> listPaperNumberByPrintPlanId(@Param("param") String param, @Param("printPlanId") Long printPlanId);
+
+    List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId, @Param("printPlanId") Long printPlanId, @Param("courseCode") String courseCode, @Param("paperNumber") String paperNumber);
+
+    List<ExamDetailCourse> listByAndCourseCodeAndPaperNumber(@Param("schoolId") Long schoolId,@Param("courseCode") String courseCode,@Param("paperNumber") String paperNumber);
 }

+ 24 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicMessageService.java

@@ -0,0 +1,24 @@
+package com.qmth.distributed.print.business.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.distributed.print.business.entity.BasicMessage;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+
+/**
+ * @Description: 短信消息发送
+ * @Author: CaoZixuan
+ * @Date: 2021-04-28
+ */
+public interface BasicMessageService extends IService<BasicMessage> {
+
+    /**
+     * 保存消息发送日志(以下参数必传)
+     * @param userId 接收人id
+     * @param mobileNumber 接收人电话
+     * @param businessId 业务id
+     * @param variableParams 变量参数
+     * @param createId 发送人id
+     * @param messageType 消息类型
+     */
+    void saveMessageSendLog(Long userId, String mobileNumber, Long businessId, String variableParams, Long createId, MessageEnum messageType);
+}

+ 4 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailCourseService.java

@@ -26,8 +26,6 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
 
     List<Map<String, Object>> listByExamDetailId(Long examDetailId);
 
-    List<ExamDetailCourse> listDetailCourseByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
-
     void updatePaperNumber(List<ExamDetailCourse> examDetailCourses, String paperNumber, String relatePaperType);
 
     List<ExamDetailCourse> listByExamDetailIdAndStatus(Long examDetailId);
@@ -35,4 +33,8 @@ public interface ExamDetailCourseService extends IService<ExamDetailCourse> {
     List<BasicCourse> listCoursesByPrintPlanId(String param, Long printPlanId);
 
     List<String> listPaperNumberByPrintPlanId(String param, Long printPlanId);
+
+    List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
+
+    List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 }

+ 3 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamDetailService.java

@@ -161,7 +161,7 @@ public interface ExamDetailService extends IService<ExamDetail> {
 
 
 
-    List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
+    List<ExamDetail> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber);
 
 
     List<ExamDetail> listByExamPrintId(Long printPlanId);
@@ -178,4 +178,6 @@ public interface ExamDetailService extends IService<ExamDetail> {
     IPage<ClientExamStudentDto> listStudent(Long schoolId, Long examDetailId, String ticketNumber, String studentName, String courseCode, Integer pageNumber, Integer pageSize);
 
     List<Map> listStudentByExamDetailId(Long schoolId, Long examDetailId, String ticketNumber, String type);
+
+    List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber);
 }

+ 3 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/ExamTaskDetailService.java

@@ -20,7 +20,7 @@ import java.util.Map;
  */
 public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
 
-    boolean enable(ExamTaskDetail examTaskDetail);
+    boolean enable(ExamTaskDetail examTaskDetail) throws IOException;
 
     boolean updatePaper(RelatePaperParam paperParam) throws IOException;
 
@@ -37,4 +37,6 @@ public interface ExamTaskDetailService extends IService<ExamTaskDetail> {
     Map<String, String>  getUrl(Long schoolId, Long examTaskId);
 
     boolean paperUpdate(ExamTaskDetail examTaskDetail);
+
+    ExamTaskDetail getByExamTaskId(Long examTaskId);
 }

+ 0 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicCardRuleServiceImpl.java

@@ -89,7 +89,6 @@ public class BasicCardRuleServiceImpl extends ServiceImpl<BasicCardRuleMapper, B
             throw ExceptionResultEnum.ERROR.exception("题卡标题规则长度不能超过200字符");
         }
 
-        // todo 校验是否有必选字段已使用
         QueryWrapper<BasicCardRule> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicCardRule::getSchoolId, cardRule.getSchoolId()).eq(BasicCardRule::getName, cardRule.getName());
         BasicCardRule basicCardRule = this.getOne(queryWrapper);

+ 137 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicMessageServiceImpl.java

@@ -0,0 +1,137 @@
+package com.qmth.distributed.print.business.service.impl;
+
+import com.aliyuncs.DefaultAcsClient;
+import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.http.MethodType;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.config.DictionaryConfig;
+import com.qmth.distributed.print.business.entity.BasicMessage;
+import com.qmth.distributed.print.business.entity.BasicVerifyCode;
+import com.qmth.distributed.print.business.entity.SysConfig;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.distributed.print.business.mapper.BasicMessageMapper;
+import com.qmth.distributed.print.business.service.BasicMessageService;
+import com.qmth.distributed.print.business.service.SysConfigService;
+import com.qmth.distributed.print.common.contant.SystemConstant;
+import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * @Description: 短信消息发送
+ * @Author: CaoZixuan
+ * @Date: 2021-04-28
+ */
+@Service
+public class BasicMessageServiceImpl extends ServiceImpl<BasicMessageMapper, BasicMessage> implements BasicMessageService {
+    @Resource
+    private SysConfigService sysConfigService;
+    @Resource
+    private DictionaryConfig dictionaryConfig;
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveMessageSendLog(Long userId,String mobileNumber,Long businessId,String variableParams,Long createId,MessageEnum messageType) {
+        // 其他方法调用所传入的参数,必须校验有值
+        this.checkData(userId,mobileNumber,businessId,variableParams,createId,messageType);
+
+        // code和content
+        String templateCode = messageType.getTemplateCode();
+        String templateContent = messageType.getTemplateContent();
+
+
+        // 短信提示系统是否启用配置验证
+        SysConfig sysConfig = sysConfigService.getByKey("sys.message.enable");
+        if (sysConfig.getConfigValue() == null) {
+            throw ExceptionResultEnum.ERROR.exception("短信消息提示启用开关未设置");
+        }
+        if (sysConfig.getConfigValue().equals("false")) {
+            throw ExceptionResultEnum.ERROR.exception("短信消息提示已关闭");
+        }
+
+        try {
+            System.setProperty("sun.net.client.defaultConnectTimeout", "180000");
+            System.setProperty("sun.net.client.defaultReadTimeout", "18000");
+            // 初始化ascClient需要的几个参数
+            final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
+            final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
+            // 替换成你的AK
+            final String accessKeyId = dictionaryConfig.smsDomain().getAliyunSMSKey();// 你的accessKeyId,参考本文档步骤2
+            final String accessKeySecret = dictionaryConfig.smsDomain().getAliyunSMSSecret();// 你的accessKeySecret,参考本文档步骤2
+            // 初始化ascClient,暂时不支持多region(请勿修改)
+            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+            IAcsClient acsClient = new DefaultAcsClient(profile);
+            // 组装请求对象
+            SendSmsRequest request = new SendSmsRequest();
+            // 使用post提交
+            request.setMethod(MethodType.POST);
+            // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如“0085200000000”
+            request.setPhoneNumbers(mobileNumber);
+            // 必填:短信签名-可在短信控制台中找到
+            request.setSignName(dictionaryConfig.smsDomain().getAliyunSMSSignName());
+            // 必填:短信模板-可在短信控制台中找到
+            request.setTemplateCode(templateCode);
+            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
+            request.setTemplateParam(variableParams);
+            // 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
+            // request.setSmsUpExtendCode("90997");
+            // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+//             request.setOutId("yourOutId");
+            // 请求失败这里会抛ClientException异常
+
+            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
+
+            if (sendSmsResponse.getCode() != null) {
+                BasicMessage basicMessage = new BasicMessage();
+                // 传入的必填字段
+                basicMessage.setUserId(userId);
+                basicMessage.setMobileNumber(mobileNumber);
+                basicMessage.setBusinessId(businessId);
+                basicMessage.setVariableParams(variableParams);
+                basicMessage.setCreateId(createId);
+                basicMessage.setMessageType(messageType);
+
+                // 经过处理的新字段
+                basicMessage.setId(SystemConstant.getDbUuid());
+                basicMessage.setBusinessOperate(messageType.getName());
+                basicMessage.setCreateTime(System.currentTimeMillis());
+                basicMessage.setTemplateCode(templateCode);
+                basicMessage.setTemplateContent(templateContent);
+                basicMessage.setSendStatus(sendSmsResponse.getCode());
+                basicMessage.setSendResult(sendSmsResponse.getMessage());
+                this.save(basicMessage);
+            } else {
+                throw ExceptionResultEnum.ERROR.exception(sendSmsResponse.getMessage());
+            }
+        }catch (ClientException e){
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
+    private void checkData(Object ... objects){
+        for (Object object : objects) {
+            if (object instanceof String){
+                String param = String.valueOf(object);
+                if (param.length() == 0 || param.equals("null")){
+                    throw ExceptionResultEnum.ERROR.exception("调用发送短信方法时必传参数缺失");
+                }
+            }else if (object instanceof Long){
+                Long param = SystemConstant.convertIdToLong(String.valueOf(object));
+                if (param == null || param == 0){
+                    throw ExceptionResultEnum.ERROR.exception("调用发送短信方法时必传参数缺失");
+                }
+            }
+        }
+    }
+}

+ 0 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -71,7 +71,6 @@ public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, B
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         template.setSchoolId(schoolId);
-        // todo 校验是否有必选字段已使用
         QueryWrapper<BasicTemplate> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(BasicTemplate::getSchoolId, template.getSchoolId()).eq(BasicTemplate::getName, template.getName());
         BasicTemplate basicTemplate = this.getOne(queryWrapper);

+ 8 - 9
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/CommonServiceImpl.java

@@ -7,7 +7,6 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.qmth.boot.core.enums.Platform;
-import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.distributed.print.business.bean.auth.AuthBean;
 import com.qmth.distributed.print.business.bean.auth.ExpireTimeBean;
 import com.qmth.distributed.print.business.bean.dto.OrgDto;
@@ -21,7 +20,6 @@ import com.qmth.distributed.print.business.enums.*;
 import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.templete.execute.AsyncCreatePdfTempleteService;
 import com.qmth.distributed.print.business.util.*;
-import com.qmth.distributed.print.common.SignatureEntityTest;
 import com.qmth.distributed.print.common.contant.SpringContextHolder;
 import com.qmth.distributed.print.common.contant.SystemConstant;
 import com.qmth.distributed.print.common.enums.ExceptionResultEnum;
@@ -355,9 +353,9 @@ public class CommonServiceImpl implements CommonService {
     /**
      * 文件预览
      *
-     * @param path 附件路径
-     * @param type 保存类型:本地、OSS
-     * @param isExpire     url是否带过期时间
+     * @param path     附件路径
+     * @param type     保存类型:本地、OSS
+     * @param isExpire url是否带过期时间
      * @return
      */
     @Override
@@ -681,7 +679,7 @@ public class CommonServiceImpl implements CommonService {
         Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
         String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleType.toString().hashCode()), platform.name());
         //TODO 测试用
-        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
+//        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
         TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleType.toString(),
                 platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
@@ -689,7 +687,8 @@ public class CommonServiceImpl implements CommonService {
         tbSessionService.saveOrUpdate(tbSession);
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
 
-        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType);
+//        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType);
+        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleType);
         loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         return loginResult;
@@ -702,9 +701,9 @@ public class CommonServiceImpl implements CommonService {
         QueryWrapper<ExamTask> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamTask::getSchoolId, schoolId).eq(ExamTask::getPaperNumber, paperNumber);
         ExamTask examTask = examTaskService.getOne(queryWrapper);
-        if(examTask!= null){
+        if (examTask != null) {
             return createPaperNumber(schoolId);
-        } else{
+        } else {
             return paperNumber;
         }
     }

+ 10 - 10
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -38,16 +38,6 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
         return this.baseMapper.listByExamDetailId(examDetailId, ExamDetailStatusEnum.FINISH.name());
     }
 
-    @Override
-    public List<ExamDetailCourse> listDetailCourseByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
-        QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
-        examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getSchoolId, schoolId)
-                .eq(ExamDetailCourse::getCourseCode, courseCode)
-                .eq(ExamDetailCourse::getPaperNumber, paperNumber);
-        List<ExamDetailCourse> examDetailCourses = this.list(examDetailCourseQueryWrapper);
-        return examDetailCourses;
-    }
-
     @Override
     public void updatePaperNumber(List<ExamDetailCourse> examDetailCourses, String paperNumber, String relatePaperType) {
         List<Long> examDetailCourseIds = examDetailCourses.stream().map(m->m.getId()).collect(Collectors.toList());
@@ -72,4 +62,14 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     public List<String> listPaperNumberByPrintPlanId(String param, Long printPlanId) {
         return this.baseMapper.listPaperNumberByPrintPlanId(param, printPlanId);
     }
+
+    @Override
+    public List<ExamDetailCourse> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber) {
+        return this.baseMapper.listByPrintPlanIdAndCourseCodeAndPaperNumber(schoolId, printPlanId, courseCode, paperNumber);
+    }
+
+    @Override
+    public List<ExamDetailCourse> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
+        return this.baseMapper.listByAndCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+    }
 }

+ 13 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailServiceImpl.java

@@ -560,12 +560,8 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
     }
 
     @Override
-    public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
-        QueryWrapper<ExamDetailCourse> examDetailCourseQueryWrapper = new QueryWrapper<>();
-        examDetailCourseQueryWrapper.lambda().eq(ExamDetailCourse::getSchoolId, schoolId)
-                .eq(ExamDetailCourse::getCourseCode, courseCode)
-                .eq(ExamDetailCourse::getPaperNumber, paperNumber);
-        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.list(examDetailCourseQueryWrapper);
+    public List<ExamDetail> listByPrintPlanIdAndCourseCodeAndPaperNumber(Long schoolId, Long printPlanId, String courseCode, String paperNumber) {
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByPrintPlanIdAndCourseCodeAndPaperNumber(schoolId, printPlanId, courseCode, paperNumber);
         if (examDetailCourses != null && examDetailCourses.size() > 0) {
             Set<Long> examDetailIds = examDetailCourses.stream().map(m -> m.getExamDetailId()).collect(Collectors.toSet());
             List<ExamDetail> examDetails = this.listByIds(examDetailIds);
@@ -661,6 +657,17 @@ public class ExamDetailServiceImpl extends ServiceImpl<ExamDetailMapper, ExamDet
         return this.baseMapper.listStudentByExamDetailId(schoolId, examDetailId, ticketNumber, type);
     }
 
+    @Override
+    public List<ExamDetail> listByCourseCodeAndPaperNumber(Long schoolId, String courseCode, String paperNumber) {
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByCourseCodeAndPaperNumber(schoolId, courseCode, paperNumber);
+        if (examDetailCourses != null && examDetailCourses.size() > 0) {
+            Set<Long> examDetailIds = examDetailCourses.stream().map(m -> m.getExamDetailId()).collect(Collectors.toSet());
+            List<ExamDetail> examDetails = this.listByIds(examDetailIds);
+            return examDetails;
+        }
+        return null;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void deleteExaminationData(Long printPlanId) {

+ 28 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskDetailServiceImpl.java

@@ -10,6 +10,7 @@ import com.qmth.distributed.print.business.bean.dto.ExamTaskDetailDto;
 import com.qmth.distributed.print.business.bean.params.RelatePaperParam;
 import com.qmth.distributed.print.business.entity.*;
 import com.qmth.distributed.print.business.enums.ExamDetailStatusEnum;
+import com.qmth.distributed.print.business.enums.PrintPlanStatusEnum;
 import com.qmth.distributed.print.business.enums.TaskTypeEnum;
 import com.qmth.distributed.print.business.mapper.ExamTaskDetailMapper;
 import com.qmth.distributed.print.business.service.*;
@@ -59,7 +60,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     private AsyncCreatePdfTempleteService asyncCreatePdfTempleteService;
 
     @Autowired
-    private BasicAttachmentService basicAttachmentService;
+    private ExamPrintPlanService examPrintPlanService;
 
     @Resource
     TBTaskService tbTaskService;
@@ -68,19 +69,33 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
     private ExamTaskPaperLogService examTaskPaperLogService;
 
     @Override
-    public boolean enable(ExamTaskDetail examTaskDetail) {
+    public boolean enable(ExamTaskDetail examTaskDetail) throws IOException {
         UpdateWrapper<ExamTaskDetail> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(ExamTaskDetail::getEnable, examTaskDetail.getEnable()).eq(ExamTaskDetail::getExamTaskId, examTaskDetail.getId());
-        return this.update(updateWrapper);
+        this.update(updateWrapper);
+
+        // 启用,触发考场生成pdf
+        if(examTaskDetail.getEnable()){
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            ExamTask examTask = examTaskService.getById(examTaskDetail.getExamTaskId());
+            // 校验是否可以提交打印状态
+            commonService.checkData(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber(), sysUser);
+        }
+
+        return true;
     }
 
     @Transactional
     @Override
     public boolean updatePaper(RelatePaperParam paperParam) throws IOException {
+        ExamPrintPlan examPrintPlan = examPrintPlanService.getById(paperParam.getPrintPlanId());
+        if (PrintPlanStatusEnum.END.equals(examPrintPlan.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("印刷计划已结束,不能修改");
+        }
         ExamTask examTask = examTaskService.getById(paperParam.getExamTaskId());
 
         // 提交印刷的考场,不允许修改关联试卷
-        List<ExamDetail> examDetails = examDetailService.listByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+        List<ExamDetail> examDetails = examDetailService.listByPrintPlanIdAndCourseCodeAndPaperNumber(examTask.getSchoolId(), paperParam.getPrintPlanId(), examTask.getCourseCode(), examTask.getPaperNumber());
         examDetails = examDetails.stream().filter(m -> !ExamDetailStatusEnum.NEW.equals(m.getStatus()) && !ExamDetailStatusEnum.READY.equals(m.getStatus())).collect(Collectors.toList());
         if (!examDetails.isEmpty()) {
             throw ExceptionResultEnum.ERROR.exception("有考场已开始打印,不能修改");
@@ -93,7 +108,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         this.update(updateWrapper);
 
         // 更新试卷编号
-        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listDetailCourseByCourseCodeAndPaperNumber(examTask.getSchoolId(), examTask.getCourseCode(), examTask.getPaperNumber());
+        List<ExamDetailCourse> examDetailCourses = examDetailCourseService.listByPrintPlanIdAndCourseCodeAndPaperNumber(examTask.getSchoolId(), paperParam.getPrintPlanId(), examTask.getCourseCode(), examTask.getPaperNumber());
         examDetailCourseService.updatePaperNumber(examDetailCourses, paperParam.getPaperNumber(), paperParam.getRelatePaperType());
 
         // 更新考生关联类型
@@ -104,7 +119,7 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = tbTaskService.saveTask(TaskTypeEnum.CREATE_PDF, paperParam.getPrintPlanId(), sysUser);
         map.computeIfAbsent("examDetailCourseIds", v -> examDetailCourseIds);
-        map.computeIfAbsent("schoolId", v-> examTask.getSchoolId());
+        map.computeIfAbsent("schoolId", v -> examTask.getSchoolId());
         map.computeIfAbsent("paperType", v -> paperParam.getRelatePaperType());
         asyncCreatePdfTempleteService.createPdf(map, null);
         return true;
@@ -236,4 +251,11 @@ public class ExamTaskDetailServiceImpl extends ServiceImpl<ExamTaskDetailMapper,
         return true;
     }
 
+    @Override
+    public ExamTaskDetail getByExamTaskId(Long examTaskId) {
+        QueryWrapper<ExamTaskDetail> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(ExamTaskDetail::getExamTaskId, examTaskId);
+        return this.getOne(queryWrapper);
+    }
+
 }

+ 39 - 32
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamTaskServiceImpl.java

@@ -634,26 +634,12 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 statusEnum = ExamStatusEnum.STAGE;
             }
             updateWrapper.lambda().set(ExamTask::getStatus, statusEnum).set(ExamTask::getReviewStatus, taskReviewLog.getReviewStatus()).eq(ExamTask::getId, taskReviewLog.getExamTaskId());
-            return this.update(updateWrapper);
+            this.update(updateWrapper);
         } else {
             // 更新记录表状态
-            examTaskPaperLog.setReview(true);
-            examTaskPaperLog.setReviewStatus(taskReviewLog.getReviewStatus());
-            examTaskPaperLog.setUpdateId(sysUser.getId());
-            examTaskPaperLog.setUpdateTime(System.currentTimeMillis());
-            examTaskPaperLogService.updateById(examTaskPaperLog);
-
-            if (taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.PASS.name())) {
-                // 通过,更新正式表数据
-                UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
-                examTaskDetailUpdateWrapper.lambda().set(ExamTaskDetail::getPaperType, examTaskPaperLog.getPaperType())
-                        .set(ExamTaskDetail::getPaperAttachmentIds, examTaskPaperLog.getPaperAttachmentIds())
-                        .set(ExamTaskDetail::getCardId, examTaskPaperLog.getCardId())
-                        .eq(ExamTaskDetail::getExamTaskId, taskReviewLog.getExamTaskId());
-                examTaskDetailService.update(examTaskDetailUpdateWrapper);
-            }
-            return true;
+            taskAfterPass(taskReviewLog, examTaskPaperLog, sysUser);
         }
+        return true;
     }
 
     @Transactional
@@ -688,26 +674,47 @@ public class ExamTaskServiceImpl extends ServiceImpl<ExamTaskMapper, ExamTask> i
                 this.update(updateWrapper);
             } else {
                 // 更新记录表状态
-                examTaskPaperLog.setReview(true);
-                examTaskPaperLog.setReviewStatus(taskReviewLog.getReviewStatus());
-                examTaskPaperLog.setUpdateId(sysUser.getId());
-                examTaskPaperLog.setUpdateTime(System.currentTimeMillis());
-                examTaskPaperLogService.updateById(examTaskPaperLog);
-
-                if (taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.PASS.name())) {
-                    // 通过,更新正式表数据
-                    UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
-                    examTaskDetailUpdateWrapper.lambda().set(ExamTaskDetail::getPaperType, examTaskPaperLog.getPaperType())
-                            .set(ExamTaskDetail::getPaperAttachmentIds, examTaskPaperLog.getPaperAttachmentIds())
-                            .set(ExamTaskDetail::getCardId, examTaskPaperLog.getCardId())
-                            .eq(ExamTaskDetail::getExamTaskId, taskReviewLog.getExamTaskId());
-                    examTaskDetailService.update(examTaskDetailUpdateWrapper);
-                }
+                taskAfterPass(taskReviewLog, examTaskPaperLog, sysUser);
             }
         }
         return true;
     }
 
+    private void taskAfterPass(ExamTaskReviewLog taskReviewLog, ExamTaskPaperLog examTaskPaperLog, SysUser sysUser){
+        // 更新记录表状态
+        examTaskPaperLog.setReview(true);
+        examTaskPaperLog.setReviewStatus(taskReviewLog.getReviewStatus());
+        examTaskPaperLog.setUpdateId(sysUser.getId());
+        examTaskPaperLog.setUpdateTime(System.currentTimeMillis());
+        examTaskPaperLogService.updateById(examTaskPaperLog);
+
+        if (taskReviewLog.getReviewStatus().name().equals(ReviewStatusEnum.PASS.name())) {
+            ExamTaskDetail examTaskDetail = examTaskDetailService.getByExamTaskId(taskReviewLog.getExamTaskId());
+            String exposedPaperType = examTaskDetail.getExposedPaperType();
+            Set<String> exposedPaperSet = StringUtils.isBlank(exposedPaperType) ? new HashSet<>() : new HashSet<>(Arrays.asList(exposedPaperType.split(",")));
+            String unexposedPaperType = examTaskPaperLog.getPaperType();
+            Set<String> unexposedPaperSet =  StringUtils.isBlank(unexposedPaperType) ? new HashSet<>() : new HashSet<>(Arrays.asList(unexposedPaperType.split(",")));
+            String newUnexposedPaperType;
+            //未曝光类型
+            if (!exposedPaperSet.isEmpty()) {
+                for (String exposedPaper : exposedPaperSet) {
+                    unexposedPaperSet.remove(exposedPaper);
+                }
+                newUnexposedPaperType = String.join(",", unexposedPaperSet);
+            } else{
+                newUnexposedPaperType = unexposedPaperType;
+            }
+            // 通过,更新正式表数据
+            UpdateWrapper<ExamTaskDetail> examTaskDetailUpdateWrapper = new UpdateWrapper<>();
+            examTaskDetailUpdateWrapper.lambda().set(ExamTaskDetail::getPaperType, examTaskPaperLog.getPaperType())
+                    .set(ExamTaskDetail::getPaperAttachmentIds, examTaskPaperLog.getPaperAttachmentIds())
+                    .set(ExamTaskDetail::getCardId, examTaskPaperLog.getCardId())
+                    .set(ExamTaskDetail::getUnexposedPaperType, newUnexposedPaperType)
+                    .eq(ExamTaskDetail::getExamTaskId, taskReviewLog.getExamTaskId());
+            examTaskDetailService.update(examTaskDetailUpdateWrapper);
+        }
+    }
+
     @Override
     public IPage<ExamTaskDetailDto> listTaskPaper(String courseCode, String paperNumber, Long startTime, Long endTime, Integer pageNumber, Integer pageSize) {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();

+ 1 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/util/CreatePdfUtil.java

@@ -605,7 +605,7 @@ public class CreatePdfUtil {
         if (Objects.nonNull(packageCode)) {
             packageCodeImg = GoogleBarCodeUtil.createBarCode(packageCode, false);
         }
-        String packageCodeDiv = "<div class=\"page-box page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 80px;right: 35px;transform: rotate(-90deg);transform-origin: center right;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
+        String packageCodeDiv = "<div class=\"page-box page-box-0\"><div class=\"package-number\" style=\"position: absolute;width: 200px;height: 40px;top: 10px;right: 25%;margin-left: -100px;text-align: center;z-index: 99;\"><img src=\"data:image/png;base64," + packageCodeImg + "\" style=\"display: block; height: 28px; width: 100%\" /><p style=\"line-height: 1; font-size: 12px; margin: 0;\">" + packageCode + "</p></div>";
         cardTemp = cardTemp.replaceAll("<div class=\"page-box page-box-0\">", packageCodeDiv);
         BasicAttachment cardAttachment = basicAttachmentService.saveAttachmentHtml(examCard.getSchoolId() + "|" + examCard.getCourseCode(), cardTemp, userId, cardPdfList);
         JSONObject object = new JSONObject();

+ 33 - 1
distributed-print-business/src/main/resources/mapper/ExamDetailCourseMapper.xml

@@ -75,7 +75,7 @@
     </select>
     <select id="listPaperNumberByPrintPlanId" resultType="java.lang.String">
         SELECT
-            a.paper_number paperNumber
+            distinct a.paper_number paperNumber
         FROM
             exam_detail_course a
                 LEFT JOIN
@@ -87,5 +87,37 @@
             </if>
         </where>
     </select>
+    <select id="listByPrintPlanIdAndCourseCodeAndPaperNumber" resultMap="BaseResultMap">
+        SELECT
+            a.*
+        FROM
+            exam_detail_course a
+                LEFT JOIN
+            exam_detail b ON a.exam_detail_id = b.id
+                LEFT JOIN
+            exam_print_plan c ON b.print_plan_id = c.id
+        WHERE
+            a.school_id = #{schoolId}
+                AND b.print_plan_id = #{printPlanId}
+                AND a.course_code = #{courseCode}
+                AND a.paper_number = #{paperNumber}
+                AND c.status != 'END'
+    </select>
+    <select id="listByAndCourseCodeAndPaperNumber" resultMap="BaseResultMap">
+        SELECT
+            a.*
+        FROM
+            exam_detail_course a
+                LEFT JOIN
+            exam_detail b ON a.exam_detail_id = b.id
+                LEFT JOIN
+            exam_print_plan c ON b.print_plan_id = c.id
+        WHERE
+            a.school_id = #{schoolId}
+                AND a.course_code = #{courseCode}
+                AND a.paper_number = #{paperNumber}
+                AND a.paper_type is null
+                AND c.status != 'END'
+    </select>
 
 </mapper>

+ 6 - 6
distributed-print-business/src/main/resources/mapper/ExamDetailMapper.xml

@@ -253,12 +253,12 @@
     </select>
     <select id="taskTotalData" resultType="com.qmth.distributed.print.business.bean.dto.PrintTaskTotalDto">
         SELECT
-            count(b.package_code) packageCount,
-            sum(b.total_subjects) totalSubjects,
-            sum(ifnull(b.pages_a3, 0))/2 pagesA3,
-            sum(ifnull(b.pages_a4, 0))/2 pagesA4,
-            sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a3, 0) end)/2 pagesA3Left,
-            sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a4, 0) end)/2 pagesA4Left
+            ifnull(count(b.package_code), 0) packageCount,
+            ifnull(sum(b.total_subjects), 0) totalSubjects,
+            ifnull(sum(ifnull(b.pages_a3, 0)), 0)/2 pagesA3,
+            ifnull(sum(ifnull(b.pages_a4, 0)), 0) /2 pagesA4,
+            ifnull(sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a3, 0) end),0)/2 pagesA3Left,
+            ifnull(sum(case b.status when 'FINISH' then 0 else ifnull(b.pages_a4, 0) end),0)/2 pagesA4Left
         FROM
             exam_print_plan a
          JOIN

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicAttachmentController.java

@@ -27,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "文件上传Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}/file")
-@Aac(auth = BOOL.FALSE)
 public class BasicAttachmentController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCardRuleController.java

@@ -28,7 +28,6 @@ import java.util.List;
 @Api(tags = "题卡规则Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/card_rule")
-@Aac(auth = BOOL.FALSE)
 public class BasicCardRuleController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicCourseController.java

@@ -29,7 +29,6 @@ import java.util.List;
 @Api(tags = "课程Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/course")
-@Aac(auth = BOOL.FALSE)
 public class BasicCourseController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicExamRuleController.java

@@ -27,7 +27,6 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "考务规则Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/exam_rule")
-@Aac(auth = BOOL.FALSE)
 public class BasicExamRuleController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicSchoolController.java

@@ -29,7 +29,6 @@ import java.util.List;
 @Api(tags = "学校Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}/school")
-@Aac(auth = BOOL.FALSE)
 public class BasicSchoolController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicTemplateController.java

@@ -26,7 +26,6 @@ import org.springframework.web.bind.annotation.*;
 @Api(tags = "通用模板Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/template")
-@Aac(auth = BOOL.FALSE)
 public class BasicTemplateController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java

@@ -40,7 +40,6 @@ import java.util.stream.Collectors;
 @Api(tags = "客户端Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.client}")
-@Aac(strict = BOOL.TRUE)
 public class ClientController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/EnumsController.java

@@ -25,7 +25,6 @@ import java.util.List;
 @Api(tags = "枚举类型Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}/get_enums")
-@Aac(auth = BOOL.FALSE)
 public class EnumsController {
 
     /**

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamCardController.java

@@ -32,7 +32,6 @@ import java.util.List;
 @Api(tags = "题卡Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.exam}/card")
-@Aac(auth = BOOL.FALSE)
 public class ExamCardController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamDetailController.java

@@ -43,7 +43,6 @@ import java.util.Set;
 @Api(tags = "考务数据管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.exam}/print")
-@Aac(auth = BOOL.FALSE)
 public class ExamDetailController {
     @Resource
     private TBTaskService tbTaskService;

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamPrintPlanController.java

@@ -51,7 +51,6 @@ import java.util.Objects;
 @Api(tags = "印刷计划管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.exam}/print")
-@Aac(auth = BOOL.FALSE)
 public class ExamPrintPlanController {
     @Resource
     private ExamPrintPlanService examPrintPlanService;

+ 5 - 6
distributed-print/src/main/java/com/qmth/distributed/print/api/ExamTaskController.java

@@ -50,7 +50,6 @@ import java.util.Objects;
 @Api(tags = "命题任务Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.exam}/task")
-@Aac(auth = BOOL.FALSE)
 public class ExamTaskController {
 
     @Autowired
@@ -443,24 +442,24 @@ public class ExamTaskController {
     }
 
     /**
-     * 启用/禁用
+     * 卷库查询-启用/禁用
      *
      * @param examTaskDetail
      * @return
      */
-    @ApiOperation(value = "启用/禁用")
+    @ApiOperation(value = "卷库查询-启用/禁用")
     @RequestMapping(value = "/paper_enable", method = RequestMethod.POST)
-    public Result taskPaperEnable(@RequestBody ExamTaskDetail examTaskDetail) {
+    public Result taskPaperEnable(@RequestBody ExamTaskDetail examTaskDetail) throws IOException {
         boolean isSuccess = examTaskDetailService.enable(examTaskDetail);
         return ResultUtil.ok(isSuccess);
     }
 
     /**
-     * 卷库修改
+     * 卷库查询-卷库修改
      * @param examTaskDetail
      * @return
      */
-    @ApiOperation(value = "卷库修改")
+    @ApiOperation(value = "卷库查询-卷库修改")
     @RequestMapping(value = "/paper_update", method = RequestMethod.POST)
     public Result taskPaperUpdate(@RequestBody ExamTaskDetail examTaskDetail) {
         boolean isSuccess = examTaskDetailService.paperUpdate(examTaskDetail);

+ 2 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/SysConfigController.java

@@ -27,14 +27,14 @@ import org.springframework.web.bind.annotation.RestController;
 @Api(tags = "参数Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}/sys_config")
-@Aac(auth = BOOL.FALSE)
 public class SysConfigController {
 
     @Autowired
     private SysConfigService sysConfigService;
 
     @ApiOperation(value = "根据key查询")
-    @RequestMapping(value = "/get_one",method = RequestMethod.POST)
+    @RequestMapping(value = "/get_one", method = RequestMethod.POST)
+    @Aac(auth = BOOL.FALSE)
     public Result getOne(@RequestParam(value = "key", required = false) String key) {
         SysConfig value = sysConfigService.getByKey(key);
         return ResultUtil.ok(value);

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -46,7 +46,6 @@ import java.util.stream.Collectors;
 @Api(tags = "系统Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}")
-@Aac(strict = BOOL.TRUE, platform = Platform.WEB)
 public class SysController {
     private final static Logger log = LoggerFactory.getLogger(SysController.class);
 

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysOrgController.java

@@ -31,7 +31,6 @@ import java.util.List;
 @Api(tags = "组织架构Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/org")
-@Aac(auth = BOOL.FALSE)
 public class SysOrgController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysPrivilegeController.java

@@ -27,7 +27,6 @@ import java.util.List;
 @Api(tags = "菜单权限Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/privilege")
-@Aac(auth = BOOL.FALSE)
 public class SysPrivilegeController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleController.java

@@ -27,7 +27,6 @@ import java.util.List;
 @Api(tags = "角色Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role")
-@Aac(auth = BOOL.FALSE)
 public class SysRoleController {
 
     @Autowired

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java

@@ -35,7 +35,6 @@ import java.util.List;
 @Api(tags = "用户Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/user")
-@Aac(auth = BOOL.FALSE)
 public class SysUserController {
     private final static Logger log = LoggerFactory.getLogger(SysUserController.class);
 

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/TBTaskController.java

@@ -34,7 +34,6 @@ import java.util.Objects;
 @Api(tags = "数据管理-任务管理Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.data}")
-@Aac(strict = BOOL.TRUE, platform = Platform.WEB)
 public class TBTaskController {
 
     @Resource

+ 0 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/WorkController.java

@@ -34,7 +34,6 @@ import javax.annotation.Resource;
 @Api(tags = "工作台Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.work}")
-@Aac(strict = BOOL.TRUE, platform = Platform.WEB)
 public class WorkController {
 
     @Resource

+ 4 - 4
distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java

@@ -22,11 +22,11 @@ public class AuthInterceptor extends ExtendInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         log.info("preHandle is come in");
-        if (request.getServletPath().contains(endpoint)) {
+//        if (request.getServletPath().contains(endpoint)) {
             return true;
-        } else {
-            return AuthUtil.adminAuthInterceptor(request, response);
-        }
+//        } else {
+//            return AuthUtil.adminAuthInterceptor(request, response);
+//        }
     }
 
     @Override

+ 11 - 14
distributed-print/src/main/resources/application.properties

@@ -12,7 +12,7 @@ spring.application.name=distributed-print
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=distributed_print_test
+db.name=distributed_print
 db.username=root
 db.password=123456789
 
@@ -50,9 +50,12 @@ sys.config.attachmentSize=200
 sys.config.serverUpload=
 sys.config.fileHost=localhost:7001
 sys.config.serverHost=localhost:7001
-sys.config.accessKey=0bce69d94a7b4aef8bc0badf150351a9
-sys.config.accessSecret=LdUwb5X4etmjW7fDn0KAdoXG0Yt7AkDu
+#sys.config.accessKey=0bce69d94a7b4aef8bc0badf150351a9
+#sys.config.accessSecret=LdUwb5X4etmjW7fDn0KAdoXG0Yt7AkDu
+sys.config.accessKey=274f823e5f59410f8b3bb6edcd8e2b6e
+sys.config.accessSecret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 sys.config.adminLogoUrl=http://qmth-test.oss-cn-shenzhen.aliyuncs.com/frontend/wx_logo.png
+#sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
 sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
@@ -62,13 +65,13 @@ org.center.orgQueryApi=/api/open/org/query
 #com.qmth.api.uri-prefix=/aaa
 #\u7EDF\u8BA1\u9875\u9762\u914D\u7F6E
 com.qmth.api.metrics-endpoint=/metrics-count
-#com.qmth.api.global-auth=false
-#com.qmth.api.global-strict=false
+com.qmth.api.global-auth=true
+#com.qmth.api.global-strict=true
 #com.qmth.api.global-rate-limit=1/5s
 
 #token\u8D85\u65F6\u914D\u7F6E
-com.qmth.api.auth.time-max-ahead=-10000
-com.qmth.api.auth.time-max-delay=10000
+com.qmth.api.auth.time-max-ahead=-5
+com.qmth.api.auth.time-max-delay=30
 
 #\u7F13\u5B58\u65F6\u95F4
 com.qmth.cache.expire-after-write=8h
@@ -89,18 +92,12 @@ com.qmth.logging.file-path=/Users/king/Downloads/distributed-print.log
 #\u5F15\u5165task\u914D\u7F6E\u6587\u4EF6
 spring.profiles.include=task
 
-#\u0368\uFFFD\u00F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05A4\uFFFD\uFFFD
 sms.config.smsNormalCode=qmth
-#\uFFFD\u05BB\uFFFD\uFFFD\uFFFD\u05A4\uFFFD\uFFFD\uFFFD\uFFFD\u0427\uFFFD\uFFFD \uFFFD\uFFFD\u03BB:\uFFFD\uFFFD\uFFFD\uFFFD
 sms.config.codeExpiredTime=2
-#\uFFFD\uFFFD\uFFFD\u0376\uFFFD\uFFFD\u0175\uFFFD\u02B1\uFFFD\uFFFD\uFFFD\uFFFD \uFFFD\uFFFD\u03BB:\uFFFD\uFFFD
 sms.config.codeSendInterval=60
-##\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u01B6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03E2\uFFFD\uFFFD\uFFFD\uFFFD
 #aliyun SMS key
 sms.config.aliyunSMSKey=LTAI4Fi8jVRYT49QBXU9x5QX
 #aliyun SMS secret
 sms.config.aliyunSMSSecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
-#aliyun\uFFFD\uFFFD\uFFFD\uFFFD\u01E9\uFFFD\uFFFD
-sms.config.aliyunSMSSignName=\uFFFD\u077D\uFFFD\uFFFD\uFFFD
-#aliyun\uFFFD\uFFFD\uFFFD\uFFFD\u0123\uFFFD\uFFFD
+sms.config.aliyunSMSSignName=\u9038\u6559\u4E91
 sms.config.aliyunSMSTplCode=SMS_147416565

+ 23 - 6
distributed-print/src/test/java/com/qmth/distributed/print/ServiceTest.java

@@ -1,15 +1,11 @@
 package com.qmth.distributed.print;
 
-import com.aliyun.oss.common.utils.BinaryUtil;
 import com.qmth.distributed.print.api.ExamDetailController;
 import com.qmth.distributed.print.business.bean.result.TemplatePrintInfoResult;
-import com.qmth.distributed.print.business.entity.ExamDetail;
-import com.qmth.distributed.print.business.service.BasicTemplateOrgService;
-import com.qmth.distributed.print.business.service.ExamDetailService;
-import com.qmth.distributed.print.business.service.ExamPrintPlanService;
+import com.qmth.distributed.print.business.enums.MessageEnum;
+import com.qmth.distributed.print.business.service.*;
 import com.qmth.distributed.print.business.util.ConvertUtil;
 import com.qmth.distributed.print.business.util.OssUtil;
-import com.qmth.distributed.print.common.util.HexUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -38,6 +34,10 @@ public class ServiceTest {
     private ExamDetailController examDetailController;
     @Resource
     OssUtil ossUtil;
+    @Resource
+    private BasicMessageService basicMessageService;
+    @Resource
+    private BasicVerifyCodeService basicVerifyCodeService;
 
 
     @Test
@@ -81,4 +81,21 @@ public class ServiceTest {
 //        ossUtil.ossUpload(pdfDirName, pdfFile, BinaryUtil.toBase64String(HexUtils.decodeHex(fileMd5)));
     }
 
+    @Test
+    public void sendMessage(){
+        Long userId = 1L;
+        String mobileNumber = "18903719928";
+        Long businessId = 1L;
+        String variableParams = "{\"code\":\"" + "123456" + "\"}";
+        Long createId = 1L;
+        MessageEnum messageType = MessageEnum.NOTICE_OF_AUDIT_NOT_PASS;
+
+        basicMessageService.saveMessageSendLog(userId,mobileNumber,businessId,variableParams,createId,messageType);
+    }
+
+    @Test
+    public void sendVerifyCode(){
+        basicVerifyCodeService.sendVeirfyCode("18903719928",1L);
+    }
+
 }

+ 16 - 0
pom.xml

@@ -261,6 +261,22 @@
                     <generateBackupPoms>false</generateBackupPoms>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <version>3.2.0</version>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <useDefaultDelimiters>false</useDefaultDelimiters>
+                    <delimiters>
+                        <delimiter>$[*]</delimiter>
+                    </delimiters>
+                    <!-- 过滤后缀不需要转码的文件后缀名pdf -->
+                    <nonFilteredFileExtensions>
+                        <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
+                    </nonFilteredFileExtensions>
+                </configuration>
+            </plugin>
         </plugins>
     </build>