Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

请问一下这种一个字段记录其他表多个id的情况,通过apijson如何关联查询id对应的名称 #763

Open
afumu opened this issue Sep 19, 2024 · 2 comments
Labels
Enhancement 增强 增强功能、提高性能等 help wanted 请求帮助

Comments

@afumu
Copy link
Contributor

afumu commented Sep 19, 2024

Description

请问一下这种一个字段记录其他表多个id的情况,通过apijson如何关联查询id对应的名称

image

@afumu
Copy link
Contributor Author

afumu commented Sep 19, 2024

目前我的解决方案是,写了一个远程函数来解决

    public String getFieldName(@NotNull JSONObject current, @NotNull String fieldName,@NotNull String tableName,@NotNull String displayName) throws Exception{
        log.info("参数列表:{},{},{}",fieldName,tableName,displayName);
        String fileValue = current.getString(fieldName);
        log.info("参数{}的值:{}",fieldName,fileValue);
        if (StringUtils.isBlank(fileValue)){
            return "";
        }
        String[] split = fileValue.split(",");
        List<String> fileValueIdList = Arrays.asList(split);
        JSONObject jsonObjectList = buildJsonObject(tableName, displayName, fileValueIdList);
        log.info("构建查询条件:{}",jsonObjectList);

        APIJSONParser<Long> parser = new APIJSONParser<>();
        parser.setNeedVerify(false);
        parser.setMethod(RequestMethod.GET);
        JSONObject result = parser.parseResponse(jsonObjectList.toJSONString());
        log.info("查询结果:{}",result);

        JSONArray jsonArray = result.getJSONArray(tableName+"[]");
        List<Object> displayNameList = new ArrayList<>();
        jsonArray.forEach(item -> {
            JSONObject itemObj = (JSONObject) item;
            String name = itemObj.getString(displayName);
            displayNameList.add(name);
        });

        String displayNames = StringUtils.join(displayNameList, ",");
        log.info("返回显示值:{}",displayNames);
        return displayNames;
    }

image

@TommyLemon
Copy link
Collaborator

TommyLemon commented Sep 19, 2024

这是一个方式,也可以提供一个 字符串转列表 的远程函数,转换后,再通过传副表 "id{}@": "/Z_teacher2/stu_ids" 引用赋值。
或者找下 SQL 中 逗号分隔数组 转 JSON Array 的方案( concat 和 replace 虽然能做但比较麻烦 )。

也可以为 APIJSON 新增支持这种 “数组”,AbstractSQLConfig getRangeString 判断 String 格式自动 split 逗号转成数组,但会和已有的 key{}:"conditon1;conditon2" 条件范围冲突,可能还需要额外字段来标识:
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L3996-L4095

不如远程函数方式,或者扩充 @json:"a,b,c",当 JSON.parse 未解析成非字符串类型值,则 split 逗号转成数组 arr,再 new ArrayList(arr) 转成列表(可能这个才是最佳方式)
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLExecutor.java#L1055-L1061

@TommyLemon TommyLemon added help wanted 请求帮助 Enhancement 增强 增强功能、提高性能等 labels Dec 22, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Enhancement 增强 增强功能、提高性能等 help wanted 请求帮助
Projects
None yet
Development

No branches or pull requests

2 participants