

**对接说明**

建模标准全文检索字段固定，如果在建模全文检索基础上额外需要单独字段信息查询，可通过该逻辑可复写EB标准全文检索逻辑， 补充需要推送的字段

**注意**: 需要事先确认跟微搜模块对接的当前模块标识(moduleFlag)和当前微搜索引信息(indexTemplate)以及建模表对应的数据库字段名

**实现步骤:**

1、开启对应EB表单全文检索功能并告知微搜额外存储的的字段id信息， 具体参数说明可看此文档下参数说明

   com.weaver.ebuilder.form.client.service.esearch.RemoteFullSearchService#updateFullSearchStatus

2、需要对应专项或二开用接口EBESearchExtendDto请求参数中moduleFlag和indexTemplate参数和微搜组做对接， 实现额外存储字段的需求(需要额外存储字段需要事先和微搜动态创建索引)

3、注册建模全文检索回调接口， 对应表单推送微搜全文检索数据前会判断当前表单如果有注册回调接口会根据对应的配置信息额外查询数据推送微搜

	3.1、 调用注册接口更新建模回调目标服务group

	      com.weaver.ebuilder.form.client.service.esearch.RemoteFullSearchService#updateObjFullSearchExtendGroup

	3.2、 基于3.1注册的group信息实现建模方法并发布dubbo接口， 发布dubbo接口时group需和3.1中暴露的接口一致

	      com.weaver.ebuilder.form.client.service.esearch.RemoteEBESearchExtendService

    3.3、 建模推送微搜数据是会判断如果有注册group 则泛化调用至目标服务接口获取对应全文检索扩展信息取到配置额外推送微搜对应数据

- **对应专项或二开实现步骤也可参考文档底部demo部分开发思路**

**开发过程：**

##### 引入 ebuilder-form-client jar：

```xml
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-ebuilder-form-client</artifactId>
</dependency>
```

##### 请求接口开启全文检索并更新需要扩展的信息(如额外查询字段、moduleKey、indexTemplate信息， 具体内容需要和微搜对接)

- com.weaver.ebuilder.form.client.service.esearch.RemoteFullSearchService#updateFullSearchStatus;    group为"ebuilderform"
  
  示例：
  
  @RpcReference(group = "ebuilderform")
  
  private RemoteFullSearchService remoteFullSearchService;

#### 一、参数描述：

com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendObj: eb全文检索扩展属性

