Quellcode durchsuchen

fix(data-scope): 解决数据权限范围查询中的列名歧义和SQL语法错误

- 为排序字段添加表别名前缀,避免JOIN查询时列名歧义
- 去掉已有的外层ORDER BY子句,避免拼接出两个ORDER BY导致SQL语法错误
- 修复去掉ORDER BY后可能残留的逗号问题
- 在报修申请表实体中添加报修部门ID字段
dazhaxie vor 1 Tag
Ursprung
Commit
de71de3f02

+ 9 - 0
platform-dao/src/main/java/com/platform/dao/config/DataScopeInterceptor.java

@@ -60,6 +60,15 @@ public class DataScopeInterceptor implements Interceptor {
                     selectSql = originalSql.substring(0, index - 1);
                     limitSql = originalSql.substring(index - 1, originalSql.length() - 1);
                 }
+                // 去掉已有的外层 ORDER BY,避免拼接出两个 ORDER BY 导致 SQL 语法错误
+                int orderByIndex = selectSql.toUpperCase().lastIndexOf("ORDER BY");
+                if (orderByIndex > 0) {
+                    selectSql = selectSql.substring(0, orderByIndex).trim();
+                    // 去掉末尾可能残留的逗号
+                    if (selectSql.endsWith(",")) {
+                        selectSql = selectSql.substring(0, selectSql.length() - 1).trim();
+                    }
+                }
                 String[] sortBys = sortBy.split(",");
                 String[] sortNames = ((String) dataScope.get("sortName")).split(",");
                 StringBuffer sortStr = new StringBuffer(" order by ");

+ 5 - 0
platform-dao/src/main/java/com/platform/dao/entity/repair/RepairApplicationForm.java

@@ -283,4 +283,9 @@ public class RepairApplicationForm implements Serializable {
 
     private String fourRepairUser;
 
+    /**
+     * 报修部门ID
+     */
+    private String deptId;
+
 }

+ 14 - 0
platform-service/src/main/java/com/platform/service/check/impl/CheckJobServiceImpl.java

@@ -582,6 +582,13 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
         }
 
         // 修复分页重复:先分页获取任务ID,再根据ID查询完整数据
+        // 为排序字段添加表别名前缀,避免 JOIN 查询时列名歧义
+        if (model.getDataScope() != null && model.getDataScope().get("sortName") != null) {
+            String sortName = (String) model.getDataScope().get("sortName");
+            if (!sortName.contains(".")) {
+                model.getDataScope().put("sortName", "checkjob_inner." + sortName);
+            }
+        }
         PageHelper.startPage(pageNum, pageSize);
         List<String> jobIdPage = mapper.selectJobIdPage(model);
 
@@ -658,6 +665,13 @@ public class CheckJobServiceImpl extends BaseServiceImpl<CheckJobMapper, CheckJo
             }
         }
 
+        // 为排序字段添加表别名前缀,避免 JOIN 查询时列名歧义
+        if (model.getDataScope() != null && model.getDataScope().get("sortName") != null) {
+            String sortName = (String) model.getDataScope().get("sortName");
+            if (!sortName.contains(".")) {
+                model.getDataScope().put("sortName", "checkjob." + sortName);
+            }
+        }
         PageHelper.startPage(pageNum, pageSize);
         return new MyPage(mapper.selectList(model));
     }