diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/BillingRulesApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/BillingRulesApplicationService.java index 53d08e7b2..9c6052818 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/BillingRulesApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/billingRules/BillingRulesApplicationService.java @@ -45,10 +45,40 @@ public class BillingRulesApplicationService { public List queryList(BillingRulesDO billingRulesDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - billingRulesDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = billingRulesDO.getOrganizationId(); // 前端传递的 organizationId + + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己且 topOrganizationId=2827 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + billingRulesDO.setOrganizationId(frontendOrganizationId); + billingRulesDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + billingRulesDO.setOrganizationId(null); + billingRulesDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId为当前组织ID,并且设置topOrganizationId=2827 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + billingRulesDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + billingRulesDO.setOrganizationId(userOrganizationId); + } + } + // 对于非2827组织,必须设置 topOrganizationId=2827 + billingRulesDO.setTopOrganizationId(2827L); } } return billingRulesDomainService.queryList(billingRulesDO); diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/documentType/DocumentTypeApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/documentType/DocumentTypeApplicationService.java index 6654b7d7a..185803932 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/documentType/DocumentTypeApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/documentType/DocumentTypeApplicationService.java @@ -48,10 +48,40 @@ public class DocumentTypeApplicationService { public List queryList(DocumentTypeDO documentTypeDO) { LoginUser loginUser = SecurityUtils.getLoginUser(); - if (loginUser != null){ - Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId(); - if (topOrganizationId != null && topOrganizationId != 1){ - documentTypeDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + if (loginUser != null && loginUser.getUserPo() != null) { + Long userOrganizationId = loginUser.getUserPo().getOrganizationId(); + Long frontendOrganizationId = documentTypeDO.getOrganizationId(); // 前端传递的 organizationId + + // 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己且 topOrganizationId=2827 + if (userOrganizationId != null && userOrganizationId == 2827L) { + // 南光组织(organizationId=2827):可以查询所有组织的数据 + if (frontendOrganizationId != null) { + // 前端传递了 organizationId(包括2827或其他组织),使用前端传递的值进行过滤 + documentTypeDO.setOrganizationId(frontendOrganizationId); + documentTypeDO.setTopOrganizationId(null); // 明确设置为 null,避免使用 topOrganizationId 条件 + } else { + // 前端没有传递 organizationId,清空组织过滤条件,查询所有组织的数据 + documentTypeDO.setOrganizationId(null); + documentTypeDO.setTopOrganizationId(null); + } + } else { + // 其他组织:设置organizationId为当前组织ID,并且设置topOrganizationId=2827 + // 如果前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (frontendOrganizationId != null && userOrganizationId != null) { + // 前端传递了 organizationId,验证是否与当前登录用户的组织ID一致 + if (!frontendOrganizationId.equals(userOrganizationId)) { + // 前端传递了其他组织的 organizationId,强制使用当前登录用户的组织ID,防止越权查询 + documentTypeDO.setOrganizationId(userOrganizationId); + } + // 如果前端传递的 organizationId 与当前登录用户的组织ID一致,使用前端传递的值 + } else { + // 前端没有传递 organizationId,使用当前登录用户的组织ID + if (userOrganizationId != null) { + documentTypeDO.setOrganizationId(userOrganizationId); + } + } + // 对于非2827组织,必须设置 topOrganizationId=2827 + documentTypeDO.setTopOrganizationId(2827L); } } return documentTypeDomainService.queryList(documentTypeDO); diff --git a/mhd_bms/src/main/resources/mapper/BillingRulesMapper.xml b/mhd_bms/src/main/resources/mapper/BillingRulesMapper.xml index 49d78e65b..8c82f3242 100644 --- a/mhd_bms/src/main/resources/mapper/BillingRulesMapper.xml +++ b/mhd_bms/src/main/resources/mapper/BillingRulesMapper.xml @@ -100,6 +100,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND create_by_name like concat('%', #{billingRulesDO.createByName}, '%') + + and organization_id = #{billingRulesDO.organizationId} + diff --git a/mhd_bms/src/main/resources/mapper/DocumentTypeMapper.xml b/mhd_bms/src/main/resources/mapper/DocumentTypeMapper.xml index a84667ed4..6c85919ac 100644 --- a/mhd_bms/src/main/resources/mapper/DocumentTypeMapper.xml +++ b/mhd_bms/src/main/resources/mapper/DocumentTypeMapper.xml @@ -89,6 +89,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{code} + + and organization_id = #{documentTypeDO.organizationId} +