ruoyi-admin/src/main/java/com/ruoyi/sange/controller/DepartmentController.java
New file @@ -0,0 +1,107 @@ package com.ruoyi.sange.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.sange.domain.Department; import com.ruoyi.sange.domain.SystemUser; import com.ruoyi.sange.service.IDepartmentService; import com.ruoyi.sange.service.ISystemUserService; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * @author zhibing.pu * @Date 2025/2/19 17:44 */ @RestController @RequestMapping("/api/department") public class DepartmentController { @Resource private IDepartmentService departmentService; @Resource private ISystemUserService systemUserService; @GetMapping("/list") @ApiOperation(value = "获取单位列表", tags = {"管理后台-用户管理"}) public R<List<Department>> list(){ List<Department> list = departmentService.list(); List<Department> departmentList1 = list.stream().filter(s -> s.getPid() == 0).collect(Collectors.toList()); for (Department department : departmentList1) { List<Department> departmentList2 = list.stream().filter(s -> s.getPid().equals(department.getId())).collect(Collectors.toList()); for (Department department1 : departmentList2) { List<Department> departmentList3 = list.stream().filter(s -> s.getPid().equals(department1.getId())).collect(Collectors.toList()); for (Department department2 : departmentList3) { List<Department> departmentList4 = list.stream().filter(s -> s.getPid().equals(department2.getId())).collect(Collectors.toList()); department2.setChild(departmentList4); } department1.setChild(departmentList3); } department.setChild(departmentList2); } return R.ok(departmentList1); } @PostMapping("/add") @ApiOperation(value = "添加单位信息", tags = {"管理后台-用户管理"}) public R add(@RequestBody Department department){ if(null == department.getPid()){ department.setPid(0); } int count = departmentService.count(new LambdaQueryWrapper<Department>().eq(Department::getPid, department.getPid()).eq(Department::getName, department.getName())); if(0 < count){ return R.fail("单位名称重复。"); } Department department1 = departmentService.getById(department.getPid()); if(null != department1 && 4 == department1.getTier()){ return R.fail("层级超过4级,保存失败。"); } department.setTier(null == department1 ? 1 : department1.getTier() + 1); departmentService.save(department); return R.ok(); } @PutMapping("/edit") @ApiOperation(value = "编辑单位信息", tags = {"管理后台-用户管理"}) public R edit(@RequestBody Department department){ if(null == department.getPid()){ department.setPid(0); } int count = departmentService.count(new LambdaQueryWrapper<Department>().eq(Department::getPid, department.getPid()) .eq(Department::getName, department.getName()).ne(Department::getId, department.getId())); if(0 < count){ return R.fail("单位名称重复。"); } Department department1 = departmentService.getById(department.getPid()); if(null != department1 && 4 == department1.getTier()){ return R.fail("层级超过4级,保存失败。"); } department.setTier(null == department1 ? 1 : department1.getTier() + 1); departmentService.updateById(department); return R.ok(); } @DeleteMapping("/delete/{id}") @ApiOperation(value = "删除单位信息", tags = {"管理后台-用户管理"}) public R delete(@PathVariable("id") Integer id){ int count = systemUserService.count(new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getOneDepartmentId, id).or().eq(SystemUser::getTwoDepartmentId, id) .or().eq(SystemUser::getThreeDepartmentId, id).or().eq(SystemUser::getFourDepartmentId, id).ne(SystemUser::getStatus, 3)); if(0 < count){ return R.fail("该单位已被使用,删除失败。"); } departmentService.removeById(id); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/sange/controller/SystemRoleController.java
New file @@ -0,0 +1,129 @@ package com.ruoyi.sange.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.sange.domain.SystemRole; import com.ruoyi.sange.domain.SystemRoleMenu; import com.ruoyi.sange.service.ISystemRoleMenuService; import com.ruoyi.sange.service.ISystemRoleService; import com.ruoyi.sange.warpper.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; /** * @author zhibing.pu * @Date 2025/2/19 16:41 */ @Api @RestController @RequestMapping("/api/systemRole") public class SystemRoleController extends BaseController { @Resource private ISystemRoleService systemRoleService; @Resource private ISystemRoleMenuService systemRoleMenuService; @GetMapping("/list") @ApiOperation(value = "获取列表数据", tags = {"管理后台-角色管理"}) public TableDataInfo<SystemRoleListVo> list(SystemRoleList systemRoleList){ startPage(); List<SystemRoleListVo> list = systemRoleService.list(systemRoleList.getName()); return getDataTable(list); } @PostMapping("/add") @ApiOperation(value = "添加角色", tags = {"管理后台-角色管理"}) public R add(@RequestBody AddSystemRole addSystemRole){ int count = systemRoleService.count(new LambdaQueryWrapper<SystemRole>().eq(SystemRole::getDel, 0).eq(SystemRole::getName, addSystemRole.getName())); if(0 < count){ return R.fail("该角色名称已存在"); } SystemRole systemRole = new SystemRole(); systemRole.setName(addSystemRole.getName()); systemRole.setDel(0); systemRole.setCreateTime(LocalDateTime.now()); systemRoleService.save(systemRole); //添加角色菜单权限 List<Integer> systemMenuIds = addSystemRole.getSystemMenuIds(); for (Integer systemMenuId : systemMenuIds) { SystemRoleMenu systemRoleMenu = new SystemRoleMenu(); systemRoleMenu.setSystemRoleId(systemRole.getId()); systemRoleMenu.setSystemMenuId(systemMenuId); systemRoleMenuService.save(systemRoleMenu); } return R.ok(); } @PutMapping("/edit") @ApiOperation(value = "编辑角色", tags = {"管理后台-角色管理"}) public R edit(@RequestBody EditSystemRole editSystemRole){ int count = systemRoleService.count(new LambdaQueryWrapper<SystemRole>().eq(SystemRole::getDel, 0) .eq(SystemRole::getName, editSystemRole.getName()).ne(SystemRole::getId, editSystemRole.getId())); if(0 < count){ return R.fail("该角色名称已存在"); } SystemRole systemRole = systemRoleService.getById(editSystemRole.getId()); if(null == systemRole){ return R.fail("无效的角色数据"); } systemRole.setName(editSystemRole.getName()); systemRoleService.updateById(systemRole); //添加角色菜单权限 systemRoleMenuService.remove(new LambdaQueryWrapper<SystemRoleMenu>().eq(SystemRoleMenu::getSystemRoleId, editSystemRole.getId())); List<Integer> systemMenuIds = editSystemRole.getSystemMenuIds(); for (Integer systemMenuId : systemMenuIds) { SystemRoleMenu systemRoleMenu = new SystemRoleMenu(); systemRoleMenu.setSystemRoleId(systemRole.getId()); systemRoleMenu.setSystemMenuId(systemMenuId); systemRoleMenuService.save(systemRoleMenu); } return R.ok(); } @DeleteMapping("/delete/{id}") @ApiOperation(value = "删除角色", tags = {"管理后台-角色管理"}) public R delete(@PathVariable("id") Integer id){ SystemRole systemRole = systemRoleService.getById(id); systemRole.setDel(1); systemRoleService.updateById(systemRole); //删除角色菜单权限 systemRoleMenuService.remove(new LambdaQueryWrapper<SystemRoleMenu>().eq(SystemRoleMenu::getSystemRoleId, id)); return R.ok(); } @GetMapping("/getSystemRoleInfo/{id}") @ApiOperation(value = "获取角色详情", tags = {"管理后台-角色管理"}) public R<SystemRoleInfo> getSystemRoleInfo(@PathVariable("id") Integer id){ SystemRole systemRole = systemRoleService.getById(id); if(null == systemRole){ return R.fail("无效的角色数据"); } List<SystemRoleMenu> list = systemRoleMenuService.list(new LambdaQueryWrapper<SystemRoleMenu>().eq(SystemRoleMenu::getSystemRoleId, id)); SystemRoleInfo systemRoleInfo = new SystemRoleInfo(); systemRoleInfo.setId(systemRole.getId()); systemRoleInfo.setName(systemRoleInfo.getName()); systemRoleInfo.setSystemMenuIds(list.stream().map(SystemRoleMenu::getSystemMenuId).collect(Collectors.toList())); return R.ok(systemRoleInfo); } } ruoyi-admin/src/main/java/com/ruoyi/sange/domain/Department.java
New file @@ -0,0 +1,50 @@ package com.ruoyi.sange.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 17:40 */ @Data @ApiModel @TableName("t_department") public class Department { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty("数据ID") private Integer id; /** * 上级id */ @TableField("pid") @ApiModelProperty("上级id") private Integer pid; /** * 单位名称 */ @TableField("name") @ApiModelProperty("单位名称") private String name; /** * 层级,最多4层 */ @TableField("tier") @ApiModelProperty("层级,最多4层") private Integer tier; @TableField(exist = false) @ApiModelProperty("下级单位") private List<Department> child; } ruoyi-admin/src/main/java/com/ruoyi/sange/domain/SystemRole.java
New file @@ -0,0 +1,38 @@ package com.ruoyi.sange.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.time.LocalDateTime; /** * @author zhibing.pu * @Date 2025/2/19 16:35 */ @Data @TableName("t_system_role") public class SystemRole { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 角色名称 */ @TableField("name") private String name; /** * 删除标识(0=否,1=是) */ @TableField("del") private Integer del; /** * 添加时间 */ @TableField("create_time") private LocalDateTime createTime; } ruoyi-admin/src/main/java/com/ruoyi/sange/domain/SystemRoleMenu.java
New file @@ -0,0 +1,24 @@ package com.ruoyi.sange.domain; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** * @author zhibing.pu * @Date 2025/2/19 17:21 */ @Data @TableName("t_system_role_menu") public class SystemRoleMenu { /** * 角色id */ @TableField("system_role_id") private Integer systemRoleId; /** * 菜单id */ @TableField("system_menu_id") private Integer systemMenuId; } ruoyi-admin/src/main/java/com/ruoyi/sange/mapper/DepartmentMapper.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.sange.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sange.domain.Department; /** * @author zhibing.pu * @Date 2025/2/19 17:42 */ public interface DepartmentMapper extends BaseMapper<Department> { } ruoyi-admin/src/main/java/com/ruoyi/sange/mapper/SystemRoleMapper.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.sange.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sange.domain.SystemRole; import com.ruoyi.sange.warpper.SystemRoleListVo; import org.apache.ibatis.annotations.Param; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 16:40 */ public interface SystemRoleMapper extends BaseMapper<SystemRole> { /** * 获取列表数据 * @param name * @return */ List<SystemRoleListVo> list(@Param("name") String name); } ruoyi-admin/src/main/java/com/ruoyi/sange/mapper/SystemRoleMenuMapper.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.sange.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.sange.domain.SystemRoleMenu; /** * @author zhibing.pu * @Date 2025/2/19 17:24 */ public interface SystemRoleMenuMapper extends BaseMapper<SystemRoleMenu> { } ruoyi-admin/src/main/java/com/ruoyi/sange/service/IDepartmentService.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.sange.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sange.domain.Department; /** * @author zhibing.pu * @Date 2025/2/19 17:43 */ public interface IDepartmentService extends IService<Department> { } ruoyi-admin/src/main/java/com/ruoyi/sange/service/ISystemRoleMenuService.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.sange.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sange.domain.SystemRoleMenu; /** * @author zhibing.pu * @Date 2025/2/19 17:25 */ public interface ISystemRoleMenuService extends IService<SystemRoleMenu> { } ruoyi-admin/src/main/java/com/ruoyi/sange/service/ISystemRoleService.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.sange.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.sange.domain.SystemRole; import com.ruoyi.sange.warpper.SystemRoleListVo; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 16:40 */ public interface ISystemRoleService extends IService<SystemRole> { /** * 获取列表数据 * @param name * @return */ List<SystemRoleListVo> list(String name); } ruoyi-admin/src/main/java/com/ruoyi/sange/service/impl/DepartmentServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.sange.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.sange.domain.Department; import com.ruoyi.sange.mapper.DepartmentMapper; import com.ruoyi.sange.service.IDepartmentService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2025/2/19 17:43 */ @Service public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService { } ruoyi-admin/src/main/java/com/ruoyi/sange/service/impl/SystemRoleMenuServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.sange.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.sange.domain.SystemRoleMenu; import com.ruoyi.sange.mapper.SystemRoleMenuMapper; import com.ruoyi.sange.service.ISystemRoleMenuService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2025/2/19 17:26 */ @Service public class SystemRoleMenuServiceImpl extends ServiceImpl<SystemRoleMenuMapper, SystemRoleMenu> implements ISystemRoleMenuService { } ruoyi-admin/src/main/java/com/ruoyi/sange/service/impl/SystemRoleServiceImpl.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.sange.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.sange.domain.SystemRole; import com.ruoyi.sange.mapper.SystemRoleMapper; import com.ruoyi.sange.service.ISystemRoleService; import com.ruoyi.sange.warpper.SystemRoleListVo; import org.springframework.stereotype.Service; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 16:41 */ @Service public class SystemRoleServiceImpl extends ServiceImpl<SystemRoleMapper, SystemRole> implements ISystemRoleService { /** * 获取列表数据 * @param name * @return */ @Override public List<SystemRoleListVo> list(String name) { return this.baseMapper.list(name); } } ruoyi-admin/src/main/java/com/ruoyi/sange/warpper/AddSystemRole.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.sange.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 17:11 */ @Data @ApiModel public class AddSystemRole { @ApiModelProperty(value = "角色名称", required = true) private String name; @ApiModelProperty(value = "权限id集合", required = true) private List<Integer> systemMenuIds; } ruoyi-admin/src/main/java/com/ruoyi/sange/warpper/EditSystemRole.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.sange.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 17:11 */ @Data @ApiModel public class EditSystemRole { @ApiModelProperty(value = "角色ID", required = true) private Integer id; @ApiModelProperty(value = "角色名称", required = true) private String name; @ApiModelProperty(value = "权限id集合", required = true) private List<Integer> systemMenuIds; } ruoyi-admin/src/main/java/com/ruoyi/sange/warpper/SystemRoleInfo.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.sange.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2025/2/19 17:36 */ @Data @ApiModel public class SystemRoleInfo { @ApiModelProperty("角色ID") private Integer id; @ApiModelProperty("角色名称") private String name; @ApiModelProperty("菜单id集合") private List<Integer> systemMenuIds; } ruoyi-admin/src/main/java/com/ruoyi/sange/warpper/SystemRoleList.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.sange.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2025/2/19 16:58 */ @Data @ApiModel public class SystemRoleList { @ApiModelProperty(value = "角色名称") private String name; @ApiModelProperty(value = "页码", required = true) private Integer pageNum; @ApiModelProperty(value = "每页数量", required = true) private Integer pageSize; } ruoyi-admin/src/main/java/com/ruoyi/sange/warpper/SystemRoleListVo.java
New file @@ -0,0 +1,18 @@ package com.ruoyi.sange.warpper; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author zhibing.pu * @Date 2025/2/19 16:50 */ @Data @ApiModel public class SystemRoleListVo { @ApiModelProperty("数据ID") private Integer id; @ApiModelProperty("角色名称") private String name; } ruoyi-admin/src/main/resources/mapper/sange/DepartmentMapper.xml
New file @@ -0,0 +1,7 @@ <?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.ruoyi.sange.mapper.DepartmentMapper"> </mapper> ruoyi-admin/src/main/resources/mapper/sange/SystemRoleMapper.xml
New file @@ -0,0 +1,15 @@ <?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.ruoyi.sange.mapper.SystemRoleMapper"> <select id="list" resultType="com.ruoyi.sange.warpper.SystemRoleListVo"> select id, name from t_system_role where del = 0 <if test="null != name and '' != name"> and name like CONCAT('%', #{name}, '%') </if> order by create_time desc </select> </mapper> ruoyi-admin/src/main/resources/mapper/sange/SystemRoleMenuMapper.xml
New file @@ -0,0 +1,7 @@ <?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.ruoyi.sange.mapper.SystemRoleMenuMapper"> </mapper> ruoyi-admin/src/main/resources/mapper/sange/SystemUserMapper.xml
New file @@ -0,0 +1,7 @@ <?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.ruoyi.sange.mapper.SystemUserMapper"> </mapper> ruoyi-common/pom.xml
@@ -94,7 +94,11 @@ <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> </dependency> </dependencies> </project> ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
@@ -1,5 +1,7 @@ package com.ruoyi.common.core.page; import io.swagger.annotations.ApiModel; import java.io.Serializable; import java.util.List; @@ -8,7 +10,8 @@ * * @author ruoyi */ public class TableDataInfo implements Serializable @ApiModel public class TableDataInfo<T> implements Serializable { private static final long serialVersionUID = 1L; @@ -16,7 +19,7 @@ private long total; /** 列表数据 */ private List<?> rows; private List<T> rows; /** 消息状态码 */ private int code; @@ -37,7 +40,7 @@ * @param list 列表数据 * @param total 总记录数 */ public TableDataInfo(List<?> list, int total) public TableDataInfo(List<T> list, int total) { this.rows = list; this.total = total; @@ -58,7 +61,7 @@ return rows; } public void setRows(List<?> rows) public void setRows(List<T> rows) { this.rows = rows; }