Bläddra i källkod

1.1.0 缓存由redis改为ehcache

xiaofei 1 år sedan
förälder
incheckning
57bcbadf68

+ 0 - 9
pom.xml

@@ -66,11 +66,6 @@
                 <artifactId>core-fss</artifactId>
                 <version>${qmth.boot.version}</version>
             </dependency>
-            <dependency>
-                <groupId>com.qmth.boot</groupId>
-                <artifactId>data-redis</artifactId>
-                <version>${qmth.boot.version}</version>
-            </dependency>
             <dependency>
                 <groupId>com.qmth.boot</groupId>
                 <artifactId>data-mybatis-plus</artifactId>
@@ -255,10 +250,6 @@
             <groupId>com.qmth.boot</groupId>
             <artifactId>core-fss</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.qmth.boot</groupId>
-            <artifactId>data-redis</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.qmth.boot</groupId>
             <artifactId>data-mybatis-plus</artifactId>

+ 39 - 4
src/main/java/com/qmth/eds/api/SysController.java

@@ -10,13 +10,11 @@ import com.qmth.eds.common.entity.ExamSyncStudent;
 import com.qmth.eds.common.entity.SysUser;
 import com.qmth.eds.common.enums.AppSourceEnum;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
+import com.qmth.eds.common.util.EhcacheUtil;
 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.CommonService;
