From c914692236a62ef8c8e547850be47dd749bb7921 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 4 Sep 2025 14:35:30 +0800 Subject: [PATCH] =?UTF-8?q?ocr=E6=96=BD=E5=B7=A5=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=96=BD=E5=B7=A5=E5=8D=95=E4=BD=8D=E6=9D=83=E9=99=90bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/mybatis/DataScopeHandler.java | 35 ++++++------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java index bdfbde408..9f0bd477a 100644 --- a/src/main/java/com/zhgd/mybatis/DataScopeHandler.java +++ b/src/main/java/com/zhgd/mybatis/DataScopeHandler.java @@ -152,11 +152,12 @@ public class DataScopeHandler implements DataPermissionHandler { List expressions = new ArrayList<>(); if (!DataScopeInterceptor.findIgnoreDataScope(parameter, ds)) { if (Objects.equals(user.getAccountType(), SystemUserAccountTypeEnum.PROJECT_SUB_ACCOUNT.getValue())) { + List authEnterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); + authEnterpriseIds.add("0"); List filterEnterprises = getNeedFilterLeftExpression(plainSelect, getFieldEnterpriseTables(), ds); if (CollUtil.isNotEmpty(filterEnterprises)) { - List enterpriseIds = userEnterpriseService.getEnterpriseIdsIfSubProject(); for (String filterEnterprise : filterEnterprises) { - inExpression(filterEnterprise, enterpriseIds, plainSelect); + inExpression(filterEnterprise, authEnterpriseIds, plainSelect); } } @@ -193,29 +194,15 @@ public class DataScopeHandler implements DataPermissionHandler { ocrBuildLogTables.put("ocr_build_log", "id"); List filterOcrBuildLogTables = getNeedFilterLeftExpression(plainSelect, ocrBuildLogTables, ds); if (CollUtil.isNotEmpty(filterOcrBuildLogTables)) { - List ids = ocrBuildLogService.getIdsIfSubProject().stream().map(Convert::toStr).collect(Collectors.toList()); - ids.add("0"); for (String filterEnterprise : filterOcrBuildLogTables) { - //( (xxx.id in ()) OR ( xxx.uploader_id = 123)) - InExpression inExpr = new InExpression(); - ItemsList itemsList = new ExpressionList(ids.stream().map(StringValue::new).collect(Collectors.toList())); - inExpr.setLeftExpression(new Column(filterEnterprise)); - inExpr.setRightItemsList(itemsList); - inExpression(filterEnterprise, ids, plainSelect); - // 假设这是你的inExpression方法返回的表达式 - - EqualsTo equalsExpr = new EqualsTo(); - equalsExpr.setLeftExpression(new Column(StrUtil.subBefore(filterEnterprise, ".", false) + "." + "uploader_id")); - equalsExpr.setRightExpression(new LongValue(SecurityUtils.getUser().getUserId())); - // 创建OR表达式组合两者 - OrExpression orExpr = new OrExpression(inExpr, equalsExpr); - // 将整个OR表达式添加到WHERE子句中 - if (plainSelect.getWhere() == null) { - plainSelect.setWhere(orExpr); - } else { - // 如果已有WHERE条件,可能需要用AND连接 - AndExpression andExpr = new AndExpression(plainSelect.getWhere(), orExpr); - plainSelect.setWhere(andExpr); + String uploaderIdField = StrUtil.subBefore(filterEnterprise, ".", false) + "." + "uploader_id"; + String sql = StrUtil.format(" ( ({} in (select ocr_build_log_id from ocr_build_log_enterprise where enterprise_id in ({}))) OR ( {} = {}))", + filterEnterprise, StrUtil.join(",", authEnterpriseIds), uploaderIdField, SecurityUtils.getUser().getUserId()); + try { + Expression expression = CCJSqlParserUtil.parseCondExpression(sql); + expressions.add(expression); + } catch (Exception e) { + log.error(e.getMessage(), e); } } }