From 37d76adf129d41f65342874886c43db450ecb0ef Mon Sep 17 00:00:00 2001
From: kaiyu <404897439@qq.com>
Date: Fri, 12 Mar 2021 17:16:55 +0800
Subject: [PATCH] Merge branch 'dev' of http://blit.7drlb.com:8888/r/moral into dev

---
 screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java            |    4 
 screen-api/src/main/resources/mapper/GroupMapper.xml                     |   33 +++-
 screen-api/src/main/resources/mapper/MenuMapper.xml                      |   20 ++
 screen-api/src/main/resources/mapper/UserMapper.xml                      |   52 ++----
 screen-api/src/main/resources/mapper/OrganizationMapper.xml              |   45 +++--
 screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java |  135 ++++++++++++++--
 screen-api/src/main/java/com/moral/api/controller/WebController.java     |   24 +-
 screen-api/src/main/resources/application-dev.yml                        |   20 +-
 screen-common/src/main/java/com/moral/util/WebUtils.java                 |   44 +++++
 screen-api/src/main/java/com/moral/api/service/UserService.java          |    2 
 screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java     |   71 ++++++++
 screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java    |    4 
 screen-api/src/main/java/com/moral/api/mapper/UserMapper.java            |    2 
 screen-api/src/main/java/com/moral/api/entity/User.java                  |    7 
 screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java           |    5 
 15 files changed, 344 insertions(+), 124 deletions(-)

diff --git a/screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java b/screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java
index b63690d..db90547 100644
--- a/screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java
+++ b/screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java
@@ -1,12 +1,21 @@
 package com.moral.api.config.redis;
 
+import java.time.Duration;
+
 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.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;
@@ -16,9 +25,9 @@
 @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);
@@ -39,4 +48,62 @@
         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-api/src/main/java/com/moral/api/controller/WebController.java b/screen-api/src/main/java/com/moral/api/controller/WebController.java
index 2d7943b..225d1a5 100644
--- a/screen-api/src/main/java/com/moral/api/controller/WebController.java
+++ b/screen-api/src/main/java/com/moral/api/controller/WebController.java
@@ -23,6 +23,7 @@
 import com.moral.api.service.UserService;
 import com.moral.constant.ResultMessage;
 import com.moral.redis.RedisUtil;
+import com.moral.util.WebUtils;
 
 @Slf4j
 @Api(tags = {"������"})
@@ -36,27 +37,22 @@
     @Autowired
     private GroupService groupService;
 
-    /**
-     * @param account  ������
-     * @param password ������
-     * @Auther jinpengyong
-     * @Description web������
-     */
     @ApiOperation(value = "������", notes = "������")
     @ApiImplicitParams({
-            @ApiImplicitParam(name = "account", value = "������", required = true, paramType = "path", dataType = "String"),
-            @ApiImplicitParam(name = "password", value = "������", required = true, paramType = "path", dataType = "String")
+            @ApiImplicitParam(name = "account", value = "������", required = true, paramType = "query", dataType = "String"),
+            @ApiImplicitParam(name = "password", value = "������", required = true, paramType = "query", dataType = "String")
     })
