diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java index cd30f83b4..4c03b2ab3 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/expenseAccount/ExpenseAccountApplicationService.java @@ -58,21 +58,35 @@ public class ExpenseAccountApplicationService { setDataPermission(expenseAccountDO); // 处理 createByName 和 updateByName 字段: - // 问题:ExpenseAccountAssembler 在查询场景下会自动设置 createByName 和 updateByName 为当前登录用户名 + // 问题:ExpenseAccountAssembler 在查询场景下可能会自动设置 createByName 和 updateByName 为当前登录用户名 // 这会导致 SQL 中添加 create_by_name LIKE '%nanguang%' 和 update_by_name LIKE '%nanguang%' 条件 // 解决方案: - // 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段 + // 1. 如果查询所有组织(organizationId 和 topOrganizationId 都为 null),清空这些字段(除非前端明确传递了这些字段作为查询条件) // 2. 如果查询指定组织(organizationId 不为 null),且是南光组织查询,如果 createByName 或 updateByName 等于当前登录用户名,清空它们 LoginUser loginUser = SecurityUtils.getLoginUser(); if (loginUser != null && loginUser.getUserPo() != null) { Long loginUserOrganizationId = loginUser.getUserPo().getOrganizationId(); String currentUserName = loginUser.getUsername(); + // 先保存前端传递的 createByName 和 updateByName(用于判断是否是前端传递的查询条件) + String frontendCreateByName = expenseAccountDO.getCreateByName(); + String frontendUpdateByName = expenseAccountDO.getUpdateByName(); + if (expenseAccountDO.getOrganizationId() == null && expenseAccountDO.getTopOrganizationId() == null) { // 查询所有组织的数据时,不应该通过创建者或更新者来过滤,清空这些字段 - log.info("查询所有组织数据,清空 createByName 和 updateByName 过滤条件,避免限制查询结果"); - expenseAccountDO.setCreateByName(null); - expenseAccountDO.setUpdateByName(null); + // 除非前端明确传递了这些字段作为查询条件 + if (frontendCreateByName == null || frontendCreateByName.isEmpty() || + (currentUserName != null && frontendCreateByName.equals(currentUserName))) { + // 前端未传递,或者等于当前登录用户名(可能是 Assembler 自动设置的),清空 + log.info("查询所有组织数据,清空 createByName 过滤条件(前端未传递或由 Assembler 自动设置)"); + expenseAccountDO.setCreateByName(null); + } + if (frontendUpdateByName == null || frontendUpdateByName.isEmpty() || + (currentUserName != null && frontendUpdateByName.equals(currentUserName))) { + // 前端未传递,或者等于当前登录用户名(可能是 Assembler 自动设置的),清空 + log.info("查询所有组织数据,清空 updateByName 过滤条件(前端未传递或由 Assembler 自动设置)"); + expenseAccountDO.setUpdateByName(null); + } } else if (expenseAccountDO.getOrganizationId() != null && loginUserOrganizationId != null && loginUserOrganizationId.equals(2827L)) { // 南光组织查询指定组织时,如果 createByName 或 updateByName 等于当前登录用户名,说明可能是 Assembler 自动设置的 // 清空这些字段,避免限制查询结果(因为其他组织的数据可能不是当前登录用户创建的) 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 9e648962c..f1b2f051f 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 @@ -102,7 +102,7 @@ WHERE a.del_flag = 1 - order by a.account_type,service_items_code,upper_subject_code,show_seq + order by a.update_time DESC SELECT u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name ,u.user_phone,u.has_default_address,b.shipper_id,b.shipper_enterprise_name,u.DOCUMENT_PREPARER_NC_CODE,b.CUSTOMER_NC_CODE,u.organization_id AS organizationId,u.top_organization_id AS topOrganizationId, - u.SETTLEMENT_CURRENCY + b.settlement_currency AS settlementCurrency FROM "USER" u LEFT JOIN user_shipper b ON u.user_id = b.user_id left join (select user_id, LISTAGG(r.role_name, '&') WITHIN GROUP(ORDER BY r.role_name) AS roleName @@ -737,7 +737,7 @@ AND u.organization_id = #{organizationId} AND u.organization_name IS NOT NULL - GROUP BY u.user_id + GROUP BY u.user_id, u.user_name, u.user_area_address, u.user_area_county_id, u.user_area_name, u.user_phone, u.has_default_address, b.shipper_id, b.shipper_enterprise_name, u.DOCUMENT_PREPARER_NC_CODE, b.CUSTOMER_NC_CODE, u.organization_id, u.top_organization_id, b.settlement_currency