소스 검색

基础框架

lrf 9 달 전
부모
커밋
e1762f0d8e

+ 20 - 3
readme.md

@@ -1,6 +1,23 @@
 # 说明
-## 因为对mysql的json字段不熟悉.所以将json字段转换:
-  1. 简单存储 String/Number: 直接将json转为字符串存储, 视具体使用场景, 字段设置为varchar/text
-  2. 复杂json, 如 object/array : 新生成表 1对1/1对多方式处理
+## 简单数组/对象存储可以使用json类型数据:
+  1.数组:
+      声明:
+        ArrayNode 类型,从jackson引来的. 数据库字段的column中需要加上 type =  MySqlTypeConstant.JSON 以表名此字段为json字段
+      使用:
+        ```
+          ArrayNode menu = data.getMenu();
+          for (int i = 0; i < menu.size(); i++) {
+            JsonNode e = menu.get(i);
+            // 获取值
+            String mstr = e.textValue();
+            System.out.println(mstr);
+          }
+        ```
+
+  2.对象:
+    ObjectNode 类型,从jackson引来的. 数据库字段的column中需要加上 type =  MySqlTypeConstant.JSON 以表名此字段为json字段
+
+
+  
 ## token及验证:
   自定义拦截器,针对所有路由进行检查. 如果函数使用@PassToken注解,则会跳过检查,否则会检查是否有登录信息.

+ 21 - 0
src/main/java/com/free/MyBatisPlusConfig.java

@@ -0,0 +1,21 @@
+package com.free;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+
+@Configuration
+public class MyBatisPlusConfig {
+  /**
+   * myBatisPlus 分页插件
+   */
+  @Bean
+  public MybatisPlusInterceptor mybatisPlusInterceptor() {
+    MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
+    mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+    return mybatisPlusInterceptor;
+  }
+}

+ 81 - 4
src/main/java/com/free/controller/LoginController.java

@@ -1,26 +1,35 @@
 package com.free.controller;
 
 import java.util.Map;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ArrayList;
 
 import javax.validation.Valid;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.free.dto.LoginDTO;
 import com.free.dto.PasswordUpdateDTO;
 import com.free.entity.system.Admin;
 import com.free.entity.system.Customer;
+import com.free.entity.system.Role;
 import com.free.frame.CustomizationException;
 import com.free.frame.ExceptionEnum;
 import com.free.frame.ResponseFormat;
 import com.free.service.system.AdminService;
 import com.free.service.system.CustomerService;
+import com.free.service.system.MenusService;
+import com.free.service.system.RoleService;
 import com.free.utils.BcryptUtil;
 import com.free.utils.JwtUtil;
 
