xiaof 4 lat temu
rodzic
commit
9675fcc0a4
27 zmienionych plików z 879 dodań i 50 usunięć
  1. 6 1
      digit-print-business/pom.xml
  2. 115 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/bean/dto/TemplateDto.java
  3. 35 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/bean/query/LoginParam.java
  4. 37 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/bean/query/TemplateParam.java
  5. 12 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/config/DictionaryConfig.java
  6. 25 5
      digit-print-business/src/main/java/com/qmth/digit/print/business/domain/PrefixUrlDomain.java
  7. 77 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/domain/SmsDomain.java
  8. 5 6
      digit-print-business/src/main/java/com/qmth/digit/print/business/entity/BasicAttachment.java
  9. 21 9
      digit-print-business/src/main/java/com/qmth/digit/print/business/entity/BasicTemplate.java
  10. 6 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/mapper/BasicTemplateMapper.java
  11. 2 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicAttachmentService.java
  12. 1 1
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicTemplateOrgService.java
  13. 8 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicTemplateService.java
  14. 1 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicVerifyCodeService.java
  15. 96 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicAttachmentServiceImpl.java
  16. 2 2
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicCardRuleServiceImpl.java
  17. 4 4
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicTemplateOrgServiceImpl.java
  18. 71 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicTemplateServiceImpl.java
  19. 113 0
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicVerifyCodeServiceImpl.java
  20. 1 1
      digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/SysRoleServiceImpl.java
  21. 3 3
      digit-print-business/src/main/resources/db/init-data.sql
  22. 1 0
      digit-print-business/src/main/resources/db/init-table.sql
  23. 1 0
      digit-print-business/src/main/resources/mapper/BasicTemplateMapper.xml
  24. 29 2
      digit-print/src/main/java/com/qmth/digit/print/api/BasicAttachmentController.java
  25. 69 1
      digit-print/src/main/java/com/qmth/digit/print/api/BasicTemplateController.java
  26. 124 0
      digit-print/src/main/java/com/qmth/digit/print/api/SysController.java
  27. 14 15
      digit-print/src/main/resources/application.properties

+ 6 - 1
digit-print-business/pom.xml

@@ -71,6 +71,11 @@
 			<groupId>org.jetbrains</groupId>
 			<artifactId>annotations</artifactId>
 		</dependency>
-	</dependencies>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+    </dependencies>
 
 </project>

+ 115 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/bean/dto/TemplateDto.java

