From 5097d13418e9a0bf605f5272f1b9e60fc62c80cb Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Wed, 10 Mar 2021 17:26:01 +0800
Subject: [PATCH] common模块:     增加  AESUtils  MD5Utils ObjectUtils TokenUtils manage模块:     完整用户登陆功能

---
 screen-common/src/main/java/com/moral/util/ObjectUtils.java                          |   29 +
 screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java                     |   11 
 screen-common/src/main/java/com/moral/util/TokenUtils.java                           |  105 ++++++
 screen-manage/src/main/java/com/moral/api/service/impl/TestServiceImpl.java          |    7 
 pom.xml                                                                              |    5 
 screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java |   90 +++++
 screen-common/src/main/java/com/moral/util/AESUtils.java                             |   79 ++++
 screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java            |   37 ++
 screen-manage/src/main/java/com/moral/api/entity/Test.java                           |    5 
 screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java          |    4 
 screen-common/src/main/java/com/moral/util/MD5Utils.java                             |   91 +++++
 screen-manage/src/main/java/com/moral/api/config/redis/RedisConfig.java              |   75 ++++
 screen-manage/src/main/java/com/moral/api/entity/ManageRole.java                     |    8 
 screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java                    |  144 ++++++++
 screen-manage/src/main/java/com/moral/api/mapper/ManageRoleMapper.java               |    5 
 screen-manage/src/main/java/com/moral/api/service/TestService.java                   |    3 
 screen-manage/src/main/resources/mapper/ManageMenuMapper.xml                         |   98 +++++
 screen-common/src/main/java/com/moral/util/DateUtils.java                            |   13 
 screen-manage/src/main/java/com/moral/api/entity/ManageAccount.java                  |    6 
 screen-manage/src/main/java/com/moral/api/controller/AccountController.java          |   33 +
 screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java    |   11 
 screen-manage/src/main/java/com/moral/api/controller/TestController.java             |   20 
 screen-common/pom.xml                                                                |   12 
 screen-manage/src/main/resources/application-dev.yml                                 |   32 +
 screen-manage/src/main/resources/mapper/ManageRoleMapper.xml                         |   34 +
 screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java      |    4 
 screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java         |   24 +
 screen-manage/src/main/java/com/moral/api/mapper/TestMapper.java                     |    2 
 screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java               |   23 +
 29 files changed, 954 insertions(+), 56 deletions(-)

diff --git a/pom.xml b/pom.xml
index 5128e22..a26232a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,6 +102,11 @@
             <artifactId>mysql-connector-java</artifactId>
             <scope>runtime</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 
diff --git a/screen-common/pom.xml b/screen-common/pom.xml
index 5fed457..0967c9c 100644
--- a/screen-common/pom.xml
+++ b/screen-common/pom.xml
@@ -12,7 +12,7 @@
     <artifactId>screen-common</artifactId>
 
     <properties>
-
+        <commons-net>3.6</commons-net>
         <spring-boot-starter-data-redis.version>2.1.3.RELEASE</spring-boot-starter-data-redis.version>
         <jedis.version>2.9.0</jedis.version>
     </properties>