@@ -31,7 +40,8 @@ import io.swagger.annotations.ApiOperation;
 @RequestMapping
 @Api(tags = "登录服务")
 public class LoginController {
-
+  /** 超级管理员编码 */
+  private String isSuperAdminCode = "0";
   /** 管理员登录类型 */
   private String adminLoginType = "Admin";
   /** 客服人员登录类型 */
@@ -43,6 +53,12 @@ public class LoginController {
   @Autowired
   private CustomerService customerService;
 
+  @Autowired
+  private MenusService menusService;
+
+  @Autowired
+  private RoleService roleService;
+
   @ApiOperation("客服服务登录")
   @PostMapping("/kf/login/{type}")
   public Object login(@PathVariable String type, @RequestBody @Valid LoginDTO data) {
@@ -122,12 +138,73 @@ public class LoginController {
 
   /**
    * 根据token,查询出用户的权限,目录
+   * 
    * @return
    */
+  @GetMapping("/tokenView")
   public Object tokenView() {
     Map userMap = JwtUtil.getDetails(null);
-    // TODO: 找出用户,再找到角色,转换成列表
-    
-    return ResponseFormat.success();
+    Map<String, Object> returnData = new HashMap<>();
+    /**
+     * 1.用户信息;
+     * 2.用户类型;
+     * 3-1.管理员用户:
+     * 4.查看是否是超级管理员(is_super = 0):
+     * 5-1: 是超级管理员 - 递归获取所有目录,全部显示
+     * 5-2: 不是超级管理员 - 根据设置角色 获取指定目录
+     * 3-2.客服人员:
+     * 4.根据角色获取指定目录
+     */
+    Long user_id = Long.valueOf(String.valueOf(userMap.get("id")));
+    String type = (String) userMap.get("type");
+    Map<String, Object> userInfo = null;
+    if (this.adminLoginType.equals(type)) {
+      // 判断是否是超级管理员
+      String is_super = (String) userMap.get("is_super");
+      if (this.isSuperAdminCode.equals(is_super)) {
+        List menus = this.menusService.recursionMenus();
+        returnData.put("menus", menus);
+        return ResponseFormat.success(returnData);
+      }
+      // 不是超级管理员,那也是管理员,查出管理员信息,之后一起处理
+      QueryWrapper qw = new QueryWrapper<>();
+      qw.eq("id", user_id);
+      qw.eq("is_use", "0");
+      userInfo = this.adminService.getMap(qw);
+    } else if (this.customerService.equals(type)) {
+      // 查客服人员最新信息
+      QueryWrapper qw = new QueryWrapper<>();
+      qw.eq("id", user_id);
+      qw.eq("is_use", "0");
+      userInfo = this.customerService.getMap(qw);
+    }
+    if (null == userInfo) {
+      // 没有用户说明: 1.token有问题;2.用户数据有问题
+      throw new CustomizationException(ExceptionEnum.TOKEN_ERROR);
+    }
+    // 根据角色获取目录
+    Long role = Long.valueOf(String.valueOf(userInfo.get("role")));
+    QueryWrapper roleQW = new QueryWrapper<>();
+    roleQW.eq("id", role);
+    roleQW.eq("is_use", "0");
+    Role userRole = this.roleService.getOne(roleQW);
+    if (null == userRole) {
+      throw new CustomizationException(ExceptionEnum.USER_ROLE_NOT_FOUND);
+    }
+    ArrayNode menus = userRole.getMenu();
+    // 根据前端选择的route_name进行目录的查询
+    List menusRouteNameList = new ArrayList();
+    for (int i = 0; i < menus.size(); i++) {
+      JsonNode e = menus.get(i);
+      String route_name = e.textValue();
+      menusRouteNameList.add(route_name);
+    }
+    QueryWrapper menuQW = new QueryWrapper<>();
+    menuQW.in("route_name", menusRouteNameList);
+    menuQW.eq("is_use", "0");
+    List menusList = this.menusService.list(menuQW);
+    List returnMenus = this.menusService.recursionMenus(menusList);
+    returnData.put("menus", returnMenus);
+    return ResponseFormat.success(returnData);
   }
 }

+ 7 - 4
src/main/java/com/free/controller/system/AdminController.java

@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 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.free.dto.system.admin.AdminCreateDTO;
+import com.free.dto.system.AdminCreateDTO;
 import com.free.entity.system.Admin;
 import com.free.frame.CustomizationException;
 import com.free.frame.ExceptionEnum;
@@ -71,11 +71,13 @@ public class AdminController {
     QueryWrapper<Admin> qw = new QueryWrapper<Admin>();
     qw.eq("id", id);
     Long num = this.service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     data.setId(id);
-    // 密码不在修改范围内,清空
+    // 密码,账号不在修改范围内,清空
     data.setPassword(null);
+    data.setAccount(null);
     this.service.updateById(data);
     Object newData = this.service.getById(id);
     return ResponseFormat.success(newData);
@@ -131,8 +133,9 @@ public class AdminController {
     QueryWrapper<Admin> qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     service.removeById(id);
     return ResponseFormat.success();
   }

+ 5 - 3
src/main/java/com/free/controller/system/CustomerController.java

@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 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.free.dto.system.customer.CustomerCreateDTO;
+import com.free.dto.system.CustomerCreateDTO;
 import com.free.entity.system.Customer;
 import com.free.frame.CustomizationException;
 import com.free.frame.ExceptionEnum;
@@ -71,8 +71,9 @@ public class CustomerController {
     QueryWrapper<Customer> qw = new QueryWrapper<Customer>();
     qw.eq("id", id);
     Long num = this.service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     data.setId(id);
     // 密码不在修改范围内,清空
     data.setPassword(null);
@@ -131,8 +132,9 @@ public class CustomerController {
     QueryWrapper<Customer> qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     service.removeById(id);
     return ResponseFormat.success();
   }

+ 5 - 3
src/main/java/com/free/controller/system/MenusController.java

@@ -20,7 +20,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
 import com.free.annotation.PassToken;
-import com.free.dto.system.menus.MenusCreateDTO;
+import com.free.dto.system.MenusCreateDTO;
 import com.free.entity.system.Menus;
 import com.free.frame.CustomizationException;
 import com.free.frame.ExceptionEnum;
@@ -63,8 +63,9 @@ public class MenusController {
     QueryWrapper<Menus> qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = this.service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     data.setId(id);
     this.service.updateById(data);
     Object newData = this.service.getById(id);
@@ -94,8 +95,9 @@ public class MenusController {
     QueryWrapper qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     // TODO: 递归删除
     service.removeById(id);
     return ResponseFormat.success();

+ 23 - 3
src/main/java/com/free/controller/system/RoleController.java

@@ -19,11 +19,16 @@ import org.springframework.web.bind.annotation.RestController;
 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.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.CollectionType;
+import com.free.annotation.PassToken;
 import com.free.entity.system.Role;
 import com.free.frame.CustomizationException;
 import com.free.frame.ExceptionEnum;
 import com.free.frame.ResponseFormat;
 import com.free.service.system.RoleService;
+import com.free.utils.Utils;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -44,6 +49,7 @@ public class RoleController {
     qw.eq("id", data.getId());
     Map returnData = this.service.getMap(qw);
     return ResponseFormat.success(returnData);
+    // return ResponseFormat.success();
   }
 
   /** 列表查询 */
@@ -88,8 +94,9 @@ public class RoleController {
     QueryWrapper qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = this.service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
+    }
     data.setId(id);
     this.service.updateById(data);
     Object newData = this.service.getById(id);
@@ -111,10 +118,23 @@ public class RoleController {
     QueryWrapper qw = new QueryWrapper<>();
     qw.eq("id", id);
     Long num = service.count(qw);
-    if (num <= 0)
+    if (num <= 0) {
       throw new CustomizationException(ExceptionEnum.NOT_FOUND);
-    // TODO: 递归删除
+    }
     service.removeById(id);
     return ResponseFormat.success();
   }
+
+  @PassToken
+  @ApiOperation("初始化角色")
+  @PostMapping("/initData")
+  public Object initData() throws JsonProcessingException {
+    String filePath = "db/role.json";
+    ObjectMapper mapper = new ObjectMapper();
+    String str = Utils.readJsonFile(filePath);
+    CollectionType javaType = mapper.getTypeFactory().constructCollectionType(List.class, Map.class);
+    List<Map> list = mapper.readValue(str, javaType);
+    this.service.initData(list);
+    return ResponseFormat.success();
+  }
 }

+ 2 - 2
src/main/java/com/free/dto/system/admin/AdminCreateDTO.java

@@ -1,4 +1,4 @@
-package com.free.dto.system.admin;
+package com.free.dto.system;
 
 import javax.validation.constraints.NotBlank;
 
@@ -12,5 +12,5 @@ public class AdminCreateDTO {
   private String account;
   @NotBlank(message = "请填写密码")
   private String password;
-  private String role;
+  private Long role;
 }

+ 2 - 2
src/main/java/com/free/dto/system/customer/CustomerCreateDTO.java

@@ -1,4 +1,4 @@
-package com.free.dto.system.customer;
+package com.free.dto.system;
 
 import javax.validation.constraints.NotBlank;
 
@@ -12,5 +12,5 @@ public class CustomerCreateDTO {
   private String account;
   @NotBlank(message = "请填写密码")
   private String password;
-  private String role;
+  private Long role;
 }

+ 1 - 1
src/main/java/com/free/dto/system/menus/MenusCreateDTO.java

@@ -1,4 +1,4 @@
-package com.free.dto.system.menus;
+package com.free.dto.system;
 
 import javax.validation.constraints.NotBlank;
 

+ 1 - 1
src/main/java/com/free/entity/system/Admin.java

@@ -37,7 +37,7 @@ public class Admin extends BaseEntity {
   @Column(comment = "角色")
   @TableField(value = "role")
   @ApiModelProperty("角色")
-  private String role;
+  private Long role;
 
   @Column(comment = "是否使用", defaultValue = "0")
   @TableField(value = "is_use")

+ 1 - 1
src/main/java/com/free/entity/system/Customer.java

@@ -37,7 +37,7 @@ public class Customer extends BaseEntity {
   @Column(comment = "角色")
   @TableField(value = "role")
   @ApiModelProperty("角色")
-  private String role;
+  private Long role;
 
   @Column(comment = "是否使用", defaultValue = "0")
   @TableField(value = "is_use")

+ 7 - 4
src/main/java/com/free/entity/system/Role.java

@@ -2,9 +2,12 @@ package com.free.entity.system;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.free.utils.BaseEntity;
 import com.gitee.sunchenbin.mybatis.actable.annotation.Column;
 import com.gitee.sunchenbin.mybatis.actable.annotation.Table;
+import com.gitee.sunchenbin.mybatis.actable.constants.MySqlTypeConstant;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -14,7 +17,7 @@ import lombok.EqualsAndHashCode;
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Table(name = "role")
-@TableName(value = "role")
+@TableName(value = "role", autoResultMap = true)
 @ApiModel("角色")
 public class Role extends BaseEntity {
   @Column(comment = "角色名称")
@@ -22,10 +25,10 @@ public class Role extends BaseEntity {
   @ApiModelProperty("角色名称")
   private String name;
 
-  @Column(comment = "角色目录")
-  @TableField(value = "menu")
+  @Column(comment = "角色目录", type = MySqlTypeConstant.JSON)
+  @TableField(value = "menu", typeHandler = JacksonTypeHandler.class)
   @ApiModelProperty("角色目录")
-  private String menu;
+  private ArrayNode menu;
 
   @Column(comment = "简介")
   @TableField(value = "brief")

+ 6 - 4
src/main/java/com/free/frame/ExceptionEnum.java

@@ -11,10 +11,12 @@ public enum ExceptionEnum {
   PASSWORD_ERROR("4012", "密码错误"),
   TOKEN_NOT_FOUND("4013", "未找到登录信息"),
   TOKEN_INVALID("4014", "登录已超时,请重新登录"),
-  TOKEN_ERROR("4015", "该用户已在其他地点登录,请重新登录"),
-  NO_LOGIN_RECORD("4016", "未找到登录信息,请重新登录"),
-  ACCOUNT_IS_LOGOUT("4017","该用户已登出,如要使用请重新登录"),
-  USER_TYPE_ERROR("4018","用户类型错误"),
+  OTHER_PLACE_LOGIN("4015", "该用户已在其他地点登录,请重新登录"),
+  TOKEN_ERROR("4016", "登录信息解析发生错误,请重新登录"),
+  NO_LOGIN_RECORD("4017", "未找到登录信息,请重新登录"),
+  ACCOUNT_IS_LOGOUT("4018", "该用户已登出,如要使用请重新登录"),
+  USER_TYPE_ERROR("4019", "用户类型错误"),
+  USER_ROLE_NOT_FOUND("40110", "未找到用户角色信息"),
   // 数据操作异常定义
   NOT_FOUND("404", "数据不存在或已删除!");
 

+ 3 - 1
src/main/java/com/free/mapper/system/RoleMapper.java

@@ -1,11 +1,13 @@
 package com.free.mapper.system;
 
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Update;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.free.entity.system.Role;
 
 @Mapper
 public interface RoleMapper extends BaseMapper<Role>{
-  
+  @Update("truncate table role")
+  void truncate();
 }

+ 5 - 0
src/main/java/com/free/service/LoginService.java

@@ -0,0 +1,5 @@
+package com.free.service;
+
+public class LoginService {
+  
+}

+ 42 - 18
src/main/java/com/free/service/system/MenusService.java

@@ -8,8 +8,6 @@ import java.util.stream.Collectors;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.free.entity.system.Menus;
 import com.free.mapper.system.MenusMapper;
 import com.free.utils.Utils;
@@ -22,28 +20,55 @@ public class MenusService extends ServiceImpl<MenusMapper, Menus> {
    * 
    * @return
    */
-  public List recursionMenus() {
+  public List<Map<String, Object>> recursionMenus() {
     List<Menus> list = this.list();
     // 转换成Map-List,因为之后要增加children属性.Menus不能直接加
+    List<Map<String, Object>> allMapList = this.menusListTurnToMenusListMaps(list);
+    // 1.取出第一层级,随后开始递归
+    List<Map<String, Object>> firstLevelList = this.getFirstLevelList(allMapList);
+    List<Map<String, Object>> returnList = this.treeMenu(firstLevelList, allMapList);
+    return returnList;
+  }
+
+  /**
+   * 根据传来的所有目录,递归处理
+   * @param list
+   * @return
+   */
+  public List<Map<String, Object>> recursionMenus(List<Menus> list) {
+    // 转换成Map-List,因为之后要增加children属性.Menus不能直接加
+    List<Map<String, Object>> allMapList = this.menusListTurnToMenusListMaps(list);
+    // 1.取出第一层级,随后开始递归
+    List<Map<String, Object>> firstLevelList = this.getFirstLevelList(allMapList);
+    List<Map<String, Object>> returnList = this.treeMenu(firstLevelList, allMapList);
+    return returnList;
+  }
+
+  /**
+   * 将List转为List<Map>
+   * 
+   * @param list
+   * @return
+   */
+  public List<Map<String, Object>> menusListTurnToMenusListMaps(List<Menus> list) {
     List<Map<String, Object>> allMapList = new ArrayList<>();
     for (Menus m : list) {
       Map<String, Object> midMap = Utils.objectToMap(m);
       allMapList.add(midMap);
     }
-    // List<Map<String, Object>> firstLevelList = new ArrayList<>();
-    // 1.取出第一层级,随后开始递归
-    // for (Map<String, Object> m : allMapList) {
-    // Long parent_id = (Long) m.get("parent_id");
-    // if (null == parent_id) {
-    // // 没有parent_id的为第一层级;
-    // firstLevelList.add(m);
-    // }
-    // }
-    List<Map<String, Object>> firstLevelList = allMapList.stream().filter(f -> null == f.get("parent_id"))
-        .collect(Collectors.toList());
+    return allMapList;
+  }
 
-    List<Map<String, Object>> returnList = this.treeMenu(firstLevelList, allMapList);
-    return returnList;
+  /**
+   * 用List<Map>类型的数据,过滤出第一层级数据
+   * 
+   * @param list
+   * @return
+   */
+  public List<Map<String, Object>> getFirstLevelList(List<Map<String, Object>> list) {
+    List<Map<String, Object>> firstLevelList = list.stream().filter(f -> null == f.get("parent_id"))
+        .collect(Collectors.toList());
+    return firstLevelList;
   }
 
   /**
@@ -53,7 +78,7 @@ public class MenusService extends ServiceImpl<MenusMapper, Menus> {
    * @param allList 所有目录
    * @return
    */
-  private List treeMenu(List<Map<String, Object>> list, List<Map<String, Object>> allList) {
+  public List<Map<String, Object>> treeMenu(List<Map<String, Object>> list, List<Map<String, Object>> allList) {
     for (Map<String, Object> m : list) {
       // 取id,找parent_id 与其一致的数据
       Long id = (Long) m.get("id");
@@ -73,7 +98,6 @@ public class MenusService extends ServiceImpl<MenusMapper, Menus> {
         }
       }
       // children中没有数据,直接跳过
-      System.out.println("children size" + children.size());
       if (children.size() <= 0) {
         continue;
       }

+ 16 - 2
src/main/java/com/free/service/system/RoleService.java

@@ -1,12 +1,26 @@
 package com.free.service.system;
 
+import java.util.List;
+import java.util.Map;
+
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.free.entity.system.Role;
 import com.free.mapper.system.RoleMapper;
 
 @Service
-public class RoleService extends ServiceImpl<RoleMapper, Role>{
-  
+public class RoleService extends ServiceImpl<RoleMapper, Role> {
+
+  public void initData(List<Map> list) {
+    // 清空表
+    ObjectMapper mapper = new ObjectMapper();
+    this.baseMapper.truncate();
+    for (int i = 0; i < list.size(); i++) {
+      Map m = list.get(i);
+      Role roleData = mapper.convertValue(m, Role.class);
+      this.save(roleData);
+    }
+  }
 }

+ 6 - 5
src/main/java/com/free/utils/JwtUtil.java

@@ -37,8 +37,9 @@ public class JwtUtil {
   private static final long EXPIRE_TIME = EXPIRE_MIN * 60 * 1000;
   // 密钥
   private static final String SECRET = "Ziyouyanfa!@#";
-  /** 特殊处理的key,id.因为是long类型 */
-  private static String spcialKey = "id";
+  /** 特殊处理的key,id和role.因为是long类型 */
+  private static String spcialKeyId = "id";
+  private static String spcialKeyRole = "role";
 
   @Autowired
   private LoginRecordService lrs;
@@ -65,7 +66,7 @@ public class JwtUtil {
 
     for (Map.Entry<String, Object> entry : map.entrySet()) {
       String k = entry.getKey();
-      if (spcialKey.equals(k)) {
+      if (spcialKeyId.equals(k) || spcialKeyRole.equals(k)) {
         Long v = (Long) entry.getValue();
         builder.withClaim(k, v);
       } else {
@@ -217,7 +218,7 @@ public class JwtUtil {
     }
     // token对比,如果时间允许,但是token码不一致,则说明在其他地点登录
     if (!dbToken.equals(token)) {
-      throw new CustomizationException(ExceptionEnum.TOKEN_ERROR);
+      throw new CustomizationException(ExceptionEnum.OTHER_PLACE_LOGIN);
     }
     // 如果需要校准 ip,再加上即可
   }
@@ -237,7 +238,7 @@ public class JwtUtil {
       Map<String, Object> returnMap = new HashMap<>();
       for (Map.Entry<String, Claim> entry : map.entrySet()) {
         String k = entry.getKey();
-        if (spcialKey.equals(k)) {
+        if (spcialKeyId.equals(k) || spcialKeyRole.equals(k)) {
           Long v = jwt.getClaim(k).asLong();
           returnMap.put(k, v);
         } else {

+ 1 - 1
src/main/resources/db/menus.json

@@ -92,7 +92,7 @@
         "route_name": "user_customer"
       },
       {
-        "name": "使用用户用户",
+        "name": "使用用户",
         "component": "user",
         "type": "1",
         "is_default": "0",

+ 12 - 0
src/main/resources/db/role.json

@@ -0,0 +1,12 @@
+[
+  {
+    "name": "管理员",
+    "menu": ["home", "center_index", "system", "system_dict", "platform", "platform_basic", "platform_role", "user", "user_admin", "user_customer", "user_user"],
+    "is_default": "0"
+  },
+  {
+    "name": "客服人员",
+    "menu": ["home", "center_index"],
+    "is_default": "0"
+  }
+]