管道基础大数据平台系统开发-【后端】-Server
13693261870
2023-06-25 b89d56282fc88075f103de4ed38a65b25b54de60
解决资料馆的多项目+多类型查询时过滤数据不准确
已修改2个文件
76 ■■■■ 文件已修改
data/db_cx.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/service/show/DataLibService.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/db_cx.sql
@@ -64,7 +64,7 @@
select id, pid, type, cn_name, en_name, url, serve_type, data_type, elev, pubid, is_project, bak
from lf.sys_layer where serve_type = 'WMS' order by id;
select id,uid,uname,pwd from lf.sys_user order by uid;
select * from lf.sys_meta where type='osgb' order by id desc limit 20;
src/main/java/com/lf/server/service/show/DataLibService.java
@@ -285,7 +285,7 @@
        }
        List<String> list = codesAsList(codes);
        removeDuplicate(list);
        list = copeDirCodes(list);
        setRightLike(list, field);
        return "(" + StringHelper.join(list, " or ") + ")";
@@ -305,39 +305,75 @@
    }
    /**
     * 去除重复
     * 处理目录编码
     */
    private static void removeDuplicate(List<String> list) {
        int i = 0;
        while (i < list.size()) {
            int j = findStr(list, i);
            if (j > -1) {
                list.remove(j);
                continue;
            }
            i++;
    private static List<String> copeDirCodes(List<String> list) {
        List<String> prjList = getDirCodesByLen(list, 0, 2);
        List<String> appList = getDirCodesByLen(list, 3, 30);
        if (prjList.isEmpty() && appList.isEmpty()) {
            return list;
        }
        if (prjList.isEmpty()) {
            return appList;
        }
        if (appList.isEmpty()) {
            return prjList;
        }
        return filterCodes(prjList, appList);
    }
    /**
     * 查找字符串
     * 根据长度获取单位编码
     */
    private static int findStr(List<String> list, int i) {
        String source = list.get(i);
        for (int j = i + 1, c = list.size(); j < c; j++) {
            if (list.get(j).startsWith(source)) {
                return j;
    private static List<String> getDirCodesByLen(List<String> list, int start, int end) {
        List<String> rs = new ArrayList<>();
        for (String code : list) {
            if (StringHelper.isEmpty(code)) {
                continue;
            }
            if (code.length() >= start && code.length() <= end) {
                rs.add(code);
            }
        }
        return -1;
        return rs;
    }
    /**
     * 过滤项目编码
     */
    private static List<String> filterCodes(List<String> prjList, List<String> appList) {
        int i = 0;
        while (i < appList.size()) {
            boolean flag = false;
            for (String prj : prjList) {
                if (appList.get(i).startsWith(prj)) {
                    flag = true;
                    break;
                }
            }
            if (!flag) {
                appList.remove(i);
                continue;
            }
            i++;
        }
        return appList;
    }
    /**
     * 设置 右like
     */
    private static void setRightLike(List<String> list, String field) {
        if (list.isEmpty()) {
            list.add("1 = 2");
            return;
        }
        for (int i = 0, c = list.size(); i < c; i++) {
            String str = String.format("%s like '%s%%'", field, list.get(i));
            list.set(i, str);