xiaoyong931011
2022-05-31 a59c45cf807e7b800cd8ab901fe15a90d4894bb5
20220527
2 files added
18 files modified
302 ■■■■ changed files
src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/configurations/security/TokenFilter.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java 6 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java 4 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java 169 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/util/LoginUserUtil.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserMenuVo.java 30 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java 6 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/MenuMapper.xml 7 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java
@@ -21,15 +21,15 @@
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;
    private String createBy;
    private String createBy = "system";
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;
    private Date createTime = new Date();
    private String updateBy;
    private String updateBy = "system";
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
    private Date updateTime = new Date();
    private Integer version;
}
src/main/java/com/xcong/farmer/cms/configurations/security/TokenFilter.java
@@ -3,11 +3,13 @@
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xcong.farmer.cms.common.contants.AppContants;
import com.xcong.farmer.cms.common.system.bean.LoginUserBean;
import com.xcong.farmer.cms.configurations.properties.ApplicationProperties;
import com.xcong.farmer.cms.configurations.properties.SecurityProperties;
import com.xcong.farmer.cms.modules.system.entity.UserEntity;
import com.xcong.farmer.cms.utils.RedisUtils;
import com.xcong.farmer.cms.utils.SpringContextHolder;
import lombok.extern.slf4j.Slf4j;
@@ -49,6 +51,11 @@
                Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser.getMemberEntity(), token, new ArrayList<>());
                SecurityContextHolder.getContext().setAuthentication(authentication);
                redisUtils.expire(AppContants.APP_LOGIN_PREFIX + token, 300000);
                String userJsonStr = redisUtils.getString(AppContants.APP_LOGIN_PREFIX + token);
                UserEntity user = JSON.parseObject(userJsonStr, UserEntity.class);
                request.getSession().setAttribute("user", user);
            } else {
                SecurityContextHolder.clearContext();
            }
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminCommonController.java
@@ -54,9 +54,9 @@
     * @return
     */
    @ApiOperation(value="用户退出登录", notes="用户退出登录")
    @GetMapping(value = "/Logout/{id}")
    public Result  memberLogout(@PathVariable(value = "id") Long id) {
        return iCommonService.memberLogout(id);
    @GetMapping(value = "/Logout")
    public Result  memberLogout() {
        return iCommonService.memberLogout();
    }
}
src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java
@@ -79,4 +79,10 @@
        return iUserService.resetPassword(id);
    }
    @ApiOperation(value = "查看用户的全部菜单", notes = "查看用户的全部菜单")
    @GetMapping(value = "/userMenu")
    public Result userMenu() {
        return iUserService.userMenu();
    }
}
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java
@@ -14,7 +14,7 @@
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "菜单按钮ID")
    @ApiModelProperty(value = "菜单按钮IDS")
    private String menuIds;
}
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java
@@ -16,8 +16,8 @@
    @ApiModelProperty(value = "昵称")
    private String nickname;
    @ApiModelProperty(value = "角色ID")
    private Long roleId;
    @ApiModelProperty(value = "角色IDS")
    private String roleIds;
    @ApiModelProperty(value = "联系电话")
    private String phone;
src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java
@@ -23,8 +23,8 @@
    @ApiModelProperty(value = "邮箱")
    private String email;
    @ApiModelProperty(value = "角色ID")
    private Long roleId;
    @ApiModelProperty(value = "角色IDS")
    private String roleIds;
    @ApiModelProperty(value = "角色名称")
    private String roleName;
src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java
@@ -32,10 +32,6 @@
    private String nickname;
    //登录密码
    private String password;
    //角色ID
    private Long roleId;
    //角色名称
    private String roleName;
    //联系电话
    private String phone;
    //邮箱
