From 974c306ba37c6a9373db72523ac42b3a0d1f0a27 Mon Sep 17 00:00:00 2001 From: lilin Date: Mon, 19 May 2025 17:08:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E4=BB=A5?= =?UTF-8?q?=E5=90=8E=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/MenuController.java | 113 ++++++++++-------- .../controller/OrganizationController.java | 75 +++++++----- .../system/controller/RoleController.java | 105 +++++++++++----- .../system/controller/UserController.java | 2 - .../application/system/mapper/RoleMapper.java | 42 ++++++- .../application/system/mapper/UserMapper.java | 47 ++++++-- .../system/mapper/xml/RoleMapper.xml | 5 + .../system/mapper/xml/UserMapper.xml | 5 + .../system/service/IMenuService.java | 13 +- .../system/service/IOrganizationService.java | 9 +- .../system/service/IRoleService.java | 25 +++- .../system/service/impl/MenuServiceImpl.java | 110 ++++++++--------- .../service/impl/OrganizationServiceImpl.java | 15 ++- .../system/service/impl/RoleServiceImpl.java | 101 ++++++++++++++-- .../system/service/impl/UserServiceImpl.java | 53 +++----- .../src/main/resources/mybatis/RoleMapper.xml | 39 ------ .../src/main/resources/mybatis/UserMapper.xml | 84 ------------- 17 files changed, 469 insertions(+), 374 deletions(-) create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/RoleMapper.xml create mode 100644 core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/UserMapper.xml delete mode 100644 core/core-backend/src/main/resources/mybatis/RoleMapper.xml delete mode 100644 core/core-backend/src/main/resources/mybatis/UserMapper.xml diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java index c9c2479..5d2a346 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/MenuController.java @@ -6,6 +6,7 @@ import io.gisbi.application.system.domain.Menu; import io.gisbi.application.system.service.IMenuService; import io.gisbi.config.ResponseResult; import io.gisbi.utils.AuthUtils; +import io.micrometer.common.util.StringUtils; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -29,54 +30,10 @@ public class MenuController { @Resource private IMenuService menuService; - - /*********************************** - * 用途说明:获取菜单结构树(含按钮) - * 参数说明 - * appId 应用ID 关联应用系统 - * name 名称 - * isdisplay 是否显示 - * 返回值说明: 菜单结构树集合 - ***********************************/ - @PostMapping("/getMenuButtonTree") - @ResponseBody - public List> getMenuButtonTree(String appId,String name,String isdisplay) { - return menuService.getMenuButtonTree(appId, name, isdisplay); - } - - /*********************************** - * 用途说明:获取菜单结构树(不含按钮) - * 参数说明 - * appId 应用ID 关联应用系统 - * name 名称 - * isdisplay 是否显示 - * 返回值说明: 菜单结构树集合 - ***********************************/ - @PostMapping("/getMenuTreegetMenuTree") - @ResponseBody - public List> getMenuTree(String appId, - String name, - String isdisplay) { - return menuService.getMenuTree(appId, name, isdisplay); - } - - /*********************************** - * 用途说明:根据id查询菜单或按钮详情 - * 参数说明 - * id 菜单或按钮表id - * 返回值说明: 菜单或按钮表对象 - ***********************************/ - @PostMapping("/getMenuById") - @ResponseBody - public ResponseResult getMenuById(String id) { - Menu menu = menuService.getById(id); - return ResponseResult.successData(menu); - } - /*********************************** * 用途说明:新增菜单及按钮 * 参数说明 - * sysMenu 菜单或按钮表对象 + * sysMenu 菜单表对象 * 返回值说明: 是否添加成功提示 ***********************************/ @PostMapping("/addMenu") @@ -99,6 +56,9 @@ public class MenuController { @PostMapping("/updateMenuById") @ResponseBody public ResponseResult updateById(@RequestBody Menu menu) { + if (StringUtils.isEmpty(menu.getId())) { + return ResponseResult.error("没有菜单ID"); + } //填写 当前用户名称 menu.setLastmodifier(AuthUtils.getUser().getUserId().toString()); //填写 当前日期 @@ -111,6 +71,37 @@ public class MenuController { } } + + /*********************************** + * 用途说明:获取菜单结构树(含按钮) + * 参数说明 + * appId 应用ID 关联应用系统 + * name 名称 + * isdisplay 是否显示 + * 返回值说明: 菜单结构树集合 + ***********************************/ + @PostMapping("/getMenuTree") + @ResponseBody + public List> getMenuTree(String appId, String name, String isdisplay) { + return menuService.getMenuTree(appId, name, isdisplay); + } + + + /*********************************** + * 用途说明:根据id查询菜单 + * 参数说明 + * id 菜单或按钮表id + * 返回值说明: 菜单表对象 + ***********************************/ + @PostMapping("/getMenuById") + @ResponseBody + public ResponseResult getMenuById(String id) { + Menu menu = menuService.getById(id); + return ResponseResult.successData(menu); + } + + + /*********************************** * 用途说明:根据id删除菜单或按钮 * 参数说明 @@ -119,8 +110,8 @@ public class MenuController { ***********************************/ @PostMapping("/deleteMenuById") @ResponseBody - public ResponseResult deleteById(@RequestParam String id) { - boolean ok = menuService.deleteById(id); + public ResponseResult deleteMenuById(@RequestParam String id) { + boolean ok = menuService.deleteMenuById(id); if (ok) { return ResponseResult.success(); } else { @@ -142,8 +133,32 @@ public class MenuController { //根据id 修改是否显示 ,最近修改人,最近修改时间 updateWrapper.eq("id", id) .set("isdisplay", isdisplay) - .set( "lastmodifier", AuthUtils.getUser().getUserId().toString()) - .set("lastmodifydate",new Timestamp(System.currentTimeMillis())); + .set("lastmodifier", AuthUtils.getUser().getUserId().toString()) + .set("lastmodifydate", new Timestamp(System.currentTimeMillis())); + boolean ok = menuService.update(updateWrapper); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + + /*********************************** + * 用途说明:更新关联模块ID + * 参数说明 + * id 菜单及按钮表id + * moduleId 关联模块ID + * 返回值说明: 是否更新成功 + ***********************************/ + @PostMapping("/setModuleId") + @ResponseBody + public ResponseResult setModuleId(String id, String moduleId) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + //根据id 修改关联模块ID ,最近修改人,最近修改时间 + updateWrapper.eq("id", id) + .set("module_id", moduleId) + .set("lastmodifier", AuthUtils.getUser().getUserId().toString()) + .set("lastmodifydate", new Timestamp(System.currentTimeMillis())); boolean ok = menuService.update(updateWrapper); if (ok) { return ResponseResult.success(); diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java index 769e239..d588c71 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/OrganizationController.java @@ -1,8 +1,8 @@ package io.gisbi.application.system.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.github.xiaoymin.knife4j.core.util.StrUtil; import io.gisbi.application.system.domain.Organization; import io.gisbi.application.system.service.IOrganizationService; import io.gisbi.utils.AuthUtils; @@ -31,37 +31,6 @@ public class OrganizationController { private IOrganizationService organizationService; - /*********************************** - * 用途说明:获取企业列表 - * 参数说明 - * id 企业id - * orgName 部门名称 - * 返回值说明: 企业列表集合 - ***********************************/ - @PostMapping("/getOrganizations") - @ResponseBody - public List> getOrganizations(String appId, String orgtype, String parentid, String orgName) { - return organizationService.getOrganizations(appId,orgtype, parentid, orgName); - } - - /*********************************** - * 用途说明:根据企业ID查询部门信息 - * 参数说明 - * id 企业id - * orgName 部门名称 - * 返回值说明: 系统部门框架对象 - ***********************************/ - @PostMapping("/getOrganizationById") - @ResponseBody - public ResponseResult getOrganizationById(String id, String orgName) { - if (StrUtil.isBlank(id)) { - return ResponseResult.error("查询失败!"); - } - Organization Organization = organizationService.getOrganizationById(id); - return ResponseResult.successData(Organization); - } - - /*********************************** * 用途说明:新增系统组织框架 * 参数说明 @@ -92,6 +61,10 @@ public class OrganizationController { @PostMapping("/updateOrganizationById") @ResponseBody public ResponseResult updateOrganizationById(@RequestBody Organization organization) { + if (StrUtil.isEmpty(organization.getId())) { + return ResponseResult.error("组织信息id不能为空"); + } + if (organization == null) { return ResponseResult.error("组织信息不能为空"); } @@ -108,6 +81,42 @@ public class OrganizationController { } } + + /*********************************** + * 用途说明:获取企业列表 + * 参数说明 + * id 企业id + * orgName 部门名称 + * orgtype 组织类型:01-公司 02-部门 + * parentid 上级ID + * 返回值说明: 企业列表集合 + ***********************************/ + @PostMapping("/getOrganizations") + @ResponseBody + public List> getOrganizations(String appId, String orgtype, String parentid, String orgName) { + return organizationService.getOrganizations(appId,orgtype, parentid, orgName); + } + + /*********************************** + * 用途说明:根据ID查询信息 + * 参数说明 + * id 企业id + * orgName 部门名称 + * 返回值说明: 系统部门框架对象 + ***********************************/ + @PostMapping("/getOrganizationById") + @ResponseBody + public ResponseResult getOrganizationById(String id) { + if (StrUtil.isBlank(id)) { + return ResponseResult.error("查询失败!"); + } + Organization Organization = organizationService.getOrganizationById(id); + return ResponseResult.successData(Organization); + } + + + + /*********************************** * 用途说明:设置组织是否有效 * 参数说明 @@ -153,10 +162,12 @@ public class OrganizationController { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); List list = organizationService.list(queryWrapper.eq(Organization::getParentid, orgId)); List ids = list.stream().map(Organization::getId).collect(Collectors.toList()); + //删除当前id及其子节点 boolean isOk = organizationService.removeById(orgId); if (!isOk) { continue; } + //删除节点 for (String oid : ids) { organizationService.removeById(oid); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java index 734275f..7dd504a 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/RoleController.java @@ -7,6 +7,7 @@ import io.gisbi.application.system.service.IRoleService; import io.gisbi.application.system.service.IUserService; import io.gisbi.config.ResponseResult; import io.gisbi.utils.AuthUtils; +import io.micrometer.common.util.StringUtils; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; @@ -32,32 +33,6 @@ public class RoleController { @Resource private IUserService userService; - - /*********************************** - * 用途说明:查询所有角色 - * 参数说明 - * rolename 角色名称 - * 返回值说明: 查询都有角色 - ***********************************/ - @PostMapping("/listRole") - @ResponseBody - public List listRole(String appId, String rolename) { - return roleService.listRole(appId,rolename); - } - - /*********************************** - * 用途说明:根据Id获取当个角色 - * 参数说明 - * id 角色表id - * 返回值说明: 根据id查询到角色详情 - ***********************************/ - @PostMapping("/getRoleById") - @ResponseBody - public ResponseResult getRoleById(String id) { - Role role = roleService.getById(id); - return ResponseResult.successData(role); - } - /*********************************** * 用途说明:新增角色 * 参数说明 @@ -100,6 +75,33 @@ public class RoleController { } } + + /*********************************** + * 用途说明:查询所有角色 + * 参数说明 + * rolename 角色名称 + * 返回值说明: 查询都有角色 + ***********************************/ + @PostMapping("/listRole") + @ResponseBody + public List listRole(String appId, String rolename) { + return roleService.listRole(appId,rolename); + } + + /*********************************** + * 用途说明:根据Id获取单个角色 + * 参数说明 + * id 角色表id + * 返回值说明: 根据id查询到角色详情 + ***********************************/ + @PostMapping("/getRoleById") + @ResponseBody + public ResponseResult getRoleById(String id) { + Role role = roleService.getById(id); + return ResponseResult.successData(role); + } + + /*********************************** * 用途说明:根据id删除角色 * 参数说明 @@ -109,10 +111,33 @@ public class RoleController { @PostMapping("/deleteRoleById") @ResponseBody public ResponseResult deleteRoleById(@RequestParam String id) { - roleService.deleteById(id); + boolean result = roleService.deleteById(id); + if (!result) { + return ResponseResult.error("删除角色失败,可能角色不存在"); + } return ResponseResult.success(); } + /*********************************** + * 用途说明:根据ID批量删除角色 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + @PostMapping("/deleteRoleByIds") + @ResponseBody + public ResponseResult deleteRoleByIds(String ids) { + if (StringUtils.isBlank(ids)) { + return ResponseResult.error("参数为空"); + } + boolean ok = roleService.deleteRoleByIds(ids); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + } + /*********************************** * 用途说明:设置角色是否有效 * 参数说明 @@ -137,6 +162,32 @@ public class RoleController { } } + /*********************************** + * 用途说明:角色菜单权限 + * 参数说明 + * id 角色id + * menuIds 权限id字符串 + * 返回值说明: 是否分配成功 + ***********************************/ + @PostMapping("/setMenuByRoleId") + @ResponseBody + public ResponseResult setMenuByRoleId(String id, String menuIds) { + if (StrUtil.isBlank(id)) { + return ResponseResult.error("参数为空"); + } + if (StrUtil.isBlank(menuIds)) { + return ResponseResult.success(); + } + boolean ok = roleService.setMenuByRoleId(id, menuIds); + if (ok) { + return ResponseResult.success(); + } else { + return ResponseResult.error(); + } + + } + + /*********************************** * 用途说明:角色添加用户 * 参数说明 diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java b/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java index 1d88fd7..e7ab54b 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/controller/UserController.java @@ -9,10 +9,8 @@ import io.micrometer.common.util.StringUtils; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.*; -import java.sql.Timestamp; import java.util.Map; -import static org.bouncycastle.asn1.x500.style.RFC4519Style.cn; /** *

diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java index d8a2aa1..43a73df 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/RoleMapper.java @@ -2,7 +2,7 @@ package io.gisbi.application.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import io.gisbi.application.system.domain.Role; -import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.*; import java.util.List; @@ -13,14 +13,16 @@ public interface RoleMapper extends BaseMapper { * 参数说明 id 角色id * 返回值说明: void ***********************************/ - List getRoleByUserId(String id); + @Select("SELECT r.id,r.rolename,r.rolecode FROM app_role_users ru INNER JOIN app_role r ON ru.roleid = r.id WHERE ru.userid = #{id}") + List getRoleByUserId( @Param("id") String id); /********************************** * 用途说明: 根据用户id获取角色id * 参数说明 userid 用户id * 返回值说明: void ***********************************/ - List getRoleUsers(String userid, String appId); + @Select("SELECT roleid FROM app_role_users WHERE userid = #{userid} AND app_id = #{appId}") + List getRoleUsers(@Param("userid") String userid, @Param("appId") String appId); /*********************************** * 用途说明:根据角色id删除角色菜单关联 @@ -28,7 +30,8 @@ public interface RoleMapper extends BaseMapper { *id 角色id * 返回值说明: 是否删除成功 ***********************************/ - void deleteRoleMenus(String roleId); + @Delete("DELETE FROM app_role_menu WHERE roleid= #{id}") + void deleteRoleMenus( @Param("id") String id); /*********************************** * 用途说明:根据角色id删除角色用户关联 @@ -36,7 +39,8 @@ public interface RoleMapper extends BaseMapper { *id 角色id * 返回值说明: 是否删除成功 ***********************************/ - void deleteRoleUser(String roleId); + @Delete(" DELETE FROM app_role_users WHERE roleid= #{id}") + void deleteRoleUser( @Param("id")String id); /*********************************** * 用途说明:根据 角色id和用户id 删除 (admin除外) @@ -45,5 +49,33 @@ public interface RoleMapper extends BaseMapper { * urserid 用户id * 返回值说明: 是否删除成功 ***********************************/ + @Delete("delete from app_role_users where userid !=(select u.id from app_user u where u.account=\"admin\") and roleid=#{roleid} and userid=#{urserid}\n") boolean deleteRoleUsers(String roleid, String urserid); + + @Insert("") + void addRoleMenu(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid, @Param("menuid") String menuid); + + /*********************************** + * 用途说明:根据菜单id删除角色菜单关联 + * 参数说明 + *id 菜单id + * 返回值说明: 是否删除成功 + ***********************************/ + @Delete("DELETE FROM app_role_menu WHERE menuid= #{id}") + void deleteRoleMenusByMenuId(@Param("id") String id); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java index a756838..1f4caa0 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/UserMapper.java @@ -3,8 +3,7 @@ package io.gisbi.application.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.gisbi.application.system.domain.User; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.*; import java.util.List; import java.util.Map; @@ -20,7 +19,8 @@ public interface UserMapper extends BaseMapper { * userid 用户id * 返回值说明: ************************************/ - boolean addUserRoles(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid,@Param("userid") String userid); + @Insert("INSERT INTO app_role_users(id, app_id, roleid, userid) VALUES (#{id}, #{appid}, #{roleid}, #{userid})") + boolean addUserRoles(@Param("id") String id, @Param("appid") String appid, @Param("roleid") String roleid, @Param("userid") String userid); /*********************************** * 用途说明:根据用户表id查询角色表所有角色id @@ -28,16 +28,9 @@ public interface UserMapper extends BaseMapper { * userid 用户id * 返回值说明: ************************************/ + @Select(" SELECT roleid FROM app_role_users WHERE userid = #{userid} ") List getRoleid(@Param("userid") String id); - /*********************************** - * 用途说明:根据用户id删除所分配的不包含角色 - * 参数说明 - * userid 用户id - * roleids 多个角色id - * 返回值说明: - ************************************/ - void delInRoleUsersByUserid(@Param("userid") String userid,@Param("roleids")String[] roleids); /*********************************** * 用途说明:根据用户id删除所分配的角色 @@ -45,6 +38,7 @@ public interface UserMapper extends BaseMapper { * userid 用户id * 返回值说明: ************************************/ + @Delete("delete from app_role_users where userid=#{userid}") boolean delRoleUsersByUserid( @Param("userid") String id); /*********************************** @@ -55,7 +49,30 @@ public interface UserMapper extends BaseMapper { * page 分页条件 * 返回值说明: ************************************/ - Page> queryUsers(String orgid,String appId, String nickname, Page page); + @Select("") + Page> queryUsers( + @Param("orgid") String orgid, + @Param("appId") String appId, + @Param("nickname") String nickname, + Page page + ); /*********************************** @@ -64,6 +81,10 @@ public interface UserMapper extends BaseMapper { * idList 用户id集合 * 返回值说明: ************************************/ + @Delete("") void delRoleUsersByUserIds(List idList); /*********************************** @@ -73,6 +94,6 @@ public interface UserMapper extends BaseMapper { * roleid 角色id * 返回值说明: ************************************/ - + @Select(" select id, app_id, roleid, userid from app_role_users where roleid = #{roleid} and userid = #{userid} ") List getRoleUsersByid(@Param("roleid") String roleid,@Param("userid") String userid); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/RoleMapper.xml b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/RoleMapper.xml new file mode 100644 index 0000000..70a36a4 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/RoleMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/UserMapper.xml b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/UserMapper.xml new file mode 100644 index 0000000..2bacdb1 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/system/mapper/xml/UserMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java index 277e484..e3e6a11 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IMenuService.java @@ -22,18 +22,9 @@ public interface IMenuService extends IService

{ * isdisplay 是否显示 * 返回值说明: 菜单结构树集合 ***********************************/ - List> getMenuButtonTree(String appId, String name, String isdisplay); - - /*********************************** - * 用途说明:获取菜单结构树(不含按钮) - * 参数说明 - * appId 应用ID 关联应用系统 - * name 名称 - * isdisplay 是否显示 - * 返回值说明: 菜单结构树集合 - ***********************************/ List> getMenuTree(String appId, String name, String isdisplay); + /*********************************** * 用途说明:新增菜单及按钮 * 参数说明 @@ -48,5 +39,5 @@ public interface IMenuService extends IService { * id 删除列的id * 返回值说明: 是否删除成功 ***********************************/ - boolean deleteById(String id); + boolean deleteMenuById(String id); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java index 4dc5b0c..90a3fc9 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IOrganizationService.java @@ -18,14 +18,19 @@ public interface IOrganizationService extends IService { /*********************************** * 用途说明:获取企业列表 * 参数说明 + * id 企业id + * orgName 部门名称 + * orgtype 组织类型:01-公司 02-部门 + * parentid 上级ID * 返回值说明: 企业列表集合 ***********************************/ List> getOrganizations(String appId, String orgtype, String parentid, String orgname); /*********************************** - * 用途说明:根据企业ID查询部门信息 + * 用途说明:根据ID查询信息 * 参数说明 - * id 企业id + * id 企业id + * orgName 部门名称 * 返回值说明: 系统部门框架对象 ***********************************/ Organization getOrganizationById(String id); diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java index ce175d7..2f2c87e 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/IRoleService.java @@ -38,7 +38,13 @@ public interface IRoleService extends IService { ***********************************/ List listRole(String appId, String rolename); - void deleteById(String id); + /*********************************** + * 用途说明:根据id删除角色 + * 参数说明 + * id 角色id + * 返回值说明: 是否删除成功 + ***********************************/ + Boolean deleteById(String id); /*********************************** * 用途说明:删除角色用户 @@ -47,4 +53,21 @@ public interface IRoleService extends IService { * 返回值说明: 是否新增成功 ***********************************/ boolean deleteRoleUsers(String roleid, String userids); + + /*********************************** + * 用途说明:根据ID批量删除角色 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + boolean deleteRoleByIds(String ids); + + /*********************************** + * 用途说明:角色菜单权限 + * 参数说明 + * id 角色id + * menuIds 权限id字符串 + * 返回值说明: 是否分配成功 + ***********************************/ + boolean setMenuByRoleId(String id, String menuIds); } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java index dfa1971..36003aa 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/MenuServiceImpl.java @@ -5,15 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.gisbi.application.system.domain.Menu; import io.gisbi.application.system.mapper.MenuMapper; +import io.gisbi.application.system.mapper.RoleMapper; import io.gisbi.application.system.service.IMenuService; import io.gisbi.utils.AuthUtils; import io.micrometer.common.util.StringUtils; import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.io.File; -import java.sql.Timestamp; import java.text.DecimalFormat; import java.time.LocalDateTime; import java.util.ArrayList; @@ -34,12 +33,11 @@ public class MenuServiceImpl extends ServiceImpl implements IM @Resource private MenuMapper menuMapper; - //菜单图片路径 - @Value("${file-space.system}") - private String sysetmPath; + @Resource + private RoleMapper roleMapper; @Override - public List> getMenuButtonTree(String appId, String name, String isdisplay) { + public List> getMenuTree(String appId, String name, String isdisplay) { List> listMap = null; //不带名称查询,返回树结构 if (StringUtils.isEmpty(name)) { @@ -61,28 +59,12 @@ public class MenuServiceImpl extends ServiceImpl implements IM return listMap; } - @Override - public List> getMenuTree(String appId, String name, String isdisplay) { - - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (StringUtils.isNotEmpty(isdisplay)) { - queryWrapper.eq("isdisplay", isdisplay); - } else { - queryWrapper.eq("isdisplay", 1); - } - - //根据系统 ,类型不为2 显示,序号 正序排序 - queryWrapper.eq("parentid", "0").eq("systemcode", appId).ne( - "type", "02").orderByAsc("orderno"); - List> listMap = this.listMaps(queryWrapper); - for (int i = 0; i < listMap.size(); i++) { - List> childList = child(listMap.get(i).get( - "id").toString(), appId, name, isdisplay, "02");//查询下一子集 - listMap.get(i).put("children", childList); //添加新列 子集 - } - return listMap; - } - + /*********************************** + * 用途说明:新增菜单及按钮 + * 参数说明 + * sysMenu 菜单或按钮表对象 + * 返回值说明: 是否添加成功提示 + ***********************************/ @Override public boolean addMenu(Menu menu) { String parentId = menu.getParentid(); @@ -151,38 +133,50 @@ public class MenuServiceImpl extends ServiceImpl implements IM return this.save(menu); } - + /*********************************** + * 用途说明:根据id删除菜单或按钮 + * 参数说明 + * id 删除列的id + * 返回值说明: 是否删除成功 + ***********************************/ @Override - public boolean deleteById(String id) { + @Transactional(rollbackFor = Exception.class) + public boolean deleteMenuById(String id) { //根据id查询 Menu menu = this.getById(id); - //图片路径 - String iconname = sysetmPath + "menu" + File.separator + menu.getIcon(); - //删除图标 - new File(iconname).delete(); - //根据id删除 + + // 根据id删除主菜单 boolean isOk = this.removeById(id); - //删除成功同步更新表数据 - if (isOk) { - //1 创建list集合,用于封装所有删除目录或菜单id值 - List idList = new ArrayList<>(); - this.selectPermissionChildById(id, idList); - if (idList.size() > 0) { - menuMapper.deleteBatchIds(idList); - } - QueryWrapper queryWrapper = new QueryWrapper<>(); - //根据上级id 查询 根据 orderno 正序排序 - queryWrapper.eq("parentid", menu.getParentid()).orderByAsc( - "orderno"); - List list = this.list(queryWrapper); - for (int i = 0; i < list.size(); i++) { - Menu menuData = list.get(i); - //更新序列号 - menuData.setOrderno(i + 1); - } - //更新表数据 - this.updateBatchById(list); + if (!isOk) { + return false; } + // 通过ID 删除角色菜单关联信息 + roleMapper.deleteRoleMenusByMenuId(id); + + //1 创建list集合,用于封装所有删除目录或菜单id值 如果下面有子项 都删除 + List idList = new ArrayList<>(); + this.selectPermissionChildById(id, idList); + + if (!idList.isEmpty()) { + menuMapper.deleteBatchIds(idList); + //通过ID集合 删除角色菜单关联信息 + for (String menuId : idList) { + roleMapper.deleteRoleMenusByMenuId(menuId); + } + } + QueryWrapper queryWrapper = new QueryWrapper<>(); + //根据上级id 查询 根据 orderno 正序排序 + queryWrapper.eq("parentid", menu.getParentid()).orderByAsc( + "orderno"); + List list = this.list(queryWrapper); + for (int i = 0; i < list.size(); i++) { + Menu menuData = list.get(i); + //更新序列号 + menuData.setOrderno(i + 1); + } + //更新表数据 + this.updateBatchById(list); + return isOk; } @@ -204,12 +198,12 @@ public class MenuServiceImpl extends ServiceImpl implements IM /*********************************** - * 用途说明:查询菜单及按钮树状图 + * 用途说明:查询菜单 * 参数说明 * parentid 上级id *systemcode 系统 * isdisplay 是否显示 - * type 按钮 + * type 菜单类型 * 返回值说明: 菜单结构树集合 ***********************************/ private List> child(String parentid, diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java index e9886d3..732d9cb 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/OrganizationServiceImpl.java @@ -1,11 +1,9 @@ package io.gisbi.application.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.xiaoymin.knife4j.core.util.StrUtil; import io.gisbi.application.system.domain.Organization; -import io.gisbi.application.system.domain.User; import io.gisbi.application.system.mapper.OrganizationMapper; import io.gisbi.application.system.service.IOrganizationService; import io.gisbi.application.system.service.IUserService; @@ -43,6 +41,10 @@ public class OrganizationServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); //根据上级id 查询 - queryWrapper.eq(StringUtils.isNotBlank(parentid), Organization::getParentid, parentid); - queryWrapper.eq(StringUtils.isNotBlank(appId), Organization::getAppId, appId); + queryWrapper.eq(Organization::getParentid, parentid); + queryWrapper.eq(Organization::getAppId, appId); //根据部门名称查询 queryWrapper.like(StringUtils.isNotBlank(orgname), Organization::getOrgname, orgname); @@ -107,9 +109,10 @@ public class OrganizationServiceImpl extends ServiceImpl @@ -28,6 +34,9 @@ import java.util.List; @Service public class RoleServiceImpl extends ServiceImpl implements IRoleService { + private static final Logger LOGGER = LoggerFactory.getLogger(ChannelInboundHandlerAdapter.class); + + @Resource private RoleMapper roleMapper; @@ -104,13 +113,87 @@ public class RoleServiceImpl extends ServiceImpl implements IR * 返回值说明: 是否删除成功 ***********************************/ @Override - public void deleteById(String id) { - //根据id删除 角色 - boolean isOk = this.removeById(id); - //删除角色菜单关联 + @Transactional(rollbackFor = Exception.class) + public Boolean deleteById(String id) { + + try { + // 根据id删除角色 + boolean isOk = this.removeById(id); + if (!isOk) { + return false; + } + // 删除角色菜单关联 + roleMapper.deleteRoleMenus(id); + + // 删除角色用户关联 + roleMapper.deleteRoleUser(id); + + return true; + } catch (Exception e) { + // 可结合日志记录异常信息 + LOGGER.error("删除角色失败,ID: {}", id, e); + throw e; // 抛出异常以便事务回滚 + } + } + /*********************************** + * 用途说明:根据ID批量删除角色 + * 参数说明 + *ids 用户id集合 + * 返回值说明: 判断是否删除成功 + ************************************/ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deleteRoleByIds(String ids) { + if (StringUtils.isBlank(ids)) { + // 参数为空,直接返回失败 + return false; + } + final String SEPARATOR = ","; + List idList = Arrays.asList(ids.split(SEPARATOR)); + boolean allSuccess = true; + + for (String id : idList) { + if (StringUtils.isBlank(id)) { + // 跳过非法空ID + continue; + } + + // 删除角色信息 + if (!this.removeById(id)) { + allSuccess = false; + break; + } + + // 删除角色菜单关联 + roleMapper.deleteRoleMenus(id); + + // 删除角色用户关联 + roleMapper.deleteRoleUser(id); + } + + return allSuccess; + } + + /*********************************** + * 用途说明:角色菜单权限 + * 参数说明 + * id 角色id + * menuIds 权限id字符串 + * 返回值说明: 是否分配成功 + ***********************************/ + @Override + public boolean setMenuByRoleId(String id, String menuIds) { + Role role = roleMapper.selectById(id); + + // 删除角色所对应的权限 roleMapper.deleteRoleMenus(id); - //删除角色用户关联 - roleMapper.deleteRoleUser(id); + // 重新赋予权限 + String[] ids = menuIds.split(","); + for (String menuId : ids) { + String uuid = IdUtil.fastSimpleUUID(); + roleMapper.addRoleMenu(uuid, role.getAppId(), id, menuId); + } + return true; } /*********************************** @@ -130,4 +213,6 @@ public class RoleServiceImpl extends ServiceImpl implements IR } return ok; } + + } diff --git a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java index 99f9118..76a7356 100644 --- a/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java +++ b/core/core-backend/src/main/java/io/gisbi/application/system/service/impl/UserServiceImpl.java @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import io.gisbi.application.system.domain.Role; import io.gisbi.application.system.domain.User; -import io.gisbi.application.system.mapper.OrganizationMapper; import io.gisbi.application.system.mapper.RoleMapper; import io.gisbi.application.system.mapper.UserMapper; import io.gisbi.application.system.service.IUserService; @@ -23,8 +22,6 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.File; -import java.sql.Timestamp; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -124,22 +121,20 @@ public class UserServiceImpl extends ServiceImpl implements IU //修改用户信息 boolean ok = this.updateById(user); if (ok) { + //判断角色id是否为空 如果不为空 先删除 后增加 如果为空删除用户下所有角色信息 if (StringUtils.isNotEmpty(roleids)) { String[] roles = roleids.split(","); Set roleSet = new HashSet<>(Arrays.asList(roles)); - List existingRoles = userMapper.getRoleid(user.getId()); + + //首先根绝用户ID,删除用户角色关联表中的数据 + ok = ok && userMapper.delRoleUsersByUserid(user.getId()); // 添加新角色 for (String role : roles) { - if (!existingRoles.contains(role)) { - //系统生成id - String id = IdUtil.fastSimpleUUID(); - ok = ok && userMapper.addUserRoles(id, user.getAppId(), role, user.getId()); - } + //系统生成id + String id = IdUtil.fastSimpleUUID(); + ok = ok && userMapper.addUserRoles(id, user.getAppId(), role, user.getId()); } - - // 删除不在 roleids 中的角色 - userMapper.delInRoleUsersByUserid(user.getId(), roles); } else { // 删除所有关联角色 ok = ok && userMapper.delRoleUsersByUserid(user.getId()); @@ -183,7 +178,7 @@ public class UserServiceImpl extends ServiceImpl implements IU } List> list = new ArrayList<>(records.size()); - + //根据用户ID获取对应的角色信息 for (Map record : records) { Object idObj = record.get("id"); @@ -218,23 +213,17 @@ public class UserServiceImpl extends ServiceImpl implements IU public Boolean deleteUserById(String id) { //根据id查询 User user = this.getById(id); - //账号头像存储地址 - //String imgName = systempath + File.separator + "user" + File.separator + user.getAvatar(); - String imgName = File.separator + "user" + File.separator + user.getAvatar(); //如果是管理员不能删除 if ("admin".equals(user.getUsername())) { return false; } else { + //删除用户及对应的橘色信息 boolean isOk = this.removeById(id); //判断是否删除成功 if (isOk) { //根据用户id 删除该用户角色关联 userMapper.delRoleUsersByUserid(id); - //判断是否存在 账号头像 存在删除 - if (StringUtils.isNotEmpty(user.getAvatar())) { - // FileUtil.del(imgName); - } - return false; + return true; } else { return false; } @@ -248,6 +237,7 @@ public class UserServiceImpl extends ServiceImpl implements IU * 返回值说明: 判断是否删除成功 ************************************/ @Override + @Transactional(rollbackFor = Exception.class) public boolean deleteUserByIds(String ids) { List idList = Arrays.asList(ids.split(",")); @@ -260,21 +250,13 @@ public class UserServiceImpl extends ServiceImpl implements IU if (names.contains("admin")) { return false; } else { + //批量删除用户 int result = userMapper.deleteBatchIds(idList); if (result <= 0) { return false; } // 根据ID删除用户与角色的关联信息 userMapper.delRoleUsersByUserIds(idList); - List avatars = - sysUsers.stream().map(User::getAvatar).collect(Collectors.toList()); - if (avatars.size() > 0) { - for (String avatar : avatars) { - //账号头像存储地址 -// String imgName =systempath + File.separator + "user" + File.separator + avatar; -// FileUtil.del(imgName); - } - } return true; } } @@ -310,10 +292,6 @@ public class UserServiceImpl extends ServiceImpl implements IU @Override public boolean setStatus(String id, String status) { boolean isOk = false; -// //根据当前用户id 查询角色表的级别 currentUser.getUser() 获取当前用户id -// String level = userMapper.getMaxLevel(id); -// //判断当前用户级别 管理员及以上权限 -// if (Integer.parseInt(level) <= 2) { UpdateWrapper updateWrapper = new UpdateWrapper<>(); //根据id修改用户状态,最近修改人,最近修改时间 updateWrapper.eq("id", id) @@ -322,10 +300,11 @@ public class UserServiceImpl extends ServiceImpl implements IU .set("lastmodifier", AuthUtils.getUser().getUserId().toString()); //是否修改成功 isOk = this.update(updateWrapper); - //} return isOk; } + + /*********************************** * 用途说明:角色添加用户 * 参数说明 @@ -334,7 +313,7 @@ public class UserServiceImpl extends ServiceImpl implements IU * 返回值说明: 是否新增成功 ***********************************/ @Override - public boolean addUserRole(String roleid, String userid) { + public boolean addUserRoles(String roleid, String userid) { boolean isOk = true; if (StringUtils.isEmpty(roleid) || StringUtils.isEmpty(userid)) { return false; @@ -359,7 +338,7 @@ public class UserServiceImpl extends ServiceImpl implements IU * account 登录名称 * 返回值说明: 重复返回 false 否则返回 true ************************************/ - private boolean isExistAccount(String appid,String username) { + private boolean isExistAccount(String appid, String username) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (this.list(queryWrapper.eq("app_id", appid).eq("username", username)).size() > 0) { //判断 查询登录账号 结果集是否为null 重复返回 false 否则返回 tree diff --git a/core/core-backend/src/main/resources/mybatis/RoleMapper.xml b/core/core-backend/src/main/resources/mybatis/RoleMapper.xml deleted file mode 100644 index b082238..0000000 --- a/core/core-backend/src/main/resources/mybatis/RoleMapper.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - DELETE FROM app_role_menu WHERE roleid= #{id} - - - - - DELETE FROM app_role_users WHERE roleid= #{id} - - - - - delete from app_role_users where userid !=(select u.id from app_user u where u.account="admin") and roleid=#{roleid} and userid=#{urserid} - - diff --git a/core/core-backend/src/main/resources/mybatis/UserMapper.xml b/core/core-backend/src/main/resources/mybatis/UserMapper.xml deleted file mode 100644 index aeec9a0..0000000 --- a/core/core-backend/src/main/resources/mybatis/UserMapper.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - INSERT INTO app_role_users(id, app_id, roleid, userid) - VALUES (#{id}, #{appid}, #{roleid}, #{userid}); - - - - - - - - delete from app_role_users - where - userid=#{userid} - and roleid not in - - #{roleids} - - - - - - delete from sys_role_users where userid=#{userid} - - - - - - - - DELETE FROM app_role_users WHERE userid IN - - #{id} - - - - - -