From 035593b4192cb049e3ac1c7dac9269b97deb3c67 Mon Sep 17 00:00:00 2001
From: 1745237360-cloud <1745237360@qq.com>
Date: Tue, 13 Jan 2026 11:32:57 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E7=9A=84bu?=
=?UTF-8?q?g=E4=BF=AE=E6=94=B9260113?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ExpenseAccountApplicationService.java | 24 +++++++++++++++----
.../mapper/basic/ExpenseAccountMapper.xml | 2 +-
.../UserShipperApplicationService.java | 5 ++++
.../service/UserShipperDomainService.java | 8 ++++++-
.../src/main/resources/mapper/UserMapper.xml | 4 ++--
5 files changed, 34 insertions(+), 9 deletions(-)
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