src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java
@@ -5,10 +5,12 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xcong.farmer.cms.modules.system.entity.MenuEntity;
import com.xcong.farmer.cms.modules.system.vo.AdminMenuVo;
import com.xcong.farmer.cms.modules.system.vo.AdminUserMenuVo;
import org.apache.ibatis.annotations.Param;
public interface MenuMapper extends BaseMapper<MenuEntity> {
    IPage<AdminMenuVo> selectAdminMenuVoInPage(Page<AdminMenuVo> page, @Param("record")MenuEntity menuEntity);
    AdminUserMenuVo selectAdminRoleMenuVoById(@Param("id")Long parentId);
}
src/main/java/com/xcong/farmer/cms/modules/system/service/ICommonService.java
@@ -9,5 +9,5 @@
    Result login(AdminLoginDto adminLoginDto);
    Result memberLogout(Long id);
    Result memberLogout();
}
src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java
@@ -24,4 +24,6 @@
    Result updateUser(AdminUpdateUserDto adminUpdateUserDto);
    Result resetPassword(Long id);
    Result userMenu();
}
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/CommonServiceImpl.java
@@ -13,6 +13,7 @@
import com.xcong.farmer.cms.modules.system.entity.UserEntity;
import com.xcong.farmer.cms.modules.system.mapper.UserMapper;
import com.xcong.farmer.cms.modules.system.service.ICommonService;
import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
import com.xcong.farmer.cms.utils.MessageSourceUtils;
import com.xcong.farmer.cms.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
@@ -73,7 +74,8 @@
    }
    @Override
    public Result memberLogout(Long id) {
    public Result memberLogout() {
        Long id = LoginUserUtil.getLoginUser().getId();
        //获取用户ID
        UserEntity userEntity = userMapper.selectById(id);
        if (ObjectUtil.isEmpty(userEntity)) {
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java
@@ -147,16 +147,6 @@
        if(StrUtil.isNotEmpty(menuIds)){
            saveRoleMenus(menuIds,id);
        }
        QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
        userWrapper.eq("role_id",id);
        List<UserEntity> userEntities = userMapper.selectList(userWrapper);
        if(CollUtil.isNotEmpty(userEntities)){
            for(UserEntity userEntity : userEntities){
                userEntity.setRoleName(roleName);
                userMapper.updateById(userEntity);
            }
        }
        return Result.ok("更新成功");
    }
src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
@@ -1,27 +1,33 @@
package com.xcong.farmer.cms.modules.system.service.Impl;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.farmer.cms.common.response.Result;
import com.xcong.farmer.cms.modules.system.dto.AdminAddUserDto;
import com.xcong.farmer.cms.modules.system.dto.AdminUpdateUserDto;
import com.xcong.farmer.cms.modules.system.dto.AdminUserDto;
import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
import com.xcong.farmer.cms.modules.system.entity.UserEntity;
import com.xcong.farmer.cms.modules.system.mapper.RoleMapper;
import com.xcong.farmer.cms.modules.system.mapper.UserMapper;
import com.xcong.farmer.cms.modules.system.entity.*;
import com.xcong.farmer.cms.modules.system.mapper.*;
import com.xcong.farmer.cms.modules.system.service.IUserService;
import com.xcong.farmer.cms.modules.system.util.LoginUserUtil;
import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
import com.xcong.farmer.cms.modules.system.vo.AdminSeeUserInfoVo;
import com.xcong.farmer.cms.modules.system.vo.AdminUserMenuVo;
import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.collection.CollUtil;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
@Service
@Slf4j
@@ -29,6 +35,12 @@
    @Resource
    private RoleMapper roleMapper;
    @Resource
    private UserRoleMapper userRoleMapper;
    @Resource
    private RoleMenuMapper roleMenuMapper;
    @Resource
    private MenuMapper menuMapper;
    @Override
    public Result getUserInPage(AdminUserDto adminUserDto) {
@@ -37,8 +49,28 @@
        if(StrUtil.isNotEmpty(adminUserDto.getUsername())){
            userEntity.setUsername(adminUserDto.getUsername());
        }
        IPage<AdminUserVo> list = this.baseMapper.selectAdminUserVoInPage(page,userEntity);
        return Result.ok(list);
        IPage<AdminUserVo> AdminUserVos = this.baseMapper.selectAdminUserVoInPage(page,userEntity);
        List<AdminUserVo> records = AdminUserVos.getRecords();
        if(CollUtil.isNotEmpty(records)){
            for(AdminUserVo adminUserVo : records){
                List<AdminRoleVo> adminRoleVos = new ArrayList<>();
                QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
                objectQueryWrapper.eq("user_id",adminUserVo.getId());
                List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
                if(CollUtil.isNotEmpty(userRoleEntities)){
                    for(UserRoleEntity userRoleEntity : userRoleEntities){
                        RoleEntity roleEntity = roleMapper.selectById(userRoleEntity.getRoleId());
                        AdminRoleVo adminRoleVo = new AdminRoleVo();
                        adminRoleVo.setId(roleEntity.getId());
                        adminRoleVo.setRoleName(roleEntity.getRoleName());
                        adminRoleVos.add(adminRoleVo);
                    }
                }
                adminUserVo.setAdminRoleVos(adminRoleVos);
            }
        }
        return Result.ok(AdminUserVos);
    }
    @Override
@@ -48,12 +80,8 @@
        if(StrUtil.isEmpty(username)){
            return Result.fail("请输入用户名");
        }
        Long roleId = adminAddUserDto.getRoleId();
        if(ObjectUtil.isEmpty(roleId)){
            return Result.fail("请选择用户角色");
        }
        RoleEntity roleEntity = roleMapper.selectById(roleId);
        if(ObjectUtil.isEmpty(roleEntity)){
        String roleIds = adminAddUserDto.getRoleIds();
        if(StrUtil.isEmpty(roleIds)){
            return Result.fail("请选择用户角色");
        }
        String phone = adminAddUserDto.getPhone();
@@ -63,19 +91,17 @@
        UserEntity userEntity = new UserEntity();
        userEntity.setUsername(username);
        userEntity.setPhone(phone);
        userEntity.setRoleId(roleId);
        userEntity.setRoleName(roleEntity.getRoleName());
        if(StrUtil.isNotEmpty(adminAddUserDto.getNickname())){
            userEntity.setNickname(adminAddUserDto.getNickname());
        }
        if(StrUtil.isNotEmpty(adminAddUserDto.getEmail())){
            userEntity.setEmail(adminAddUserDto.getEmail());
        }
        userEntity.setPassword(SecureUtil.md5(UserEntity.PASSWORD_DEFAULT));
        userEntity.setStatus(UserEntity.STATUS_ENABLE);
        int insert = this.baseMapper.insert(userEntity);
        if(insert > 0){
            saveUserRole(roleIds,userEntity.getId());
            return Result.ok("添加成功");
        }
        return Result.fail("添加失败");
@@ -113,6 +139,10 @@
            return Result.fail("用户不存在");
        }
        this.baseMapper.deleteById(id);
        QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("user_id",userEntity.getId());
        userRoleMapper.delete(objectQueryWrapper);
        return Result.ok("删除成功");
    }
@@ -128,8 +158,21 @@
        adminSeeUserInfoVo.setNickname(userEntity.getNickname());
        adminSeeUserInfoVo.setPhone(userEntity.getPhone());
        adminSeeUserInfoVo.setEmail(userEntity.getEmail());
        adminSeeUserInfoVo.setRoleId(userEntity.getRoleId());
        adminSeeUserInfoVo.setRoleName(userEntity.getRoleName());
        List<AdminRoleVo> adminRoleVos = new ArrayList<>();
        QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("user_id",userEntity.getId());
        List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
        if(CollUtil.isNotEmpty(userRoleEntities)){
            for(UserRoleEntity userRoleEntity : userRoleEntities){
                RoleEntity roleEntity = roleMapper.selectById(userRoleEntity.getRoleId());
                AdminRoleVo adminRoleVo = new AdminRoleVo();
                adminRoleVo.setId(roleEntity.getId());
                adminRoleVo.setRoleName(roleEntity.getRoleName());
                adminRoleVos.add(adminRoleVo);
            }
        }
        adminSeeUserInfoVo.setAdminRoleVos(adminRoleVos);
        return Result.ok(adminSeeUserInfoVo);
    }
