Browse Source

武大考务数据对接-授权

xiaof 2 năm trước cách đây
mục cha
commit
995f256219
34 tập tin đã thay đổi với 982 bổ sung42 xóa
  1. 9 0
      pom.xml
  2. 4 5
      src/main/java/com/qmth/eds/api/ExamSemesterController.java
  3. 4 5
      src/main/java/com/qmth/eds/api/ExamTypeController.java
  4. 3 4
      src/main/java/com/qmth/eds/api/SysUserController.java
  5. 75 0
      src/main/java/com/qmth/eds/api/TSAuthController.java
  6. 33 0
      src/main/java/com/qmth/eds/bean/dto/AuthOrgInfoDto.java
  7. 41 2
      src/main/java/com/qmth/eds/common/contant/SystemConstant.java
  8. 42 0
      src/main/java/com/qmth/eds/common/entity/BasicSchool.java
  9. 41 6
      src/main/java/com/qmth/eds/common/entity/SysOrg.java
  10. 129 0
      src/main/java/com/qmth/eds/common/entity/TSAuth.java
  11. 38 0
      src/main/java/com/qmth/eds/common/enums/AuthEnum.java
  12. 2 0
      src/main/java/com/qmth/eds/common/enums/ExceptionResultEnum.java
  13. 36 0
      src/main/java/com/qmth/eds/common/enums/OrgTypeEnum.java
  14. 6 0
      src/main/java/com/qmth/eds/core/config/DictionaryConfig.java
  15. 26 0
      src/main/java/com/qmth/eds/core/domain/FssLocalFileDomain.java
  16. 2 1
      src/main/java/com/qmth/eds/mapper/BasicSchoolMapper.java
  17. 2 1
      src/main/java/com/qmth/eds/mapper/SysOrgMapper.java
  18. 16 0
      src/main/java/com/qmth/eds/mapper/TSAuthMapper.java
  19. 43 0
      src/main/java/com/qmth/eds/service/AuthInfoService.java
  20. 29 0
      src/main/java/com/qmth/eds/service/CommonCacheService.java
  21. 2 2
      src/main/java/com/qmth/eds/service/ExamSemesterService.java
  22. 2 2
      src/main/java/com/qmth/eds/service/ExamTypeService.java
  23. 2 2
      src/main/java/com/qmth/eds/service/SysUserService.java
  24. 12 0
      src/main/java/com/qmth/eds/service/TSAuthService.java
  25. 257 0
      src/main/java/com/qmth/eds/service/impl/AuthInfoServiceImpl.java
  26. 66 0
      src/main/java/com/qmth/eds/service/impl/CommonCacheServiceImpl.java
  27. 4 2
      src/main/java/com/qmth/eds/service/impl/ExamSemesterServiceImpl.java
  28. 4 2
      src/main/java/com/qmth/eds/service/impl/ExamTypeServiceImpl.java
  29. 7 3
      src/main/java/com/qmth/eds/service/impl/SysUserServiceImpl.java
  30. 20 0
      src/main/java/com/qmth/eds/service/impl/TSAuthServiceImpl.java
  31. 7 5
      src/main/java/com/qmth/eds/start/StartRunning.java
  32. 6 0
      src/main/resources/application-dev.properties
  33. 6 0
      src/main/resources/application-release.properties
  34. 6 0
      src/main/resources/application-test.properties

+ 9 - 0
pom.xml