| 参数名 | 描述 | 参数类型 |
| --- | --- | --- |
| objId | eb表单id | Long |
| queryFields | 补充查询字段-单独的key输出给es(数据库字段名) | Collection |
| tableNameField | 使用自定义扩展表名方式, {@link EBESearchExtendObj#objId}方式不生效<br>关联的表单数据库表名 - 对应数据添加对应列存储扩展表表名 | String |
| extendForeignKeyField | 结合{@link EBESearchExtendObj#tableNameField}使用<br>扩展表中存放原始表数据id的列, 外键关联列 | String |

com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendDto: eb全文检索扩展对象

| 参数名 | 描述 | 参数类型 |
| --- | --- | --- |
| sourceCfg | 当前表单扩展字段信息 | com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendObj |
| enableFullSearch | 当前配置的表单是否开启全文检索 | Boolean |
| extendObjs | 补充查询表单 | Collection\<EBESearchExtendObj\> |
| moduleFlag | 模块标识 - 微搜定位使用 | String |
| indexTemplate | 微搜索引模板 - 需和微搜对接使用 | String |

com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendReq: eb全文检索扩展请求参数

| 参数名 | 描述 | 参数类型 |
| --- | --- | --- |
| objId | eb表单id | Long |
| simpleEmployee | EB简化人员对象 | com.weaver.ebuilder.teams.etform.org.bean.EBSimpleEmployee |
| customParam | 扩展参数 | Map |

com.weaver.ebuilder.form.client.entity.esearch.EBEsearchDataRightExtendParam: eb全文检索权限扩展参数

| 参数名 | 描述 | 参数类型 |
| --- | --- | --- |
| appId | eb应用id | Long |
| objId | eb表单id | Long |
| dataIds | 数据ids | List |
| tenantKey | 租户key | String |
| extra | 扩展参数 | Map\<String, Objcet\> |

#### 二、接口说明

##### 配置操作接口

- com.weaver.ebuilder.form.client.service.esearch.RemoteFullSearchService;    group为"ebuilderform"
  
  示例：
  
  @RpcReference(group = "ebuilderform")
  
  private RemoteFullSearchService remoteFullSearchService;

```java
/**
 * 更新全文检索扩展调用group
 * @param objId       表单id
 * @param extendGroup group
 * @param tenantKey   租户key
 * @return 更新结果
 */
WeaResult<Boolean> updateObjFullSearchExtendGroup(Long objId, String extendGroup, String tenantKey);

/**
 * 获取当前应用下有全文检索扩展group的表单
 * @param appId     应用id
 * @param tenantKey 租户key
 * @return List<Obj>
 */
WeaResult<List<Obj>> getObjFullSearchExtendGroup(Long appId, String tenantKey);

/**
 * 根据扩展分组获取表单
 * @param extendGroup 权限分组标记
 * @param tenantKey   租户key
 * @return List<Obj>
 */
WeaResult<List<Obj>> getExtendGroupObjs(String extendGroup, String tenantKey);

/**
 * 批量更新表单全文检索状态
 * @param ebeSearchExtendDtos eb全文检索扩展对象
 * @param ebSimpleEmployee    eb简化人员对象
 * @return List<EBESearchExtendDto>
 */
WeaResult<List<EBESearchExtendDto>> updateFullSearchStatus(Collection<EBESearchExtendDto> ebeSearchExtendDtos, EBSimpleEmployee ebSimpleEmployee);
```

**泛化调用接口**

```
public interface RemoteEBESearchExtendService {

    /**
     * 获取全文检索扩展信息
     * @param ebeSearchExtendDto
     * @return
     */
    EBESearchExtendDto getEsearchExtend(EBESearchExtendReq ebeSearchExtendDto);

     /**
     * 获取补充权限信息
     * @param ebEsearchDataRightExtendParam
     * @return
     */
    default WeaResult<Map<String, Map<ESSecurityTypeEnum, List<String>>>> getExtendDataPermission(EBEsearchDataRightExtendParam ebEsearchDataRightExtendParam) {
        return null;
    }

}
```

###### demo示例

1. **更新分组(二开服务触发调用eb标准服务更新group)**
  
  ```java
  @RpcReference(group = "ebuilderform")
  private RemoteFullSearchService remoteFullSearchService;
  
  public void testMethod(Long objId, String tenantKey) {
  	remoteFullSearchService.updateObjFullSearchExtendGroup(objId, "testGroup", tenantKey);
  }
  ```
2. **代码实现权限逻辑(二开服务内实现eb接口完整对应业务逻辑)**
  
  ```java
  package com.weaver.ebuilder.form.test;
  
  import com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendReq;
  import com.weaver.ebuilder.form.client.entity.esearch.EBESearchExtendDto;
  import com.weaver.ebuilder.form.client.service.esearch.RemoteEBESearchExtendService;
  import org.springframework.stereotype.Service;
  
  @Service("testGroup_RemoteEBESearchExtendService")
  public class TestRpcImpl implements RemoteEBESearchExtendService {
      @Override
      public EBESearchExtendDto getEsearchExtend(EBESearchExtendReq ebeSearchExtendDto) {
          // todo...
          return null;
      }
  }
  ```
3. **接口暴露(二开服务暴露示例第二步中的实现接口;  其中ref=第二步中暴露的beanName, interface固定, group为示例第一步注册的分组)**

```java
<dubbo:service ref="testGroup_RemoteEBESearchExtendService"
                   interface="com.weaver.ebuilder.form.client.service.esearch.RemoteEBESearchExtendService" group="testGroup"/>
```