@@ -140,12 +183,8 @@
        if(StrUtil.isEmpty(username)){
            return Result.fail("请输入用户名");
        }
        Long roleId = adminUpdateUserDto.getRoleId();
        if(ObjectUtil.isEmpty(roleId)){
            return Result.fail("请选择用户角色");
        }
        RoleEntity roleEntity = roleMapper.selectById(roleId);
        if(ObjectUtil.isEmpty(roleEntity)){
        String roleIds = adminUpdateUserDto.getRoleIds();
        if(StrUtil.isEmpty(roleIds)){
            return Result.fail("请选择用户角色");
        }
        String phone = adminUpdateUserDto.getPhone();
@@ -158,8 +197,6 @@
        }
        userEntity.setUsername(username);
        userEntity.setPhone(phone);
        userEntity.setRoleId(roleId);
        userEntity.setRoleName(roleEntity.getRoleName());
        if(StrUtil.isNotEmpty(adminUpdateUserDto.getNickname())){
            userEntity.setNickname(adminUpdateUserDto.getNickname());
        }
@@ -168,6 +205,11 @@
        }
        int insert = this.baseMapper.updateById(userEntity);
        if(insert > 0){
            QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
            objectQueryWrapper.eq("user_id",userEntity.getId());
            userRoleMapper.delete(objectQueryWrapper);
            saveUserRole(roleIds,userEntity.getId());
            return Result.ok("更新成功");
        }
        return Result.fail("更新失败");