@@ -75,6 +75,11 @@
                 <artifactId>data-mybatis-plus</artifactId>
                 <version>${qmth.boot.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.qmth.boot</groupId>
+                <artifactId>core-solar</artifactId>
+                <version>${qmth.boot.version}</version>
+            </dependency>
             <dependency>
                 <groupId>io.springfox</groupId>
                 <artifactId>springfox-swagger-ui</artifactId>
@@ -252,6 +257,10 @@
             <groupId>com.qmth.boot</groupId>
             <artifactId>data-mybatis-plus</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.boot</groupId>
+            <artifactId>core-solar</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger-ui</artifactId>

+ 4 - 5
src/main/java/com/qmth/eds/api/ExamSemesterController.java

@@ -31,10 +31,9 @@ public class ExamSemesterController {
      */
     @ApiOperation(value = "分页")
     @PostMapping("/page")
-    public Result page(@RequestParam(value = "schoolId") Long schoolId,
-                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+    public Result page(@RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examSemesterService.pageData(schoolId, pageNumber, pageSize));
+        return ResultUtil.ok(examSemesterService.pageData(pageNumber, pageSize));
     }
 
     /**
@@ -42,8 +41,8 @@ public class ExamSemesterController {
      */
     @ApiOperation(value = "查询")
     @PostMapping("/list")
-    public Result list(@RequestParam(value = "schoolId") Long schoolId) {
-        return ResultUtil.ok(examSemesterService.listBySchoolId(schoolId));
+    public Result list() {
+        return ResultUtil.ok(examSemesterService.listBySchoolId());
     }
 
     /**

+ 4 - 5
src/main/java/com/qmth/eds/api/ExamTypeController.java

@@ -31,10 +31,9 @@ public class ExamTypeController {
      */
     @ApiOperation(value = "分页")
     @PostMapping("/page")
-    public Result page(@RequestParam(value = "schoolId") Long schoolId,
-                       @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+    public Result page(@RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(examTypeService.pageData(schoolId, pageNumber, pageSize));
+        return ResultUtil.ok(examTypeService.pageData(pageNumber, pageSize));
     }
 
     /**
@@ -42,8 +41,8 @@ public class ExamTypeController {
      */
     @ApiOperation(value = "查询")
     @PostMapping("/list")
-    public Result list(@RequestParam(value = "schoolId") Long schoolId) {
-        return ResultUtil.ok(examTypeService.listData(schoolId));
+    public Result list() {
+        return ResultUtil.ok(examTypeService.listData());
     }
 
     /**

+ 3 - 4
src/main/java/com/qmth/eds/api/SysUserController.java

@@ -3,9 +3,9 @@ package com.qmth.eds.api;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.entity.SysUser;
-import com.qmth.eds.service.SysUserService;
 import com.qmth.eds.common.util.Result;
 import com.qmth.eds.common.util.ResultUtil;
+import com.qmth.eds.service.SysUserService;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.validation.BindingResult;
@@ -42,13 +42,12 @@ public class SysUserController {
      */
     @ApiOperation(value = "查询")
     @PostMapping("/page")
-    public Result page(@RequestParam(value = "schoolId") Long schoolId,
-                       @RequestParam(value = "loginName", required = false) String loginName,
+    public Result page(@RequestParam(value = "loginName", required = false) String loginName,
                        @RequestParam(value = "realName", required = false) String realName,
                        @RequestParam(value = "enable", required = false) Boolean enable,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        return ResultUtil.ok(sysUserService.list(schoolId, loginName, enable, realName, pageNumber, pageSize));
+        return ResultUtil.ok(sysUserService.list(loginName, enable, realName, pageNumber, pageSize));
     }
 
     /**

+ 75 - 0
src/main/java/com/qmth/eds/api/TSAuthController.java

@@ -0,0 +1,75 @@
+package com.qmth.eds.api;
+
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.boot.core.solar.crypto.AppLicenseUtil;
+import com.qmth.eds.common.contant.SystemConstant;
+import com.qmth.eds.common.util.Result;
+import com.qmth.eds.common.util.ResultUtil;
+import com.qmth.eds.common.util.ServletUtil;
+import com.qmth.eds.service.AuthInfoService;
+import io.swagger.annotations.*;
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+/**
+ * <p>
+ * 激活授权配置表 前端控制器
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-04-26
+ */
+@Api(tags = "授权配置Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/auth")
+@Validated
+public class TSAuthController {
+    private final static Logger log = LoggerFactory.getLogger(TSAuthController.class);
+
+    @Resource
+    AuthInfoService authInfoService;
+
+    @ApiOperation(value = "导出硬件信息")
+    @ApiResponses({@ApiResponse(code = 200, message = "导出硬件信息", response = Object.class)})
+    @RequestMapping(value = "/export/device/info", method = RequestMethod.POST)
+    public void info() {
+        try {
+            HttpServletResponse response = ServletUtil.getResponse();
+            response.setHeader("Content-Disposition", "attachment; filename=" + SystemConstant.urlEncode("device.info"));
+            IOUtils.copy(new ByteArrayInputStream(AppLicenseUtil.buildDeviceInfo().value()), response.getOutputStream());
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+
+    @ApiOperation(value = "离线激活")
+    @ApiResponses({@ApiResponse(code = 200, message = "授权配置信息", response = Boolean.class)})
+    @RequestMapping(value = "/offline/activation", method = RequestMethod.POST)
+    public Result offlineActivation(@ApiParam(value = "上传文件", required = true) @RequestParam(required = true) MultipartFile file) throws Exception {
+        try {
+            authInfoService.updateLicense(file.getBytes());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return ResultUtil.ok(true);
+    }
+
+    @ApiOperation(value = "查询激活信息")
+    @ApiResponses({@ApiResponse(code = 200, message = "授权配置信息", response = Long.class)})
+    @RequestMapping(value = "/select", method = RequestMethod.POST)
+    public Result select() {
+        return ResultUtil.ok(authInfoService.selectAuthInfo());
+    }
+}

+ 33 - 0
src/main/java/com/qmth/eds/bean/dto/AuthOrgInfoDto.java

@@ -0,0 +1,33 @@
+package com.qmth.eds.bean.dto;
+
+import com.qmth.boot.core.solar.model.AppControl;
+import com.qmth.boot.core.solar.model.OrgInfo;
+
+import java.io.Serializable;
+
+/**
+ * 鉴权org dto
+ */
+public class AuthOrgInfoDto implements Serializable {
+
+    OrgInfo orgInfo;
+
+    AppControl control;
+
+    public AuthOrgInfoDto() {
+
+    }
+
+    public AuthOrgInfoDto(OrgInfo orgInfo, AppControl control) {
+        this.orgInfo = orgInfo;
+        this.control = control;
+    }
+
+    public AppControl getControl() {
+        return control;
+    }
+
+    public void setControl(AppControl control) {
+        this.control = control;
+    }
+}

+ 41 - 2
src/main/java/com/qmth/eds/common/contant/SystemConstant.java

@@ -1,10 +1,14 @@
 package com.qmth.eds.common.contant;
 
 import com.qmth.boot.core.uid.service.UidService;
-import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.common.entity.SysUser;
+import com.qmth.eds.common.enums.ExceptionResultEnum;
+import com.qmth.eds.common.util.Base64Util;
+import com.qmth.eds.common.util.ServletUtil;
+import org.apache.commons.io.IOUtils;
 
-import java.io.File;
+import java.io.*;
+import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.Objects;
 import java.util.StringJoiner;
@@ -88,6 +92,7 @@ public class SystemConstant {
     public static final String SCHOOL_CODE_CACHE = "school:code:cache";
     public static final String ORG_CACHE = "org:cache";
     public static final String PRIVILEGE_URL_CACHE = "privilege:url:cache";
+    public static final String AUTH_INFO_CACHE = "auth:info:cache";
     public static final String ROLE_PRIVILEGE_CACHE = "role:privilege:cache";
     public static final String USER_ROLE_PRIVILEGE_CACHE = "user:role:privilege:cache";
     public static final String ROLE_CACHE = "role:cache";
@@ -160,6 +165,40 @@ public class SystemConstant {
         TEMP_FILES_DIR = fileTempDir.getPath();
     }
 
+    /**
+     * URL 编码, Encode默认为UTF-8.
+     */
+    public static String urlEncode(String part) {
+        try {
+            return URLEncoder.encode(part, SystemConstant.CHARSET_NAME);
+        } catch (UnsupportedEncodingException e) {
+            throw ExceptionResultEnum.ERROR.exception(e.getMessage());
+        }
+    }
+
+    /**
+     * 图片转换
+     *
+     * @param imgBase64
+     * @param filePath
+     * @throws IOException
+     */
+    public static void base64ToImage(String imgBase64, String filePath) throws IOException {
+        OutputStream out = null;
+        try {
+            byte[] b = Base64Util.decode(imgBase64);
+            out = new FileOutputStream(filePath);
+            IOUtils.write(b, out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (Objects.nonNull(out)) {
+                out.flush();
+                out.close();
+            }
+        }
+    }
+
     /**
      * id转换为long
      *

+ 42 - 0
src/main/java/com/qmth/eds/common/entity/BasicSchool.java

@@ -1,7 +1,9 @@
 package com.qmth.eds.common.entity;
 
 import java.io.Serializable;
+import java.util.Objects;
 
+import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.core.base.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -40,6 +42,46 @@ public class BasicSchool extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "学校logo")
     private String logo;
 
+    public BasicSchool() {
+
+    }
+
+    public BasicSchool(Long id, String code, String name, String accessKey, String accessSecret) {
+        this.code = code;
+        this.name = name;
+        this.accessKey = accessKey;
+        this.accessSecret = accessSecret;
+        setId(id);
+        this.enable = true;
+    }
+
+    public BasicSchool(String code, String name, String accessKey, String accessSecret, String logo) {
+        this.code = code;
+        this.name = name;
+        this.accessKey = accessKey;
+        this.accessSecret = accessSecret;
+        this.logo = logo;
+        setId(SystemConstant.getDbUuid());
+        this.enable = true;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        BasicSchool that = (BasicSchool) o;
+        return code.equals(that.code) && name.equals(that.name) && enable.equals(that.enable) && accessKey.equals(that.accessKey) && accessSecret.equals(that.accessSecret) && remark.equals(that.remark) && logo.equals(that.logo);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(code, name, enable, accessKey, accessSecret, remark, logo);
+    }
+
     public String getCode() {
         return code;
     }

+ 41 - 6
src/main/java/com/qmth/eds/common/entity/SysOrg.java

@@ -1,13 +1,18 @@
 package com.qmth.eds.common.entity;
 
-import java.io.Serializable;
-
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.eds.common.contant.SystemConstant;
+import com.qmth.eds.common.enums.OrgTypeEnum;
 import com.qmth.eds.core.base.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.io.Serializable;
+import java.util.Objects;
+
 /**
  * <p>
  * 学校组织架构
@@ -16,7 +21,7 @@ import io.swagger.annotations.ApiModelProperty;
  * @author wangliang
  * @since 2022-05-14
  */
-@ApiModel(value="SysOrg对象", description="学校组织架构")
+@ApiModel(value = "SysOrg对象", description = "学校组织架构")
 public class SysOrg extends BaseEntity implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -26,7 +31,8 @@ public class SysOrg extends BaseEntity implements Serializable {
     private Long schoolId;
 
     @ApiModelProperty(value = "类型,SCHOOL:学校,COLLEGE:学院,FACULTY:院系,TEACHING_ROOM:教研室,PRINTING_HOUSE:印刷厂")
-    private String type;
+    @TableField(value = "type", updateStrategy = FieldStrategy.IGNORED)
+    private OrgTypeEnum type;
 
     @ApiModelProperty(value = "机构代码")
     private String code;
@@ -41,6 +47,35 @@ public class SysOrg extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
     private Boolean enable;
 
+    public SysOrg() {
+
+    }
+
+    public SysOrg(Long schoolId, String name) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.type = OrgTypeEnum.SCHOOL;
+        this.name = name;
+        this.enable = true;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        SysOrg sysOrg = (SysOrg) o;
+        return schoolId.equals(sysOrg.schoolId) && code.equals(sysOrg.code) && type == sysOrg.type && name.equals(sysOrg.name) && parentId.equals(sysOrg.parentId) && enable.equals(sysOrg.enable);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(schoolId, code, type, name, parentId, enable);
+    }
+
     public Long getSchoolId() {
         return schoolId;
     }
@@ -49,11 +84,11 @@ public class SysOrg extends BaseEntity implements Serializable {
         this.schoolId = schoolId;
     }
 
-    public String getType() {
+    public OrgTypeEnum getType() {
         return type;
     }
 
-    public void setType(String type) {
+    public void setType(OrgTypeEnum type) {
         this.type = type;
     }
 

+ 129 - 0
src/main/java/com/qmth/eds/common/entity/TSAuth.java

@@ -0,0 +1,129 @@
+package com.qmth.eds.common.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.eds.common.contant.SystemConstant;
+import com.qmth.eds.common.enums.AuthEnum;
+import com.qmth.eds.core.base.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 激活授权配置表
+ * </p>
+ */
+@ApiModel(value = "TSAuth对象", description = "激活授权配置表")
+public class TSAuth extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "accessKey")
+    private String accessKey;
+
+    @ApiModelProperty(value = "accessSecret")
+    private String accessSecret;
+
+    @ApiModelProperty(value = "离线授权证书")
+    private String description;
+
+    @ApiModelProperty(value = "授权类型")
+    private AuthEnum type;
+
+    @ApiModelProperty(value = "过期时间")
+    private Long expireTime;
+
+    @ApiModelProperty(value = "文件数据")
+    private byte[] file;
+
+    public TSAuth() {
+
+    }
+
+    public TSAuth(Long schoolId, String accessKey, String accessSecret, AuthEnum type, Long expireTime) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.accessKey = accessKey;
+        this.accessSecret = accessSecret;
+        this.type = type;
+        this.expireTime = expireTime;
+    }
+
+    public TSAuth(Long schoolId, String description, AuthEnum type, Long expireTime) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.description = description;
+        this.type = type;
+        this.expireTime = expireTime;
+    }
+
+    public TSAuth(Long schoolId, byte[] file, AuthEnum type, Long expireTime) {
+        setId(SystemConstant.getDbUuid());
+        this.schoolId = schoolId;
+        this.file = file;
+        this.type = type;
+        this.expireTime = expireTime;
+    }
+
+    public byte[] getFile() {
+        return file;
+    }
+
+    public void setFile(byte[] file) {
+        this.file = file;
+    }
+
+    public Long getExpireTime() {
+        return expireTime;
+    }
+
+    public void setExpireTime(Long expireTime) {
+        this.expireTime = expireTime;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getAccessKey() {
+        return accessKey;
+    }
+
+    public void setAccessKey(String accessKey) {
+        this.accessKey = accessKey;
+    }
+
+    public String getAccessSecret() {
+        return accessSecret;
+    }
+
+    public void setAccessSecret(String accessSecret) {
+        this.accessSecret = accessSecret;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public AuthEnum getType() {
+        return type;
+    }
+
+    public void setType(AuthEnum type) {
+        this.type = type;
+    }
+}

+ 38 - 0
src/main/java/com/qmth/eds/common/enums/AuthEnum.java

@@ -0,0 +1,38 @@
+package com.qmth.eds.common.enums;
+
+import java.util.Objects;
+
+/**
+ * 授权配置类型
+ */
+public enum AuthEnum {
+
+    ON_LINE("在线激活"),
+
+    OFF_LINE("离线激活");
+
+    AuthEnum(String title) {
+        this.title = title;
+    }
+
+    private String title;
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param value
+     * @return
+     */
+    public static String convertToName(String value) {
+        for (AuthEnum e : AuthEnum.values()) {
+            if (Objects.equals(value.trim(), e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 2 - 0
src/main/java/com/qmth/eds/common/enums/ExceptionResultEnum.java

@@ -90,6 +90,8 @@ public enum ExceptionResultEnum {
 
     ROLE_ENABLE_AUTHORIZATION(HttpStatus.UNAUTHORIZED, 4010008, "角色被禁用或没有权限"),
 
+    AUTH_INFO_ERROR(HttpStatus.UNAUTHORIZED, 4010009, "系统授权信息已过期,请联系系统管理员激活!"),
+
     /**
      * 404
      */

+ 36 - 0
src/main/java/com/qmth/eds/common/enums/OrgTypeEnum.java

@@ -0,0 +1,36 @@
+package com.qmth.eds.common.enums;
+
+import java.util.Objects;
+
+/**
+ * 机构类型enum
+ */
+public enum OrgTypeEnum {
+
+    SCHOOL("学校");
+
+    private String title;
+
+    private OrgTypeEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (OrgTypeEnum e : OrgTypeEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 6 - 0
src/main/java/com/qmth/eds/core/config/DictionaryConfig.java

@@ -66,6 +66,12 @@ public class DictionaryConfig {
         return new WhuDomain();
     }
 
+    @Bean
+    @ConfigurationProperties(prefix = "com.qmth.fss.localfile", ignoreUnknownFields = false)
+    public FssLocalFileDomain fssLocalFileDomain() {
+        return new FssLocalFileDomain();
+    }
+
     @Bean
     @ConfigurationProperties(prefix = "cloud.marking.config", ignoreUnknownFields = false)
     public CloudMarkingDomain cloudMarkingDomain() {

+ 26 - 0
src/main/java/com/qmth/eds/core/domain/FssLocalFileDomain.java

@@ -0,0 +1,26 @@
+package com.qmth.eds.core.domain;
+
+/**
+ *
+ */
+public class FssLocalFileDomain {
+    private String config;
+
+    private String server;
+
+    public String getConfig() {
+        return config;
+    }
+
+    public void setConfig(String config) {
+        this.config = config;
+    }
+
+    public String getServer() {
+        return server;
+    }
+
+    public void setServer(String server) {
+        this.server = server;
+    }
+}

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

@@ -2,6 +2,7 @@ package com.qmth.eds.mapper;
 
 import com.qmth.eds.common.entity.BasicSchool;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.eds.core.base.CustomBaseMapper;
 
 /**
  * <p>
@@ -11,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author wangliang
  * @since 2022-05-14
  */
-public interface BasicSchoolMapper extends BaseMapper<BasicSchool> {
+public interface BasicSchoolMapper extends CustomBaseMapper<BasicSchool> {
 
 }

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

@@ -2,6 +2,7 @@ package com.qmth.eds.mapper;
 
 import com.qmth.eds.common.entity.SysOrg;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.eds.core.base.CustomBaseMapper;
 
 /**
  * <p>
@@ -11,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author wangliang
  * @since 2022-05-14
  */
-public interface SysOrgMapper extends BaseMapper<SysOrg> {
+public interface SysOrgMapper extends CustomBaseMapper<SysOrg> {
 
 }

+ 16 - 0
src/main/java/com/qmth/eds/mapper/TSAuthMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.eds.mapper;
+
+import com.qmth.eds.common.entity.TSAuth;
+import com.qmth.eds.core.base.CustomBaseMapper;
+
+/**
+ * <p>
+ * 激活授权配置表 Mapper 接口
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-04-26
+ */
+public interface TSAuthMapper extends CustomBaseMapper<TSAuth> {
+
+}

+ 43 - 0
src/main/java/com/qmth/eds/service/AuthInfoService.java

@@ -0,0 +1,43 @@
+package com.qmth.eds.service;
+
+import com.qmth.boot.core.solar.model.AppInfo;
+import com.qmth.eds.common.enums.AuthEnum;
+
+/**
+ * 授权信息service
+ */
+public interface AuthInfoService {
+
+    /**
+     * 授权信息初始化
+     */
+    AppInfo appInfoInit();
+
+    /**
+     * app是否过期
+     *
+     * @param code code
+     */
+    void appHasExpired(String code);
+
+    /**
+     * 离线激活
+     *
+     * @param licenseData licenseData
+     */
+    void updateLicense(byte[] licenseData) throws Exception;
+
+    /**
+     * 查询授权信息
+     */
+    Long selectAuthInfo();
+
+    /**
+     * 保存授权信息
+     *
+     * @param appInfo  授权信息对象
+     * @param authEnum 类型
+     * @param file     文件
+     */
+    public void saveAuthInfo(AppInfo appInfo, AuthEnum authEnum, byte[] file) throws Exception;
+}

+ 29 - 0
src/main/java/com/qmth/eds/service/CommonCacheService.java

@@ -1,6 +1,7 @@
 package com.qmth.eds.service;
 
 import com.qmth.eds.bean.auth.AuthBean;
+import com.qmth.eds.bean.dto.AuthOrgInfoDto;
 import com.qmth.eds.bean.result.MenuResult;
 import com.qmth.eds.common.entity.*;
 import com.qmth.eds.common.enums.PrivilegePropertyEnum;
@@ -211,4 +212,32 @@ public interface CommonCacheService {
      * @param userId
      */
     public void removeUserRolePrivilegeCache(Long userId);
+
+    AuthOrgInfoDto authInfoCache(String code);
+
+    /**
+     * 修改鉴权缓存
+     *
+     * @param code
+     * @return
+     */
+    public AuthOrgInfoDto updateAuthInfoCache(String code);
+
+    void removeAuthInfoCache(String code);
+
+    /**
+     * 删除学校缓存
+     */
+    public void removeSchoolIdCache();
+
+    /**
+     * 删除学校缓存
+     */
+    public void removeSchoolCodeCache();
+
+    /**
+     * 删除机构缓存
+     */
+    public void removeOrgCache();
+
 }

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

@@ -11,11 +11,11 @@ import java.util.List;
  */
 public interface ExamSemesterService extends IService<ExamSemester> {
 
-    List<ExamSemester> listBySchoolId(Long schoolId);
+    List<ExamSemester> listBySchoolId();
 
     boolean saveData(ExamSemester examSemester);
 
     boolean delete(Long id);
 
-    IPage<ExamSemester> pageData(Long schoolId, Integer pageNumber, Integer pageSize);
+    IPage<ExamSemester> pageData(Integer pageNumber, Integer pageSize);
 }

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

@@ -15,7 +15,7 @@ public interface ExamTypeService extends IService<ExamType> {
 
     boolean delete(Long id);
 
-    IPage<ExamType> pageData(Long schoolId, Integer pageNumber, Integer pageSize);
+    IPage<ExamType> pageData(Integer pageNumber, Integer pageSize);
 
-    List<ExamType> listData(Long schoolId);
+    List<ExamType> listData();
 }

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

@@ -1,8 +1,8 @@
 package com.qmth.eds.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.eds.common.entity.SysUser;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.eds.common.entity.SysUser;
 
 /**
  * <p>
@@ -14,7 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface SysUserService extends IService<SysUser> {
 
-    IPage<SysUser> list(Long schoolId, String loginName, Boolean enable, String realName, Integer pageNumber, Integer pageSize);
+    IPage<SysUser> list(String loginName, Boolean enable, String realName, Integer pageNumber, Integer pageSize);
 
     boolean saveUser(SysUser sysUser);
 

+ 12 - 0
src/main/java/com/qmth/eds/service/TSAuthService.java

@@ -0,0 +1,12 @@
+package com.qmth.eds.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.eds.common.entity.TSAuth;
+
+/**
+ * <p>
+ * 激活授权配置表 服务类
+ */
+public interface TSAuthService extends IService<TSAuth> {
+
+}

+ 257 - 0
src/main/java/com/qmth/eds/service/impl/AuthInfoServiceImpl.java

@@ -0,0 +1,257 @@
+package com.qmth.eds.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.core.solar.config.SolarProperties;
+import com.qmth.boot.core.solar.model.AppInfo;
+import com.qmth.boot.core.solar.model.OrgInfo;
+import com.qmth.boot.core.solar.service.SolarService;
+import com.qmth.eds.bean.dto.AuthOrgInfoDto;
+import com.qmth.eds.common.contant.SystemConstant;
+import com.qmth.eds.common.entity.BasicSchool;
+import com.qmth.eds.common.entity.SysOrg;
+import com.qmth.eds.common.entity.TSAuth;
+import com.qmth.eds.common.enums.AuthEnum;
+import com.qmth.eds.common.enums.ExceptionResultEnum;
+import com.qmth.eds.common.enums.UploadFileEnum;
+import com.qmth.eds.common.util.FileStoreUtil;
+import com.qmth.eds.core.config.DictionaryConfig;
+import com.qmth.eds.mapper.BasicSchoolMapper;
+import com.qmth.eds.mapper.SysOrgMapper;
+import com.qmth.eds.mapper.TSAuthMapper;
+import com.qmth.eds.service.*;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.time.LocalDateTime;
+import java.util.*;
+
+/**
+ * 授权信息service
+ */
+@Service
+public class AuthInfoServiceImpl implements AuthInfoService {
+    private final static Logger log = LoggerFactory.getLogger(AuthInfoServiceImpl.class);
+
+    @Resource
+    SolarProperties solarProperties;
+
+    @Resource
+    SolarService solarService;
+
+    @Resource
+    TSAuthService tsAuthService;
+
+    @Resource
+    TSAuthMapper tsAuthMapper;
+
+    @Resource
+    CommonCacheService commonCacheService;
+
+    @Resource
+    BasicSchoolService basicSchoolService;
+
+    @Resource
+    BasicSchoolMapper basicSchoolMapper;
+
+    @Resource
+    FileStoreUtil fileStoreUtil;
+
+    @Resource
+    DictionaryConfig dictionaryConfig;
+
+    @Resource
+    AuthInfoService authInfoService;
+
+    @Resource
+    SysOrgService sysOrgService;
+
+    @Resource
+    SysOrgMapper sysOrgMapper;
+
+    /**
+     * 授权信息初始化
+     */
+    @Override
+    public AppInfo appInfoInit() {
+        AppInfo appInfo = null;
+        try {
+            appInfo = solarService.getAppInfo();
+            if (Objects.nonNull(appInfo) && Objects.nonNull(solarProperties)) {
+                if (Objects.nonNull(solarProperties.getAccessKey())
+                        && !Objects.equals(solarProperties.getAccessKey().trim(), "")
+                        && Objects.nonNull(solarProperties.getAccessSecret())
+                        && !Objects.equals(solarProperties.getAccessSecret().trim(), "")) {//在线激活
+                    authInfoService.saveAuthInfo(appInfo, AuthEnum.ON_LINE, null);
+                } else if (Objects.nonNull(solarProperties.getLicense())
+                        && !Objects.equals(solarProperties.getLicense().trim(), "")) {//离线激活
+                    authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, null);
+                }
+            } else {
+                QueryWrapper<TSAuth> tsAuthQueryWrapper = new QueryWrapper<>();
+                tsAuthQueryWrapper.lambda().isNotNull(TSAuth::getFile);
+                List<TSAuth> tsAuthList = tsAuthService.list(tsAuthQueryWrapper);
+                if (!CollectionUtils.isEmpty(tsAuthList)) {
+                    for (TSAuth t : tsAuthList) {
+                        appInfo = solarService.update(t.getFile());
+                        authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, t.getFile());
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return appInfo;
+    }
+
+    /**
+     * app是否过期
+     *
+     * @param code
+     * @return
+     */
+    @Override
+    public void appHasExpired(String code) {
+        if (Objects.nonNull(code)) {
+            AuthOrgInfoDto authOrgInfoDto = commonCacheService.authInfoCache(code);
+            if (Objects.isNull(authOrgInfoDto) || (Objects.nonNull(authOrgInfoDto) && authOrgInfoDto.getControl().hasExpired())) {
+                throw ExceptionResultEnum.AUTH_INFO_ERROR.exception();
+            }
+        }
+    }
+
+    /**
+     * 离线激活
+     *
+     * @param licenseData
+     */
+    @Override
+    public void updateLicense(byte[] licenseData) throws Exception {
+        AppInfo appInfo = solarService.update(licenseData);
+        if (Objects.isNull(appInfo)) {
+            throw ExceptionResultEnum.ERROR.exception("激活失败");
+        }
+        authInfoService.saveAuthInfo(appInfo, AuthEnum.OFF_LINE, licenseData);
+    }
+
+    /**
+     * 查询授权信息
+     *
+     * @return
+     */
+    @Override
+    public Long selectAuthInfo() {
+        Long expireTime = null;
+        AppInfo appInfo = solarService.getAppInfo();
+        if (Objects.nonNull(appInfo) && Objects.nonNull(appInfo.getControl())) {
+            expireTime = Objects.nonNull(appInfo.getControl().getExpireTime()) ? appInfo.getControl().getExpireTime() : -1;
+        }
+        return expireTime;
+    }
+
+    /**
+     * 保存鉴权信息
+     *
+     * @param appInfo
+     * @param authEnum
+     * @param file
+     * @throws Exception
+     */
+    @Override
+    @Transactional
+    public void saveAuthInfo(AppInfo appInfo, AuthEnum authEnum, byte[] file) throws Exception {
+        List<OrgInfo> orgInfoList = solarService.getOrgList();
+        List<TSAuth> tsAuthList = null;
+        Set<Long> orgIdsSet = null;
+        Set<BasicSchool> basicSchoolSet = null;
+        Set<SysOrg> sysOrgSet = null;
+        if (!CollectionUtils.isEmpty(orgInfoList)) {
+            tsAuthList = new ArrayList<>();
+            orgIdsSet = new HashSet<>();
+            basicSchoolSet = new HashSet<>();
+            sysOrgSet = new HashSet<>();
+        }
+        boolean oss = dictionaryConfig.sysDomain().isOss();
+        for (OrgInfo o : orgInfoList) {
+            orgIdsSet.add(o.getId());
+            if (authEnum == AuthEnum.OFF_LINE) {
+                if (Objects.isNull(file)) {
+                    tsAuthList.add(new TSAuth(o.getId(), solarProperties.getLicense(), authEnum, appInfo.getControl().getExpireTime()));
+                } else {
+                    tsAuthList.add(new TSAuth(o.getId(), file, authEnum, appInfo.getControl().getExpireTime()));
+                }
+            } else {
+                tsAuthList.add(new TSAuth(o.getId(), solarProperties.getAccessKey(), solarProperties.getAccessSecret(), authEnum, appInfo.getControl().getExpireTime()));
+            }
+            if (Objects.isNull(commonCacheService.updateAuthInfoCache(o.getCode()))) {
+                commonCacheService.removeAuthInfoCache(o.getCode());
+            }
+
+            QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
+            basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, o.getCode());
+            BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
+            if (Objects.isNull(basicSchool)) {//不存在则创建学校
+                basicSchool = new BasicSchool(o.getId(), o.getCode(), o.getName(), o.getAccessKey(), o.getAccessSecret());
+                if (Objects.nonNull(o.getLogo()) && (!o.getLogo().startsWith("https:") || !o.getLogo().startsWith("http"))) {
+                    String filePath = dictionaryConfig.fssLocalFileDomain().getConfig() + File.separator + SystemConstant.getUuid() + ".jpg";
+                    File logoFile = new File(filePath);
+                    if (!logoFile.getParentFile().exists()) {
+                        // 不存在则创建父目录及子文件
+                        logoFile.getParentFile().mkdirs();
+                        logoFile.createNewFile();
+                    }
+                    SystemConstant.base64ToImage(o.getLogo(), filePath);
+
+                    if (oss) {
+                        LocalDateTime nowTime = LocalDateTime.now();
+                        StringJoiner stringJoiner = new StringJoiner("");
+                        stringJoiner.add(UploadFileEnum.FILE.name().toLowerCase()).add(File.separator)
+                                .add(String.valueOf(nowTime.getYear())).add(File.separator)
+                                .add(String.format("%02d", nowTime.getMonthValue())).add(File.separator)
+                                .add(String.format("%02d", nowTime.getDayOfMonth())).add(File.separator)
+                                .add(SystemConstant.getUuid()).add(".jpg");
+                        fileStoreUtil.ossUpload(stringJoiner.toString(), logoFile, DigestUtils.md5Hex(new FileInputStream(logoFile)), UploadFileEnum.FILE.getFssType());
+                        logoFile.delete();
+                        basicSchool.setLogo(fileStoreUtil.getPrivateUrl(stringJoiner.toString(), UploadFileEnum.FILE.getFssType()));
+                    } else {
+                        basicSchool.setLogo(filePath);
+                    }
+                } else {
+                    basicSchool.setLogo(o.getLogo());
+                }
+                basicSchoolSet.add(basicSchool);
+            }
+
+            QueryWrapper<SysOrg> sysOrgQueryWrapper = new QueryWrapper<>();
+            sysOrgQueryWrapper.lambda().eq(SysOrg::getSchoolId, basicSchool.getId());
+            int count = sysOrgService.count(sysOrgQueryWrapper);
+            if (count == 0) {
+                sysOrgSet.add(new SysOrg(basicSchool.getId(), basicSchool.getName()));
+            }
+        }
+
+        if (!CollectionUtils.isEmpty(tsAuthList) && !CollectionUtils.isEmpty(orgIdsSet)) {
+            QueryWrapper<TSAuth> tsAuthQueryWrapper = new QueryWrapper<>();
+            tsAuthQueryWrapper.lambda().in(TSAuth::getSchoolId, orgIdsSet);
+            tsAuthService.remove(tsAuthQueryWrapper);
+            tsAuthMapper.insertBatch(tsAuthList);
+
+            if (!CollectionUtils.isEmpty(basicSchoolSet)) {
+                commonCacheService.removeSchoolIdCache();
+                commonCacheService.removeSchoolCodeCache();
+                basicSchoolMapper.insertBatch(basicSchoolSet);
+            }
+
+            if (!CollectionUtils.isEmpty(sysOrgSet)) {
+                commonCacheService.removeOrgCache();
+                sysOrgMapper.insertBatch(sysOrgSet);
+            }
+        }
+    }
+}

+ 66 - 0
src/main/java/com/qmth/eds/service/impl/CommonCacheServiceImpl.java

@@ -1,7 +1,11 @@
 package com.qmth.eds.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.core.solar.model.AppInfo;
+import com.qmth.boot.core.solar.model.OrgInfo;
+import com.qmth.boot.core.solar.service.SolarService;
 import com.qmth.eds.bean.auth.AuthBean;
+import com.qmth.eds.bean.dto.AuthOrgInfoDto;
 import com.qmth.eds.bean.result.MenuResult;
 import com.qmth.eds.common.entity.*;
 import com.qmth.eds.common.contant.SystemConstant;
@@ -16,7 +20,9 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 缓存操作serviceImpl 实现类
@@ -44,6 +50,9 @@ public class CommonCacheServiceImpl implements CommonCacheService {
     @Resource
     SysRoleService sysRoleService;
 
+    @Resource
+    SolarService solarService;
+
     /**
      * 添加角色缓存
      *
@@ -333,4 +342,61 @@ public class CommonCacheServiceImpl implements CommonCacheService {
     public void removeUserRolePrivilegeCache(Long userId) {
 
     }
+
+    @Override
+    @Cacheable(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0", unless = "#result == null")
+    public AuthOrgInfoDto authInfoCache(String code) {
+        AppInfo appInfo = solarService.getAppInfo();
+        AuthOrgInfoDto authOrgInfoDto = null;
+        if (Objects.nonNull(appInfo)) {
+            List<OrgInfo> orgInfoList = solarService.getOrgList().stream().filter(s -> Objects.equals(s.getCode(), code)).collect(Collectors.toList());
+            if (Objects.nonNull(orgInfoList) && orgInfoList.size() > 0) {
+                authOrgInfoDto = new AuthOrgInfoDto(orgInfoList.get(0), appInfo.getControl());
+            }
+        }
+        return authOrgInfoDto;
+    }
+
+    @Override
+    @CachePut(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0", condition = "#result != null")
+    public AuthOrgInfoDto updateAuthInfoCache(String code) {
+        AppInfo appInfo = solarService.getAppInfo();
+        AuthOrgInfoDto authOrgInfoDto = null;
+        if (Objects.nonNull(appInfo)) {
+            List<OrgInfo> orgInfoList = solarService.getOrgList().stream().filter(s -> Objects.equals(s.getCode(), code)).collect(Collectors.toList());
+            if (Objects.nonNull(orgInfoList) && orgInfoList.size() > 0) {
+                authOrgInfoDto = new AuthOrgInfoDto(orgInfoList.get(0), appInfo.getControl());
+            }
+        }
+        return authOrgInfoDto;
+    }
+
+    @Override
+    @CacheEvict(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0")
+    public void removeAuthInfoCache(String code) {
+    }
+
+    /**
+     * 删除学校缓存
+     */
+    @Override
+    @CacheEvict(value = SystemConstant.SCHOOL_CACHE, allEntries = true)
+    public void removeSchoolIdCache() {
+    }
+
+    /**
+     * 删除学校缓存
+     */
+    @Override
+    @CacheEvict(value = SystemConstant.SCHOOL_CODE_CACHE, allEntries = true)
+    public void removeSchoolCodeCache() {
+    }
+
+    /**
+     * 删除机构缓存
+     */
+    @Override
+    @CacheEvict(value = SystemConstant.ORG_CACHE, allEntries = true)
+    public void removeOrgCache() {
+    }
 }

+ 4 - 2
src/main/java/com/qmth/eds/service/impl/ExamSemesterServiceImpl.java

@@ -24,7 +24,8 @@ public class ExamSemesterServiceImpl extends ServiceImpl<ExamSemesterMapper, Exa
     ExamScheduleTaskService examScheduleTaskService;
 
     @Override
-    public List<ExamSemester> listBySchoolId(Long schoolId) {
+    public List<ExamSemester> listBySchoolId() {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<ExamSemester> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamSemester::getSchoolId, schoolId);
         return this.baseMapper.selectList(queryWrapper);
@@ -64,7 +65,8 @@ public class ExamSemesterServiceImpl extends ServiceImpl<ExamSemesterMapper, Exa
     }
 
     @Override
-    public IPage<ExamSemester> pageData(Long schoolId, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamSemester> pageData(Integer pageNumber, Integer pageSize) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Page<ExamSemester> page = new Page<>(pageNumber, pageSize);
         QueryWrapper<ExamSemester> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamSemester::getSchoolId, schoolId);

+ 4 - 2
src/main/java/com/qmth/eds/service/impl/ExamTypeServiceImpl.java

@@ -57,7 +57,8 @@ public class ExamTypeServiceImpl extends ServiceImpl<ExamTypeMapper, ExamType> i
     }
 
     @Override
-    public IPage<ExamType> pageData(Long schoolId, Integer pageNumber, Integer pageSize) {
+    public IPage<ExamType> pageData(Integer pageNumber, Integer pageSize) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Page<ExamType> page = new Page<>(pageNumber, pageSize);
         QueryWrapper<ExamType> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamType::getSchoolId, schoolId);
@@ -65,7 +66,8 @@ public class ExamTypeServiceImpl extends ServiceImpl<ExamTypeMapper, ExamType> i
     }
 
     @Override
-    public List<ExamType> listData(Long schoolId) {
+    public List<ExamType> listData() {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         QueryWrapper<ExamType> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(ExamType::getSchoolId, schoolId);
         return this.list(queryWrapper);

+ 7 - 3
src/main/java/com/qmth/eds/service/impl/SysUserServiceImpl.java

@@ -9,11 +9,11 @@ import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.entity.SysUser;
 import com.qmth.eds.common.entity.SysUserRole;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
+import com.qmth.eds.common.util.Base64Util;
+import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.mapper.SysUserMapper;
 import com.qmth.eds.service.SysUserRoleService;
 import com.qmth.eds.service.SysUserService;
-import com.qmth.eds.common.util.Base64Util;
-import com.qmth.eds.common.util.ServletUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -35,7 +35,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     private SysUserRoleService sysUserRoleService;
 
     @Override
-    public IPage<SysUser> list(Long schoolId, String loginName, Boolean enable, String realName, Integer pageNumber, Integer pageSize) {
+    public IPage<SysUser> list(String loginName, Boolean enable, String realName, Integer pageNumber, Integer pageSize) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         Page<SysUser> page = new Page<>(pageNumber, pageSize);
         QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(SysUser::getSchoolId, schoolId);
@@ -59,6 +60,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     @Transactional
     @Override
     public boolean saveUser(SysUser sysUser) {
+        Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
         if (sysUser.getId() == null) {
             SysUser user = this.baseMapper.findByMobileNumber(sysUser.getMobileNumber());
@@ -66,11 +68,13 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 throw ExceptionResultEnum.ERROR.exception("手机号已注册");
             }
             sysUser.setId(SystemConstant.getDbUuid());
+            sysUser.setSchoolId(schoolId);
             sysUser.setCreateId(requestUser.getCreateId());
             sysUser.setCreateTime(System.currentTimeMillis());
             sysUser.setPassword(Base64Util.encode(sysUser.getPassword().getBytes()));
             this.baseMapper.insert(sysUser);
         } else {
+            sysUser.setSchoolId(schoolId);
             sysUser.setPassword(Base64Util.encode(sysUser.getPassword().getBytes()));
             sysUser.setUpdateId(requestUser.getUpdateId());
             sysUser.setUpdateTime(System.currentTimeMillis());

+ 20 - 0
src/main/java/com/qmth/eds/service/impl/TSAuthServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qmth.eds.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.eds.common.entity.TSAuth;
+import com.qmth.eds.mapper.TSAuthMapper;
+import com.qmth.eds.service.TSAuthService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 激活授权配置表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2022-04-26
+ */
+@Service
+public class TSAuthServiceImpl extends ServiceImpl<TSAuthMapper, TSAuth> implements TSAuthService {
+
+}

+ 7 - 5
src/main/java/com/qmth/eds/start/StartRunning.java

@@ -3,6 +3,7 @@ package com.qmth.eds.start;
 import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.enums.JobEnum;
 import com.qmth.eds.job.service.TimedSyncTaskJob;
+import com.qmth.eds.service.AuthInfoService;
 import com.qmth.eds.service.QuartzService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -14,16 +15,15 @@ import java.util.HashMap;
 import java.util.Map;
 
 /**
- * @Description: 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/7/3
+ * 服务启动时初始化运行,哪个微服务模块需要则拿此模版去用
  */
 @Component
 public class StartRunning implements CommandLineRunner {
     private final static Logger log = LoggerFactory.getLogger(StartRunning.class);
 
+    @Resource
+    AuthInfoService authInfoService;
+
     @Resource
     QuartzService quartzService;
 
@@ -32,6 +32,8 @@ public class StartRunning implements CommandLineRunner {
         log.info("服务器启动时执行 start");
         SystemConstant.initTempFiles();
 
+        authInfoService.appInfoInit();
+
         /*log.info("增加学校信息同步定时任务 start");
         Map schoolJobMap = new HashMap();
         schoolJobMap.computeIfAbsent("name", v -> TimedSyncSchoolJob.class.getName());

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

@@ -28,6 +28,12 @@ com.qmth.fss.public.config=oss://key:secret@teachcloud-print-dev-public.oss-api.
 com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-public
 com.qmth.fss.private.config=oss://key:secret@teachcloud-print-dev-private.oss-api.qmth.com.cn
 com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-private
+com.qmth.fss.localfile.config=/Users/king/Downloads/file-temp
+com.qmth.fss.localfile.server=http://192.168.10.140:8001
+
+com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
+com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+#com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
 #\u7CFB\u7EDF\u914D\u7F6E
 sys.config.oss=true

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

@@ -28,6 +28,12 @@ com.qmth.fss.public.config=oss://key:secret@teachcloud-print-dev-public.oss-api.
 com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-public
 com.qmth.fss.private.config=oss://key:secret@teachcloud-print-dev-private.oss-api.qmth.com.cn
 com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-private
+com.qmth.fss.localfile.config=/Users/king/Downloads/file-temp
+com.qmth.fss.localfile.server=http://192.168.10.140:8001
+
+com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
+com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+#com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
 #\u7CFB\u7EDF\u914D\u7F6E
 sys.config.oss=true

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

@@ -32,6 +32,12 @@ com.qmth.fss.public.config=oss://key:secret@teachcloud-print-dev-public.oss-api.
 com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-public
 com.qmth.fss.private.config=oss://key:secret@teachcloud-print-dev-private.oss-api.qmth.com.cn
 com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-print-dev-private
+com.qmth.fss.localfile.config=/Users/king/Downloads/file-temp
+com.qmth.fss.localfile.server=http://192.168.10.140:8001
+
+com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
+com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+#com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
 #\u7CFB\u7EDF\u914D\u7F6E
 sys.config.oss=true