@@ -0,0 +1,115 @@
+package com.qmth.digit.print.business.bean.dto;
+
+import com.qmth.digit.print.business.entity.SysOrg;
+import com.qmth.digit.print.common.enums.ClassifyEnum;
+import com.qmth.digit.print.common.enums.ExamNumberStyleEnum;
+import com.qmth.digit.print.common.enums.PaperTypeEnum;
+import com.qmth.digit.print.common.enums.TemplateTypeEnum;
+
+import java.util.List;
+
+/**
+ * @Date: 2021/3/29.
+ */
+public class TemplateDto {
+
+    private Long id;
+    private Long schoolId;
+    private String name;
+    private TemplateTypeEnum type;
+    private ClassifyEnum classify;
+    private Long attachmentId;
+    private Boolean enable;
+    private String remark;
+    private Long createId;
+    private Long createTime;
+    private List<SysOrg> orgs;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public TemplateTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(TemplateTypeEnum type) {
+        this.type = type;
+    }
+
+    public ClassifyEnum getClassify() {
+        return classify;
+    }
+
+    public void setClassify(ClassifyEnum classify) {
+        this.classify = classify;
+    }
+
+    public Long getAttachmentId() {
+        return attachmentId;
+    }
+
+    public void setAttachmentId(Long attachmentId) {
+        this.attachmentId = attachmentId;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Long getCreateId() {
+        return createId;
+    }
+
+    public void setCreateId(Long createId) {
+        this.createId = createId;
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public List<SysOrg> getOrgs() {
+        return orgs;
+    }
+
+    public void setOrgs(List<SysOrg> orgs) {
+        this.orgs = orgs;
+    }
+}

+ 35 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/bean/query/LoginParam.java

@@ -0,0 +1,35 @@
+package com.qmth.digit.print.business.bean.query;
+
+/**
+ * @Date: 2021/3/30.
+ */
+public class LoginParam {
+
+    private String loginName;
+    private String password;
+    private String code;
+
+    public String getLoginName() {
+        return loginName;
+    }
+
+    public void setLoginName(String loginName) {
+        this.loginName = loginName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}

+ 37 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/bean/query/TemplateParam.java

@@ -0,0 +1,37 @@
+package com.qmth.digit.print.business.bean.query;
+
+import com.qmth.digit.print.business.base.BasePage;
+
+/**
+ * @Date: 2021/3/23.
+ */
+public class TemplateParam extends BasePage {
+
+    private Boolean enable;
+    private String type;
+    private String name;
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}

+ 12 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/config/DictionaryConfig.java

@@ -2,6 +2,7 @@ package com.qmth.digit.print.business.config;
 
 import com.qmth.digit.print.business.domain.AliYunOssDomain;
 import com.qmth.digit.print.business.domain.PrefixUrlDomain;
+import com.qmth.digit.print.business.domain.SmsDomain;
 import com.qmth.digit.print.business.domain.SysDomain;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
@@ -39,6 +40,17 @@ public class DictionaryConfig {
         return new SysDomain();
     }
 
+    /**
+     * 短信配置
+     *
+     * @return
+     */
+    @Bean
+    @ConfigurationProperties(prefix = "sms.config")
+    public SmsDomain smsDomain() {
+        return new SmsDomain();
+    }
+
     /**
      * 阿里云oss配置
      *

+ 25 - 5
digit-print-business/src/main/java/com/qmth/digit/print/business/domain/PrefixUrlDomain.java

@@ -11,10 +11,22 @@ import java.io.Serializable;
  */
 public class PrefixUrlDomain implements Serializable {
 
-    String admin;
+    String common;
 
     String sys;
 
+    String basic;
+
+    String exam;
+
+    public String getCommon() {
+        return common;
+    }
+
+    public void setCommon(String common) {
+        this.common = common;
+    }
+
     public String getSys() {
         return sys;
     }
@@ -23,11 +35,19 @@ public class PrefixUrlDomain implements Serializable {
         this.sys = sys;
     }
 
-    public String getAdmin() {
-        return admin;
+    public String getBasic() {
+        return basic;
+    }
+
+    public void setBasic(String basic) {
+        this.basic = basic;
+    }
+
+    public String getExam() {
+        return exam;
     }
 
-    public void setAdmin(String admin) {
-        this.admin = admin;
+    public void setExam(String exam) {
+        this.exam = exam;
     }
 }

+ 77 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/domain/SmsDomain.java

@@ -0,0 +1,77 @@
+package com.qmth.digit.print.business.domain;
+
+/**
+ * 短信参数
+ */
+public class SmsDomain {
+
+    String smsNormalCode;
+
+    Integer codeExpiredTime;
+
+    Integer codeSendInterval;
+
+    String aliyunSMSKey;
+
+    String aliyunSMSSecret;
+
+    String aliyunSMSSignName;
+
+    String aliyunSMSTplCode;
+
+    public String getSmsNormalCode() {
+        return smsNormalCode;
+    }
+
+    public void setSmsNormalCode(String smsNormalCode) {
+        this.smsNormalCode = smsNormalCode;
+    }
+
+    public Integer getCodeExpiredTime() {
+        return codeExpiredTime;
+    }
+
+    public void setCodeExpiredTime(Integer codeExpiredTime) {
+        this.codeExpiredTime = codeExpiredTime;
+    }
+
+    public Integer getCodeSendInterval() {
+        return codeSendInterval;
+    }
+
+    public void setCodeSendInterval(Integer codeSendInterval) {
+        this.codeSendInterval = codeSendInterval;
+    }
+
+    public String getAliyunSMSKey() {
+        return aliyunSMSKey;
+    }
+
+    public void setAliyunSMSKey(String aliyunSMSKey) {
+        this.aliyunSMSKey = aliyunSMSKey;
+    }
+
+    public String getAliyunSMSSecret() {
+        return aliyunSMSSecret;
+    }
+
+    public void setAliyunSMSSecret(String aliyunSMSSecret) {
+        this.aliyunSMSSecret = aliyunSMSSecret;
+    }
+
+    public String getAliyunSMSSignName() {
+        return aliyunSMSSignName;
+    }
+
+    public void setAliyunSMSSignName(String aliyunSMSSignName) {
+        this.aliyunSMSSignName = aliyunSMSSignName;
+    }
+
+    public String getAliyunSMSTplCode() {
+        return aliyunSMSTplCode;
+    }
+
+    public void setAliyunSMSTplCode(String aliyunSMSTplCode) {
+        this.aliyunSMSTplCode = aliyunSMSTplCode;
+    }
+}

+ 5 - 6
digit-print-business/src/main/java/com/qmth/digit/print/business/entity/BasicAttachment.java

@@ -33,8 +33,7 @@ public class BasicAttachment extends BaseEntity implements Serializable {
     /**
      * 单位(KB)
      */
-    @TableField("file_size")
-    private Integer fileSize;
+    private Integer size;
     /**
      * 文件md5值
      */
@@ -72,12 +71,12 @@ public class BasicAttachment extends BaseEntity implements Serializable {
         this.type = type;
     }
 
-    public Integer getFileSize() {
-        return fileSize;
+    public Integer getSize() {
+        return size;
     }
 
-    public void setFileSize(Integer fileSize) {
-        this.fileSize = fileSize;
+    public void setSize(Integer size) {
+        this.size = size;
     }
 
     public String getMd5() {

+ 21 - 9
digit-print-business/src/main/java/com/qmth/digit/print/business/entity/BasicTemplate.java

@@ -3,6 +3,8 @@ package com.qmth.digit.print.business.entity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.qmth.digit.print.business.base.BaseEntity;
+import com.qmth.digit.print.common.enums.ClassifyEnum;
+import com.qmth.digit.print.common.enums.TemplateTypeEnum;
 
 import java.io.Serializable;
 
@@ -28,12 +30,12 @@ public class BasicTemplate extends BaseEntity implements Serializable {
     /**
      * 模板类型:GENERIC-通卡模板,VARIABLE-变量印品模板,ORDINARY-普通印品模板
      */
-    private String type;
+    private TemplateTypeEnum type;
     /**
      * template_type值为VARIABLE、ORDINARY时,不为空。
             SIGN-签到表,PACKAGE-卷袋贴,CHECK_IN-登记表
      */
-    private String classify;
+    private ClassifyEnum classify;
     /**
      * 模板附件ID(保存到附件表ID)
      */
@@ -42,12 +44,15 @@ public class BasicTemplate extends BaseEntity implements Serializable {
     /**
      * 0-禁用,1-启用
      */
-    private Integer enable;
+    private Boolean enable;
     /**
      * 备注
      */
     private String remark;
 
+    @TableField(exist = false)
+    private Long[] orgIds;
+
 
     public Long getSchoolId() {
         return schoolId;
@@ -65,19 +70,19 @@ public class BasicTemplate extends BaseEntity implements Serializable {
         this.name = name;
     }
 
-    public String getType() {
+    public TemplateTypeEnum getType() {
         return type;
     }
 
-    public void setType(String type) {
+    public void setType(TemplateTypeEnum type) {
         this.type = type;
     }
 
-    public String getClassify() {
+    public ClassifyEnum getClassify() {
         return classify;
     }
 
-    public void setClassify(String classify) {
+    public void setClassify(ClassifyEnum classify) {
         this.classify = classify;
     }
 
@@ -89,11 +94,11 @@ public class BasicTemplate extends BaseEntity implements Serializable {
         this.attachmentId = attachmentId;
     }
 
-    public Integer getEnable() {
+    public Boolean getEnable() {
         return enable;
     }
 
-    public void setEnable(Integer enable) {
+    public void setEnable(Boolean enable) {
         this.enable = enable;
     }
 
@@ -105,4 +110,11 @@ public class BasicTemplate extends BaseEntity implements Serializable {
         this.remark = remark;
     }
 
+    public Long[] getOrgIds() {
+        return orgIds;
+    }
+
+    public void setOrgIds(Long[] orgIds) {
+        this.orgIds = orgIds;
+    }
 }

+ 6 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/mapper/BasicTemplateMapper.java

@@ -1,7 +1,12 @@
 package com.qmth.digit.print.business.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.digit.print.business.bean.dto.TemplateDto;
+import com.qmth.digit.print.business.bean.query.TemplateParam;
 import com.qmth.digit.print.business.entity.BasicTemplate;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +18,5 @@ import com.qmth.digit.print.business.entity.BasicTemplate;
  */
 public interface BasicTemplateMapper extends BaseMapper<BasicTemplate> {
 
+    IPage<TemplateDto> listPage(Page<TemplateDto> page, @Param("param") TemplateParam param);
 }

+ 2 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicAttachmentService.java

@@ -2,6 +2,7 @@ package com.qmth.digit.print.business.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.digit.print.business.entity.BasicAttachment;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * <p>
@@ -13,4 +14,5 @@ import com.qmth.digit.print.business.entity.BasicAttachment;
  */
 public interface BasicAttachmentService extends IService<BasicAttachment> {
 
+    Long save(MultipartFile file, String md5, Long schoolId, Long userId);
 }

+ 1 - 1
digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicTemplateOrgService.java

@@ -21,5 +21,5 @@ public interface BasicTemplateOrgService extends IService<BasicTemplateOrg> {
 
     void removeByRuleId(Long id);
 
-    void saveBatch(BasicCardRule cardRule);
+    void saveBatch(Long ruleId, Long[] orgIds, Long createId);
 }

+ 8 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicTemplateService.java

@@ -1,6 +1,9 @@
 package com.qmth.digit.print.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.digit.print.business.bean.dto.TemplateDto;
+import com.qmth.digit.print.business.bean.query.TemplateParam;
 import com.qmth.digit.print.business.entity.BasicTemplate;
 
 /**
@@ -13,4 +16,9 @@ import com.qmth.digit.print.business.entity.BasicTemplate;
  */
 public interface BasicTemplateService extends IService<BasicTemplate> {
 
+    IPage<TemplateDto> list(TemplateParam param);
+
+    boolean saveTemplate(BasicTemplate template);
+
+    boolean enable(BasicTemplate template);
 }

+ 1 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/BasicVerifyCodeService.java

@@ -13,4 +13,5 @@ import com.qmth.digit.print.business.entity.BasicVerifyCode;
  */
 public interface BasicVerifyCodeService extends IService<BasicVerifyCode> {
 
+    void sendVeirfyCode(String mobileNumber, Long id);
 }

+ 96 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicAttachmentServiceImpl.java

@@ -1,10 +1,27 @@
 package com.qmth.digit.print.business.service.impl;
 
+import cn.hutool.core.lang.UUID;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.digit.print.business.config.DictionaryConfig;
 import com.qmth.digit.print.business.entity.BasicAttachment;
 import com.qmth.digit.print.business.mapper.BasicAttachmentMapper;
 import com.qmth.digit.print.business.service.BasicAttachmentService;
+import com.qmth.digit.print.business.util.security.Md5Utils;
+import com.qmth.digit.print.common.enums.ExceptionResultEnum;
+import com.qmth.digit.print.common.enums.StorageLevelEnum;
+import com.qmth.digit.print.common.enums.StorageTypeEnum;
+import com.qmth.digit.print.common.util.MD5Util;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.StringJoiner;
 
 /**
  * <p>
@@ -17,4 +34,83 @@ import org.springframework.stereotype.Service;
 @Service
 public class BasicAttachmentServiceImpl extends ServiceImpl<BasicAttachmentMapper, BasicAttachment> implements BasicAttachmentService {
 
+    @Autowired
+    private DictionaryConfig dictionaryConfig;
+
+    @Override
+    public Long save(MultipartFile file, String md5, Long schoolId, Long userId) {
+        try {
+            if (file == null) {
+                throw ExceptionResultEnum.ERROR.exception("文件为空");
+            }
+            if (StringUtils.isBlank(md5)) {
+                throw ExceptionResultEnum.ERROR.exception("md5为空");
+            }
+            // 文件名
+            String fileName = file.getOriginalFilename();
+            int lastIndex = fileName.lastIndexOf(".");
+            // 文件类型
+            String type = fileName.substring(lastIndex);
+            List<String> attachmentType = dictionaryConfig.sysDomain().getAttachmentType();
+            if (attachmentType != null && attachmentType.size() > 0) {
+                if (!attachmentType.contains(type)) {
+                    throw ExceptionResultEnum.ERROR.exception("文件格式不支持");
+                }
+            }
+
+            // 文件大小
+            long size = file.getSize();
+            if (size > 200 * 1024 * 1024) {
+                throw ExceptionResultEnum.ERROR.exception("文件大小不能超过200M");
+            }
+
+            // md5
+            String fileMd5 = Md5Utils.toHex(file.getBytes());
+            if (!md5.equals(fileMd5)) {
+                throw ExceptionResultEnum.ERROR.exception("md5不一致,文件可能损坏");
+            }
+
+            // 保存
+            BasicAttachment attachment = new BasicAttachment();
+
+            // 保存文件
+            boolean isOss = dictionaryConfig.sysDomain().isOss();
+            // 文件保存路径
+            LocalDateTime localDateTime = LocalDateTime.now();
+            String serverUpload = dictionaryConfig.sysDomain().getServerUpload();
+            StringJoiner sj = new StringJoiner(File.separator)
+                    .add(serverUpload)
+                    .add(String.valueOf(schoolId))
+                    .add(String.valueOf(localDateTime.getYear()))
+                    .add(String.valueOf(localDateTime.getMonthValue()))
+                    .add(String.valueOf(localDateTime.getDayOfMonth()));
+            if (isOss) {
+                // todo
+            } else {
+                File destFolder = new File(sj.toString());
+                if (!destFolder.exists()) {
+                    destFolder.mkdirs();
+                }
+                File newFile = new File(sj.toString(), UUID.fastUUID() + type);
+                FileUtils.copyInputStreamToFile(file.getInputStream(), newFile);
+                attachment.setPath(newFile.getPath());
+            }
+
+            attachment.setName(file.getName());
+            attachment.setType(type);
+            attachment.setSize(Math.toIntExact(size));
+            attachment.setMd5(md5);
+            attachment.setLevel(StorageLevelEnum.L.name());
+            attachment.setStorage(isOss ? StorageTypeEnum.OSS.name() : StorageTypeEnum.LOCAL.name());
+            attachment.setCreateId(userId);
+            attachment.setCreateTime(System.currentTimeMillis());
+
+            this.save(attachment);
+            return attachment.getId();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+        }
+        return null;
+    }
 }

+ 2 - 2
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicCardRuleServiceImpl.java

@@ -82,7 +82,7 @@ public class BasicCardRuleServiceImpl extends ServiceImpl<BasicCardRuleMapper, B
             isSuccess = this.save(cardRule);
         }
         // 修改
-        {
+        else {
             if (basicCardRule != null && basicCardRule.getId() != cardRule.getId()) {
                 throw ExceptionResultEnum.ERROR.exception("题卡规则名称已存在");
             }
@@ -96,7 +96,7 @@ public class BasicCardRuleServiceImpl extends ServiceImpl<BasicCardRuleMapper, B
         }
 
         // 新增权限
-        basicTemplateOrgService.saveBatch(cardRule);
+        basicTemplateOrgService.saveBatch(cardRule.getId(), cardRule.getOrgIds(), cardRule.getCreateId());
 
         return isSuccess;
     }

+ 4 - 4
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicTemplateOrgServiceImpl.java

@@ -39,14 +39,14 @@ public class BasicTemplateOrgServiceImpl extends ServiceImpl<BasicTemplateOrgMap
     }
 
     @Override
-    public void saveBatch(BasicCardRule cardRule) {
+    public void saveBatch(Long ruleId, Long[] orgIds, Long createId) {
         List<BasicTemplateOrg> list = new ArrayList<>();
-        for (Long orgId : cardRule.getOrgIds()) {
+        for (Long orgId : orgIds) {
             BasicTemplateOrg basicTemplateOrg = new BasicTemplateOrg();
             basicTemplateOrg.setType(TemplateTypeEnum.CARD_RULE);
-            basicTemplateOrg.setRuleId(cardRule.getId());
+            basicTemplateOrg.setRuleId(ruleId);
             basicTemplateOrg.setOrgId(orgId);
-            basicTemplateOrg.setCreateId(cardRule.getCreateId());
+            basicTemplateOrg.setCreateId(createId);
             basicTemplateOrg.setCreateTime(System.currentTimeMillis());
             list.add(basicTemplateOrg);
         }

+ 71 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicTemplateServiceImpl.java

@@ -1,11 +1,24 @@
 package com.qmth.digit.print.business.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.digit.print.business.bean.dto.TemplateDto;
+import com.qmth.digit.print.business.bean.query.TemplateParam;
 import com.qmth.digit.print.business.entity.BasicTemplate;
+import com.qmth.digit.print.business.entity.SysOrg;
 import com.qmth.digit.print.business.mapper.BasicTemplateMapper;
+import com.qmth.digit.print.business.service.BasicTemplateOrgService;
 import com.qmth.digit.print.business.service.BasicTemplateService;
+import com.qmth.digit.print.common.enums.ExceptionResultEnum;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Objects;
+
 /**
  * <p>
  * 通用模板 服务实现类
@@ -17,4 +30,62 @@ import org.springframework.stereotype.Service;
 @Service
 public class BasicTemplateServiceImpl extends ServiceImpl<BasicTemplateMapper, BasicTemplate> implements BasicTemplateService {
 
+    @Autowired
+    private BasicTemplateOrgService basicTemplateOrgService;
+
+    @Override
+    public IPage<TemplateDto> list(TemplateParam param) {
+        Page<TemplateDto> page = new Page<>(param.getPageNumber(), param.getPageSize());
+        IPage<TemplateDto> templateDtoIPage = this.baseMapper.listPage(page, param);
+        if (templateDtoIPage.getRecords().size() > 0) {
+            templateDtoIPage.getRecords().forEach(m -> {
+                //查询适用学院
+                List<SysOrg> sysOrgs = basicTemplateOrgService.listByTypeAndTemplateId(param.getType(), m.getId());
+                m.setOrgs(sysOrgs);
+            });
+        }
+        return templateDtoIPage;
+    }
+
+    @Override
+    public boolean saveTemplate(BasicTemplate template) {
+        // todo 校验是否有必选字段已使用
+        QueryWrapper<BasicTemplate> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(BasicTemplate::getSchoolId, template.getSchoolId()).eq(BasicTemplate::getName, template.getName());
+        BasicTemplate basicTemplate = this.getOne(queryWrapper);
+        boolean isSuccess;
+        // 新增
+        if (Objects.isNull(template.getId())) {
+            if (basicTemplate != null) {
+                throw ExceptionResultEnum.ERROR.exception("模板名称已存在");
+            }
+            template.setCreateTime(System.currentTimeMillis());
+            isSuccess = this.save(template);
+        }
+        // 修改
+        else {
+            if (basicTemplate != null && basicTemplate.getId() != template.getId()) {
+                throw ExceptionResultEnum.ERROR.exception("模板名称已存在");
+            }
+
+            template.setUpdateTime(System.currentTimeMillis());
+
+            //删除权限
+            basicTemplateOrgService.removeByRuleId(template.getId());
+            isSuccess = this.updateById(template);
+
+        }
+
+        // 新增权限
+        basicTemplateOrgService.saveBatch(template.getId(), template.getOrgIds(), template.getCreateId());
+
+        return isSuccess;
+    }
+
+    @Override
+    public boolean enable(BasicTemplate template) {
+        UpdateWrapper<BasicTemplate> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(BasicTemplate::getEnable, template.getEnable()).eq(BasicTemplate::getId, template.getId());
+        return this.update(updateWrapper);
+    }
 }

+ 113 - 0
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/BasicVerifyCodeServiceImpl.java

@@ -1,11 +1,28 @@
 package com.qmth.digit.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.digit.print.business.config.DictionaryConfig;
 import com.qmth.digit.print.business.entity.BasicVerifyCode;
+import com.qmth.digit.print.business.entity.SysConfig;
 import com.qmth.digit.print.business.mapper.BasicVerifyCodeMapper;
 import com.qmth.digit.print.business.service.BasicVerifyCodeService;
+import com.qmth.digit.print.business.service.SysConfigService;
+import com.qmth.digit.print.common.enums.ExceptionResultEnum;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Calendar;
+import java.util.Date;
+
 /**
  * <p>
  * 短信验证码记录表 服务实现类
@@ -17,4 +34,100 @@ import org.springframework.stereotype.Service;
 @Service
 public class BasicVerifyCodeServiceImpl extends ServiceImpl<BasicVerifyCodeMapper, BasicVerifyCode> implements BasicVerifyCodeService {
 
+    @Autowired
+    private DictionaryConfig dictionaryConfig;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @Override
+    public void sendVeirfyCode(String mobileNumber, Long userId) {
+        String value = sysConfigService.getByKey("sys.code.enable");
+        if (value == null) {
+            throw ExceptionResultEnum.ERROR.exception("短信验证码启用开关未设置");
+        }
+        if (value.equals("false")) {
+            throw ExceptionResultEnum.ERROR.exception("短信验证码已关闭");
+        }
+
+        QueryWrapper<BasicVerifyCode> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(BasicVerifyCode::getMobileNumber, mobileNumber).eq(BasicVerifyCode::getUserId, userId);
+        BasicVerifyCode basicVerifyCode = this.getOne(wrapper);
+        if (basicVerifyCode != null) {
+            Date oldCreateTime = new Date(basicVerifyCode.getCreateTime());
+            Integer sendInterval = dictionaryConfig.smsDomain().getCodeSendInterval();
+            if ((new Date().getTime() - oldCreateTime.getTime()) < sendInterval * 1000) {
+                throw ExceptionResultEnum.ERROR.exception("发送验证码过于频繁,请" + sendInterval + "秒之后再试");
+            }
+        }
+        try {
+            StringBuilder sb = new StringBuilder();
+            sb.append((int) ((Math.random() * 9 + 1) * 1000));
+            String verifyCode = sb.toString();
+            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(dictionaryConfig.smsDomain().getAliyunSMSTplCode());
+            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            // 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
+            request.setTemplateParam("{\"code\":\"" + verifyCode + "\"}");
+            // 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
+            // request.setSmsUpExtendCode("90997");
+            // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+            // request.setOutId("yourOutId");
+            // 请求失败这里会抛ClientException异常
+            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
+            if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
+                // 请求成功
+                Integer codeExpiredTime = dictionaryConfig.smsDomain().getCodeExpiredTime();
+                if (basicVerifyCode == null) {
+                    basicVerifyCode = new BasicVerifyCode();
+                    basicVerifyCode.setUserId(userId);
+                    basicVerifyCode.setMobileNumber(mobileNumber);
+                    basicVerifyCode.setExpireTime(processMiniute(new Date(), codeExpiredTime));
+                    basicVerifyCode.setValidPeriod(codeExpiredTime);
+                    basicVerifyCode.setVerifyCode(verifyCode);
+                    basicVerifyCode.setCreateId(userId);
+                    basicVerifyCode.setCreateTime(System.currentTimeMillis());
+                    this.save(basicVerifyCode);
+                } else {
+                    basicVerifyCode.setExpireTime(processMiniute(new Date(), codeExpiredTime));
+                    basicVerifyCode.setValidPeriod(codeExpiredTime);
+                    basicVerifyCode.setVerifyCode(verifyCode);
+                    basicVerifyCode.setUpdateId(userId);
+                    basicVerifyCode.setUpdateTime(System.currentTimeMillis());
+                    this.updateById(basicVerifyCode);
+                }
+            } else {
+                throw ExceptionResultEnum.ERROR.exception(sendSmsResponse.getMessage());
+            }
+        } catch (ClientException e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
+    private static Long processMiniute(Date oldTime, int m) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(oldTime);
+        calendar.add(Calendar.MINUTE, m);
+        return calendar.getTime().getTime();
+    }
 }

+ 1 - 1
digit-print-business/src/main/java/com/qmth/digit/print/business/service/impl/SysRoleServiceImpl.java

@@ -66,7 +66,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
             isSuccess = this.save(role);
         }
         // 修改
-        {
+        else {
             if (sysRole != null && sysRole.getId() != role.getId()) {
                 throw ExceptionResultEnum.ERROR.exception("角色已存在");
             }

+ 3 - 3
digit-print-business/src/main/resources/db/init-data.sql

@@ -1,6 +1,6 @@
 truncate table `sys_config`;
 
-INSERT INTO `sys_config` VALUES (1, 'sys.user.initPassword', '初始密码', '123456', 1, NULL, NULL, NULL);
-INSERT INTO `sys_config` VALUES (2, 'sys.warning.days', '预警天数', '3', 1, NULL, NULL, NULL);
-INSERT INTO `sys_config` VALUES (3, 'sys.code.enable', '是否启用短信验证码', 'true', 1, NULL, NULL, NULL);
+INSERT INTO `sys_config` VALUES (1, 'sys.user.initPassword', '初始密码', '123456', NULL, 1, NULL, NULL, NULL);
+INSERT INTO `sys_config` VALUES (2, 'sys.warning.days', '预警天数', '3',NULL, 1, NULL, NULL, NULL);
+INSERT INTO `sys_config` VALUES (3, 'sys.code.enable', '是否启用短信验证码', 'true', 'true-启用,false-禁用', 1, NULL, NULL, NULL);
 

+ 1 - 0
digit-print-business/src/main/resources/db/init-table.sql

@@ -408,6 +408,7 @@ CREATE TABLE `sys_config`  (
   `key` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数键名',
   `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数名称',
   `value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数键值',
+  `remark` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
   `create_id` bigint(10) NULL DEFAULT NULL,
   `create_time` bigint(10) NULL DEFAULT NULL,
   `update_id` bigint(10) NULL DEFAULT NULL,

+ 1 - 0
digit-print-business/src/main/resources/mapper/BasicTemplateMapper.xml

@@ -23,5 +23,6 @@
         id,
         school_id, name, type, classify, attachment_id, enable, remark, create_id, create_time, update_id, update_time
     </sql>
+    <select id="listPage" resultType="com.qmth.digit.print.business.bean.dto.TemplateDto"></select>
 
 </mapper>

+ 29 - 2
digit-print/src/main/java/com/qmth/digit/print/api/BasicAttachmentController.java

@@ -1,9 +1,24 @@
 package com.qmth.digit.print.api;
 
 
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.digit.print.business.bean.ApiUser;
+import com.qmth.digit.print.business.entity.BasicAttachment;
+import com.qmth.digit.print.business.service.BasicAttachmentService;
+import com.qmth.digit.print.business.util.RequestUtils;
+import com.qmth.digit.print.common.util.Result;
+import com.qmth.digit.print.common.util.ResultUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
-
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
@@ -13,9 +28,21 @@ import org.springframework.web.bind.annotation.RestController;
  * @author xf
  * @since 2021-03-23
  */
+@Api(tags = "文件上传Controller")
 @RestController
-@RequestMapping("/basicAttachment")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}/file")
+@Aac(auth = BOOL.FALSE)
 public class BasicAttachmentController {
 
+    @Autowired
+    private BasicAttachmentService basicAttachmentService;
+
+    @ApiOperation(value = "文件上传")
+    @RequestMapping(value = "/upload", method = RequestMethod.POST)
+    public Result upload(HttpServletRequest request, MultipartFile file, String md5) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        Long id = basicAttachmentService.save(file, md5, apiUser.getSchoolId(), apiUser.getUserData().getId());
+        return ResultUtil.ok(id);
+    }
 }
 

+ 69 - 1
digit-print/src/main/java/com/qmth/digit/print/api/BasicTemplateController.java

@@ -1,10 +1,29 @@
 package com.qmth.digit.print.api;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.digit.print.business.bean.ApiUser;
+import com.qmth.digit.print.business.bean.dto.TemplateDto;
+import com.qmth.digit.print.business.bean.query.TemplateParam;
+import com.qmth.digit.print.business.entity.BasicTemplate;
+import com.qmth.digit.print.business.service.BasicTemplateService;
+import com.qmth.digit.print.business.util.RequestUtils;
+import com.qmth.digit.print.common.util.Result;
+import com.qmth.digit.print.common.util.ResultUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  * 通用模板 前端控制器
@@ -13,9 +32,58 @@ import org.springframework.web.bind.annotation.RestController;
  * @author xf
  * @since 2021-03-23
  */
+@Api(tags = "")
 @RestController
-@RequestMapping("/basicTemplate")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.basic}/template")
+@Aac(auth = BOOL.FALSE)
 public class BasicTemplateController {
 
+    @Autowired
+    private BasicTemplateService basicTemplateService;
+
+    /**
+     * 查询
+     * @param request
+     * @param param
+     * @return
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    public Result list(HttpServletRequest request, TemplateParam param) {
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        param.setSchoolId(apiUser.getSchoolId());
+        IPage<TemplateDto> templateDtoIPage = basicTemplateService.list(param);
+        return ResultUtil.ok(templateDtoIPage);
+    }
+
+    /**
+     * 新增/修改
+     * @param request
+     * @param template
+     * @return
+     */
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public Result save(HttpServletRequest request, @RequestBody BasicTemplate template){
+        ApiUser apiUser = RequestUtils.getApiUser(request);
+        template.setSchoolId(apiUser.getSchoolId());
+        template.setCreateId(template.getId() == null ? apiUser.getUserData().getId() : null);
+        template.setUpdateId(template.getId() != null ? apiUser.getUserData().getId() : null);
+        boolean isSuccess = basicTemplateService.saveTemplate(template);
+        return ResultUtil.ok(isSuccess);
+    }
+
+    /**
+     * 启用/禁用
+     *
+     * @param template
+     * @return
+     */
+    @ApiOperation(value = "启用/禁用")
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+    public Result enable(@RequestBody BasicTemplate template) {
+        boolean isSuccess = basicTemplateService.enable(template);
+        return ResultUtil.ok(isSuccess);
+    }
 }
 

+ 124 - 0
digit-print/src/main/java/com/qmth/digit/print/api/SysController.java

@@ -0,0 +1,124 @@
+package com.qmth.digit.print.api;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.api.annotation.Aac;
+import com.qmth.boot.api.annotation.BOOL;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.digit.print.business.bean.query.LoginParam;
+import com.qmth.digit.print.business.config.DictionaryConfig;
+import com.qmth.digit.print.business.entity.BasicVerifyCode;
+import com.qmth.digit.print.business.entity.SysUser;
+import com.qmth.digit.print.business.service.BasicVerifyCodeService;
+import com.qmth.digit.print.business.service.SysConfigService;
+import com.qmth.digit.print.business.service.SysUserService;
+import com.qmth.digit.print.business.util.security.Md5Utils;
+import com.qmth.digit.print.common.enums.ExceptionResultEnum;
+import com.qmth.digit.print.common.util.Result;
+import com.qmth.digit.print.common.util.ResultUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * @Date: 2021/3/30.
+ */
+@Api(tags = "系统Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.common}")
+@Aac(auth = BOOL.FALSE)
+public class SysController {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private BasicVerifyCodeService basicVerifyCodeService;
+
+    @Autowired
+    private SysConfigService sysConfigService;
+
+    @Autowired
+    private DictionaryConfig dictionaryConfig;
+
+    @ApiOperation(value = "登录")
+    @RequestMapping(value = "/login", method = RequestMethod.POST)
+    public Result login(@RequestBody LoginParam login) {
+        QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(SysUser::getLoginName, login.getLoginName());
+        SysUser sysUser = sysUserService.getOne(queryWrapper);
+        if (sysUser == null) {
+            throw ExceptionResultEnum.ERROR.exception("用户不存在");
+        }
+        String password = Md5Utils.toMd5Hex(login.getPassword());
+        if (password.equals(sysUser.getPassword())) {
+            throw ExceptionResultEnum.ERROR.exception("密码错误");
+        }
+        //校验验证码
+        String value = sysConfigService.getByKey("sys.code.enable");
+        if (value.equals("true")) {
+            String code = login.getCode();
+            if (Objects.isNull(code)) {
+                throw ExceptionResultEnum.ERROR.exception("验证码为空");
+            }
+            if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(code)) {
+                QueryWrapper<BasicVerifyCode> codeWrapper = new QueryWrapper<>();
+                codeWrapper.lambda().eq(BasicVerifyCode::getMobileNumber, sysUser.getMobileNumber()).eq(BasicVerifyCode::getUserId, sysUser.getId());
+                BasicVerifyCode accessControl = basicVerifyCodeService.getOne(codeWrapper);
+                if (accessControl == null || (accessControl != null && !accessControl.getVerifyCode().equals(code))) {
+                    throw ExceptionResultEnum.ERROR.exception("短信验证码错误,请仔细核对后再次输入");
+                }
+
+                if (new Date(accessControl.getExpireTime()).before(new Date())) {
+                    throw ExceptionResultEnum.ERROR.exception("短信验证码已过期");
+                }
+            }
+        }
+
+        //停用
+        if (!sysUser.getEnable()) {
+            throw ExceptionResultEnum.ERROR.exception("用户已禁用");
+        }
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("user", sysUser);
+        jsonObject.put("token", UUID.fastUUID().toString());
+        return ResultUtil.ok(jsonObject);
+    }
+
+    /**
+     * 发送验证码
+     * @param loginParam
+     * @return
+     */
+    @ApiOperation(value = "发送验证码")
+    @RequestMapping(value = "/getVerifyCode", method = RequestMethod.POST)
+    public Object getverifyCode(@RequestBody LoginParam loginParam) {
+        String loginName = loginParam.getLoginName();
+        QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
+        wrapper.lambda().eq(SysUser::getLoginName, loginName);
+        SysUser user = sysUserService.getOne(wrapper);
+        //用户不存在
+        if (Objects.isNull(user)) {
+            throw ExceptionResultEnum.ERROR.exception("用户不存在");
+        }
+        String password = Md5Utils.toMd5Hex(loginParam.getPassword());
+        if (password.equals(user.getPassword())) {
+            throw ExceptionResultEnum.ERROR.exception("密码错误");
+        }
+        String mobileNumber = user.getMobileNumber();
+        if (Objects.isNull(mobileNumber)) {
+            throw ExceptionResultEnum.ERROR.exception("用户未绑定手机号码");
+        }
+        basicVerifyCodeService.sendVeirfyCode(mobileNumber, user.getId());
+        return ResultUtil.ok(true);
+    }
+
+}

+ 14 - 15
digit-print/src/main/resources/application.properties

@@ -1,27 +1,27 @@
 server.port=7001
-#tomcat\u6700\u5927\u7EBF\u7A0B\u6570\uFF0C\u9ED8\u8BA4\u4E3A200
+#tomcat最大线程数
 server.tomcat.threads.max=2500
-#tomcat\u6700\u5927\u8FDE\u63A5\u6570
+#tomcat最大连接数
 server.tomcat.max-connections=2500
-#tomcat\u7684URI\u7F16\u7801
+#tomcat编码
 server.tomcat.uri-encoding=UTF-8
 
-#\u9879\u76EE\u540D\u79F0
+#应用名
 spring.application.name=distributed-print
 
-#\u6570\u636E\u6E90\u914D\u7F6E
+#数据库参数
 db.host=localhost
 db.port=3306
 db.name=tc_print_2
 db.username=root
 db.password=root
 
-#redis\u6570\u636E\u6E90\u914D\u7F6E
+#redis参数
 com.qmth.redis.host=${db.host}
 com.qmth.redis.db=1
 #com.qmth.redis.password
 
-#mysql\u914D\u7F6E
+#mysql配置
 com.qmth.mysql.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
 com.qmth.mysql.username=${db.username}
 com.qmth.mysql.password=${db.password}
@@ -29,11 +29,11 @@ com.qmth.mysql.min-idle=40
 com.qmth.mysql.max-pool-size=200
 com.qmth.mysql.log-level=debug
 
-#\u65E5\u671F\u683C\u5F0F\u5316
+#jsckson配置
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 
-#\u963F\u91CC\u4E91OSS\u914D\u7F6E
+#oss配置
 aliyun.oss.name=oss-cn-shenzhen.aliyuncs.com
 aliyun.oss.endpoint=http://${aliyun.oss.name}
 aliyun.oss.accessKeyId=LTAI4Fi8jVRYT49QBXU9x5QX
@@ -41,32 +41,31 @@ aliyun.oss.accessKeySecret=97aBLBfkQR5mzCiQa82yWLAH57eUd8
 aliyun.oss.bucket=teachcloud-test
 aliyun.oss.url=http://${aliyun.oss.bucket}.${aliyun.oss.name}
 
-#\u7CFB\u7EDF\u914D\u7F6E
+#是否上传oss
 sys.config.oss=true
 sys.config.attachmentType=.xlsx,.xls,.doc,.docx,.pdf,.jpg,.jpeg,.png,.html,.zip,.mp3,.wav,.dll,.exe
-sys.config.serverUpload=
+sys.config.serverUpload=upload
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 #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-rate-limit=1/5s
 
-#token\u8D85\u65F6\u914D\u7F6E
+#token
 com.qmth.api.auth.time-max-ahead=-10000
 com.qmth.api.auth.time-max-delay=10000
 
 #\u7F13\u5B58\u65F6\u95F4
 com.qmth.cache.expire-after-write=240m
 
-#api\u524D\u7F00
+#api
 prefix.url.common=common
 prefix.url.sys=sys
 prefix.url.basic=basic
 prefix.url.exam=exam
 
-#\u65E5\u5FD7\u914D\u7F6E
+#日志
 com.qmth.logging.root-level=info
 com.qmth.logging.file-path=/Users/king/Downloads/digit-print.log