@@ -184,4 +226,81 @@
        this.baseMapper.updateById(userEntity);
        return Result.ok("重置成功");
    }
    @Override
    public Result userMenu() {
        Long userId = LoginUserUtil.getLoginUser().getId();
        List<AdminUserMenuVo> adminUserMenuVos = new ArrayList<>();
        QueryWrapper<UserRoleEntity> userRoleQueryWrapper = new QueryWrapper<>();
        userRoleQueryWrapper.eq("user_id",userId);
        List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(userRoleQueryWrapper);
        if(CollUtil.isNotEmpty(userRoleEntities)){
            List menuIds = new ArrayList<Long>();
            for(UserRoleEntity userRoleEntity : userRoleEntities){
                List<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(userRoleEntity.getRoleId());
                if(CollUtil.isNotEmpty(roleMenuEntities)){
                    for(RoleMenuEntity roleMenuEntity : roleMenuEntities){
                        menuIds.add(roleMenuEntity.getMenuId());
                    }
                }
            }
            if(CollUtil.isNotEmpty(menuIds)){
                HashSet hashSet = CollUtil.newHashSet(menuIds);
                List<Long> parentMenuIds = new ArrayList<>();
                List<Long> childMenuIds = new ArrayList<>();
                for(Object s : hashSet){
                    MenuEntity menuEntity = menuMapper.selectById(Long.parseLong(s.toString()));
                    Long parentId = menuEntity.getParentId();
                    if(parentId == 0L){
                        parentMenuIds.add(menuEntity.getId());
                    }else{
                        childMenuIds.add(menuEntity.getId());
                    }
                }
                Map<Long, AdminUserMenuVo> menuMap = new HashMap<>();
                if(CollUtil.isNotEmpty(parentMenuIds)){
                    for(Long parentId : parentMenuIds){
                        AdminUserMenuVo adminUserMenuVo = menuMapper.selectAdminRoleMenuVoById(parentId);
                        menuMap.put(parentId,adminUserMenuVo);
                    }
                }
                if(CollUtil.isNotEmpty(childMenuIds)){
                    for(Long childId : childMenuIds){
                        AdminUserMenuVo adminUserMenuVo = menuMapper.selectAdminRoleMenuVoById(childId);
                        Long parentId = adminUserMenuVo.getParentId();
                        AdminUserMenuVo adminUserMenuVoParent = menuMap.get(parentId);
                        List<AdminUserMenuVo> child = adminUserMenuVoParent.getChild();
                        if(CollUtil.isEmpty(child)){
                            List<AdminUserMenuVo> list = new ArrayList<>();
                            list.add(adminUserMenuVo);
                            adminUserMenuVoParent.setChild(list);
                        }else{
                            child.add(adminUserMenuVo);
                        }
                    }
                }
                Set<Map.Entry<Long, AdminUserMenuVo>> entries = menuMap.entrySet();
                Iterator<Map.Entry<Long, AdminUserMenuVo>> iterator = entries.iterator();
                while (iterator.hasNext()){
                    adminUserMenuVos.add(iterator.next().getValue());
                }
            }
        }
        return Result.ok(adminUserMenuVos);
    }
    private void saveUserRole(String roleIds,Long userId) {
        if (StrUtil.isNotEmpty(roleIds)) {
            String[] roleIdList = roleIds.split(StringPool.COMMA);
            Arrays.stream(roleIdList).forEach(roleId -> {
                UserRoleEntity userRoleEntity = new UserRoleEntity();
                userRoleEntity.setRoleId(Long.valueOf(roleId));
                userRoleEntity.setUserId(userId);
                userRoleMapper.insert(userRoleEntity);
            });
        }
    }
}
src/main/java/com/xcong/farmer/cms/modules/system/util/LoginUserUtil.java
New file
@@ -0,0 +1,19 @@
package com.xcong.farmer.cms.modules.system.util;
import com.xcong.farmer.cms.modules.system.entity.UserEntity;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
 * @author xxx
 * @date 2020-08-24
 **/
