From 7f8732dd0206f8097dcc8de0d57429b73a94c7ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E9=B8=BF=E5=B1=95?= <18031053041@163.com> Date: Mon, 19 Jan 2026 15:32:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=89=E6=8B=A9=E8=BD=A6=E9=98=9F=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/basic/ExpenseAccountMapper.xml | 12 +- .../mapper/basic/ServiceItemsManageMapper.xml | 42 +++---- .../service/RoleApplicationService.java | 113 ++++++++++-------- .../mhd/user/interfaces/facade/RoleAPI.java | 14 ++- .../user/interfaces/vo/NonePagingListVO.java | 6 + .../main/resources/mapper/MotorcadeMapper.xml | 24 ++-- .../src/main/resources/mapper/RoleMapper.xml | 8 +- .../resources/mapper/UserDriverMapper.xml | 26 +--- 8 files changed, 127 insertions(+), 118 deletions(-) diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ExpenseAccountMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ExpenseAccountMapper.xml index 7d801596f..41cf1fdd0 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ExpenseAccountMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ExpenseAccountMapper.xml @@ -196,16 +196,16 @@ and a.organization_id = #{expenseAccountDO.organizationId} - and a.organization_name IS NOT NULL - and a.organization_name != '' - and LENGTH(TRIM(a.organization_name)) > 0 +-- and a.organization_name IS NOT NULL +-- and a.organization_name != '' +-- and LENGTH(TRIM(a.organization_name)) > 0 and a.top_organization_id = #{expenseAccountDO.topOrganizationId} - and a.organization_name IS NOT NULL - and a.organization_name != '' - and LENGTH(TRIM(a.organization_name)) > 0 +-- and a.organization_name IS NOT NULL +-- and a.organization_name != '' +-- and LENGTH(TRIM(a.organization_name)) > 0 and a.organization_name like concat('%', #{expenseAccountDO.organizationName}, '%') diff --git a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ServiceItemsManageMapper.xml b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ServiceItemsManageMapper.xml index aedc224b4..c8b2fbd85 100644 --- a/mhd-modules/mhd-system/src/main/resources/mapper/basic/ServiceItemsManageMapper.xml +++ b/mhd-modules/mhd-system/src/main/resources/mapper/basic/ServiceItemsManageMapper.xml @@ -8,36 +8,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - - - and del_flag = #{delFlag} - - - and del_flag = 1 - - - - and create_by_name like concat('%', #{createByName}, '%') - - - and update_by_name like concat('%', #{updateByName}, '%') - + + + + + + + + + + + + + + + and organization_id = #{organizationId} - and organization_name IS NOT NULL - and organization_name != '' - and LENGTH(TRIM(organization_name)) > 0 +-- and organization_name IS NOT NULL +-- and organization_name != '' +-- and LENGTH(TRIM(organization_name)) > 0 and top_organization_id = #{topOrganizationId} - and organization_name IS NOT NULL - and organization_name != '' - and LENGTH(TRIM(organization_name)) > 0 +-- and organization_name IS NOT NULL +-- and organization_name != '' +-- and LENGTH(TRIM(organization_name)) > 0 and organization_name like concat('%', #{organizationName}, '%') diff --git a/mhd-user-center/src/main/java/com/mhd/user/application/service/RoleApplicationService.java b/mhd-user-center/src/main/java/com/mhd/user/application/service/RoleApplicationService.java index 2e2d89bd5..2ca944c2e 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/application/service/RoleApplicationService.java +++ b/mhd-user-center/src/main/java/com/mhd/user/application/service/RoleApplicationService.java @@ -86,6 +86,7 @@ public class RoleApplicationService { // 先保存前端传递的 organizationId(如果存在) Long frontendOrganizationId = roleDo.getOrganizationId(); + log.info("角色查询 - 初始 roleDo.getOrganizationId(): {}", frontendOrganizationId); // 获取登录用户信息 Long loginUserOrganizationId = null; @@ -94,6 +95,12 @@ public class RoleApplicationService { loginUserOrganizationId = userPo.getOrganizationId(); topOrganizationId = userPo.getTopOrganizationId(); } + log.info("角色查询 - 当前登录用户组织ID: {}", loginUserOrganizationId); + + // 先保存前端传递的 organizationId(如果存在) + // 因为后续的 BeanUtils.copyProperties 可能会覆盖掉前端传递的值 + Long savedFrontendOrganizationId = frontendOrganizationId; + log.info("角色查询 - 保存的前端 organizationId: {}", savedFrontendOrganizationId); if (userPo.getUserAccountType() != null && userPo.getUserAccountType() == 5){ roleDo.setCreateBy(userPo.getCreateBy()); @@ -102,60 +109,62 @@ public class RoleApplicationService { userDataPermissionQueryDTO.setPermissionMenuId(roleDo.getPermissionMenuId()); userDataPermissionQueryDTO = userDataPermissionApplicationService.getUserDataPermissionQueryDTO(userDataPermissionQueryDTO); - // 在复制属性之前,先保存前端传递的 organizationId(如果存在) - // 因为 BeanUtils.copyProperties 可能会覆盖掉前端传递的值 - Long savedFrontendOrganizationId = frontendOrganizationId; - BeanUtils.copyProperties(userDataPermissionQueryDTO, roleDo, IgnoreNullUtil.getNullPropertyNames(userDataPermissionQueryDTO)); - UserPo loginUserPo = loginUser.getUserPo(); - - // 重新获取前端传递的 organizationId(优先使用前端传递的值) - // 对于南光组织,如果前端传递了 organizationId,必须使用前端传递的值 - Long currentFrontendOrganizationId = savedFrontendOrganizationId != null ? savedFrontendOrganizationId : roleDo.getOrganizationId(); - - // 数据权限:查询权限根据 organizationId 来设置,与其他模块保持一致 - // organizationId等于2827时,为南光组织,查所有;其他组织查自己 - if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { - // 南光组织(organizationId=2827):可以查询所有组织的数据 - // 如果前端传递了 organizationId(包括2827),使用前端传递的值进行过滤 - // 如果前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 - if (currentFrontendOrganizationId != null) { - // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 - roleDo.setOrganizationId(currentFrontendOrganizationId); - roleDo.setTopOrganizationId(null); - } else { - // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 - roleDo.setOrganizationId(null); - roleDo.setTopOrganizationId(null); - } - if (!Strings.isNullOrEmpty(loginUserPo.getRoleCode()) && RoleEnum.SUPER_ADMIN.getCode().equals(loginUserPo.getRoleCode())) { - //角色等级:0-无状态,1-内置角色,2-组织角色 - //roleDo.setRoleGrade(1); - } else { - //roleDo.setRoleGrade(2); - } + log.info("角色查询 - BeanUtils.copyProperties 后 roleDo.getOrganizationId(): {}", roleDo.getOrganizationId()); + } + + UserPo loginUserPo = loginUser.getUserPo(); + + // 数据权限:查询权限根据 organizationId 来设置,与其他模块保持一致 + // organizationId等于2827时,为南光组织,查所有;其他组织查自己 + if (loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + // 如果前端传递了 organizationId 且不等于当前登录用户的组织ID,使用前端传递的值进行过滤 + // 如果前端没有传递 organizationId,或者传递的值等于当前登录用户的组织ID,清空组织过滤条件,查询所有组织的数据 + log.info("角色查询 - 南光组织,savedFrontendOrganizationId: {}", savedFrontendOrganizationId); + if (savedFrontendOrganizationId != null && !savedFrontendOrganizationId.equals(loginUserOrganizationId)) { + // 前端传递了其他组织的 organizationId(不等于2827),使用前端传递的值进行过滤 + log.info("角色查询 - 南光组织:使用前端传递的其他组织 organizationId: {}", savedFrontendOrganizationId); + roleDo.setOrganizationId(savedFrontendOrganizationId); + roleDo.setTopOrganizationId(null); + } else { + // 前端没有传递 organizationId,或者传递的值等于当前登录用户的组织ID(2827), + // 清空组织过滤条件,查询所有组织的数据 + // 注意:这里必须清空 organizationId,不能使用 roleDo.getOrganizationId(), + // 因为 roleDo.getOrganizationId() 可能被 BeanUtils.copyProperties 从其他地方复制过来 + log.info("角色查询 - 南光组织:前端未传递 organizationId 或传递的值等于当前登录用户组织ID,清空组织过滤条件,查询所有组织的数据"); + roleDo.setOrganizationId(null); + roleDo.setTopOrganizationId(null); + } + if (!Strings.isNullOrEmpty(loginUserPo.getRoleCode()) && RoleEnum.SUPER_ADMIN.getCode().equals(loginUserPo.getRoleCode())) { + //角色等级:0-无状态,1-内置角色,2-组织角色 + //roleDo.setRoleGrade(1); } else { - // 其他组织:设置organizationId,只查询当前组织的数据 - // 其他组织只能查询自己组织的数据,不能查询其他组织的数据 - if (currentFrontendOrganizationId != null) { - // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 - if (!currentFrontendOrganizationId.equals(loginUserOrganizationId)) { - // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 - log.warn("角色查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤", - currentFrontendOrganizationId, loginUserOrganizationId); - roleDo.setOrganizationId(loginUserOrganizationId); - } else { - // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 - roleDo.setOrganizationId(currentFrontendOrganizationId); - } - roleDo.setTopOrganizationId(topOrganizationId); - } else { - // 前端没有传递 organizationId,使用当前登录用户的组织ID - roleDo.setOrganizationId(loginUserOrganizationId); - roleDo.setTopOrganizationId(topOrganizationId); - } //roleDo.setRoleGrade(2); } + } else { + // 其他组织:设置organizationId,只查询当前组织的数据 + // 其他组织只能查询自己组织的数据,不能查询其他组织的数据 + // 重新获取前端传递的 organizationId(优先使用前端传递的值) + Long currentFrontendOrganizationId = savedFrontendOrganizationId != null ? savedFrontendOrganizationId : roleDo.getOrganizationId(); + if (currentFrontendOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!currentFrontendOrganizationId.equals(loginUserOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + log.warn("角色查询 - 前端传递的组织ID {} 与当前登录用户的组织ID {} 不一致,使用当前登录用户的组织ID进行过滤", + currentFrontendOrganizationId, loginUserOrganizationId); + roleDo.setOrganizationId(loginUserOrganizationId); + } else { + // 前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + roleDo.setOrganizationId(currentFrontendOrganizationId); + } + roleDo.setTopOrganizationId(topOrganizationId); + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + roleDo.setOrganizationId(loginUserOrganizationId); + roleDo.setTopOrganizationId(topOrganizationId); + } + //roleDo.setRoleGrade(2); } return roleDomainService.selecRolePoList(roleDo); } @@ -167,7 +176,9 @@ public class RoleApplicationService { */ @DataPermissions(cacheName = "wlhyRole_createBy") public List getUserRolelist(RoleDo roleDo) {//获取登录人信息 - return roleDomainService.selecRolePoList(roleDo); + // 调用应用服务层的方法,包含数据权限控制逻辑 + // 当前登录用户组织ID为2827时查询全部组织信息,其他组织只查自己 + return selecRolePoList(roleDo); } public List queryList(RoleDo roleDo) { diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/RoleAPI.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/RoleAPI.java index 0aa94aeeb..f65070340 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/RoleAPI.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/facade/RoleAPI.java @@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.Date; import java.util.List; @@ -57,9 +58,20 @@ public class RoleAPI extends BaseController { @Log(title = "职务/角色管理-查询", description ="查询角色列表",businessType = BusinessType.INQUIRE) @ApiOperation("查询角色列表-分页") @GetMapping("/getUserRolelist") - public TableDataInfo getUserRolelist(RoleDTO roleDTO) { + public TableDataInfo getUserRolelist(RoleDTO roleDTO, HttpServletRequest request) { + // 检查前端是否明确传递了 organizationId 参数 + // 如果前端没有传递,清空 roleDTO 中的 organizationId,避免从其他地方自动设置的值影响查询 + String organizationIdParam = request.getParameter("organizationId"); + log.info("角色查询接口 - 前端传递的 organizationId 参数: {}", organizationIdParam); + if (organizationIdParam == null || organizationIdParam.isEmpty()) { + log.info("角色查询接口 - 前端未传递 organizationId,清空 roleDTO.organizationId"); + roleDTO.setOrganizationId(null); + } else { + log.info("角色查询接口 - 前端传递了 organizationId: {}", organizationIdParam); + } //转换实体 RoleDo roleDo = roleAssember.toRoleDo(roleDTO); + log.info("角色查询接口 - 转换后 roleDo.getOrganizationId(): {}", roleDo.getOrganizationId()); startPage(); List list = roleApplicationService.getUserRolelist(roleDo); return getDataTable(list); diff --git a/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/NonePagingListVO.java b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/NonePagingListVO.java index 4b5dbc99b..7bf2c78d9 100644 --- a/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/NonePagingListVO.java +++ b/mhd-user-center/src/main/java/com/mhd/user/interfaces/vo/NonePagingListVO.java @@ -17,4 +17,10 @@ public class NonePagingListVO { @ApiModelProperty(value = "车队名称") private String motorcadeName; + @ApiModelProperty(value = "组织ID") + private Long organizationId; + + @ApiModelProperty(value = "组织名称") + private String organizationName; + } diff --git a/mhd-user-center/src/main/resources/mapper/MotorcadeMapper.xml b/mhd-user-center/src/main/resources/mapper/MotorcadeMapper.xml index 816765246..98925e448 100644 --- a/mhd-user-center/src/main/resources/mapper/MotorcadeMapper.xml +++ b/mhd-user-center/src/main/resources/mapper/MotorcadeMapper.xml @@ -380,31 +380,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group by u.user_id diff --git a/mhd-user-center/src/main/resources/mapper/RoleMapper.xml b/mhd-user-center/src/main/resources/mapper/RoleMapper.xml index ea4683454..a5a487626 100644 --- a/mhd-user-center/src/main/resources/mapper/RoleMapper.xml +++ b/mhd-user-center/src/main/resources/mapper/RoleMapper.xml @@ -122,13 +122,13 @@ and a.organization_id = #{organizationId} - and a.organization_name IS NOT NULL +-- and a.organization_name IS NOT NULL and a.top_organization_id = #{topOrganizationId} - - and a.organization_name IS NOT NULL - + + + and a.organization_name like concat('%' , #{organizationName} , '%') diff --git a/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml b/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml index 513aba1f6..8df761169 100644 --- a/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml +++ b/mhd-user-center/src/main/resources/mapper/UserDriverMapper.xml @@ -185,27 +185,13 @@ ude.driver_corp_legal_name, ude.driver_corp_name, ude.driver_corp_idcard_number, - r.roleName, + b.role_name AS roleName, dvb.vehicle_id, wlhydriver.id as wlhydriverId, WM_CONCAT(DISTINCT dvb.vehicle_license_plate_number ) AS vehicleLicensePlateNumber, WM_CONCAT(DISTINCT m.motorcade_name ) AS driverTeamName FROM "USER" b - LEFT JOIN ( - SELECT - user_id, - LISTAGG(DISTINCT r.role_name, '&') WITHIN GROUP(ORDER BY r.role_name) AS roleName - FROM - role r - LEFT JOIN user_role ur ON r.role_id = ur.role_id - AND ur.del_flag = 1 - WHERE - r.del_flag = 1 - AND role_code IN ( 'driver', 'carrier', 'captain' ) - GROUP BY - user_id - ) r ON r.user_id = b.user_id LEFT JOIN user_driver a ON a.user_id = b.user_id LEFT JOIN NGWL_TEST_WLHY.sys_user wlhyuser ON wlhyuser.szwl_user_id = b.user_id LEFT JOIN NGWL_TEST_WLHY.tms_driver wlhydriver ON wlhydriver.driver_id = wlhyuser.id @@ -220,7 +206,7 @@ left join motorcade m on md.motorcade_id = m.motorcade_id and m.del_flag = 1 LEFT JOIN motorcade mo ON a.driver_id = mo.motorcade_header_id - AND m.del_flag = 1 + AND mo.del_flag = 1 left join motorcade_driver mdr on mo.motorcade_id = mdr.motorcade_id and mdr.del_flag = 1 WHERE b.del_flag = 1 @@ -353,12 +339,6 @@ select count(1) from ( select b.user_id from "USER" b - left join (select user_id, WM_CONCAT(r.role_name separator '&') roleName - from role r - left join user_role ur on r.role_id = ur.role_id and ur.del_flag = 1 - where r.del_flag = 1 - and role_code in ('driver', 'carrier', 'captain', 'must') - group by user_id) r on r.user_id = b.user_id left join user_driver a on a.user_id = b.user_id left join user_driver_enterprise ude on b.user_id = ude.user_id and ude.driver_type = 1 left join user_driver_enterprise ud on b.user_id = ud.user_id and ud.driver_type = 2 @@ -558,7 +538,7 @@ /*角色*/ - AND r.roleName like concat('%', #{userDriverDO.roleName}, '%') + AND b.role_name like concat('%', #{userDriverDO.roleName}, '%') /*车牌号*/