-import com.qmth.eds.service.ExamSyncStudentService;
-import com.qmth.eds.service.SysUserService;
-import com.qmth.eds.service.TeachcloudCommonService;
+import com.qmth.eds.service.*;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.util.CollectionUtils;
@@ -26,7 +24,10 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.security.NoSuchAlgorithmException;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalUnit;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 系统公共Controller
@@ -48,6 +49,12 @@ public class SysController {
     @Resource
     CommonService commonService;
 
+    @Resource
+    CommonCacheService commonCacheService;
+
+    @Resource
+    EhcacheUtil ehcacheUtil;
+
     /**
      * 登录
      *
@@ -191,4 +198,32 @@ public class SysController {
         }
         return ResultUtil.ok(!CollectionUtils.isEmpty(teacherResultList) ? teacherResultList : Collections.emptyList());
     }
+
+    @Aac(auth = BOOL.FALSE)
+    @GetMapping("/test")
+    public void test() {
+        // 1
+        String key = "testkey";
+        String value = "测试ehcache";
+        String set = commonCacheService.set(key, value);
+        System.out.println("set:" + set);
+        String get = commonCacheService.get(key);
+        System.out.println("get:" + get);
+        commonCacheService.remove(key);
+        String get1 = commonCacheService.get(key);
+        System.out.println("get1:" + get1);
+
+        // 2
+        String key1 = "key2";
+        String value1 = "自定义cache";
+        ehcacheUtil.set("ddd", key1, value1, 10, ChronoUnit.SECONDS);
+        for (int i = 0; i < 20; i++) {
+            System.out.println("value2:" + ehcacheUtil.get("ddd", key1));
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
 }

+ 3 - 1
src/main/java/com/qmth/eds/common/contant/SystemConstant.java

@@ -32,6 +32,7 @@ public class SystemConstant {
     public static final String SUCCESS = "success";
     public static final String USER_DIR = "user.dir";
     public static final String FILE_TEMP = "file-temp";
+    public static final String SESSION_CACHE = "sessionCache";
     public static final String SESSION = "session:";
     public static final String USER = "account";
     public static final String SCHOOL_ID = "schoolId";
@@ -85,6 +86,7 @@ public class SystemConstant {
     /**
      * 缓存配置
      */
+    public static final String SYSTEM_CACHE = "systemCache";
     public static final String USER_OAUTH_CACHE = "user:oauth:cache";
     public static final String USER_ACCOUNT_CACHE = "user:account:cache";
     public static final String USER_MENU_CACHE = "user:menu:cache";
@@ -96,7 +98,7 @@ public class SystemConstant {
     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";
-    public static final String SYS_SETTING_CACHE = "sys:setting:cache";
+    public static final String SYS_SETTING_CACHE = "sys:setting:cache:";
 
     /**
      * 鉴权

+ 5 - 5
src/main/java/com/qmth/eds/common/tools/CdutUtils.java

@@ -5,8 +5,8 @@ import com.alibaba.fastjson.JSONObject;
 import com.qmth.eds.common.contant.SysSettingConstant;
 import com.qmth.eds.common.entity.ExamSyncStudentTemp;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
+import com.qmth.eds.common.util.EhcacheUtil;
 import com.qmth.eds.common.util.HttpKit;
-import com.qmth.eds.common.util.RedisUtil;
 import com.qmth.eds.service.CommonService;
 import com.qmth.eds.service.impl.WhuDataSyncServiceImpl;
 import org.apache.commons.lang3.StringUtils;
@@ -15,11 +15,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -32,7 +32,7 @@ public class CdutUtils {
     private final static int CODE_SUCCESS = 10000;
 
     @Resource
-    RedisUtil redisUtil;
+    EhcacheUtil ehcacheUtil;
 
     @Resource
     CommonService commonService;
@@ -42,7 +42,7 @@ public class CdutUtils {
      */
     public String getAccessToken(Long schoolId) {
         String key = "accessToken" + schoolId;
-        Object o = redisUtil.get(key);
+        Object o = ehcacheUtil.get(key);
         if (o != null) {
             return String.valueOf(o);
         }
@@ -68,7 +68,7 @@ public class CdutUtils {
                     String accessToken = jsonToken.getString("access_token");
                     int expiresIn = jsonToken.getIntValue("expires_in");
                     // 缓存
-                    redisUtil.set(key, accessToken, expiresIn, TimeUnit.SECONDS);
+                    ehcacheUtil.set(key, accessToken, expiresIn, ChronoUnit.SECONDS);
                     return accessToken;
                 }
             }

+ 2 - 2
src/main/java/com/qmth/eds/common/util/AuthUtil.java

@@ -86,7 +86,7 @@ public class AuthUtil {
                                     long time,
                                     String method,
                                     String url) {
-        RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
+        EhcacheUtil ehcacheUtil = SpringContextHolder.getBean(EhcacheUtil.class);
 //        if (SystemConstant.expire(time)) {
 //            log.warn("Authorization faile: time expired, server time=" + System.currentTimeMillis());
 //            throw new BusinessException(ExceptionResultEnum.AUTHORIZATION_ERROR);
@@ -105,7 +105,7 @@ public class AuthUtil {
         }
         //校验session
         String sessionId = info.getInvoker();
-        TBSession tbSession = (TBSession) redisUtil.getUserSession(sessionId);
+        TBSession tbSession = ehcacheUtil.getUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + sessionId);
         if (Objects.isNull(tbSession)) {
             log.warn("Authorization faile: session id not exists: " + sessionId);
             throw ExceptionResultEnum.NOT_LOGIN.exception();

+ 179 - 0
src/main/java/com/qmth/eds/common/util/EhcacheUtil.java

@@ -0,0 +1,179 @@
+package com.qmth.eds.common.util;
+
+import com.qmth.eds.common.entity.TBSession;
+import org.ehcache.Cache;
+import org.ehcache.CacheManager;
+import org.ehcache.config.CacheConfiguration;
+import org.ehcache.config.builders.CacheConfigurationBuilder;
+import org.ehcache.config.builders.CacheManagerBuilder;
+import org.ehcache.config.builders.ExpiryPolicyBuilder;
+import org.ehcache.config.builders.ResourcePoolsBuilder;
+import org.ehcache.config.units.EntryUnit;
+import org.ehcache.config.units.MemoryUnit;
+import org.springframework.stereotype.Component;
+
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.TemporalUnit;
+
+/**
+ * ehcache工具类
+ */
+@Component
+public class EhcacheUtil {
+
+    private static String DEFAULT_CACHE = "dynamicCache";
+
+    private CacheManager cacheManager;
+
+    /**
+     * 设置值
+     *
+     * @param key      key
+     * @param value    值
+     * @param time     过期时间
+     * @param timeUnit 时间类型
+     */
+    public void set(String key, String value, long time, ChronoUnit timeUnit) {
+        set(DEFAULT_CACHE, key, value, time, timeUnit);
+    }
+
+    /**
+     * 查询
+     *
+     * @param key
+     * @return String
+     */
+    public String get(String key) {
+        return get(DEFAULT_CACHE, key);
+    }
+
+    /**
+     * 设置值
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     * @param value     值
+     * @param time      过期时间
+     * @param timeUnit  时间类型
+     */
+    public void set(String cacheName, String key, String value, long time, ChronoUnit timeUnit) {
+        Cache<String, String> cache = getCache(cacheName, time, timeUnit);
+        cache.put(key, value);
+    }
+
+    /**
+     * 设置用户session值
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     * @param value     值
+     * @param time      过期时间
+     * @param timeUnit  时间类型
+     */
+    public void setUserSession(String cacheName, String key, TBSession value, long time, ChronoUnit timeUnit) {
+        Cache<String, TBSession> cache = getCache(cacheName, TBSession.class, time, timeUnit);
+        cache.put(key, value);
+    }
+
+    /**
+     * 查询
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     * @return String
+     */
+    public String get(String cacheName, String key) {
+        Cache<String, String> cache = getCache(cacheName, 0, null);
+        return cache.get(key);
+    }
+
+    /**
+     * 查询用户session值
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     * @return String
+     */
+    public TBSession getUserSession(String cacheName, String key) {
+        Cache<String, TBSession> cache = getCache(cacheName, TBSession.class, 0, null);
+        return cache.get(key);
+    }
+
+    /**
+     * 移除
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     */
+    public void remove(String cacheName, String key) {
+        Cache<String, String> cache = getCache(cacheName, 0, null);
+        cache.remove(key);
+    }
+
+    /**
+     * 移除用户session值
+     *
+     * @param cacheName 缓存名
+     * @param key       key
+     */
+    public void removeUserSession(String cacheName, String key) {
+        Cache<String, TBSession> cache = getCache(cacheName, TBSession.class, 0, null);
+        cache.remove(key);
+    }
+
+    /**
+     * 移除
+     *
+     * @param key key
+     */
+    public void remove(String key) {
+        remove(DEFAULT_CACHE, key);
+    }
+
+    /**
+     * 创建新缓存
+     *
+     * @param cacheName 缓存名
+     * @param time      过期时间
+     * @param timeUnit  时间类型
+     * @return Cache<String, String>
+     */
+    public Cache<String, String> getCache(String cacheName, long time, TemporalUnit timeUnit) {
+        return getCache(cacheName, String.class, time, timeUnit);
+    }
+
+    /**
+     * 创建新缓存
+     *
+     * @param cacheName 缓存名
+     * @param time      过期时间
+     * @param timeUnit  时间类型
+     * @return Cache<String, String>
+     */
+    public <T> Cache<String, T> getCache(String cacheName, Class<T> c, long time, TemporalUnit timeUnit) {
+        if (cacheManager == null) {
+            cacheManager = cacheManager();
+        }
+        Cache<String, T> cache = cacheManager.getCache(cacheName, String.class, c);
+        if (cache == null) {
+            CacheConfiguration cacheConfiguration = CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, c, ResourcePoolsBuilder.newResourcePoolsBuilder()
+                            .heap(100, EntryUnit.ENTRIES)
+                            .offheap(1, MemoryUnit.GB))
+                    .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(java.time.Duration.of(time, timeUnit)))
+                    .build();
+            cache = cacheManager.createCache(cacheName, cacheConfiguration);
+        }
+        return cache;
+    }
+
+    /**
+     * 创建CacheManager
+     *
+     * @return CacheManager
+     */
+    public CacheManager cacheManager() {
+        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
+        cacheManager.init();
+        return cacheManager;
+    }
+}

+ 0 - 266
src/main/java/com/qmth/eds/common/util/RedisUtil.java

@@ -1,266 +0,0 @@
-package com.qmth.eds.common.util;
-
-import com.qmth.eds.common.contant.SystemConstant;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @Description: redis util
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2020/4/15
- */
-@Component
-public class RedisUtil {
-
-    @Resource
-    RedisTemplate<String, Object> redisTemplate;
-
-    /**
-     * 获取用户会话信息
-     *
-     * @param sessionId
-     * @return
-     */
-    public Object getUserSession(String sessionId) {
-        return redisTemplate.opsForValue().get(SystemConstant.SESSION + sessionId);
-    }
-
-    /**
-     * 删除用户会话缓存
-     *
-     * @param sessionId
-     */
-    public void deleteUserSession(String sessionId) {
-        redisTemplate.delete(SystemConstant.SESSION + sessionId);
-    }
-
-    /**
-     * 设置用户session信息
-     *
-     * @param sessionId
-     * @param o
-     * @param time
-     */
-    public void setUserSession(String sessionId, Object o, long time) {
-        redisTemplate.opsForValue().set(SystemConstant.SESSION + sessionId, o, time, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 获取过期时间
-     *
-     * @param sessionId
-     * @return
-     */
-    public Long getUserSessionExpire(String sessionId) {
-        return redisTemplate.opsForValue().getOperations().getExpire(SystemConstant.SESSION + sessionId);
-    }
-
-    /**
-     * 批量获取key的value
-     *
-     * @param keys
-     * @return
-     */
-    public List<?> multiGet(Set keys) {
-        return redisTemplate.opsForValue().multiGet(keys);
-    }
-
-    /**
-     * 获取key like
-     *
-     * @param key
-     * @return
-     */
-    public Set<?> getKeyPatterns(String key) {
-        if (Objects.nonNull(key)) {
-            return redisTemplate.keys(key);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * 设置hash
-     *
-     * @param key
-     * @param hashKey
-     * @param hashValue
-     */
-    public void set(String key, String hashKey, Object hashValue) {
-        redisTemplate.opsForHash().put(key, hashKey, hashValue);
-    }
-
-    /**
-     * 获取hash
-     *
-     * @param key
-     * @param hashKey
-     * @return
-     */
-    public Object get(String key, String hashKey) {
-        return redisTemplate.opsForHash().get(key, hashKey);
-    }
-
-    /**
-     * hash删除
-     *
-     * @param key
-     * @param hashKey
-     */
-    public void delete(String key, String hashKey) {
-        redisTemplate.opsForHash().delete(key, hashKey);
-    }
-
-    /**
-     * 获取hash大小
-     *
-     * @param key
-     * @return
-     */
-    public Long getHashSize(String key) {
-        return redisTemplate.opsForHash().size(key);
-    }
-
-    /**
-     * 获取hash map
-     *
-     * @param key
-     * @return
-     */
-    public Map getHashEntries(String key) {
-        return redisTemplate.opsForHash().entries(key);
-    }
-
-    /**
-     * 分布式锁
-     *
-     * @param key
-     * @param timeout SECONDS
-     * @return
-     */
-    public boolean lock(String key, long timeout) {
-        long expireAt = System.currentTimeMillis() + (timeout * 1000) + 1;
-        return redisTemplate.opsForValue().setIfAbsent(key, expireAt, timeout, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 删除锁
-     *
-     * @param key
-     * @return
-     */
-    public void releaseLock(String key) {
-        redisTemplate.expire(key, 100, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * 设置缓存
-     *
-     * @param key
-     * @param o
-     */
-    public void set(String key, Object o) {
-        redisTemplate.opsForValue().set(key, o);
-    }
-
-    /**
-     * 设置缓存
-     *
-     * @param key
-     * @param o
-     * @param time
-     * @param timeUnit
-     */
-    public void set(String key, Object o, long time, TimeUnit timeUnit) {
-        redisTemplate.opsForValue().set(key, o, time, timeUnit);
-    }
-
-    /**
-     * 设置缓存
-     *
-     * @param key
-     * @param o
-     * @param time SECONDS
-     */
-    public void set(String key, Object o, long time) {
-        set(key, o, time, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 获取缓存
-     *
-     * @param key
-     * @return
-     */
-    public Object get(String key) {
-        return redisTemplate.opsForValue().get(key);
-    }
-
-    /**
-     * 删除缓存
-     *
-     * @param key
-     * @return
-     */
-    public void delete(String key) {
-        redisTemplate.expire(key, 0, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 保存hash结构
-     *
-     * @param key
-     * @param map
-     */
-    public void setForHash(String key, Map<String, Object> map) {
-        redisTemplate.opsForHash().putAll(key, map);
-    }
-
-    /**
-     * 保存list
-     *
-     * @param key
-     * @param Object
-     */
-    public void setForLeftList(String key, Object Object) {
-        redisTemplate.opsForList().leftPush(key, Object);
-    }
-
-    /**
-     * 获取list
-     *
-     * @param key
-     */
-    public Object getForRightList(String key) {
-        return redisTemplate.opsForList().rightPop(key, 0, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 设置过期时间(秒)
-     *
-     * @param key
-     * @param timeOutSecond
-     */
-    public void expire(String key, int timeOutSecond) {
-        redisTemplate.expire(key, timeOutSecond, TimeUnit.SECONDS);
-    }
-
-    /**
-     * 设置过期时间
-     *
-     * @param key
-     * @param timeOut
-     */
-    public void expire(String key, long timeOut, TimeUnit timeUnit) {
-        redisTemplate.expire(key, timeOut, timeUnit);
-    }
-}

+ 13 - 12
src/main/java/com/qmth/eds/core/auth/EdsAuthenticationService.java

@@ -11,7 +11,7 @@ import com.qmth.eds.common.entity.TBSession;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.enums.PrivilegePropertyEnum;
 import com.qmth.eds.common.enums.RoleTypeEnum;
-import com.qmth.eds.common.util.RedisUtil;
+import com.qmth.eds.common.util.EhcacheUtil;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.service.CommonCacheService;
 import org.slf4j.Logger;
@@ -22,6 +22,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.time.Duration;
+import java.time.temporal.ChronoUnit;
 import java.util.Objects;
 import java.util.Set;
 
@@ -35,7 +36,7 @@ public class EdsAuthenticationService implements AuthorizationService {
     CommonCacheService commonCacheService;
 
     @Resource
-    RedisUtil redisUtil;
+    EhcacheUtil ehcacheUtil;
 
     @Override
     public AccessEntity findByIdentity(String identity, SignatureType signatureType, String path) {
@@ -45,23 +46,23 @@ public class EdsAuthenticationService implements AuthorizationService {
     @Override
     public boolean hasPermission(AccessEntity accessEntity, String path) {
         if (Objects.nonNull(accessEntity) && Objects.nonNull(accessEntity.getIdentity())) {
-            TBSession tbSession = (TBSession) redisUtil.getUserSession(accessEntity.getIdentity());
+            TBSession tbSession = ehcacheUtil.getUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + accessEntity.getIdentity());
             if (Objects.isNull(tbSession)) {
-                log.warn("Authorization faile: session id not exists: {}", accessEntity.getIdentity());
+                log.warn("Authorization fail: session id not exists: {}", accessEntity.getIdentity());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             if (tbSession.getExpireTime() <= System.currentTimeMillis()) {
-                log.warn("Authorization faile: session has expired, expire time={}", tbSession.getExpireTime());
+                log.warn("Authorization fail: session has expired, expire time={}", tbSession.getExpireTime());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             Platform platform = ServletUtil.getRequestPlatform();
             String deviceId = ServletUtil.getRequestDeviceId();
             if (!tbSession.getPlatform().equalsIgnoreCase(platform.name())) {
-                log.warn("Authorization faile: platform invalid, session platform is {}", tbSession.getPlatform());
+                log.warn("Authorization fail: platform invalid, session platform is {}", tbSession.getPlatform());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             if (!tbSession.getDeviceId().equalsIgnoreCase(deviceId)) {
-                log.warn("Authorization faile: deviceId invalid, session deviceId is {} ", tbSession.getDeviceId());
+                log.warn("Authorization fail: deviceId invalid, session deviceId is {} ", tbSession.getDeviceId());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             Long userId = Long.parseLong(tbSession.getIdentity());
@@ -72,14 +73,14 @@ public class EdsAuthenticationService implements AuthorizationService {
             request.setAttribute(SystemConstant.USER, sysUser);
             boolean auth = authFootCommon(userId, SystemConstant.USER_OAUTH_CACHE, path, request, response);
             if (auth) {
-                Long expireTime = redisUtil.getUserSessionExpire(accessEntity.getIdentity());
-                if (Objects.nonNull(expireTime) && expireTime.longValue() > -1L) {
+                TBSession o = ehcacheUtil.getUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + accessEntity.getIdentity());
+                if (Objects.nonNull(o)) {
                     if (Objects.nonNull(tbSession.getLastAccessTime()) && (System.currentTimeMillis() - tbSession.getLastAccessTime()) / 1000 > duration.getSeconds()) {
-                        log.warn("Authorization faile: session active, session active is {}", duration.getSeconds());
+                        log.warn("Authorization fail: session active, session active is {}", duration.getSeconds());
                         throw ExceptionResultEnum.NOT_LOGIN.exception();
                     }
                     tbSession.setLastInfo();
-                    redisUtil.setUserSession(accessEntity.getIdentity(), tbSession, expireTime);
+                    ehcacheUtil.setUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + accessEntity.getIdentity(), tbSession, 4, ChronoUnit.HOURS);
                 }
             }
             return auth;
@@ -103,7 +104,7 @@ public class EdsAuthenticationService implements AuthorizationService {
                                   HttpServletRequest request,
                                   HttpServletResponse response) {
         //验证权限
-        AuthBean authBean = type.contains(SystemConstant.USER_OAUTH_CACHE) ? authBean = commonCacheService.userAuthCache(userId) : null;
+        AuthBean authBean = type.contains(SystemConstant.USER_OAUTH_CACHE) ? commonCacheService.userAuthCache(userId) : null;
         if (Objects.isNull(authBean)) {
             throw ExceptionResultEnum.ROLE_ENABLE_AUTHORIZATION.exception();
         }

+ 4 - 3
src/main/java/com/qmth/eds/core/auth/EdsSession.java

@@ -3,8 +3,9 @@ package com.qmth.eds.core.auth;
 import com.qmth.boot.core.security.model.AccessEntity;
 import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.eds.common.contant.SpringContextHolder;
+import com.qmth.eds.common.contant.SystemConstant;
 import com.qmth.eds.common.entity.TBSession;
-import com.qmth.eds.common.util.RedisUtil;
+import com.qmth.eds.common.util.EhcacheUtil;
 
 import java.util.Collection;
 
@@ -30,8 +31,8 @@ public class EdsSession implements AccessEntity {
 
     @Override
     public String getSecret() {
-        RedisUtil redisUtil = SpringContextHolder.getBean(RedisUtil.class);
-        TBSession tbSession = (TBSession) redisUtil.getUserSession(identity);
+        EhcacheUtil ehcacheUtil = SpringContextHolder.getBean(EhcacheUtil.class);
+        TBSession tbSession = ehcacheUtil.getUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + identity);
         return tbSession.getAccessToken();
     }
 

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

@@ -254,4 +254,10 @@ public interface CommonCacheService {
      * 获取学校缓存
      */
     Map<String, SimpleObject> getSysSetting(Long schoolId);
+
+    String set(String key, String value);
+
+    String get(String key);
+
+    void remove(String key);
 }

+ 51 - 33
src/main/java/com/qmth/eds/service/impl/CommonCacheServiceImpl.java

@@ -64,7 +64,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_CACHE + "', #roleId}")
     public SysRole roleCache(Long roleId) {
         return sysRoleService.getById(roleId);
     }
@@ -76,7 +76,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_CACHE + "', #roleId}")
     public SysRole updateRoleCache(Long roleId) {
         return sysRoleService.getById(roleId);
     }
@@ -88,7 +88,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CacheEvict(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_CACHE + "', #roleId}")
     public void removeRoleCache(Long roleId) {
 
     }
@@ -100,7 +100,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_MENU_CACHE + "', #userId}")
     public MenuResult userMenuCache(Long userId) {
         return commonService.getUserMenu(userId);
     }
@@ -112,7 +112,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_MENU_CACHE + "', #userId}")
     public MenuResult updateUserMenuCache(Long userId) {
         return commonService.getUserMenu(userId);
     }
@@ -123,7 +123,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param userId
      */
     @Override
-    @CacheEvict(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_MENU_CACHE + "', #userId}")
     public void removeUserMenuCache(Long userId) {
 
     }
@@ -135,7 +135,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.USER_ACCOUNT_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ACCOUNT_CACHE + "', #userId}")
     public SysUser userCache(Long userId) {
         return sysUserService.getById(userId);
     }
@@ -147,7 +147,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.USER_ACCOUNT_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ACCOUNT_CACHE + "', #userId}")
     public SysUser updateUserCache(Long userId) {
         return sysUserService.getById(userId);
     }
@@ -158,7 +158,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param userId
      */
     @Override
-    @CacheEvict(value = SystemConstant.USER_ACCOUNT_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ACCOUNT_CACHE + "', #userId}")
     public void removeUserCache(Long userId) {
 
     }
@@ -170,7 +170,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.USER_OAUTH_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_OAUTH_CACHE + "', #userId}")
     public AuthBean userAuthCache(Long userId) {
         return commonService.getUserAuth(userId);
     }
@@ -182,7 +182,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.USER_OAUTH_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_OAUTH_CACHE + "', #userId}")
     public AuthBean updateUserAuthCache(Long userId) {
         return commonService.getUserAuth(userId);
     }
@@ -193,7 +193,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param userId
      */
     @Override
-    @CacheEvict(value = SystemConstant.USER_OAUTH_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_OAUTH_CACHE + "', #userId}")
     public void removeUserAuthCache(Long userId) {
 
     }
@@ -205,7 +205,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.SCHOOL_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SCHOOL_CACHE + "', #schoolId}")
     public BasicSchool schoolCache(Long schoolId) {
         return basicSchoolService.getById(schoolId);
     }
@@ -217,7 +217,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.SCHOOL_CODE_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SCHOOL_CODE_CACHE + "', #code}")
     public BasicSchool schoolCache(String code) {
         QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
         basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, code);
@@ -231,7 +231,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.ORG_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ORG_CACHE + "', #orgId}")
     public SysOrg orgCache(Long orgId) {
         return sysOrgService.getById(orgId);
     }
@@ -243,13 +243,13 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.PRIVILEGE_URL_CACHE + "', #privilegePropertyEnum}")
     public Set<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
         return commonService.getPrivilegeUrl(privilegePropertyEnum);
     }
 
     @Override
-    @Cacheable(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0 + '-' + #p1")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.PRIVILEGE_URL_CACHE + "', #privilegePropertyEnum + '-' + #schoolId}")
     public Set<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId) {
         return commonService.getPrivilegeUrl(privilegePropertyEnum, schoolId);
     }
@@ -261,7 +261,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.PRIVILEGE_URL_CACHE + "', #privilegePropertyEnum}")
     public Set<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
         return commonService.getPrivilegeUrl(privilegePropertyEnum);
     }
@@ -272,7 +272,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param privilegePropertyEnum
      */
     @Override
-    @CacheEvict(value = SystemConstant.PRIVILEGE_URL_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.PRIVILEGE_URL_CACHE + "', #privilegePropertyEnum}")
     public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum) {
 
     }
@@ -284,7 +284,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_PRIVILEGE_CACHE + "', #roleId}")
     public List<SysRolePrivilege> rolePrivilegeCache(Long roleId) {
         return commonService.getRolePrivilege(roleId);
     }
@@ -296,7 +296,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_PRIVILEGE_CACHE + "', #roleId}")
     public List<SysRolePrivilege> updateRolePrivilegeCache(Long roleId) {
         return commonService.getRolePrivilege(roleId);
     }
@@ -307,7 +307,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param roleId
      */
     @Override
-    @CacheEvict(value = SystemConstant.ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ROLE_PRIVILEGE_CACHE + "', #roleId}")
     public void removeRolePrivilegeCache(Long roleId) {
 
     }
@@ -319,7 +319,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @Cacheable(value = SystemConstant.USER_ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ROLE_PRIVILEGE_CACHE + "', #userId}")
     public List<SysUserRole> userRolePrivilegeCache(Long userId) {
         return commonService.getUserRolePrivilege(userId);
     }
@@ -331,7 +331,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @return
      */
     @Override
-    @CachePut(value = SystemConstant.USER_ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ROLE_PRIVILEGE_CACHE + "', #userId}")
     public List<SysUserRole> updateUserRolePrivilegeCache(Long userId) {
         return commonService.getUserRolePrivilege(userId);
     }
@@ -342,13 +342,13 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * @param userId
      */
     @Override
-    @CacheEvict(value = SystemConstant.USER_ROLE_PRIVILEGE_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.USER_ROLE_PRIVILEGE_CACHE + "', #userId}")
     public void removeUserRolePrivilegeCache(Long userId) {
 
     }
 
     @Override
-    @Cacheable(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0", unless = "#result == null")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.AUTH_INFO_CACHE + "', #code}", unless = "#result == null")
     public AuthOrgInfoDto authInfoCache(String code) {
         AppInfo appInfo = solarService.getAppInfo();
         AuthOrgInfoDto authOrgInfoDto = null;
@@ -362,7 +362,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
     }
 
     @Override
-    @CachePut(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0", condition = "#result != null")
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.AUTH_INFO_CACHE + "', #code}", condition = "#result != null")
     public AuthOrgInfoDto updateAuthInfoCache(String code) {
         AppInfo appInfo = solarService.getAppInfo();
         AuthOrgInfoDto authOrgInfoDto = null;
@@ -376,7 +376,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
     }
 
     @Override
-    @CacheEvict(value = SystemConstant.AUTH_INFO_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.AUTH_INFO_CACHE + "', #code}")
     public void removeAuthInfoCache(String code) {
     }
 
@@ -384,7 +384,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * 删除学校缓存
      */
     @Override
-    @CacheEvict(value = SystemConstant.SCHOOL_CACHE, allEntries = true)
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SCHOOL_CACHE + "'}", allEntries = true)
     public void removeSchoolIdCache() {
     }
 
@@ -392,7 +392,7 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * 删除学校缓存
      */
     @Override
-    @CacheEvict(value = SystemConstant.SCHOOL_CODE_CACHE, allEntries = true)
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SCHOOL_CODE_CACHE + "'}", allEntries = true)
     public void removeSchoolCodeCache() {
     }
 
@@ -400,18 +400,18 @@ public class CommonCacheServiceImpl implements CommonCacheService {
      * 删除机构缓存
      */
     @Override
-    @CacheEvict(value = SystemConstant.ORG_CACHE, allEntries = true)
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.ORG_CACHE + "'}", allEntries = true)
     public void removeOrgCache() {
     }
 
     @Override
-    @CacheEvict(value = SystemConstant.SYS_SETTING_CACHE, key = "#p0")
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SYS_SETTING_CACHE + "', #schoolId}")
     public String removeSysSetting(Long schoolId) {
         return null;
     }
 
     @Override
-    @Cacheable(value = SystemConstant.SYS_SETTING_CACHE, key = "#p0")
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SYS_SETTING_CACHE + "', #schoolId}")
     public Map<String, SimpleObject> getSysSetting(Long schoolId) {
         Map<String, SimpleObject> map = new HashMap<>();
         SysSetting sysSetting = sysSettingService.getBySchoolId(schoolId);
@@ -426,4 +426,22 @@ public class CommonCacheServiceImpl implements CommonCacheService {
         }
         return map;
     }
+
+    @CachePut(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SYS_SETTING_CACHE + "', #key}")
+    @Override
+    public String set(String key, String value) {
+        return value;
+    }
+
+    @Cacheable(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SYS_SETTING_CACHE + "', #key}")
+    @Override
+    public String get(String key) {
+        return null;
+    }
+
+    @CacheEvict(value = SystemConstant.SYSTEM_CACHE, key = "{'" + SystemConstant.SYS_SETTING_CACHE + "', #key}")
+    @Override
+    public void remove(String key) {
+
+    }
 }

+ 6 - 5
src/main/java/com/qmth/eds/service/impl/TeachcloudCommonServiceImpl.java

@@ -13,7 +13,7 @@ import com.qmth.eds.common.entity.TBSession;
 import com.qmth.eds.common.enums.AppSourceEnum;
 import com.qmth.eds.common.enums.ExceptionResultEnum;
 import com.qmth.eds.common.util.AuthUtil;
-import com.qmth.eds.common.util.RedisUtil;
+import com.qmth.eds.common.util.EhcacheUtil;
 import com.qmth.eds.common.util.ServletUtil;
 import com.qmth.eds.common.util.SessionUtil;
 import com.qmth.eds.service.CommonCacheService;
@@ -24,6 +24,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.security.NoSuchAlgorithmException;
+import java.time.temporal.ChronoUnit;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
@@ -47,7 +48,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
     SysRoleService sysRoleService;
 
     @Resource
-    RedisUtil redisUtil;
+    EhcacheUtil ehcacheUtil;
 
     /**
      * 登录公用
@@ -76,7 +77,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
                 expireTime.getDate().getTime(), appSource);
         tbSessionService.saveOrUpdate(tbSession);
-        redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
+        ehcacheUtil.setUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + sessionId, tbSession, expireTime.getExpireSeconds(), ChronoUnit.SECONDS);
 
         LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleNames, appSource);
         if (sysUser.getSchoolId() != null) {
@@ -110,12 +111,12 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 Set<String> roleNames = authBean.getRoleList().stream().map(SysRole::getName).collect(Collectors.toSet());
                 String sessionId = SessionUtil.digest(userId, Math.abs(roleNames.toString().hashCode()), p.name());
                 tbSessionService.removeById(sessionId);
-                redisUtil.deleteUserSession(sessionId);
+                ehcacheUtil.removeUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + sessionId);
             }
         } else {
             TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
             tbSessionService.removeById(tbSession.getId());
-            redisUtil.deleteUserSession(tbSession.getId());
+            ehcacheUtil.removeUserSession(SystemConstant.SESSION_CACHE, SystemConstant.SESSION + tbSession.getId());
         }
         commonCacheService.removeUserCache(userId);
         commonCacheService.removeUserAuthCache(userId);

+ 0 - 926
src/main/resources/db/eds-1.0.2.sql

@@ -1,926 +0,0 @@
-/*
- Navicat Premium Data Transfer
-
- Source Server         : localhost
- Source Server Type    : MySQL
- Source Server Version : 80027 (8.0.27)
- Source Host           : localhost:3306
- Source Schema         : eds-1.0.2
-
- Target Server Type    : MySQL
- Target Server Version : 80027 (8.0.27)
- File Encoding         : 65001
-
- Date: 03/04/2023 15:24:21
-*/
-
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for basic_attachment
--- ----------------------------
-DROP TABLE IF EXISTS `basic_attachment`;
-CREATE TABLE `basic_attachment` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `name` varchar(100) NOT NULL COMMENT '文件名',
-  `type` varchar(10) NOT NULL COMMENT '文件类型',
-  `size` int NOT NULL COMMENT '单位(KB)',
-  `md5` varchar(32) NOT NULL COMMENT '文件md5值',
-  `path` varchar(2000) NOT NULL COMMENT '存储路径',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  `obj_id` bigint DEFAULT NULL COMMENT '关联业务id',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '所有附件记录表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for basic_message
--- ----------------------------
-DROP TABLE IF EXISTS `basic_message`;
-CREATE TABLE `basic_message` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `user_id` bigint NOT NULL COMMENT '消息接收人用户',
-  `user_name` varchar(100) DEFAULT NULL COMMENT '用户名称',
-  `mobile_number` varchar(11) DEFAULT NULL COMMENT '电话号码',
-  `paper_number` varchar(50) DEFAULT NULL COMMENT '试卷编号',
-  `course_code` varchar(50) DEFAULT NULL COMMENT '课程代码',
-  `message_type` varchar(45) DEFAULT NULL COMMENT '消息类型',
-  `business_operate` varchar(45) NOT NULL COMMENT '业务操作',
-  `business_id` bigint DEFAULT NULL COMMENT '业务id',
-  `template_code` varchar(45) NOT NULL COMMENT '消息模板代码',
-  `variable_params` text COMMENT '变量参数内容',
-  `template_content` mediumtext COMMENT '模板内容',
-  `send_status` varchar(45) DEFAULT NULL COMMENT '消息发送状态',
-  `send_result` varchar(200) DEFAULT NULL COMMENT '消息发送结果',
-  `remark` text COMMENT '备注',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  `resend_count` int DEFAULT NULL COMMENT '重试次数',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for basic_school
--- ----------------------------
-DROP TABLE IF EXISTS `basic_school`;
-CREATE TABLE `basic_school` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `code` varchar(20) NOT NULL COMMENT '学校编码',
-  `name` varchar(100) DEFAULT NULL COMMENT '学校名称',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,false:停用,true:启用',
-  `access_key` varchar(50) DEFAULT NULL COMMENT '访问key',
-  `access_secret` varchar(50) DEFAULT NULL COMMENT '访问秘钥',
-  `remark` text COMMENT '备注',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  `logo` varchar(500) DEFAULT NULL COMMENT '学校logo',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `code` (`code`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '学校表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for basic_verify_code
--- ----------------------------
-DROP TABLE IF EXISTS `basic_verify_code`;
-CREATE TABLE `basic_verify_code` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `user_id` bigint NOT NULL COMMENT '用户ID',
-  `mobile_number` varchar(11) NOT NULL COMMENT '手机号',
-  `expire_time` bigint NOT NULL COMMENT '到期时间',
-  `valid_period` int NOT NULL COMMENT '单位(分)',
-  `verify_code` varchar(4) NOT NULL COMMENT '4位数字',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '短信验证码记录表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for cloud_marking_exam
--- ----------------------------
-DROP TABLE IF EXISTS `cloud_marking_exam`;
-CREATE TABLE `cloud_marking_exam` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID(实际存学院ID)',
-  `exam_id` int DEFAULT NULL COMMENT '云阅卷ID',
-  `exam_name` varchar(45) DEFAULT NULL COMMENT '云阅卷考试名称',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '云阅卷考试表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for cloud_marking_score
--- ----------------------------
-DROP TABLE IF EXISTS `cloud_marking_score`;
-CREATE TABLE `cloud_marking_score` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID(实际存学院ID)',
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID',
-  `exam_id` int DEFAULT NULL COMMENT '云阅卷考试ID',
-  `exam_code` varchar(45) DEFAULT NULL COMMENT '云阅卷考试Code',
-  `exam_number` varchar(45) DEFAULT NULL COMMENT '准考证号',
-  `student_code` varchar(45) DEFAULT NULL COMMENT '学号',
-  `name` varchar(150) DEFAULT NULL COMMENT '学生姓名',
-  `subject_code` varchar(45) DEFAULT NULL COMMENT '科目代码',
-  `subject_name` varchar(45) DEFAULT NULL COMMENT '科目名称',
-  `paper_type` varchar(5) DEFAULT NULL COMMENT '试卷类型',
-  `college` varchar(100) DEFAULT NULL COMMENT '学院',
-  `class_name` varchar(100) DEFAULT NULL COMMENT '班级',
-  `teacher` varchar(50) DEFAULT NULL COMMENT '老师',
-  `status` int DEFAULT NULL COMMENT '状态:1-正常,2-缺考(包含未上传),3-违纪',
-  `sheet_urls` text COMMENT '原卷地址',
-  `total_score` varchar(10) DEFAULT NULL COMMENT '总分',
-  `objective_score` varchar(10) DEFAULT NULL COMMENT '客观题总分',
-  `subjective_score` varchar(10) DEFAULT NULL COMMENT '主观题总分',
-  `objective_score_detail` mediumtext COMMENT '客观题小题分',
-  `subjective_score_detail` mediumtext COMMENT '主观题小题分',
-  `mark_tags` mediumtext COMMENT '阅卷轨迹',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '云阅卷成绩表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for cloud_marking_score_foreign
--- ----------------------------
-DROP TABLE IF EXISTS `cloud_marking_score_foreign`;
-CREATE TABLE `cloud_marking_score_foreign` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID(内部用,实际存学院ID)',
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID(内部用)',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID(内部用)',
-  `exam_id` int DEFAULT NULL COMMENT '云阅卷考试ID(内部用)',
-  `xnm` varchar(45) DEFAULT NULL COMMENT '学年',
-  `xqm` varchar(45) DEFAULT NULL COMMENT '学期',
-  `jxb_id` varchar(45) DEFAULT NULL COMMENT '教学班ID',
-  `kch` varchar(45) DEFAULT NULL COMMENT '课程号',
-  `kcmc` varchar(45) DEFAULT NULL COMMENT '课程名称',
-  `xh` varchar(45) DEFAULT NULL COMMENT '学号',
-  `xmcj` varchar(45) DEFAULT NULL COMMENT '成绩',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '对外输出成绩表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Table structure for exam_course_mapping
--- ----------------------------
-DROP TABLE IF EXISTS `exam_course_mapping`;
-CREATE TABLE `exam_course_mapping` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL,
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID',
-  `semester_name` varchar(100) DEFAULT NULL COMMENT '学期名称',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID',
-  `exam_type_name` varchar(100) DEFAULT NULL COMMENT '考试类型名称',
-  `sync_course_code` varchar(45) DEFAULT NULL COMMENT '武大考务数据课程代码',
-  `cloud_marking_course_code` varchar(45) DEFAULT NULL COMMENT '云阅卷课程代码',
-  PRIMARY KEY (`id`)
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '考务数据和云阅卷课程代码关联表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_download_record
--- ----------------------------
-DROP TABLE IF EXISTS `exam_download_record`;
-CREATE TABLE `exam_download_record` (
-  `id` bigint NOT NULL,
-  `operate_time` bigint DEFAULT NULL COMMENT '下载时间',
-  `user_id` bigint DEFAULT NULL COMMENT '下载用户id',
-  `user_name` varchar(100) DEFAULT NULL COMMENT '下载用户姓名',
-  `sync_total_id` bigint DEFAULT NULL COMMENT '考务数据同步记录表ID',
-  `used` tinyint(1) DEFAULT NULL COMMENT '是否使用(1-是,0-否)',
-  `use_scene` varchar(200) DEFAULT NULL COMMENT '用途',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  `update_id` bigint DEFAULT NULL,
-  `update_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '用户下载记录表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_schedule_task
--- ----------------------------
-DROP TABLE IF EXISTS `exam_schedule_task`;
-CREATE TABLE `exam_schedule_task` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `school_name` varchar(100) DEFAULT NULL COMMENT '学校名称',
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID',
-  `semester_name` varchar(200) DEFAULT NULL COMMENT '学期名称',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID',
-  `exam_type_name` varchar(100) DEFAULT NULL COMMENT '考试类型',
-  `start_time` bigint DEFAULT NULL COMMENT '定时任务开始时间',
-  `end_time` bigint DEFAULT NULL COMMENT '定时任务结束时间',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '修改人',
-  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '定时任务设置' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_semester
--- ----------------------------
-DROP TABLE IF EXISTS `exam_semester`;
-CREATE TABLE `exam_semester` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `name` varchar(200) DEFAULT NULL COMMENT '名称',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  `update_id` bigint DEFAULT NULL,
-  `update_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '学期表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_sync_student
--- ----------------------------
-DROP TABLE IF EXISTS `exam_sync_student`;
-CREATE TABLE `exam_sync_student` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `exam_sync_total_id` bigint DEFAULT NULL COMMENT '汇总表ID',
-  `xnm` varchar(50) DEFAULT NULL COMMENT '学年',
-  `xqm` varchar(50) DEFAULT NULL COMMENT '学期',
-  `jxb_id` varchar(50) DEFAULT NULL COMMENT '教学班id',
-  `jxbmc` varchar(45) DEFAULT NULL COMMENT '教学班名称',
-  `kch` varchar(45) DEFAULT NULL COMMENT '课程号',
-  `kcmc` varchar(45) DEFAULT NULL COMMENT '课程名称',
-  `jgh` varchar(45) DEFAULT NULL COMMENT '工号',
-  `xm` varchar(45) DEFAULT NULL COMMENT '姓名',
-  `kkbm` varchar(45) DEFAULT NULL COMMENT '开课部门',
-  `xf` varchar(45) DEFAULT NULL COMMENT '学分',
-  `xh` varchar(45) DEFAULT NULL COMMENT '学号',
-  `xsxm` varchar(45) DEFAULT NULL COMMENT '学生姓名',
-  `jgmc` varchar(45) DEFAULT NULL COMMENT '学院',
-  `zymc` varchar(45) DEFAULT NULL COMMENT '专业',
-  `cxbj` varchar(45) DEFAULT NULL COMMENT '重修标记',
-  `njdm_id` varchar(45) DEFAULT NULL COMMENT '年级',
-  `zwh` varchar(45) DEFAULT NULL COMMENT '座位号',
-  `cdmc` varchar(45) DEFAULT NULL COMMENT '场地名称',
-  `ksbz` varchar(45) DEFAULT NULL COMMENT '考试备注',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '考务数据同步考生信息' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_sync_student_temp
--- ----------------------------
-DROP TABLE IF EXISTS `exam_sync_student_temp`;
-CREATE TABLE `exam_sync_student_temp` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `exam_sync_total_id` bigint DEFAULT NULL COMMENT '汇总表ID',
-  `xnm` varchar(50) DEFAULT NULL COMMENT '学年',
-  `xqm` varchar(50) DEFAULT NULL COMMENT '学期',
-  `jxb_id` varchar(50) DEFAULT NULL COMMENT '教学班id',
-  `jxbmc` varchar(45) DEFAULT NULL COMMENT '教学班名称',
-  `kch` varchar(45) DEFAULT NULL COMMENT '课程号',
-  `kcmc` varchar(45) DEFAULT NULL COMMENT '课程名称',
-  `jgh` varchar(45) DEFAULT NULL COMMENT '工号',
-  `xm` varchar(45) DEFAULT NULL COMMENT '姓名',
-  `kkbm` varchar(45) DEFAULT NULL COMMENT '开课部门',
-  `xf` varchar(45) DEFAULT NULL COMMENT '学分',
-  `xh` varchar(45) DEFAULT NULL COMMENT '学号',
-  `xsxm` varchar(45) DEFAULT NULL COMMENT '学生姓名',
-  `jgmc` varchar(45) DEFAULT NULL COMMENT '学院',
-  `zymc` varchar(45) DEFAULT NULL COMMENT '专业',
-  `cxbj` varchar(45) DEFAULT NULL COMMENT '重修标记',
-  `njdm_id` varchar(45) DEFAULT NULL COMMENT '年级',
-  `zwh` varchar(45) DEFAULT NULL COMMENT '座位号',
-  `cdmc` varchar(45) DEFAULT NULL COMMENT '场地名称',
-  `ksbz` varchar(45) DEFAULT NULL COMMENT '考试备注',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '考务数据同步考生信息' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_sync_total
--- ----------------------------
-DROP TABLE IF EXISTS `exam_sync_total`;
-CREATE TABLE `exam_sync_total` (
-  `id` bigint NOT NULL,
-  `sync_date` bigint DEFAULT NULL COMMENT '同步日期',
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `school_name` varchar(100) DEFAULT NULL,
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID',
-  `semester_name` varchar(200) DEFAULT NULL COMMENT '学期',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID',
-  `exam_type_name` varchar(100) DEFAULT NULL COMMENT '考试类型',
-  `colleges` int DEFAULT NULL COMMENT '学院数量',
-  `subjects` int DEFAULT NULL COMMENT '科目数量',
-  `students` int DEFAULT NULL COMMENT '科次(考生数量)',
-  `file_name` varchar(100) DEFAULT NULL COMMENT '文件名',
-  `file_path` varchar(200) DEFAULT NULL COMMENT '文件地址',
-  `download_status` tinyint(1) DEFAULT NULL COMMENT '是否允许下载(1-是,0-否)',
-  `data_md5` varchar(100) DEFAULT NULL COMMENT '数据生成txt文件后md5值,用以比较数据是否有变动',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  `update_id` bigint DEFAULT NULL,
-  `update_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '考务数据同步记录' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for exam_type
--- ----------------------------
-DROP TABLE IF EXISTS `exam_type`;
-CREATE TABLE `exam_type` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL,
-  `name` varchar(100) DEFAULT NULL COMMENT '名称',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  `update_id` bigint DEFAULT NULL,
-  `update_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '考试类型' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_blob_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_blob_triggers`;
-CREATE TABLE `qrtz_blob_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `BLOB_DATA` blob,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE,
-  KEY `SCHED_NAME` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_calendars
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_calendars`;
-CREATE TABLE `qrtz_calendars` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `CALENDAR_NAME` varchar(200) NOT NULL,
-  `CALENDAR` blob NOT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_cron_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_cron_triggers`;
-CREATE TABLE `qrtz_cron_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `CRON_EXPRESSION` varchar(120) NOT NULL,
-  `TIME_ZONE_ID` varchar(80) DEFAULT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_fired_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_fired_triggers`;
-CREATE TABLE `qrtz_fired_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `ENTRY_ID` varchar(95) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `INSTANCE_NAME` varchar(200) NOT NULL,
-  `FIRED_TIME` bigint NOT NULL,
-  `SCHED_TIME` bigint NOT NULL,
-  `PRIORITY` int NOT NULL,
-  `STATE` varchar(16) NOT NULL,
-  `JOB_NAME` varchar(200) DEFAULT NULL,
-  `JOB_GROUP` varchar(200) DEFAULT NULL,
-  `IS_NONCONCURRENT` varchar(1) DEFAULT NULL,
-  `REQUESTS_RECOVERY` varchar(1) DEFAULT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`) USING BTREE,
-  KEY `IDX_QRTZ_FT_TRIG_INST_NAME` (`SCHED_NAME`,`INSTANCE_NAME`) USING BTREE,
-  KEY `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME`,`INSTANCE_NAME`,`REQUESTS_RECOVERY`) USING BTREE,
-  KEY `IDX_QRTZ_FT_J_G` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_FT_JG` (`SCHED_NAME`,`JOB_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_job_details
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_job_details`;
-CREATE TABLE `qrtz_job_details` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `JOB_NAME` varchar(200) NOT NULL,
-  `JOB_GROUP` varchar(200) NOT NULL,
-  `DESCRIPTION` varchar(250) DEFAULT NULL,
-  `JOB_CLASS_NAME` varchar(250) NOT NULL,
-  `IS_DURABLE` varchar(1) NOT NULL,
-  `IS_NONCONCURRENT` varchar(1) NOT NULL,
-  `IS_UPDATE_DATA` varchar(1) NOT NULL,
-  `REQUESTS_RECOVERY` varchar(1) NOT NULL,
-  `JOB_DATA` blob,
-  PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`,`REQUESTS_RECOVERY`) USING BTREE,
-  KEY `IDX_QRTZ_J_GRP` (`SCHED_NAME`,`JOB_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_locks
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_locks`;
-CREATE TABLE `qrtz_locks` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `LOCK_NAME` varchar(40) NOT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_paused_trigger_grps
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
-CREATE TABLE `qrtz_paused_trigger_grps` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_scheduler_state
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_scheduler_state`;
-CREATE TABLE `qrtz_scheduler_state` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `INSTANCE_NAME` varchar(200) NOT NULL,
-  `LAST_CHECKIN_TIME` bigint NOT NULL,
-  `CHECKIN_INTERVAL` bigint NOT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_simple_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simple_triggers`;
-CREATE TABLE `qrtz_simple_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `REPEAT_COUNT` bigint NOT NULL,
-  `REPEAT_INTERVAL` bigint NOT NULL,
-  `TIMES_TRIGGERED` bigint NOT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_simprop_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
-CREATE TABLE `qrtz_simprop_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `STR_PROP_1` varchar(512) DEFAULT NULL,
-  `STR_PROP_2` varchar(512) DEFAULT NULL,
-  `STR_PROP_3` varchar(512) DEFAULT NULL,
-  `INT_PROP_1` int DEFAULT NULL,
-  `INT_PROP_2` int DEFAULT NULL,
-  `LONG_PROP_1` bigint DEFAULT NULL,
-  `LONG_PROP_2` bigint DEFAULT NULL,
-  `DEC_PROP_1` decimal(13,4) DEFAULT NULL,
-  `DEC_PROP_2` decimal(13,4) DEFAULT NULL,
-  `BOOL_PROP_1` varchar(1) DEFAULT NULL,
-  `BOOL_PROP_2` varchar(1) DEFAULT NULL,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for qrtz_triggers
--- ----------------------------
-DROP TABLE IF EXISTS `qrtz_triggers`;
-CREATE TABLE `qrtz_triggers` (
-  `SCHED_NAME` varchar(120) NOT NULL,
-  `TRIGGER_NAME` varchar(200) NOT NULL,
-  `TRIGGER_GROUP` varchar(200) NOT NULL,
-  `JOB_NAME` varchar(200) NOT NULL,
-  `JOB_GROUP` varchar(200) NOT NULL,
-  `DESCRIPTION` varchar(250) DEFAULT NULL,
-  `NEXT_FIRE_TIME` bigint DEFAULT NULL,
-  `PREV_FIRE_TIME` bigint DEFAULT NULL,
-  `PRIORITY` int DEFAULT NULL,
-  `TRIGGER_STATE` varchar(16) NOT NULL,
-  `TRIGGER_TYPE` varchar(8) NOT NULL,
-  `START_TIME` bigint NOT NULL,
-  `END_TIME` bigint DEFAULT NULL,
-  `CALENDAR_NAME` varchar(200) DEFAULT NULL,
-  `MISFIRE_INSTR` smallint DEFAULT NULL,
-  `JOB_DATA` blob,
-  PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_T_J` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`) USING BTREE,
-  KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`) USING BTREE,
-  KEY `IDX_QRTZ_T_STATE` (`SCHED_NAME`,`TRIGGER_STATE`) USING BTREE,
-  KEY `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`) USING BTREE,
-  KEY `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`) USING BTREE,
-  KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`) USING BTREE,
-  KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`) USING BTREE,
-  KEY `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`) USING BTREE,
-  KEY `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_STATE`) USING BTREE,
-  KEY `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_GROUP`,`TRIGGER_STATE`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for sys_college
--- ----------------------------
-DROP TABLE IF EXISTS `sys_college`;
-CREATE TABLE `sys_college` (
-  `id` bigint NOT NULL,
-  `school_id` bigint DEFAULT NULL COMMENT '学校ID',
-  `code` varchar(45) DEFAULT NULL,
-  `name` varchar(100) DEFAULT NULL,
-  `access_key` varchar(50) DEFAULT NULL COMMENT '访问key',
-  `access_secret` varchar(50) DEFAULT NULL COMMENT '访问秘钥',
-  `create_id` bigint DEFAULT NULL,
-  `create_time` bigint DEFAULT NULL,
-  `update_id` bigint DEFAULT NULL,
-  `update_time` bigint DEFAULT NULL,
-  PRIMARY KEY (`id`)
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for sys_config
--- ----------------------------
-DROP TABLE IF EXISTS `sys_config`;
-CREATE TABLE `sys_config` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `config_key` varchar(100) NOT NULL COMMENT '参数键名',
-  `config_name` varchar(100) NOT NULL COMMENT '参数名称',
-  `config_value` varchar(100) NOT NULL COMMENT '参数键值',
-  `remark` varchar(100) DEFAULT NULL COMMENT '备注',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '参数表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for sys_org
--- ----------------------------
-DROP TABLE IF EXISTS `sys_org`;
-CREATE TABLE `sys_org` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint NOT NULL COMMENT '学校id',
-  `type` varchar(50) NOT NULL COMMENT '类型,SCHOOL:学校,COLLEGE:学院,FACULTY:院系,TEACHING_ROOM:教研室,PRINTING_HOUSE:印刷厂',
-  `code` varchar(20) DEFAULT NULL COMMENT '机构代码',
-  `name` varchar(100) NOT NULL COMMENT '机构名称',
-  `parent_id` bigint DEFAULT NULL COMMENT '上级机构id',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '修改人',
-  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `org_schoolId_name_idx` (`school_id`,`name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '学校组织架构' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for sys_privilege
--- ----------------------------
-DROP TABLE IF EXISTS `sys_privilege`;
-CREATE TABLE `sys_privilege` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `name` varchar(100) NOT NULL COMMENT '菜单名称',
-  `url` varchar(100) NOT NULL COMMENT 'URL地址',
-  `type` varchar(50) NOT NULL COMMENT '类型,MENU:菜单,BUTTON:按钮,LINK:链接,URL:接口地址,LIST:列表,CONDITION:查询条件,TAB:选项卡',
-  `parent_id` bigint DEFAULT NULL COMMENT '上级菜单',
-  `sequence` int NOT NULL COMMENT '序号',
-  `property` varchar(30) DEFAULT NULL COMMENT '属性,NO_AUTH:无需鉴权,AUTH:鉴权,SYS:系统公用',
-  `related` text COMMENT '关联属性,type为URL且property为AUTH才有',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  `default_auth` tinyint DEFAULT '1' COMMENT '默认权限,0:否,1:是',
-  `front_display` tinyint(1) DEFAULT '1' COMMENT '是否前端展示',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `privilege_index` (`name`,`url`,`type`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of sys_privilege
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (1, '用户管理', 'UserManage', 'MENU', NULL, 1, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (2, '用户管理-查询', '/api/sys_user/page', 'URL', 1, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (3, '用户管理-新增/修改', '/api/sys_user/save', 'URL', 1, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (4, '用户管理-启用/禁用', '/api/sys_user/enable', 'URL', 1, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (5, '用户管理-重置密码', '/api/sys_user/reset_password', 'URL', 1, 4, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (6, '设置定时任务', 'ScheduleManage', 'MENU', NULL, 2, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (7, '设置定时任务-查询', '/api/exam_schedule_task/page', 'URL', 6, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (8, '设置定时任务-新增/修改', '/api/exam_schedule_task/save', 'URL', 6, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (9, '考务数据列表', 'ExamSyncTotal', 'MENU', NULL, 3, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (10, '考务数据列表-查询', '/api/exam_sync_total/page', 'URL', 9, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (11, '考务数据列表-下载', '/api/exam_sync_total/download', 'URL', 9, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (12, '考务数据列表-人工同步', '/api/exam_sync_total/manual_sync', 'URL', 9, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (13, '下载列表', 'DownloadRecordManage', 'MENU', NULL, 4, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (14, '下载列表-查询', '/api/exam_download_record/page', 'URL', 13, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (15, '下载列表-标记用途', '/api/exam_download_record/used', 'URL', 13, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (16, '下载列表-标记用途', '/api/exam_download_record/list_use_scene', 'URL', 13, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (17, '学期管理', 'SemesterManage', 'MENU', NULL, 5, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (18, '学期管理-查询', '/api/exam_semester/list', 'URL', 17, 1, 'SYS', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (19, '用户登录', 'UserLogin', 'MENU', NULL, 6, NULL, NULL, 0, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (20, '用户登出', '/api/common/logout', 'URL', 19, 1, 'SYS', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (21, '考试类型管理', 'ExamTypeManage', 'MENU', NULL, 7, NULL, NULL, 0, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (22, '考试类型管理-查询', '/api/exam_type/list', 'URL', 21, 1, 'SYS', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (23, '学校管理', 'SchoolManage', 'MENU', NULL, 8, NULL, NULL, 0, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (24, '学校管理-查询', '/api/basic_school/list', 'URL', 23, 1, 'SYS', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (25, '学期管理-分页', '/api/exam_semester/page', 'URL', 17, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (26, '学期管理-新增/修改', '/api/exam_semester/save', 'URL', 17, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (27, '学期管理-删除', '/api/exam_semester/delete', 'URL', 17, 4, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (28, '考试类型管理-分页', '/api/exam_type/page', 'URL', 21, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (29, '考试类型管理-新增/修改', '/api/exam_type/save', 'URL', 21, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (30, '考试类型管理-删除', '/api/exam_type/delete', 'URL', 21, 4, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (31, '用户管理-删除', '/api/sys_user/delete', 'URL', 1, 5, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (32, '成绩回传', 'uploadScore', 'MENU', NULL, 3, NULL, NULL, 0, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (33, '云阅卷数据管理', 'cloudMarkingManage', 'MENU', 32, 1, NULL, NULL, 1, 0, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (34, '云阅卷考试-列表', '/api/cloud_marking_exam/list', 'URL', 33, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (35, '云阅卷考试-同步', '/api/cloud_marking_exam/sync', 'URL', 33, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (36, '云阅卷成绩-同步', '/api/cloud_marking_score/sync_student_score', 'URL', 33, 3, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (37, '云阅卷成绩-查询', '/api/cloud_marking_score/page', 'URL', 33, 4, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (38, '回传数据管理', 'cloudMarkingForeignManage', 'MENU', 32, 2, NULL, NULL, 1, 0, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (39, '回传数据管理-列表', '/api/cloud_marking_score_foreign/page', 'URL', 38, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (40, '回传数据管理-下载', '/api/cloud_marking_score_foreign/download_score', 'URL', 38, 2, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (41, '学院查询', '/api/sys_college/list', 'URL', 33, 5, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (42, '课程关联管理', 'courseMapping', 'MENU', NULL, 5, NULL, NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (43, '课程关联管理-查询', '/api/exam_course_mapping/page', 'URL', 42, 1, 'AUTH', NULL, 1, 1, 1);
-INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `related`, `enable`, `default_auth`, `front_display`) VALUES (44, '课程关联管理-导入', '/api/exam_course_mapping/import', 'URL', 42, 2, 'AUTH', NULL, 1, 1, 1);
-COMMIT;
-
--- ----------------------------
--- Table structure for sys_role
--- ----------------------------
-DROP TABLE IF EXISTS `sys_role`;
-CREATE TABLE `sys_role` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `name` varchar(50) NOT NULL COMMENT '角色名称',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  `type` varchar(20) DEFAULT NULL COMMENT '角色类别,ADMIN:超级管理员,SCHOOL_ADMIN:管理员:EXAM_TEACHER:考务老师,QUESTION_TEACHER:命题老师,CUSTOMER:客服人员,PRINTER:印刷人员,CUSTOM:自定义',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '修改人',
-  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `role_schoolId_name_idx` (`school_id`,`name`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of sys_role
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_role` (`id`, `school_id`, `org_id`, `name`, `enable`, `type`, `create_id`, `create_time`, `update_id`, `update_time`) VALUES (1, 1, NULL, '管理员', 1, 'ADMIN', NULL, NULL, NULL, NULL);
-INSERT INTO `sys_role` (`id`, `school_id`, `org_id`, `name`, `enable`, `type`, `create_id`, `create_time`, `update_id`, `update_time`) VALUES (2, 1, NULL, '实施人员', 1, 'IMPLEMENT', NULL, NULL, NULL, NULL);
-COMMIT;
-
--- ----------------------------
--- Table structure for sys_role_privilege
--- ----------------------------
-DROP TABLE IF EXISTS `sys_role_privilege`;
-CREATE TABLE `sys_role_privilege` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `role_id` bigint NOT NULL COMMENT '角色id',
-  `privilege_id` bigint NOT NULL COMMENT '菜单id',
-  `enable` tinyint DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of sys_role_privilege
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (6, 2, 6, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (7, 2, 7, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (8, 2, 8, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (9, 2, 9, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (10, 2, 10, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (11, 2, 11, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (12, 2, 12, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (13, 2, 13, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (14, 2, 14, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (15, 2, 15, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (16, 2, 16, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (32, 2, 32, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (33, 2, 33, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (34, 2, 34, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (35, 2, 35, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (36, 2, 36, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (37, 2, 37, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (38, 2, 38, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (39, 2, 39, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (40, 2, 40, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (41, 2, 41, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (42, 2, 42, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (43, 2, 43, 1);
-INSERT INTO `sys_role_privilege` (`id`, `role_id`, `privilege_id`, `enable`) VALUES (44, 2, 44, 1);
-COMMIT;
-
--- ----------------------------
--- Table structure for sys_user
--- ----------------------------
-DROP TABLE IF EXISTS `sys_user`;
-CREATE TABLE `sys_user` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `login_name` varchar(100) NOT NULL COMMENT '用户名',
-  `real_name` varchar(100) NOT NULL COMMENT '姓名',
-  `code` varchar(100) DEFAULT NULL COMMENT '工号',
-  `password` varchar(50) NOT NULL COMMENT '密码',
-  `mobile_number` varchar(11) DEFAULT NULL COMMENT '手机号',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  `pwd_count` tinyint DEFAULT '0' COMMENT '密码修改次数,默认为0',
-  `pwd_update_time` bigint DEFAULT NULL COMMENT '密码修改时间',
-  `remark` varchar(200) DEFAULT NULL COMMENT '备注',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '修改人',
-  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
-  PRIMARY KEY (`id`) USING BTREE,
-  UNIQUE KEY `user_schoolId_loginName_idx` (`school_id`,`login_name`) USING BTREE,
-  UNIQUE KEY `uq_school_id_mobile_number` (`school_id`,`mobile_number`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of sys_user
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_user` (`id`, `school_id`, `login_name`, `real_name`, `code`, `password`, `mobile_number`, `org_id`, `enable`, `pwd_count`, `pwd_update_time`, `remark`, `create_id`, `create_time`, `update_id`, `update_time`) VALUES (1, NULL, '13207165630', '李翔', NULL, 'MTIzNDU2', '13207165630', NULL, 1, 0, NULL, NULL, NULL, NULL, NULL, 1653272598854);
-COMMIT;
-
--- ----------------------------
--- Table structure for sys_user_role
--- ----------------------------
-DROP TABLE IF EXISTS `sys_user_role`;
-CREATE TABLE `sys_user_role` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `user_id` bigint NOT NULL COMMENT '用户id',
-  `role_id` bigint NOT NULL COMMENT '角色id',
-  `privilege_id` bigint DEFAULT NULL COMMENT '权限id',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,0:停用,1:启用',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of sys_user_role
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_user_role` (`id`, `user_id`, `role_id`, `privilege_id`, `enable`) VALUES (1, 1, 1, NULL, 1);
-COMMIT;
-
--- ----------------------------
--- Table structure for t_b_session
--- ----------------------------
-DROP TABLE IF EXISTS `t_b_session`;
-CREATE TABLE `t_b_session` (
-  `id` varchar(100) NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `identity` varchar(100) NOT NULL COMMENT '用户标识',
-  `type` varchar(50) NOT NULL COMMENT '用户类型',
-  `source` varchar(50) NOT NULL COMMENT '访问来源',
-  `platform` varchar(50) NOT NULL COMMENT '设备分类',
-  `device_id` varchar(100) NOT NULL COMMENT '设备标识',
-  `address` varchar(100) NOT NULL COMMENT '登录IP地址',
-  `access_token` varchar(50) NOT NULL COMMENT '访问令牌',
-  `last_access_time` bigint DEFAULT NULL COMMENT '最近访问时间',
-  `last_access_ip` varchar(100) DEFAULT NULL COMMENT '最近访问IP地址',
-  `update_time` bigint DEFAULT NULL COMMENT '令牌更新时间',
-  `expire_time` bigint DEFAULT NULL COMMENT '令牌强制失效时间',
-  `app_source` varchar(50) DEFAULT NULL COMMENT '应用来源',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '会话表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for t_b_sync_task
--- ----------------------------
-DROP TABLE IF EXISTS `t_b_sync_task`;
-CREATE TABLE `t_b_sync_task` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `semester_id` bigint DEFAULT NULL COMMENT '学期ID',
-  `exam_type_id` bigint DEFAULT NULL COMMENT '考试类型ID',
-  `type` varchar(45) DEFAULT NULL COMMENT '类型',
-  `sync_time` bigint DEFAULT NULL COMMENT '执行时间',
-  `status` varchar(30) NOT NULL COMMENT '任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成',
-  `result` varchar(30) DEFAULT NULL COMMENT '数据结果,SUCCESS:成功,ERROR:失败',
-  `remark` mediumtext COMMENT '备注',
-  `error_message` varchar(500) DEFAULT NULL COMMENT '人工错误原因',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '修改人',
-  `update_time` bigint DEFAULT NULL COMMENT '修改时间',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '云阅卷同步任务表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for t_b_task
--- ----------------------------
-DROP TABLE IF EXISTS `t_b_task`;
-CREATE TABLE `t_b_task` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `type` varchar(50) NOT NULL COMMENT '任务类型,USER_IMPORT:用户导入,\nQUESTION_MISSION_BATCH_CREATE:批量新建命题任务,\nSAMPLE_EXPORT:导出审核样本,\nPAPER_DOWNLOAD:卷库下载,\nEXAMINATION_IMPORT:考务数据导入,\nEXAMINATION_EXPORT:考务数据导出,\nPRINT_PDF_DOWNLOAD:批量下载pdf,\nCREATE_PDF:生成pdf,\nCOURSE_IMPORT:课程导入',
-  `entity_id` bigint DEFAULT NULL COMMENT '关联业务对象id',
-  `status` varchar(30) NOT NULL COMMENT '任务状态,INIT:未开始,RUNNING:进行中,FINISH:已完成',
-  `summary` text COMMENT '实时摘要信息',
-  `progress` double DEFAULT NULL COMMENT '执行进度',
-  `result` varchar(30) DEFAULT NULL COMMENT '数据结果,SUCCESS:成功,ERROR:失败',
-  `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,false:停用,true:启用',
-  `import_file_name` varchar(100) DEFAULT NULL COMMENT '导入文件名',
-  `import_file_path` varchar(500) DEFAULT NULL COMMENT '导入文件路径',
-  `result_file_path` varchar(500) DEFAULT NULL COMMENT '导出文件路径',
-  `report_file_path` varchar(500) DEFAULT NULL COMMENT '报告路径',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `remark` mediumtext COMMENT '备注',
-  `obj_name` varchar(500) DEFAULT NULL COMMENT '实体名称',
-  `reset_count` int DEFAULT '0' COMMENT '重试次数',
-  `version` int DEFAULT '0' COMMENT '更新版本号',
-  `error_message` varchar(500) DEFAULT NULL COMMENT '人工错误原因',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '导入导出任务表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for t_g_error
--- ----------------------------
-DROP TABLE IF EXISTS `t_g_error`;
-CREATE TABLE `t_g_error` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint DEFAULT NULL COMMENT '学校id',
-  `org_id` bigint DEFAULT NULL COMMENT '机构id',
-  `obj_id` bigint DEFAULT NULL COMMENT '实体id',
-  `summary` mediumtext COMMENT '实时摘要信息',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '全局异常错误信息表' ROW_FORMAT = Dynamic;
-
-
--- ----------------------------
--- Table structure for t_s_auth
--- ----------------------------
-DROP TABLE IF EXISTS `t_s_auth`;
-CREATE TABLE `t_s_auth` (
-  `id` bigint NOT NULL COMMENT '主键',
-  `school_id` bigint NOT NULL COMMENT '学校id',
-  `access_key` varchar(255) DEFAULT NULL COMMENT 'accessKey',
-  `access_secret` varchar(255) DEFAULT NULL COMMENT 'accessSecret',
-  `description` text COMMENT '离线授权证书',
-  `type` varchar(16) NOT NULL COMMENT '授权类型',
-  `create_id` bigint DEFAULT NULL COMMENT '创建人',
-  `create_time` bigint DEFAULT NULL COMMENT '创建时间',
-  `update_id` bigint DEFAULT NULL COMMENT '更新人',
-  `update_time` bigint DEFAULT NULL COMMENT '更新时间',
-  `expire_time` bigint DEFAULT NULL COMMENT '过期时间',
-  `file` mediumblob COMMENT '文件数据',
-  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8_general_ci COMMENT = '激活授权配置表' ROW_FORMAT = Dynamic;
-
-
-SET FOREIGN_KEY_CHECKS = 1;

+ 54 - 0
src/main/resources/ehcache/ehcache.xml

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
+         updateCheck="false">
+
+    <!-- diskStore:ehcache其实是支持内存+磁盘+堆外内存,几个层级的缓存 -->
+    <!-- 在这里设置一下,但是一般不用的 -->
+    <diskStore path="java.io.tmpdir/Tmp_EhCache" />
+
+    <!-- defaultCache,是默认的缓存策略 -->
+    <!-- 如果你指定的缓存策略没有找到,那么就用这个默认的缓存策略 -->
+    <!-- external:如果设置为true的话,那么timeout就没有效果,缓存就会一直存在,一般默认就是false -->
+    <!-- maxElementsInMemory:内存中可以缓存多少个缓存条目,在实践中,你是需要自己去计算的,比如你计算你要缓存的对象是什么?有多大?最多可以缓存多少MB,或者多少个G的数据?除以每个对象的大小,计算出最多可以放多少个对象 -->
+    <!-- overflowToDisk:如果内存不够的时候,是否溢出到磁盘 -->
+    <!-- diskPersistent:是否启用磁盘持久化的机制,在jvm崩溃的时候和重启之间,不用 -->
+    <!-- timeToIdleSeconds:对象最大的闲置的时间,如果超出闲置的时间,可能就会过期,我们这里就不用了,缓存最多闲置5分钟就被干掉了 -->
+    <!-- timeToLiveSeconds:对象最多存活的时间,我们这里也不用,超过这个时间,缓存就过期,就没了 -->
+    <!-- memoryStoreEvictionPolicy:当缓存数量达到了最大的指定条目数的时候,需要采用一定的算法,从缓存中清除一批数据,LRU,最近最少使用算法,最近一段时间内,最少使用的那些数据,就被干掉了 -->
+    <defaultCache
+            eternal="false"
+            maxElementsInMemory="1000"
+            overflowToDisk="false"
+            diskPersistent="false"
+            timeToIdleSeconds="0"
+            timeToLiveSeconds="0"
+            memoryStoreEvictionPolicy="LRU" />
+
+    <!-- 手动指定的缓存策略 -->
+    <!-- 比如你一个应用吧,可能要缓存很多种不同的数据,比如说商品信息,或者是其他的一些数据 -->
+    <!-- 对不同的数据,缓存策略可以在这里配置多种 -->
+    <cache
+            name="systemCache"
+            eternal="false"
+            maxElementsInMemory="1000"
+            overflowToDisk="false"
+            diskPersistent="false"
+            timeToIdleSeconds="0"
+            timeToLiveSeconds="0"
+            memoryStoreEvictionPolicy="LRU" />
+
+    <!-- ehcache这种东西,简单实用,是很快速的,1小时上手可以用在项目里了,没什么难度的 -->
+    <!-- ehcache这个技术,如果讲深了,里面的东西还是很多的,高级的feature,但是我们这里就不涉及了 -->
+
+    <cache
+            name="dynamicCache"
+            eternal="false"
+            maxElementsInMemory="1000"
+            overflowToDisk="false"
+            diskPersistent="false"
+            timeToIdleSeconds="0"
+            timeToLiveSeconds="0"
+            memoryStoreEvictionPolicy="LRU" />
+</ehcache>
+