public class LoginUserUtil {
    public static UserEntity getLoginUser() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        return (UserEntity) request.getSession().getAttribute("user");
    }
}
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java
@@ -3,6 +3,7 @@
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "AdminSeeUserInfoVo", description = "系统用户详情返回")
@@ -23,10 +24,7 @@
    @ApiModelProperty(value = "邮箱")
    private String email;
    @ApiModelProperty(value = "角色ID")
    private Long roleId;
    @ApiModelProperty(value = "角色名称")
    private String roleName;
    @ApiModelProperty(value = "角色")
    private  List<AdminRoleVo> AdminRoleVos;
}
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserMenuVo.java
New file
@@ -0,0 +1,30 @@
package com.xcong.farmer.cms.modules.system.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "AdminUserMenuVo", description = "系统菜单列表返回")
public class AdminUserMenuVo {
    @ApiModelProperty(value = "菜单ID")
    private Long id;
    @ApiModelProperty(value = "菜单按钮标题")
    private String menuName;
    @ApiModelProperty(value = "菜单类型 1:菜单 2:按钮")
    private Integer menuType;
    @ApiModelProperty(value = "路由地址")
    private String routeUrl;
    @ApiModelProperty(value = "父ID")
    private Long parentId;
    @ApiModelProperty(value = "子菜单")
    private List<AdminUserMenuVo> child;
}
src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java
@@ -2,6 +2,8 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.util.List;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -25,8 +27,8 @@
    @ApiModelProperty(value = "邮箱")
    private String email;
    @ApiModelProperty(value = "角色名称")
    private String roleName;
    @ApiModelProperty(value = "角色")
    private List<AdminRoleVo> AdminRoleVos;
    @ApiModelProperty(value = "账号状态 0:禁用 1:激活")
    private Integer status;
src/main/resources/application.yml
@@ -5,7 +5,7 @@
spring:
  datasource:
    url: jdbc:mysql://120.27.238.55:3306/farmer-cms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
    url: jdbc:mysql://120.27.238.55:3306/farmer_cms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
    username: ct_test
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
src/main/resources/mapper/MenuMapper.xml
@@ -17,4 +17,11 @@
        order by a.create_time desc
    </select>
    <select id="selectAdminRoleMenuVoById" resultType="com.xcong.farmer.cms.modules.system.vo.AdminUserMenuVo">
        SELECT
        a.*
        FROM
        t_menu a where a.id = #{id}
    </select>
</mapper>