-    @RequestMapping(value = "login/{account}/{password}", method = RequestMethod.GET)
-    public ResultMessage login(@PathVariable("account") String account, @PathVariable("password") String password) {
-        if (account == null || password == null) {
-            return ResultMessage.fail("���������������������������");
+    @RequestMapping(value = "login", method = RequestMethod.POST)
+    public ResultMessage login(HttpServletRequest request) {
+        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+        if (!(parameters.containsKey("account") && parameters.containsKey("password"))) {
+            return ResultMessage.fail("������������������������������������");
         }
-        Map<String, Object> map = userService.login(account, password);
+        Map<String, Object> map = userService.login(parameters);
         if (map.get("token") == null) {
             return ResultMessage.fail(map.get("msg").toString());
         }
-        return ResultMessage.ok(map.get("token"));
+        return ResultMessage.ok(map);
     }
 
     @ApiOperation(value = "������", notes = "������")
diff --git a/screen-api/src/main/java/com/moral/api/entity/User.java b/screen-api/src/main/java/com/moral/api/entity/User.java
index 4df8c9f..e0d33e1 100644
--- a/screen-api/src/main/java/com/moral/api/entity/User.java
+++ b/screen-api/src/main/java/com/moral/api/entity/User.java
@@ -95,13 +95,6 @@
     private String isDelete;
 
 
-    @TableField(exist = false)
-    private Set<Group> groups;
-
-    @TableField(exist = false)
-    private Set<Menu> menus;
-
-
     @Override
     protected Serializable pkVal() {
         return this.id;
diff --git a/screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java b/screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java
index e63cef6..12dc29d 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java
@@ -1,5 +1,8 @@
 package com.moral.api.mapper;
 
+import java.util.List;
+import java.util.Map;
+
 import com.moral.api.entity.Group;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -13,4 +16,6 @@
  */
 public interface GroupMapper extends BaseMapper<Group> {
 
+    List<Map<String, Object>> selectUserGroup(int userId);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java b/screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java
index 2fafa8f..82bee80 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java
@@ -1,5 +1,7 @@
 package com.moral.api.mapper;
 
+import java.util.List;
+
 import com.moral.api.entity.Menu;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -13,4 +15,6 @@
  */
 public interface MenuMapper extends BaseMapper<Menu> {
 
+    List<Menu> selectUserMenu(int userId);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java b/screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java
index 673d26f..bf0bfe6 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java
@@ -1,5 +1,7 @@
 package com.moral.api.mapper;
 
+import java.util.Map;
+
 import com.moral.api.entity.Organization;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -13,4 +15,6 @@
  */
 public interface OrganizationMapper extends BaseMapper<Organization> {
 
+    Map<String, Object> selectOrganizationById(int id);
+
 }
diff --git a/screen-api/src/main/java/com/moral/api/mapper/UserMapper.java b/screen-api/src/main/java/com/moral/api/mapper/UserMapper.java
index db186d8..aedcc6a 100644
--- a/screen-api/src/main/java/com/moral/api/mapper/UserMapper.java
+++ b/screen-api/src/main/java/com/moral/api/mapper/UserMapper.java
@@ -17,7 +17,5 @@
  */
 public interface UserMapper extends BaseMapper<User> {
 
-    Set<Group> selectUserGroup(int userId);
 
-    Set<Menu> selectUserMenu(int userId);
 }
diff --git a/screen-api/src/main/java/com/moral/api/service/UserService.java b/screen-api/src/main/java/com/moral/api/service/UserService.java
index 242936d..a514410 100644
--- a/screen-api/src/main/java/com/moral/api/service/UserService.java
+++ b/screen-api/src/main/java/com/moral/api/service/UserService.java
@@ -17,7 +17,7 @@
  */
 public interface UserService extends IService<User> {
 
-    Map<String, Object> login(String account, String password);
+    Map<String, Object> login(Map<String,Object> parameters);
 
     Map<String, Object> addUser(User user, Integer currentUserId);
 
diff --git a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
index 2b73e59..5c14a2f 100644
--- a/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
+++ b/screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -1,26 +1,29 @@
 package com.moral.api.service.impl;
 
-import io.swagger.models.auth.In;
-
 import java.util.ArrayList;
-import java.util.Date;
+import java.util.Comparator;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
+import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.moral.api.entity.Group;
 import com.moral.api.entity.Menu;
 import com.moral.api.entity.User;
 
+import com.moral.api.mapper.GroupMapper;
+import com.moral.api.mapper.MenuMapper;
+import com.moral.api.mapper.OrganizationMapper;
 import com.moral.api.mapper.UserMapper;
 import com.moral.api.service.UserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.moral.redis.RedisUtil;
+import com.moral.util.AESUtils;
+import com.moral.util.MD5Utils;
+import com.moral.util.TokenUtils;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 /**
@@ -37,32 +40,120 @@
     @Autowired
     private UserMapper userMapper;
 
+    @Autowired
+    private GroupMapper groupMapper;
+
+    @Autowired
+    private MenuMapper menuMapper;
+
+    @Autowired
+    private OrganizationMapper organizationMapper;
+
+    @Value("${AES.KEY}")
+    private String AESKey;
+
     @Override
-    public Map<String, Object> login(String account, String password) {
-        Map<String, Object> resultMap = new HashMap<>();
+    public Map<String, Object> login(Map<String, Object> parameters) {
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        //������������
+        String account = parameters.get("account").toString();
+        String password = parameters.get("password").toString();
+        //������
+        account = AESUtils.decrypt(account, AESKey);
+        password = AESUtils.decrypt(password, AESKey);
         QueryWrapper<User> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("account", account).eq("password", password).eq("is_Delete", "0");
+        //������������
+        queryWrapper.eq("account", account);
         User user = userMapper.selectOne(queryWrapper);
         String msg;
-        String token = null;
         if (user == null) {
-            msg = "������������������������";
-        } else if (user.getExpireTime() != null && user.getExpireTime().getTime() < System.currentTimeMillis()) {
-            msg = "���������������������";
+            msg = "������������������";
         } else {
-            msg = "������������";
-            token = user.getId() + "-" + UUID.randomUUID().toString().replaceAll("-", "");
-            Set<Group> groups = userMapper.selectUserGroup(user.getId());
-            Set<Menu> menus = userMapper.selectUserMenu(user.getId());
-            user.setGroups(groups);
-            user.setMenus(menus);
-            RedisUtil.set(token, user, 1296000);
+            if (!MD5Utils.saltMD5Verify(password, user.getPassword())) {//������������
+                msg = "������������";
+            } else if ("1".equals(user.getIsDelete())) {
+                msg = "������������������";
+            } else if (user.getExpireTime() != null && user.getExpireTime().getTime() < System.currentTimeMillis()) {
+                msg = "���������������������";
+            } else {
+                int userId = user.getId();
+                //������������������
+                Map<String, Object> orgMap = organizationMapper.selectOrganizationById(user.getOrganizationId());
+                String locationCode = orgMap.get(orgMap.get("location_level").toString()).toString();
+                //������������������
+                Map<String, Object> userInfo = new LinkedHashMap<>();
+                userInfo.put("userId", userId);
+                userInfo.put("account", user.getAccount());
+                userInfo.put("userName", user.getUserName());
+                userInfo.put("organizationId", user.getOrganizationId());
+                userInfo.put("locationCode", locationCode);
+                List<Map<String, Object>> groups = groupMapper.selectUserGroup(userId);
+                userInfo.put("groups", groups);
+                userInfo.putAll(getMenus(userId));
+                //������token������������redis
+                String token = TokenUtils.getToken(user.getId().toString(), userInfo);
+                resultMap.put("token", token);
+                resultMap.putAll(userInfo);
+                return resultMap;
+            }
         }
-        resultMap.put("token", token);
         resultMap.put("msg", msg);
         return resultMap;
     }
 
+    //������userId������������������������
+    private Map<String, Object> getMenus(int userId) {
+        List<Menu> allMenus = menuMapper.selectUserMenu(userId);
+        Map<String, Object> resultMap = new LinkedHashMap<>();
+        //���������������
+        List<Menu> oneMenu = allMenus.stream()
+                .filter(o -> o.getParentId().equals(0))
+                .sorted(Comparator.comparing(Menu::getOrder))
+                .collect(Collectors.toList());
+
+        List<Map<String, Object>> newList = new ArrayList<>();
+        //������������������
+        oneMenu.forEach(o -> {
+            Map<String, Object> menuMap = new LinkedHashMap<>();
+            menuMap.put("id", o.getId());
+            menuMap.put("name", o.getName());
+            menuMap.put("url", o.getUrl());
+            menuMap.put("icon", o.getIcon());
+            menuMap.put("menus", getMenusByRecursion(o, allMenus));
+            newList.add(menuMap);
+        });
+        resultMap.put("menus", newList);
+        return resultMap;
+    }
+
+    //������������������������������������
+    private List<Map<String, Object>> getMenusByRecursion(Menu menu, List<Menu> menus) {
+        List<List<Map<String, Object>>> resultList = new ArrayList();
+        Menu newMenu = new Menu();
+        newMenu.setParentId(menu.getId());
+
+        //������������������������������
+        List<Menu> nextLevelMenus = menus.stream()
+                .filter(o -> o.getParentId().equals(menu.getId()))
+                .collect(Collectors.toList());
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (nextLevelMenus.size() > 0) {
+            //���������������������������������������������������
+            nextLevelMenus.forEach(o -> {
+                Map<String, Object> menuMap = new LinkedHashMap<>();
+                menuMap.put("id", o.getId());
+                menuMap.put("name", o.getName());
+                menuMap.put("url", o.getUrl());
+                menuMap.put("icon", o.getIcon());
+                //���������������
+                menuMap.put("menus", getMenusByRecursion(o, menus));
+                list.add(menuMap);
+            });
+            resultList.add(list);
+        }
+        return list;
+    }
+
     @Override
     public Map<String, Object> addUser(User user, Integer userId) {
         Map<String, Object> resultMap = new HashMap<>();
diff --git a/screen-api/src/main/resources/application-dev.yml b/screen-api/src/main/resources/application-dev.yml
index 082c9dc..b0a5c75 100644
--- a/screen-api/src/main/resources/application-dev.yml
+++ b/screen-api/src/main/resources/application-dev.yml
@@ -2,13 +2,13 @@
   port: 8081
   tomcat:
     uri-encoding: UTF-8
-      #���������������
+    #���������������
     min-spare-threads: 500
-      #���������������
+    #���������������
     max-threads: 2500
-      #���������������
+    #���������������
     max-connections: 6500
-      #������������������������
+    #������������������������
     accept-count: 1000
 spring:
   profiles:
@@ -17,10 +17,10 @@
     name: screen-api
   redis:
     #cluster:
-      #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
+    #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: 39.97.177.149
+      host: 39.97.177.149
       port: 6379
       password: chenkaiyu111
       timeout: 30000
@@ -41,7 +41,7 @@
     port: 6379
     password: chenkaiyu111
     timeout: 30000
-    database: 14
+    database: 15
     pool:
       max-active: 256
       max-wait: 30000
@@ -77,9 +77,9 @@
       field-strategy: NOT_EMPTY
       db-type: MYSQL
   configuration:
-     map-underscore-to-camel-case: true
-     call-setters-on-nulls: true
-     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+    map-underscore-to-camel-case: true
+    call-setters-on-nulls: true
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
 kafka:
   listener:
diff --git a/screen-api/src/main/resources/mapper/GroupMapper.xml b/screen-api/src/main/resources/mapper/GroupMapper.xml
index dc67822..356729c 100644
--- a/screen-api/src/main/resources/mapper/GroupMapper.xml
+++ b/screen-api/src/main/resources/mapper/GroupMapper.xml
@@ -2,14 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.api.mapper.GroupMapper">
 
-        <!-- ������������������������ -->
-        <resultMap id="BaseResultMap" type="com.moral.api.entity.Group">
-                    <id column="id" property="id" />
-                    <result column="group_name" property="groupName" />
-                    <result column="organization_id" property="organizationId" />
-                    <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.Group">
+        <id column="id" property="id"/>
+        <result column="group_name" property="groupName"/>
+        <result column="organization_id" property="organizationId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="is_delete" property="isDelete"/>
+    </resultMap>
 
+    <resultMap id="GroupResultMap" type="java.util.LinkedHashMap">
+        <id column="id" property="id"/>
+        <result column="group_name" property="groupName"/>
+        <result column="organization_id" property="organizationId"/>
+    </resultMap>
+
+    <select id="selectUserGroup" resultMap="GroupResultMap">
+        SELECT g.id,g.group_name
+        FROM `group` g,`user_group` ug
+        WHERE ug.user_id = #{userId}
+        AND ug.group_id = g.id
+        AND g.is_delete = 0
+        AND ug.is_delete = 0
+        ORDER BY g.id
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/MenuMapper.xml b/screen-api/src/main/resources/mapper/MenuMapper.xml
index 93e8258..8ae2d80 100644
--- a/screen-api/src/main/resources/mapper/MenuMapper.xml
+++ b/screen-api/src/main/resources/mapper/MenuMapper.xml
@@ -15,4 +15,24 @@
         <result column="is_delete" property="isDelete"/>
     </resultMap>
 
+    <resultMap id="MenuResultMap" type="com.moral.api.entity.Menu">
+        <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" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="selectUserMenu" resultMap="MenuResultMap">
+        SELECT DISTINCT m.id,m.name,m.url,m.icon,m.parent_id,m.order
+        FROM `user_group` ug,`group_menu` gm,`menu` m
+        WHERE ug.user_id = #{userId}
+        AND ug.group_id = gm.group_id
+        AND gm.menu_id = m.id
+        AND ug.is_delete = 0
+        AND gm.is_delete = 0
+        AND m.is_delete = 0
+        ORDER  by m.`order`
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/OrganizationMapper.xml b/screen-api/src/main/resources/mapper/OrganizationMapper.xml
index de7e2ec..9f4ec9b 100644
--- a/screen-api/src/main/resources/mapper/OrganizationMapper.xml
+++ b/screen-api/src/main/resources/mapper/OrganizationMapper.xml
@@ -2,26 +2,29 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.api.mapper.OrganizationMapper">
 
-        <!-- ������������������������ -->
-        <resultMap id="BaseResultMap" type="com.moral.api.entity.Organization">
-                    <id column="id" property="id" />
-                    <result column="parent_id" property="parentId" />
-                    <result column="admin_user_id" property="adminUserId" />
-                    <result column="name" property="name" />
-                    <result column="province_code" property="provinceCode" />
-                    <result column="city_code" property="cityCode" />
-                    <result column="area_code" property="areaCode" />
-                    <result column="town_code" property="townCode" />
-                    <result column="village_code" property="villageCode" />
-                    <result column="location_level" property="locationLevel" />
-                    <result column="address" property="address" />
-                    <result column="phone" property="phone" />
-                    <result column="email" property="email" />
-                    <result column="wechat" property="wechat" />
-                    <result column="create_time" property="createTime" />
-                    <result column="update_time" property="updateTime" />
-                    <result column="expire_time" property="expireTime" />
-                    <result column="is_delete" property="isDelete" />
-        </resultMap>
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.Organization">
+        <id column="id" property="id"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="admin_user_id" property="adminUserId"/>
+        <result column="name" property="name"/>
+        <result column="province_code" property="provinceCode"/>
+        <result column="city_code" property="cityCode"/>
+        <result column="area_code" property="areaCode"/>
+        <result column="town_code" property="townCode"/>
+        <result column="village_code" property="villageCode"/>
+        <result column="location_level" property="locationLevel"/>
+        <result column="address" property="address"/>
+        <result column="phone" property="phone"/>
+        <result column="email" property="email"/>
+        <result column="wechat" property="wechat"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="expire_time" property="expireTime"/>
+        <result column="is_delete" property="isDelete"/>
+    </resultMap>
 
+    <select id="selectOrganizationById" resultType="java.util.Map">
+        SELECT * FROM organization WHERE id= #{orgId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/screen-api/src/main/resources/mapper/UserMapper.xml b/screen-api/src/main/resources/mapper/UserMapper.xml
index 14cd3a9..58ed1f3 100644
--- a/screen-api/src/main/resources/mapper/UserMapper.xml
+++ b/screen-api/src/main/resources/mapper/UserMapper.xml
@@ -2,41 +2,21 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.moral.api.mapper.UserMapper">
 
-        <!-- ������������������������ -->
-        <resultMap id="BaseResultMap" type="com.moral.api.entity.User">
-                    <id column="id" property="id" />
-                    <result column="is_admin" property="isAdmin" />
-                    <result column="account" property="account" />
-                    <result column="password" property="password" />
-                    <result column="user_name" property="userName" />
-                    <result column="organization_id" property="organizationId" />
-                    <result column="email" property="email" />
-                    <result column="mobile" property="mobile" />
-                    <result column="wechat" property="wechat" />
-                    <result column="create_time" property="createTime" />
-                    <result column="update_time" property="updateTime" />
-                    <result column="expire_time" property="expireTime" />
-                    <result column="is_delete" property="isDelete" />
-        </resultMap>
+    <!-- ������������������������ -->
+    <resultMap id="BaseResultMap" type="com.moral.api.entity.User">
+        <id column="id" property="id"/>
+        <result column="is_admin" property="isAdmin"/>
+        <result column="account" property="account"/>
+        <result column="password" property="password"/>
+        <result column="user_name" property="userName"/>
+        <result column="organization_id" property="organizationId"/>
+        <result column="email" property="email"/>
+        <result column="mobile" property="mobile"/>
+        <result column="wechat" property="wechat"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="expire_time" property="expireTime"/>
+        <result column="is_delete" property="isDelete"/>
+    </resultMap>
 
-    <select id="selectUserGroup" resultType="com.moral.api.entity.Group">
-        SELECT g.*
-        FROM `group` g,`user_group` ug
-        WHERE ug.user_id = #{userId}
-        AND ug.group_id = g.id
-        AND g.is_delete = 0
-        AND ug.is_delete = 0
-    </select>
-
-    <select id="selectUserMenu" resultType="com.moral.api.entity.Menu">
-        SELECT DISTINCT m.*
-        FROM `user_group` ug,`group_menu` gm,`menu` m
-        WHERE ug.user_id = #{userId}
-        and ug.group_id = gm.group_id
-        and gm.menu_id = m.id
-        and ug.is_delete = 0
-        and gm.is_delete = 0
-        and m.is_delete = 0
-        ORDER  by m.`order`
-    </select>
 </mapper>
\ No newline at end of file
diff --git a/screen-common/src/main/java/com/moral/util/WebUtils.java b/screen-common/src/main/java/com/moral/util/WebUtils.java
new file mode 100644
index 0000000..474781e
--- /dev/null
+++ b/screen-common/src/main/java/com/moral/util/WebUtils.java
@@ -0,0 +1,44 @@
+package com.moral.util;
+
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.TreeMap;
+
+import javax.servlet.ServletRequest;
+
+import org.springframework.util.Assert;
+import org.springframework.util.ObjectUtils;
+
+public class WebUtils extends org.springframework.web.util.WebUtils {
+    public static Map<String, Object> getParametersStartingWith(ServletRequest request, String prefix) {
+        Assert.notNull(request, "Request must not be null");
+        Enumeration<String> paramNames = request.getParameterNames();
+        Map<String, Object> params = new TreeMap<String, Object>();
+        if (prefix == null) {
+            prefix = "";
+        }
+        while (paramNames != null && paramNames.hasMoreElements()) {
+            String paramName = paramNames.nextElement();
+            if ("".equals(prefix) || paramName.startsWith(prefix)) {
+                String unprefixed = paramName.substring(prefix.length());
+                String[] values = request.getParameterValues(paramName);
+                if (values == null || values.length == 0 ) {
+                    // Do nothing, no values found at all.
+                }
+                else if (values.length > 1) {
+                    params.put(unprefixed, values);
+                }
+                else {
+                    if (!ObjectUtils.isEmpty(values[0]) && !"null".equalsIgnoreCase(values[0])) {
+                        if ("sorter".equals(unprefixed)) {
+                            params.put(unprefixed, values[0].replace("end", ""));
+                        } else {
+                            params.put(unprefixed, values[0]);
+                        }
+                    }
+                }
+            }
+        }
+        return params;
+    }
+}
\ No newline at end of file

--
Gitblit v1.8.0