Fixiaobai
2023-08-24 c0e7f848236e1ab5f945b98c32d12c81e3e9c991
角色管理
已修改6个文件
已删除1个文件
已添加7个文件
471 ■■■■■ 文件已修改
framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/MenuMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
@@ -14,8 +14,6 @@
/**
 * JSON解析处理
 *
 * @author å¼ å®¾
 */
@Component
public class JackSonUtil {
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
@@ -1,12 +1,12 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
import com.yuanchu.limslaboratory.service.RoleManagerService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -28,6 +28,21 @@
      return Result.success(roleManagerService.getMenusTree());
    };
    @ApiOperation("新增角色")
    @PostMapping("/addRoleInfo")
    public Result<?>addRoleInfo(@RequestBody RoleInfoDto dto){
        return Result.success(roleManagerService.addRoleInfo(dto));
    }
    @ApiOperation("查询角色名重复")
    @GetMapping("/assertRepeat")
    public Result<?> assertRepeat(String roleName){
        return Result.success(roleManagerService.assertRepeat(roleName));
    }
    @ApiOperation("获取角色信息")
    @GetMapping("/getAllRoleAndMenuInfo")
    public Result<?> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto){
        return Result.success(roleManagerService.getAllRoleAndMenuInfo(dto));
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.yuanchu.limslaboratory.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.limslaboratory.pojo.LimitPage;
import com.yuanchu.limslaboratory.pojo.Role;
import com.yuanchu.limslaboratory.pojo.RoleInfo;
import com.yuanchu.limslaboratory.pojo.RoleMenu;
import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/24
 */
@Repository
public interface RoleManageMapper extends BaseMapper<RoleInfo> {
    int insertBatchRoleMenu(@Param("roleMenuAddList") List<RoleMenu> roleMenuList);
    int insertRole(RoleInfo roleInfo);
    List<RoleInfo>getAssertName(@Param("roleName") String roleName);
    List<RoleAndMenuDto>selectAllRoleAndMenu(@Param("dto") GetAllRoleAndMenuByConditionPageDto dto);
    List<Role>getRoleByName(@Param("roleName") String roleName);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java
@@ -16,18 +16,18 @@
    /**
     * id
     */
    private Integer value;
    private Long id;
    /**
     * èœå•名
     */
    private String label;
    private String name;
    /**
     * çˆ¶çº§id
     */
    private Integer parentId;
    private Long parentId;
    /**
     * å­çº§èœå•信息
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
ÎļþÒÑɾ³ý
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/23
 */
@Data
@TableName("role")
@Getter
@Setter
public class RoleInfo implements Serializable {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String name;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime updateTime;
    private Integer state;
    public RoleInfo(String name, LocalDateTime createTime, LocalDateTime updateTime) {
        this.name = name;
        this.createTime = createTime;
        this.updateTime = updateTime;
    }
    public RoleInfo() {
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/24
 */
@Data
@TableName("role_menu")
public class RoleMenu implements Serializable {
    @TableId(type = IdType.AUTO)
    private Long id;
    private Long roleId;
    private String menuName;
    private Long menuId;
    private Boolean selected;
    private Boolean added;
    private Long parentId;
    private Boolean updated;
    private Boolean deleted;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime updateTime;
    private List<RoleMenu> children;
    public RoleMenu() {
    }
    public RoleMenu(Long id, Long roleId, Long menuId, Boolean selected, Boolean added, Boolean updated, Boolean deleted, LocalDateTime createTime) {
        this.id = id;
        this.roleId = roleId;
        this.menuId = menuId;
        this.selected = selected;
        this.added = added;
        this.updated = updated;
        this.deleted = deleted;
        this.createTime = createTime;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/24
 */
@Data
@ApiModel(value = "GetAllRoleAndMenuByConditionPageDto对象", description = "")
public class GetAllRoleAndMenuByConditionPageDto implements Serializable {
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "每页多少条", required = true)
    private Long pageSize;
    @ApiModelProperty(value = "角色名")
    private String name;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.yuanchu.limslaboratory.pojo.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yuanchu.limslaboratory.pojo.RoleMenu;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/24
 */
@Data
public class RoleAndMenuDto implements Serializable {
    private Long  roleId;
    private String roleName;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
    private LocalDateTime updateTime;
    private List<RoleMenu> roleMenuList;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/24
 */
@Data
public class RoleInfoDto implements Serializable {
    @ApiModelProperty(value = "角色名", required = true)
    private String roleName;
    @ApiModelProperty(value = "选中菜单信息")
    private List<Map<String, Object>>menuData;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java
@@ -1,6 +1,11 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.vo.Result;
import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
import java.util.List;
import java.util.Map;
/**
 * @Author å¼ å®¾
@@ -8,4 +13,10 @@
 */
public interface RoleManagerService {
    Object getMenusTree();
    boolean addRoleInfo(RoleInfoDto dto);
    boolean assertRepeat(String roleName);
    Map<String, Object> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
@@ -1,12 +1,25 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mapper.MenuMapper;
import com.yuanchu.limslaboratory.mapper.RoleManageMapper;
import com.yuanchu.limslaboratory.pojo.LimitPage;
import com.yuanchu.limslaboratory.pojo.Menu;
import com.yuanchu.limslaboratory.pojo.RoleInfo;
import com.yuanchu.limslaboratory.pojo.RoleMenu;
import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
import com.yuanchu.limslaboratory.service.RoleManagerService;
import com.yuanchu.limslaboratory.utils.JsonUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -20,6 +33,9 @@
    @Resource
    private MenuMapper menuMapper;
    @Resource
    private RoleManageMapper roleManageMapper;
    @Override
    public Object getMenusTree() {
        List<Menu> menus = menuMapper.getMenuList();
@@ -29,10 +45,69 @@
                .collect(Collectors.toList());
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean addRoleInfo(RoleInfoDto dto) {
        //新增角色
        //System.out.println(dto);
        LocalDateTime createTime = DateUtil.toLocalDateTime(DateUtil.date());
        RoleInfo role=new RoleInfo();
        long nextId = IdUtil.getSnowflake().nextId();
        role.setId(nextId);
        role.setName(dto.getRoleName());
        role.setCreateTime(createTime);
        int insert = roleManageMapper.insertRole(role);
        List<Map<String, Object>>addBranch=new ArrayList<>();
        reverseTree(dto.getMenuData(),addBranch);
        List<RoleMenu> roleMenuList =new ArrayList<>();
        addBranch.forEach(item->{
            roleMenuList.add(new RoleMenu(null,nextId,
                    Long.valueOf(String.valueOf(item.get("id")))
                    ,Boolean.valueOf(String.valueOf(item.get("selected")))
                    ,Boolean.valueOf(String.valueOf(item.get("added")))
                    ,Boolean.valueOf(String.valueOf(item.get("deleted")))
                    ,Boolean.valueOf(String.valueOf(item.get("updated")))
                    ,createTime
            ));
        });
        //roleMenuAddList.forEach(System.out::println);
        int i = roleManageMapper.insertBatchRoleMenu(roleMenuList);
        return insert>0&&i>0;
    }
    @Override
    public boolean assertRepeat(String roleName) {
        List<RoleInfo> assertName = roleManageMapper.getAssertName(roleName);
        return assertName.size()<1;
    }
    @Override
    public Map<String, Object> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto) {
        dto.setCurrentPage((dto.getCurrentPage()-1)*dto.getCurrentPage());
        List<RoleAndMenuDto> roleAndMenuDtos = roleManageMapper.selectAllRoleAndMenu(dto);
        roleAndMenuDtos.forEach(r->{
            List<RoleMenu>roleMenuList=r.getRoleMenuList();
            System.out.println(roleMenuList);
            List<RoleMenu> collect = roleMenuList.stream()
                    .filter(t -> t.getParentId() == 0)
                    .peek((menu) -> menu.setChildren(this.getRoleMenuChildren(menu, roleMenuList)))
                    .collect(Collectors.toList());
            r.setRoleMenuList(collect);
        });
        roleAndMenuDtos.forEach(r->{
            r.getRoleMenuList().forEach(System.out::println);
        });
        Map<String, Object>result=new HashMap<>(3);
        result.put("list",roleAndMenuDtos);
        int size = roleManageMapper.getRoleByName(dto.getName()).size();
        result.put("total",size);
        return result;
    }
    private List<Menu> getEnumChildren(Menu root, List<Menu> all) {
        return all.stream()
                .filter(t -> Objects.equals(t.getParentId(), root.getValue()))
                .filter(t -> Objects.equals(t.getParentId(), root.getId()))
                .peek(g -> {
                    //找子菜单
                    g.setChildren(getEnumChildren(g, all));
@@ -40,4 +115,23 @@
                .collect(Collectors.toList());
    }
    private List<RoleMenu> getRoleMenuChildren(RoleMenu root, List<RoleMenu> all) {
        return all.stream()
                .filter(t -> Objects.equals(t.getParentId(), root.getMenuId()))
                .peek(g -> {
                    //找子菜单
                    g.setChildren(getRoleMenuChildren(g, all));
                })
                .collect(Collectors.toList());
    }
    private void reverseTree(List<Map<String, Object>>tree, List<Map<String, Object>>addBranch){
        tree.forEach(t->{
            addBranch.add(t);
            if(t.get("children")!=null){
                List<Map<String, Object>> children = JsonUtil.jsonToPojo( JsonUtil.jsonToString(t.get("children")), List.class);
                addBranch.addAll(children);
            }
        });
    }
}
laboratory-server/src/main/resources/mapper/MenuMapper.xml
@@ -3,7 +3,7 @@
<mapper namespace="com.yuanchu.limslaboratory.mapper.MenuMapper">
    <select id="getMenuList" resultType="com.yuanchu.limslaboratory.pojo.Menu">
        select id value,name label,parent_id parentId
        select id,name,parent_id parentId
        from menu
        where state =1
    </select>
laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.limslaboratory.mapper.RoleManageMapper">
    <insert id="insertBatchRoleMenu" useGeneratedKeys="true" keyProperty="id">
        insert
        role_menu (id,`role_id`,`menu_id`,`selected`,`added`,`updated`,`deleted`,`create_time`)
        values
        <foreach collection="roleMenuAddList" separator="," item="r">
            (#{r.id},#{r.roleId},#{r.menuId},#{r.selected},#{r.added},#{r.updated},#{r.deleted},#{r.createTime})
        </foreach>
    </insert>
    <insert id="insertRole">
        insert
        role(id,name,create_time) value (
        #{id},
        #{name},
        #{createTime}
        )
    </insert>
    <select id="getAssertName" resultType="com.yuanchu.limslaboratory.pojo.RoleInfo">
        select id
        from role
        where name = #{roleName}
    </select>
    <select id="selectAllRoleAndMenu" resultMap="roleAndMenu">
        SELECT r.id roleId,
        r.`name` roleName,
        menu_id menuId,
        parent_id parentId,
        m.`name` menuName,
        rm.selected,
        rm.added,
        rm.updated,
        rm.deleted,
        r.create_time createTime,
        r.update_time updateTime
        FROM role_menu rm,
        (select id, name, createTime, updateTime
        from role
        where 1=1
        <if test="dto.name!=null and dto.name!=''">
            and name=#{dto.name}
        </if>
        limit #{dto.currentPage}, #{dto.pageSize}) r,
        menu m
        WHERE rm.role_id = r.id
        AND rm.menu_id = m.id
        AND r.state = 1
        AND rm.state = 1
        AND m.state = 1
    </select>
    <select id="getRoleByName" resultType="com.yuanchu.limslaboratory.pojo.Role">
        select id
        from role
        where 1=1
        <if test="dto.name!=null and dto.name!=''">
            and name=#{dto.name}
        </if>
    </select>
    <resultMap id="roleAndMenu" type="com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto">
        <result property="roleId" column="roleId"/>
        <result property="roleName" column="roleName"/>
        <result property="createTime" column="createTime"/>
        <result property="updateTime" column="updateTime"/>
        <collection property="roleMenuList" ofType="roleMenu">
            <result property="menuId" column="menuId"/>
            <result property="added" column="added"/>
            <result property="deleted" column="deleted"/>
            <result property="updated" column="updated"/>
            <result property="selected" column="selected"/>
            <result property="menuName" column="menuName"/>
            <result property="parentId" column="parentId"/>
        </collection>
    </resultMap>
</mapper>