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>