@@ -32,6 +32,11 @@
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>${com.alibaba.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.6</version>
         </dependency>
     </dependencies>
 
@@ -65,6 +70,11 @@
                         <artifactId>maven-shared-incremental</artifactId>
                         <version>${maven-shared-incremental.version}</version>
                     </dependency>
+                    <dependency>
+                        <groupId>commons-net</groupId>
+                        <artifactId>commons-net</artifactId>
+                        <version>${commons-net}</version>
+                    </dependency>
                 </dependencies>
             </plugin>
 
diff --git a/screen-common/src/main/java/com/moral/util/AESUtils.java b/screen-common/src/main/java/com/moral/util/AESUtils.java
new file mode 100644
index 0000000..ef66d11
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/AESUtils.java
@@ -0,0 +1,79 @@
+package com.moral.util;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.net.util.Base64;
+
+/**
+ * @ClassName AESUtil
+ * @Description AES���������
+ * @Author ���������
+ * @Date 2021/3/9 14:25
+ * @Version TODO
+ **/
+@Slf4j
+public class AESUtils {
+    //������
+    public static String key = "AD42F7787B035B7580000EF93BE20BAD";
+    //���������
+    private static String charset = "utf-8";
+    // ���������
+    private static int offset = 16;
+    //AES������
+    private static String transformation = "AES/CBC/PKCS5Padding";
+    private static String algorithm = "AES";
+
+    //������
+    public static String encrypt(String content) {
+        return encrypt(content, key);
+    }
+
+    //������
+    public static String decrypt(String content) {
+        return decrypt(content, key);
+    }
+
+    //������
+    public static String encrypt(String content, String key) {
+        try {
+            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm);
+            IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset);
+            Cipher cipher = Cipher.getInstance(transformation);
+            byte[] byteContent = content.getBytes(charset);
+            cipher.init(Cipher.ENCRYPT_MODE, skey, iv);// ���������
+            byte[] result = cipher.doFinal(byteContent);
+            return new Base64().encodeToString(result); // ������
+        } catch (Exception e) {
+            log.error("Encryption failed!");
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    //������
+    public static String decrypt(String content, String key) {
+        try {
+            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), algorithm);
+            IvParameterSpec iv = new IvParameterSpec(key.getBytes(), 0, offset);
+            Cipher cipher = Cipher.getInstance(transformation);
+            cipher.init(Cipher.DECRYPT_MODE, skey, iv);// ���������
+            byte[] result = cipher.doFinal(new Base64().decode(content));
+            return new String(result); // ������
+        } catch (Exception e) {
+            log.error("Decryption failed!");
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    public static void main(String[] args) {
+        System.out.println(encrypt("123456").length());
+        System.out.println(encrypt("chenkaiyu111").length());
+        System.out.println(encrypt("ASDKJLFHDLSKJ").length());
+        System.out.println(encrypt("chenkaiiiiiiiiiiiii").length());
+    }
+
+}
diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java
index 69f256d..9f5ea52 100644
--- a/screen-common/src/main/java/com/moral/util/DateUtils.java
+++ b/screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -45,6 +45,8 @@
 	/** DateFormat������ */
 	private static Map<String, DateFormat> dateFormatMap = new HashMap<String, DateFormat>();
 
+
+
 	/**
 	 * ������DateFormat
 	 * 
@@ -1257,11 +1259,10 @@
 	
 	
 	
-	public static void main(String[] args) {
-		Date newdate = new Date();
-		SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");
-		String  date = dft.format(newdate);	
-		System.out.println(date);
-//		return endDate;
+	public static void main(String[] args) throws InterruptedException {
+		Date date1 = new Date();
+		Thread.sleep(1000);
+		Date date2 = new Date();
+		System.out.println(DateUtils.compareDateStr(date1,date2));
 	}
 }
diff --git a/screen-common/src/main/java/com/moral/util/MD5Utils.java b/screen-common/src/main/java/com/moral/util/MD5Utils.java
new file mode 100644
index 0000000..1f7396b
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/MD5Utils.java
@@ -0,0 +1,91 @@
+package com.moral.util;
+
+import java.security.MessageDigest;
+import java.util.Random;
+
+
+public class MD5Utils {
+
+    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+
+    public static String MD5(String s) {
+        char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+
+        try {
+            byte[] btInput = s.getBytes();
+            // ������MD5��������������� MessageDigest ������
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            // ���������������������������������
+            mdInst.update(btInput);
+            // ������������
+            byte[] md = mdInst.digest();
+            // ������������������������������������������������
+            int j = md.length;
+            char str[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+
+    /**
+     * ������MD5
+     */
+    public static String saltMD5(String password) {
+        String salt = genSalt();
+        password = MD5(password + salt);
+        char[] cs = new char[48];
+        for (int i = 0; i < 48; i += 3) {
+            cs[i] = password.charAt(i / 3 * 2);
+            char c = salt.charAt(i / 3);
+            cs[i + 1] = c;
+            cs[i + 2] = password.charAt(i / 3 * 2 + 1);
+        }
+        return new String(cs);
+    }
+
+
+    /**
+     * @return ���������
+     */
+    private static String genSalt() {
+        Random r = new Random();
+        StringBuilder sb = new StringBuilder(16);
+        sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));
+        int len = sb.length();
+        if (len < 16) {
+            for (int i = 0; i < 16 - len; i++) {
+                sb.append("0");
+            }
+        }
+        String salt = sb.toString();
+        return salt;
+    }
+
+    /**
+     * ������
+     */
+    public static boolean saltMD5Verify(String password, String md5) {
+        char[] cs1 = new char[32];
+        char[] cs2 = new char[16];
+        for (int i = 0; i < 48; i += 3) {
+            cs1[i / 3 * 2] = md5.charAt(i);
+            cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);
+            cs2[i / 3] = md5.charAt(i + 1);
+        }
+        String salt = new String(cs2);
+        return MD5(password + salt).equals(new String(cs1));
+    }
+
+    public static void main(String[] args) {
+        System.out.println(saltMD5("123456"));
+    }
+
+}
diff --git a/screen-common/src/main/java/com/moral/util/ObjectUtils.java b/screen-common/src/main/java/com/moral/util/ObjectUtils.java
new file mode 100644
index 0000000..2808e7f
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/ObjectUtils.java
@@ -0,0 +1,29 @@
+package com.moral.util;
+
+import java.util.Map;
+
+/**
+ * @ClassName ObjectUtil
+ * @Description manage���������������
+ * @Author ���������
+ * @Date 2021/3/10 16:45
+ * @Version TODO
+ **/
+public class ObjectUtils {
+    /**
+    * @Description: ������map������map������Key������������
+            * @Param: [map, keys]
+            * @return: boolean
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */
+    public static boolean checkParamAndMap(Map<String,Object> map,String ... keys){
+        if(null==map)
+            return false;
+        for (String key : keys) {
+            if(null==map.get(key))
+                return false;
+        }
+        return true;
+    }
+}
diff --git a/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java b/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
new file mode 100644
index 0000000..33d6d28
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/TokenEncryptUtils.java
@@ -0,0 +1,144 @@
+package com.moral.util;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName TokenEncryptUtils
+ * @Description token���������������������
+ * @Author ���������
+ * @Date 2021/3/10 11:50
+ * @Version TODO
+ **/
+@Component
+public class TokenEncryptUtils {
+
+    private static  String key;
+
+    @Value("${TOKEN.KEY}")
+    public void setKey(String tokenKey){
+        this.key = tokenKey;
+    }
+
+    /**
+     * ������
+     * @param str
+     * @return
+     */
+    public static String encoded(String str) {
+        return strToHex(encodedString(str, key));
+    }
+
+
+    /**
+    * @Description: ������
+            * @Param: [str]
+            * @return: java.lang.String
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */
+    public static String decoded(String str) {
+        String hexStr = null;
+        try {
+            hexStr = hexStrToStr(str);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (hexStr != null) {
+            hexStr = encodedString(hexStr, key);
+        }
+        return hexStr;
+    }
+
+    /**
+     * ������
+     * @param str
+     * @param password
+     * @return
+     */
+    private static String encodedString(String str, String password) {
+        char[] pwd = password.toCharArray();
+        int pwdLen = pwd.length;
+
+        char[] strArray = str.toCharArray();
+        for (int i=0; i<strArray.length; i++) {
+            strArray[i] = (char)(strArray[i] ^ pwd[i%pwdLen] ^ pwdLen);
+        }
+        return new String(strArray);
+    }
+
+    /** 
+    * @Description: 16���������������������
+            * @Param: [hexStr]
+            * @return: java.lang.String
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */ 
+    private static String hexStrToStr(String hexStr) {
+        return new String(hexStrToBytes(hexStr));
+    }
+
+    /** 
+    * @Description: 16���������������������������������
+            * @Param: [hexStr]
+            * @return: byte[]
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */ 
+    private static byte[] hexStrToBytes(String hexStr) {
+        String hex;
+        int val;
+        byte[] btHexStr = new byte[hexStr.length()/2];
+        for (int i=0; i<btHexStr.length; i++) {
+            hex = hexStr.substring(2*i, 2*i+2);
+            val = Integer.valueOf(hex, 16);
+            btHexStr[i] = (byte) val;
+        }
+        return btHexStr;
+    }
+
+    /**
+    * @Description: ������������������16���������������
+            * @Param: [bytesArray]
+            * @return: java.lang.String
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */
+    private static String bytesToHexStr(byte[] bytesArray) {
+        StringBuilder builder = new StringBuilder();
+        String hexStr;
+        for (byte bt : bytesArray) {
+            hexStr = Integer.toHexString(bt & 0xFF);
+            if (hexStr.length() == 1) {
+                builder.append("0");
+                builder.append(hexStr);
+            }else{
+                builder.append(hexStr);
+            }
+        }
+        return builder.toString();
+    }
+
+    /**
+     * @Description: ���������������16������
+     * @Param: [s]
+     * @return: java.lang.String
+     * @Author: ���������
+     * @Date: 2021/3/10
+     */
+    private static String strToHex(String s) {
+        return bytesToHexStr(s.getBytes());
+    }
+
+    public static void main(String[] args) {
+        long currentTime  = System.currentTimeMillis();
+        System.out.println("������������token���"+"25."+currentTime);
+        String token = encoded("25" +"/"+ currentTime);
+        String[] decoded = decoded(token).split("/");
+        System.out.println("���������token���"+token);
+        for (String s : decoded) {
+            System.out.println("������������token���"+s);
+        }
+    }
+
+}
diff --git a/screen-common/src/main/java/com/moral/util/TokenUtils.java b/screen-common/src/main/java/com/moral/util/TokenUtils.java
new file mode 100644
index 0000000..2fb6132
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/TokenUtils.java
@@ -0,0 +1,105 @@
+package com.moral.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @ClassName tokenUtils
+ * @Description token������������������������
+ * @Author ���������
+ * @Date 2021/3/10 11:35
+ * @Version TODO
+ **/
+@Component
+@Slf4j
+public class TokenUtils {
+
+    private static RedisTemplate redisTemplate;
+
+    @Autowired
+    @Qualifier("tokenRedisTemplate")
+    public void setRedisTemplate(RedisTemplate redisTemplate) {
+        TokenUtils.redisTemplate = redisTemplate;
+    }
+
+    //token��������� ������������
+    private static final int validity_time = 60*60*24*7;
+    //token������,������������
+    public static final int error = -1;
+    //token������
+    public static final int timeout = -2;
+    //token���������������������
+    public static final int valid = 1;
+
+    /**
+     * @Description: ������token
+     * @Param: [type, uid] type��� ���������������manage  ���������������api
+     * @return: java.lang.String
+     * @Author: ���������
+     * @Date: 2021/3/10
+     */
+    public static Map<String, Object> getToken(String uid, Map<String, Object> userInfo) {
+        Map<String, Object> result = new HashMap<>();
+        //������������token
+        try {
+            String token = TokenEncryptUtils.encoded(uid + "/" + System.currentTimeMillis() / 1000);
+            redisTemplate.opsForValue().set(token, userInfo);
+            redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
+            result.put("code", valid);
+            result.put("token",token);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            result.put("code",error);
+        }
+        return result;
+    }
+
+    /**
+     * @Description: ������token
+     * @Param: [type, token] type��� ���������������manage  ���������������api
+     * @return: java.util.Map<java.lang.String                               ,                               java.lang.Object>
+     * @Author: ���������
+     * @Date: 2021/3/10
+     */
+    public static Map<String, Object> checkToken( String token) {
+        Map<String, Object> result = new HashMap<>();
+        try {
+            String[] tokenArray = TokenEncryptUtils.decoded(token).split("/");
+            //������token������������
+            if (tokenArray.length != 2) {
+                result.put("code", error);
+                result.put("msg", "���������token");
+                return result;
+            }
+            //������token������������
+            int tokenTime = Integer.parseInt(tokenArray[1]);
+            if ((System.currentTimeMillis() / 1000) - tokenTime > validity_time) {
+                result.put("code", timeout);
+                result.put("msg", "���������������������������������������");
+                return result;
+            }
+            result.put("code", valid);
+            return result;
+        } catch (Exception e) {
+            log.error("token���������������token������" + e.getMessage());
+            result.put("code", error);
+            result.put("msg", "���������token");
+            return result;
+        }
+    }
+
+    //������token������������������
+    public static Map<String, Object> getUserInfoByToken(String token) {
+        Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token);
+        return userInfo;
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java
new file mode 100644
index 0000000..17dc780
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java
@@ -0,0 +1,37 @@
+package com.moral.api.config.mvc;
+
+import com.moral.api.interceptor.ManageInterceptor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.util.ArrayList;
+
+@Configuration
+public class SpringMVCconfig implements WebMvcConfigurer{
+
+    /**
+    * @Description: ������yaml���������������������������
+            * @Param: []
+            * @return: java.util.ArrayList<java.lang.String>
+            * @Author: ���������
+            * @Date: 2021/3/9
+            */
+    @Bean
+    @ConfigurationProperties("mvc.interceptor.exclude")
+    public ArrayList<String> getExcludePath(){
+        return new ArrayList<>();
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        InterceptorRegistration regisration = registry.addInterceptor(new ManageInterceptor());
+        ArrayList<String> excludePath = getExcludePath();
+        regisration.addPathPatterns("/**/**");//������������������
+        regisration.excludePathPatterns(excludePath);//���������������������
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/config/redis/RedisConfig.java b/screen-manage/src/main/java/com/moral/api/config/redis/RedisConfig.java
index b63690d..5c1c10a 100644
--- a/screen-manage/src/main/java/com/moral/api/config/redis/RedisConfig.java
+++ b/screen-manage/src/main/java/com/moral/api/config/redis/RedisConfig.java
@@ -1,26 +1,38 @@
 package com.moral.api.config.redis;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.RedisPassword;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
+import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
+import redis.clients.jedis.JedisPoolConfig;
+
+import java.time.Duration;
 
 
 @Configuration
 public class RedisConfig {
 
-    @Bean(name="redisTemplate")
+    @Bean(name = "redisTemplate")
     @ConditionalOnMissingBean(StringRedisTemplate.class)  //������������������  ���������������������RedisTemplate ������������    ������������������
-    public RedisTemplate<String,Object> stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
+    public RedisTemplate<String, Object> stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
         RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
         redisTemplate.setConnectionFactory(redisConnectionFactory);
+
         Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
         ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
@@ -39,4 +51,63 @@
         redisTemplate.afterPropertiesSet();
         return redisTemplate;
     }
+
+
+    @Bean(name = "tokenRedisTemplate")
+    public  RedisTemplate<String, Object> getTokenRedisTemplate(
+            @Value("${spring.tokenRedis.host}") String hostName,
+            @Value("${spring.tokenRedis.password}") String password,
+            @Value("${spring.tokenRedis.port}") int port,
+            @Value("${spring.tokenRedis.database}") int database,
+            @Value("${spring.tokenRedis.pool.max-active}") int maxActive,
+            @Value("${spring.tokenRedis.pool.max-idle}") int maxIdle,
+            @Value("${spring.tokenRedis.pool.min-idle}") int minIdle,
+            @Value("${spring.tokenRedis.pool.max-wait}") long maxWait,
+            @Value("${spring.tokenRedis.timeout}") long timeout
+    ) {
+        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
+        configuration.setHostName(hostName);
+        configuration.setPort(port);
+        configuration.setDatabase(database);
+        RedisPassword redisPassword = RedisPassword.of(password);
+        configuration.setPassword(redisPassword);
+
+        GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
+        genericObjectPoolConfig.setMaxTotal(maxActive);
+        genericObjectPoolConfig.setMinIdle(minIdle);
+        genericObjectPoolConfig.setMaxIdle(maxIdle);
+        genericObjectPoolConfig.setMaxWaitMillis(maxWait);
+
+        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();
+        builder.poolConfig(genericObjectPoolConfig);
+        builder.commandTimeout(Duration.ofSeconds(timeout));
+        LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());
+        connectionFactory.afterPropertiesSet();
+
+        return createRedisTemplate(connectionFactory);
+    }
+
+    public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
+
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key������String������������������
+        redisTemplate.setKeySerializer(stringRedisSerializer);
+        // hash���key���������String������������������
+        redisTemplate.setHashKeySerializer(stringRedisSerializer);
+        // valuevalue������jackson���������������
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash���value������jackson���������������
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+        redisTemplate.afterPropertiesSet();
+        redisTemplate.afterPropertiesSet();
+        return redisTemplate;
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
new file mode 100644
index 0000000..0a55944
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java
@@ -0,0 +1,33 @@
+package com.moral.api.controller;
+
+import com.moral.api.service.ManageAccountService;
+import com.moral.constant.ResultMessage;
+import com.moral.util.ObjectUtils;
+import io.netty.util.internal.ObjectUtil;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Slf4j
+@Api(tags = {"������������"})
+@RestController
+@RequestMapping("/account")
+public class AccountController {
+    @Resource
+    ManageAccountService accountService;
+
+    @PostMapping("login")
+    public ResultMessage login(@RequestBody Map<String,Object> paramters){
+        if(!ObjectUtils.checkParamAndMap(paramters,"account","password"))
+            return  ResultMessage.fail("���������������");
+        Map<String, Object> result = accountService.login(paramters);
+        if(result.get("accountId").equals(-1))
+            return ResultMessage.fail(result);
+        return ResultMessage.ok(result);
+    }
+
+
+}
diff --git a/screen-manage/src/main/java/com/moral/api/controller/TestController.java b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
index 8a437f5..d011719 100644
--- a/screen-manage/src/main/java/com/moral/api/controller/TestController.java
+++ b/screen-manage/src/main/java/com/moral/api/controller/TestController.java
@@ -6,23 +6,31 @@
 import com.moral.constant.ResultMessage;
 import com.moral.redis.RedisUtil;
 import com.moral.util.PageResult;
-import io.swagger.annotations.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.kafka.core.KafkaTemplate;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
 
 
 @Slf4j
-@Api(tags = {"������������"})
+@Api(tags = {"������"})
 @RestController
-@RequestMapping("/manage")
+@RequestMapping("/api")
 public class TestController {
 
-    @Autowired
+    @Resource
     private KafkaTemplate kafkaTemplate;
 
-    @Autowired
+    @Resource
     private TestService testService;
     /**
      * name   ������
diff --git a/screen-manage/src/main/java/com/moral/api/entity/ManageAccount.java b/screen-manage/src/main/java/com/moral/api/entity/ManageAccount.java
index bac1a30..b259a38 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/ManageAccount.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/ManageAccount.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -61,12 +63,12 @@
     /**
      * ������������
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * ������������
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * ������������
diff --git a/screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java b/screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java
index 68dc980..0f89b6f 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/ManageMenu.java
@@ -5,6 +5,9 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -56,18 +59,22 @@
     /**
      * ������������
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * ������������
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * ������������
      */
     private String isDelete;
 
+    /*
+    * ������������
+    * */
+    private List<ManageMenu> children;
 
     @Override
     protected Serializable pkVal() {
diff --git a/screen-manage/src/main/java/com/moral/api/entity/ManageRole.java b/screen-manage/src/main/java/com/moral/api/entity/ManageRole.java
index c2ef650..e51d7ef 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/ManageRole.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/ManageRole.java
@@ -5,6 +5,8 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import java.io.Serializable;
+import java.util.Date;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -31,17 +33,17 @@
     /**
      * ���������
      */
-    private String roleName;
+    private String name;
 
     /**
      * ������������
      */
-    private LocalDateTime createTime;
+    private Date createTime;
 
     /**
      * ������������
      */
-    private LocalDateTime updateTime;
+    private Date updateTime;
 
     /**
      * ������������
diff --git a/screen-manage/src/main/java/com/moral/api/entity/Test.java b/screen-manage/src/main/java/com/moral/api/entity/Test.java
index 05ff045..c598ace 100644
--- a/screen-manage/src/main/java/com/moral/api/entity/Test.java
+++ b/screen-manage/src/main/java/com/moral/api/entity/Test.java
@@ -1,12 +1,13 @@
 package com.moral.api.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 
diff --git a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
index f9293f8..b43234f 100644
--- a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
+++ b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java
@@ -2,6 +2,7 @@
 
 import com.moral.constant.Constants;
 import com.moral.constant.ResultMessage;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
@@ -11,6 +12,7 @@
 
 @ControllerAdvice
 @ResponseBody
+@Slf4j
 public class GlobalExceptionHandler {
     /**
      * ������������������
@@ -19,6 +21,8 @@
     @ResponseBody
     @ResponseStatus(HttpStatus.OK)
     public ResultMessage handleException(Exception ex) {
+        log.error(ex.getMessage());
+        log.error(ex.getStackTrace().toString());
         return  ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "������������");
     }
 
diff --git a/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java b/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
new file mode 100644
index 0000000..80e4cb6
--- /dev/null
+++ b/screen-manage/src/main/java/com/moral/api/interceptor/ManageInterceptor.java
@@ -0,0 +1,24 @@
+package com.moral.api.interceptor;
+
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class ManageInterceptor implements HandlerInterceptor {
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        return false;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+}
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
index 0a2081a..a6e1f73 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/ManageMenuMapper.java
@@ -2,6 +2,10 @@
 
 import com.moral.api.entity.ManageMenu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.ManageRole;
+
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,24 @@
  * @since 2021-03-09
  */
 public interface ManageMenuMapper extends BaseMapper<ManageMenu> {
+    /**
+    * @Description: ������������������������������������
+            * @Param: [roles]
+            * @return: java.util.List<com.moral.api.entity.ManageMenu>
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */
+    List<ManageMenu> getParentMenuByRoles(List<ManageRole> roles);
+
+    /**
+    * @Description: ���������������������������������������
+            * @Param:
+            * @return:
+            * @Author: ���������
+            * @Date: 2021/3/10
+            */
+    List<ManageMenu> getChildrenByParentId(Integer parentId);
+
+    List<ManageMenu> getParentChildrenMenusByRoles(List<ManageRole> roles);
 
 }
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/ManageRoleMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/ManageRoleMapper.java
index 3e1abef..3f89cfb 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/ManageRoleMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/ManageRoleMapper.java
@@ -2,6 +2,9 @@
 
 import com.moral.api.entity.ManageRole;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +15,5 @@
  * @since 2021-03-09
  */
 public interface ManageRoleMapper extends BaseMapper<ManageRole> {
-
+    List<ManageRole> getManageRoleByAccountId(Integer accountId);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/mapper/TestMapper.java b/screen-manage/src/main/java/com/moral/api/mapper/TestMapper.java
index 46e1799..4771333 100644
--- a/screen-manage/src/main/java/com/moral/api/mapper/TestMapper.java
+++ b/screen-manage/src/main/java/com/moral/api/mapper/TestMapper.java
@@ -1,7 +1,7 @@
 package com.moral.api.mapper;
 
-import com.moral.api.entity.Test;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.moral.api.entity.Test;
 
 /**
  * <p>
diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
index 4397135..ad23a22 100644
--- a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java
@@ -3,6 +3,8 @@
 import com.moral.api.entity.ManageAccount;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 /**
  * <p>
  * ��������������� ���������
@@ -12,5 +14,5 @@
  * @since 2021-03-09
  */
 public interface ManageAccountService extends IService<ManageAccount> {
-
+    Map<String, Object> login(Map<String, Object> paramters);
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/TestService.java b/screen-manage/src/main/java/com/moral/api/service/TestService.java
index 5ab915b..6e03d50 100644
--- a/screen-manage/src/main/java/com/moral/api/service/TestService.java
+++ b/screen-manage/src/main/java/com/moral/api/service/TestService.java
@@ -1,8 +1,8 @@
 package com.moral.api.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.moral.api.entity.Test;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.moral.api.entity.Test;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -20,5 +20,6 @@
 
     Page<Test> selectByPage(Test test, Integer page, Integer size);
 
+    @Transactional
     void saveTest() throws Exception;
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
index 6dba8fb..48d1b78 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java
@@ -1,10 +1,23 @@
 package com.moral.api.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.moral.api.entity.ManageAccount;
+import com.moral.api.entity.ManageMenu;
+import com.moral.api.entity.ManageRole;
 import com.moral.api.mapper.ManageAccountMapper;
+import com.moral.api.mapper.ManageMenuMapper;
+import com.moral.api.mapper.ManageRoleMapper;
 import com.moral.api.service.ManageAccountService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.moral.util.AESUtils;
+import com.moral.util.MD5Utils;
+import com.moral.util.TokenUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.*;
 
 /**
  * <p>
@@ -17,4 +30,81 @@
 @Service
 public class ManageAccountServiceImpl extends ServiceImpl<ManageAccountMapper, ManageAccount> implements ManageAccountService {
 
+    @Value("${AES.KEY}")
+    private String AESKey;
+    @Resource
+    ManageAccountMapper accountMapper;
+    @Resource
+    ManageRoleMapper roleMapper;
+    @Resource
+    ManageMenuMapper manageMenuMapper;
+
+
+    public Map<String, Object> login(Map<String, Object> paramters) {
+        Map<String,Object> result = new HashMap<>();
+        //������������
+        String cyrpAccount = (String) paramters.get("account");
+        String cyrpPassword = (String) paramters.get("password");
+        //������
+        String account = AESUtils.decrypt(cyrpAccount, AESKey);
+        String password = AESUtils.decrypt(cyrpPassword, AESKey);
+        //������������������
+        QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>();
+        wrapper.eq("account", account);
+        ManageAccount manageAccount = accountMapper.selectOne(wrapper);
+        if(ObjectUtils.isEmpty(manageAccount)){
+            result.put("accountId",-1);
+            result.put("msg","������������������");
+            return result;
+        }
+        //������������������������
+        if(manageAccount.getIsDelete().equals("1")){
+            result.put("accountId",-1);
+            result.put("msg","������������������");
+            return result;
+        }
+        //������������
+        if(!MD5Utils.saltMD5Verify(password,manageAccount.getPassword())){
+            result.put("accountId",-1);
+            result.put("msg","���������������������");
+            return result;
+        }
+        //������������
+        List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId());
+        if(ObjectUtils.isEmpty(roles)){
+            result.put("accountId",-1);
+            result.put("msg","������������������������");
+            return result;
+        }
+        //������������
+        List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles);
+        if(ObjectUtils.isEmpty(menus)){
+            result.put("accountId",-1);
+            result.put("msg","������������������������");
+            return result;
+        }
+
+        //������������token,���������������������������������
+        Map<String,Object> userInfo = new HashMap<>();//���������������������������������������
+        userInfo.put("accountId",manageAccount.getId());//������Id
+        userInfo.put("userName",manageAccount.getUserName());//������������
+        userInfo.put("roles",roles);//������������
+        userInfo.put("menus",menus);//������������
+        Map<String, Object> tokenResult = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo);
+        if(tokenResult.get("code").equals(TokenUtils.error)){
+            result.put("accountId",-1);
+            result.put("msg","������token������");
+            return result;
+        }
+
+        //������������������
+        result.put("accountId",manageAccount.getId());//������Id
+        result.put("userName",manageAccount.getUserName());//������������
+        result.put("roles",roles);//������������
+        result.put("menus",menus);//������������
+        result.put("token",tokenResult.get("token"));
+        return result;
+    }
+
+
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java
index dac6e27..67846e8 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageRoleServiceImpl.java
@@ -5,6 +5,9 @@
 import com.moral.api.service.ManageRoleService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -17,4 +20,12 @@
 @Service
 public class ManageRoleServiceImpl extends ServiceImpl<ManageRoleMapper, ManageRole> implements ManageRoleService {
 
+    @Resource
+    ManageRoleMapper roleMapper;
+
+    public ManageRole getManageRoleByAccountId(String accountId){
+        if(StringUtils.isEmpty(accountId))
+            return null;
+        return null;
+    }
 }
diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/TestServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/TestServiceImpl.java
index 50040a8..026a226 100644
--- a/screen-manage/src/main/java/com/moral/api/service/impl/TestServiceImpl.java
+++ b/screen-manage/src/main/java/com/moral/api/service/impl/TestServiceImpl.java
@@ -3,14 +3,16 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.moral.api.entity.Test;
 import com.moral.api.exception.BusinessException;
 import com.moral.api.mapper.TestMapper;
 import com.moral.api.service.TestService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
 
 /**
  * <p>
@@ -23,7 +25,7 @@
 @Service
 public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {
 
-    @Autowired
+    @Resource
     private TestMapper testMapper;
     @Override
     public Page<Test> selectByPage(Test test, Integer page, Integer size) {
@@ -38,6 +40,7 @@
     }
 
     @Override
+    @Transactional
     public void saveTest() throws Exception{
         Test t=new Test();
         t.setName("aaaa");
diff --git a/screen-manage/src/main/resources/application-dev.yml b/screen-manage/src/main/resources/application-dev.yml
index ac59da8..426aa21 100644
--- a/screen-manage/src/main/resources/application-dev.yml
+++ b/screen-manage/src/main/resources/application-dev.yml
@@ -20,9 +20,9 @@
       #nodes: 47.112.126.78:7001,47.112.126.78:7002,47.112.126.132:7003,47.112.126.132:7004,47.112.132.193:7005,47.112.132.193:7006
     #password: test
     #timeout: 500
-      host: 127.0.0.1
+      host: 39.97.177.149
       port: 6379
-      password: 123456
+      password: chenkaiyu111
       timeout: 30000
       jedis:
         pool:
@@ -36,6 +36,18 @@
           max-idle: 64
           max-wait: 30000
           min-idle: 32
+  tokenRedis:
+    host: 39.97.177.149
+    port: 6379
+    password: chenkaiyu111
+    timeout: 30000
+    database: 14
+    pool:
+      max-active: 256
+      max-wait: 30000
+      max-idle: 64
+      min-idle: 32
+
   datasource:
     minIdle: 1
     time-between-eviction-runs-millis: 60000
@@ -45,8 +57,9 @@
     filters: stat
     type: com.alibaba.druid.pool.DruidDataSource
     max-wait: 60000
-    url: jdbc:mysql://192.168.0.18:4000/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
-    password: 123456
+    url: jdbc:mysql://39.97.177.149:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
+    username: root
+    password: chenkaiyu111
     test-on-borrow: false
     sql-script-encoding: utf-8
     pool-prepared-statements: true
@@ -55,7 +68,6 @@
     driver-class-name: com.mysql.cj.jdbc.Driver
     max-conn-lifetime-millis: 20
     test-on-return: false
-    username: root
 
 mybatis-plus:
   mapper-locations: classpath:mapper/*.xml
@@ -98,4 +110,14 @@
     linger: 1
     retries: 0
     servers: 192.168.0.16:9092,192.168.0.17:9092,192.168.0.18:9092
+mvc:
+  interceptor:
+    exclude:
+      - /account/login
+AES:
+  KEY:
+    AD42F7787B035B7580000EF93BE20BAD
+TOKEN:
+  KEY:
+    foh3wi2ooghiCh5
 
diff --git a/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml b/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
index 8365603..c1b2261 100644
--- a/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
+++ b/screen-manage/src/main/resources/mapper/ManageMenuMapper.xml
@@ -2,17 +2,91 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.api.mapper.ManageMenuMapper">
 
-        <!-- ������������������������ -->
-        <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageMenu">
-                    <id column="id" property="id" />
-                    <result column="name" property="name" />
-                    <result column="url" property="url" />
-                    <result column="icon" property="icon" />
-                    <result column="parent_id" property="parentId" />
-                    <result column="order" property="order" />
-                    <result column="create_time" property="createTime" />
-                    <result column="update_time" property="updateTime" />
-                    <result column="is_delete" property="isDelete" />
-        </resultMap>
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageMenu">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="url" property="url"/>
+        <result column="icon" property="icon"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="order" property="order"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_delete" property="isDelete"/>
+    </resultMap>
+
+    <!--������������������������������-->
+    <resultMap id="ParentChildrenResultMap" type="com.moral.api.entity.ManageMenu">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="url" property="url"/>
+        <result column="icon" property="icon"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="order" property="order"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_delete" property="isDelete"/>
+        <collection property="children" ofType="com.moral.api.entity.ManageMenu" column="id" select="getChildrenByParentId"></collection>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        mm.id,mm.name,mm.url,mm.icon,mm.parent_id,mm.order,mm.create_time,mm.update_time,mm.is_delete
+    </sql>
+
+    <!--������������������������������������������-->
+    <select id="getParentMenuByRoles" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"></include>
+        from
+        manage_menu mm
+        join
+        manage_role_menu mrm
+        on
+        mm.`id` = mrm.`menu_id` and mm.`is_delete`=0
+        join
+        manage_role mr
+        on
+        mr.`id` = mrm.`role_id` and mr.`id` IN
+        <foreach collection="list" separator="," open="(" close=")" item="role">
+            #{role.id}
+        </foreach>
+        where
+        mm.`is_delete`=0
+        AND
+        mm.`parent_id`=0;
+    </select>
+
+    <!--���������������Id������������������������-->
+    <select id="getChildrenByParentId" parameterType="Integer" resultMap="BaseResultMap">
+        SELECT
+        <include refid="Base_Column_List"></include>
+        FROM
+        manage_menu mm
+        WHERE
+        mm.parent_id = #{value}
+    </select>
+
+    <!--���������������������������������������-->
+    <select id="getParentChildrenMenusByRoles" resultMap="ParentChildrenResultMap">
+        select
+        <include refid="Base_Column_List"></include>
+        from
+        manage_menu mm
+        join
+        manage_role_menu mrm
+        on
+        mm.`id` = mrm.`menu_id` and mm.`is_delete`=0
+        join
+        manage_role mr
+        on
+        mr.`id` = mrm.`role_id` and mr.`id` IN
+        <foreach collection="list" separator="," open="(" close=")" item="role">
+            #{role.id}
+        </foreach>
+        where
+        mm.`is_delete`=0
+        AND
+        mm.`parent_id`=0;
+    </select>
 
 </mapper>
\ No newline at end of file
diff --git a/screen-manage/src/main/resources/mapper/ManageRoleMapper.xml b/screen-manage/src/main/resources/mapper/ManageRoleMapper.xml
index 967601f..11266f8 100644
--- a/screen-manage/src/main/resources/mapper/ManageRoleMapper.xml
+++ b/screen-manage/src/main/resources/mapper/ManageRoleMapper.xml
@@ -2,14 +2,30 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.api.mapper.ManageRoleMapper">
 
-        <!-- ������������������������ -->
-        <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageRole">
-                    <id column="id" property="id" />
-                    <result column="role_name" property="roleName" />
-                    <result column="create_time" property="createTime" />
-                    <result column="update_time" property="updateTime" />
-                    <result column="is_delete" property="isDelete" />
-                    <result column="desc" property="desc" />
-        </resultMap>
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.ManageRole">
+        <id column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_delete" property="isDelete"/>
+        <result column="desc" property="desc"/>
+    </resultMap>
 
+    <sql id="Base_Column_List">
+            mr.id,mr.name,mr.create_time,mr.update_time,mr.is_delete,mr.desc
+        </sql>
+
+    <select id="getManageRoleByAccountId" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"></include>
+        FROM
+        manage_role mr
+        JOIN manage_account_role mar
+        ON mar.role_id=mr.id AND mar.is_delete = 0
+        JOIN manage_account ma
+        ON ma.id=mar.account_id and ma.id = #{accountId}
+        where
+        mr.is_delete=0
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.8.0