# 浏览按钮名称转id对接方案

原始文档链接：[浏览按钮名称转id对接方案](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/b90d212e-0cab-40a6-9845-d9476f717caf/doc/958004550184206337)
目录分组：对接方案

# 背景

表单excel数据导入，需要根据名称获取对应的浏览按钮id，所以组件统一提供了对接方案
 对接清单表格:
 [https://www.e-cology.com.cn/sp/doc/docDetail/8139329272564143222](https://www.e-cology.com.cn/sp/doc/docDetail/8139329272564143222)

# 对接rpc接口

RemoteBrowserQueryByNameService，该方法用于获取某个浏览按钮名称对应的id，如名称有多个重名只需返回一个

```java
/**
 * 浏览按钮远程根据名称查询id
 *
 * @author sy
 * @date 2022/2/15
 **/
public interface RemoteBrowserQueryByNameService {
    Map<String, List<BrowserQueryNameResult>> queryBrowserDataIdsByName(List<BrowserQueryNameParam> browserQueryNameParams);
}

```

```
@Data
public class BrowserQueryNameParam implements Serializable {
    private SimpleEmployee user; // 用户
    private String tenantKey; // 租户key
    private String module; // 浏览按钮模块路由如workflow/core或者rpc Group
    private String fromModule; // 用户指定模块之间特殊约定，一般为空，无指定不需要处理
    private String browserType;// 浏览按钮类型
    private String languageId; // 多语言id
    private List<String> names; // 需要转换为id的名称
    private Map<String, Object> customParam; // 自定义参数
}
```

```
@Data
public class BrowserQueryNameResult implements Serializable {
    private static final long serialVersionUID = -8642040953509423008L;
    private String name; //名称
    private int count; // 同名的数量
    private String dataId; // id
    private String module;
    private String browserType;
}
```

# 对接示例

**有些模块的浏览按钮可能需要一些特殊的参数才能调通，请在对接完成后将需要特殊传递的参数写到下方表格的****rpc调用特殊参数（放到customParam里）****栏中**  [https://www.e-cology.com.cn/sp/doc/docDetail/8139329272564143222](https://www.e-cology.com.cn/sp/doc/docDetail/8139329272564143222)

```java
package com.weaver.base.common;

import com.weaver.common.component.browser.rest.RemoteBrowserQueryByNameService;
import com.weaver.common.component.browser.rest.domain.BrowserQueryNameParam;
import com.weaver.common.component.browser.rest.domain.BrowserQueryNameResult;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author sy
 * @date 2023/8/22
 **/
@Service("demo")
public class RemoteBrowserQueryByNameServiceImpl implements RemoteBrowserQueryByNameService {

    @Override
    public Map<String, List<BrowserQueryNameResult>> queryBrowserDataIdsByName(List<BrowserQueryNameParam> browserQueryNameParams) {
        // browserQueryNameParams 中可能会传递多个不同的浏览按钮类型，需要根据不同的类型处理
        Map<String, List<BrowserQueryNameResult>> browserTypeResultMap = new HashMap<>();
        // browserTypeResultMap ->key为browserType，value为每个名称的查询结果
        for (BrowserQueryNameParam browserQueryNameParam : browserQueryNameParams) {
            List<BrowserQueryNameResult> results = browserTypeResultMap.get(browserQueryNameParam.getBrowserType());
            if (CollectionUtils.isEmpty(results)){
                results = new ArrayList<>();
                browserTypeResultMap.put(browserQueryNameParam.getBrowserType(), results);
            }
            for (String name : browserQueryNameParam.getNames()) {
                // queryIdByName是一个示例方法，只是表单查询的意思，模块实际的实现可以不参考，能够达成结果就行
                List<String> ids = queryIdByName(name, browserQueryNameParam.getBrowserType(), browserQueryNameParam.getLanguageId(), browserQueryNameParam.getTenantKey());
                // 同一个名称可能会查到多个id，只用取一个就行
                // 将重名的个数放到count里
                BrowserQueryNameResult browserQueryNameResult = new BrowserQueryNameResult();
                browserQueryNameResult.setName(name);
                browserQueryNameResult.setDataId(ids.get(0));
                browserQueryNameResult.setBrowserType(browserQueryNameParam.getBrowserType());
                browserQueryNameResult.setCount(ids.size());
                results.add(browserQueryNameResult);
            }
        }
        return browserTypeResultMap;
    }
}

```

# RPC注册

<dubbo:service ref="输入自己的" interface="com.weaver.common.component.browser.rest.RemoteBrowserQueryByNameService" group="输入自己的"/>

如果之前对接过RemoteBrowserService，rpc的group可以和之前RemoteBrowserService的group一样，没有对接过请联系师源

# QA

## 如何测试

待补充

## 之前不是有RemoteBrowserService对接了id转名称吗，为什么要再开一个service对接？

架构使用的dubbo代理方式默认是javaasist，当前使用的版本较低不支持接口default的方式，直接加方法可能会出现冲突问题，所以单独开了一个新的接口对接
