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