jinpengyong
2021-03-12 e442e98a198d67994e6dce01fd88e163291fd40c
api登陆更新
1 files added
14 files modified
468 ■■■■ changed files
screen-api/src/main/java/com/moral/api/config/redis/RedisConfig.java 71 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/controller/WebController.java 24 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/entity/User.java 7 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/GroupMapper.java 5 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/MenuMapper.java 4 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/OrganizationMapper.java 4 ●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/mapper/UserMapper.java 2 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/UserService.java 2 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java 135 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/application-dev.yml 20 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/GroupMapper.xml 33 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/MenuMapper.xml 20 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/OrganizationMapper.xml 45 ●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/UserMapper.xml 52 ●●●●● patch | view | raw | blame | history
screen-common/src/main/java/com/moral/util/WebUtils.java 44 ●●●●● patch | view | raw | blame | history
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;
    }
}
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 = "注销")
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;
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);
}
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);
}
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);
}
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);
}
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);
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<>();
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:
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>
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>
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>
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>
screen-common/src/main/java/com/moral/util/WebUtils.java
New file
@@ -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;
    }
}