---
title: "4.1.5、二开接口：FormSecondServiceRest"
docId: "973213767989108736"
source: "https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/repository/9c2e5f92-03b4-4207-9b22-a0c1dd79ac56/doc/973213767989108736"
---
接口描述

> 所属包：weaver-common-form-api
> 
> 所属类：com.weaver.common.form.api.rest.second.FormSecondServiceRest
> 
> 注意：此接口主要面向一些特殊二开场景单独开的接口，接口均依赖模块抛出

#### 1. 查询表单数据信息

**接口详情：**

```java
    /**
     * 获取表单数据（包括数据明细）
     * 支持根据不同条件返回补充的额外信息
     *
     * @param formDataSearchCondition 查询条件
     * @param employee                操作人
     * @return 数据详情
     * 返回Map的数据：
     * formDataList：数据集合 格式：List<FormData>
     * tableFieldInfo：字段信息，仅支持物理表格式：Map<tableName, List<fieldId>>
     */
    Map<String, Object> getFormData(FormDataSearchCondition formDataSearchCondition, SimpleEmployee employee);

```

**参数说明：**

| 参数名 | 具体属性 | 必传 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- | --- |
| formDataSearchCondition |  | 是 | com.weaver.common.form.data.second.FormDataSearchCondition | 搜索条件 |
| formDataSearchCondition的具体属性说明 | formId | 是 | Long | 表单ID |
| dataIds | 是 | List<Long> | 数据ID集合 |  |
| containsDataDetails | 否 | Boolean | 是否需要查询字段数据 |  |
| containsOptionContent | 否 | Boolean | 是否需要查询选项的名称 |  |
| fieldIsDelete | 否 | Integer | 是否查询删除的字段数据<br>0：查询未删除字段；<br>1：查询已删除字段；<br>null：查询全部字段 |  |
| needSimpleFormData | 否 | Boolean | 是否需要简易格式数据 |  |
| needDetailTableInfo | 否 | Boolean | 是否需要表的物理表名称和字段的data_key等信息 |  |
| employee |  | 是 | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |

**返回值：**

| 类型 | 具体属性 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- |
| Map<String, Object> |  | java.util.Map | 数据信息的key为formDataList |
|  | formDataList | List<com.weaver.common.form.data.FormData> | 数据集合 |
| tableFieldInfo | Map<tableName, List<Long>> | Map<表名, List<字段ID>> |  |

**对接示例：**

```java
import com.weaver.common.form.api.rest.second.FormSecondServiceRest;
@RpcReference(group = "workflow")
FormSecondServiceRest formSecondServiceRest;

public void Test() {

    SimpleEmployee employee = new SimpleEmployee();
    employee.setId(918327792617603074L);
    employee.setTenantKey("t82kg113nu");

    FormDataSearchCondition condition = new FormDataSearchCondition();

    //表单Id，必传
    condition.setFormId(1045530035175366657L);
    //如果需要查询表的字段数据信息，请传入true，否则返回的FormData将没有数据信息
    condition.setContainsDataDetails(true);
    //是否获取选项型名称
    condition.setContainsOptionContent(true);
    //单条数据查询
    condition.setDataId(1045529876177690661L);
    //多条数据查询 上面的dataId和dataIds任选一传入
    List<Long> dataIds = new ArrayList<>();
    dataIds.add(1045529876177690661L);
    dataIds.add(1045529876177690662L);
    condition.setDataIds(dataIds);

    /**
     * 传true则返回简易版格式数据，将主表和明细表数据分开
     *      主表数据取formData.getMainData()
     *      明细表数据取formData.getTableDatas()
     * 不传或false返回DataDetail格式数据
     *      数据取formData.getDataDetails()
     */
    condition.setNeedSimpleFormData(true);

    //传true则返回主表/明细表的表名称，字段的data_key
    condition.setNeedDetailTableInfo(true);

    Map<String,Object> result = formSecondServiceRest.getFormData(condition,employee);
}
```

#### 2. 查询明细表的有序表单信息

**接口详情：**

```java
    /**
     * 获取明细表顺序
     * 按showOrder createTime  id 进行排序
     *
     * @param param    查询参数 formId 和 subFormIds 必传一个
     * @param employee 租户信息
     * @return java.util.List<com.weaver.common.form.metadata.subform.SubForm>
     */
    List<SubForm> listSubFormByOrder(SubFormParam param, SimpleEmployee employee);

```

**参数说明：**

| 参数名 | 具体属性 | 必传 | 类型 | 描述 |
| --- | --- | --- | --- | --- |
| param |  | 是 | com.weaver.common.form.param.SubFormParam | 明细表参数 |
| param<br>的具体属性 | formId | 是 | Long | 表单ID |
| subFormIds | 否 | List | 明细表ID集合 |  |
| hasDel | 否 | Boolean | 是否包含已删除的（null、false 都是不包含） |  |
| employee |  | 是 | com.weaver.teams.domain.user.SimpleEmployee | 用户信息（必须包含id和tenantKey） |

**返回值：**

| 类型 | 具体属性 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- |
| List |  | java.util.List<com.weaver.common.form.metadata.subform.SubForm> | 明细表的表集合 |
| SubForm<br>的具体属性 | form | Form | 表单主表 |
| title | String | 子表标题 |  |
| describe | String | 子表描述 |  |
| subFormId | String | 子表描述 |  |
| defaultRows | Long | 默认行 |  |
| isDelete | boolean | 是否为删除 |  |
| relateDataTable | com.weaver.common.form.metadata.RelateDataTable | 关联数据表 |  |
| layoutDetail | String | 控件布局明细 |  |
| layoutComponentId | String | EB组件Id |  |
| dataKey | String | 子表别名 |  |
| otherProperties | String | 子表属性 |  |
| showOrder | Double | 子表顺序 |  |
| createTime | Date | 创建时间 |  |
| sortColumns | String | 明细表排序列 |  |
| tableName | String | 明细表物理表名称 |  |
| deleteType | Integer | 删除状态 |  |
| defaultExpandRow | Boolean | 二级明细表是否展开 |  |

**对接示例：**

```java
import com.weaver.common.form.api.rest.second.FormSecondServiceRest;
@RpcReference(group = "workflow")
FormSecondServiceRest formSecondServiceRest;

public void Test() {

    SimpleEmployee employee = new SimpleEmployee();
    employee.setId(918327792617603074L);
    employee.setTenantKey("t82kg113nu");

    SubFormParam subFormParam = new SubFormParam();
    //formId 必传
    subFormParam.setFormId(1L);
    List<SubForm> subFormList = formSecondServiceRest.listSubFormByOrder(subFormParam,getCurrentUser());
}
```

#### 3. 查询选项类字段的选项数据

**接口详情：**

```java
     /**
     * 查询表单选项类型字段的选项信息，支持选项模版
     *
     * @param param    可以只传fieldId或fieldIds数组
     * @param employee 租户信息
     * @return key为字段id，value为选项集合
     *
     */
    Map<Long, List<FieldOption>> listFormFieldOptions(FieldOptionSearchEntity param, SimpleEmployee employee);

```

**参数说明：**

| 参数名 | 必传 | 类型 | 描述 |
| --- | --- | --- | --- |
| formId | 是 | Long | 表单ID |
| fieldIds | 否 | List<Long> | 字段ID集合 |
| employee | 是 | SimpleEmployee | 用户信息 |

**返回值：**

| 类型 | 具体字段 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- |
| Map<String, List<FieldOptionDto>> |  | **com.weaver.common.form.dto.field.option.FieldOptionDto** | key为字段ID<br>value为选项列表 |
| FieldOptionDto<br>的具体属性 | selectionId | Long | 选项-ID |
| fieldId | Long | 选项-字段ID |  |
| name | String | 选项-名称 |  |
| uid | String | 选项-UID |  |
| styleConfig | JSONObject | 选项-样式类型 |  |
| score | String | 选项-分数 |  |
| other | Boolean | 选项-是否是其他 |  |
| order | Double | 选项-顺序 |  |
| parent | Long | 选项-父选项 |  |
| archive | Boolean | 选项-是否封存 |  |
| optionNum | Integer | 选项-名额 |  |
| optionNumber | Integer | 选项-名额 |  |
| overNum | Integer | 选项-剩余名额 |  |
| defOption | Boolean | 选项-默认选项 |  |
| objId | String | 选项-关联的文件的ID |  |
| subCompanyCatalogues | List | 选项-关联的分部目录集合 |  |
| catalogue | FieldOptionSubCompanyRelateDirDto | 选项-关联目录 |  |
| divisionBranch | Boolean | 选项-是否区分分部 |  |
| extra | JSONObject | 选项-扩展属性 |  |
| children | List | 选项-子选项集合 |  |
| isLimit | Boolean | 字段-是否控制选项次数 |  |
| parentOptionIds | List | 字段-父选项ids |  |
| valueKey | String | 字段-选项valueKey |  |
| labelObj | Map<String, Object> | 多语言标签对象 |  |
| deleteType | Boolean | 是否删除 |  |

**对接示例：**

```java
import com.weaver.common.form.api.rest.second.FormSecondServiceRest;
@RpcReference(group = "workflow")
FormSecondServiceRest formSecondServiceRest;

public void Test() {

    SimpleEmployee employee = new SimpleEmployee();
    employee.setId(918327792617603074L);
    employee.setTenantKey("t82kg113nu");

    Long formId = 1L;
    List<Long> fieldIds = new ArrayList<>();
    fieldIds.add(2L);
    FieldOptionSearchEntity param = new FieldOptionSearchEntity();
    param.setFormId(formId);
    param.setFieldIds(fieldIds);
    Map<Long, List<FieldOption>> fieldOptions = formSecondServiceRest.listFormFieldOptions(param, employee);

}
```

#### 4. 查询表单的附件字段目录信息

**接口详情：**

```java
    /**
     * 查询表单的附件字段目录信息
     *
     * @param param    查询参数formId必传 refId流程业务需要传递流程id
     * @param employee 租户信息
     * @return 每个字段的附件目录信息，key为fieldId
     */
    Map<String, FormAttachConfigDto> queryRunAttachConfig(FormAttachmentParam param, SimpleEmployee employee);


```

**参数说明：**

| 参数名 |  | 必传 | 类型 | 描述 |
| --- | --- | --- | --- | --- |
| param |  | 是 | **com.weaver.common.form.setting.attachment.param.FormAttachmentParam** | 参数 |
| FormAttachmentParam<br>具体属性 | formId | 是 | Long | 表单ID |
| fieldId | 否 | Long | 字段ID |  |
| refId | 否 | String | 关联/引用id，或为审批流程id、或为上报id |  |
| type | 否 | String | 功能类型，对应枚举OptionType,<br>获取所有通用设置, 列表-上传目录设置等 |  |
| configType | 否 | int | 设置类型，0为通用，1为自定义 |  |
| relateMap | 否 | Map<String, String> | 复制对应关系 |  |
| apiModule | 否 | String | 模块信息 |  |
| formIds | 否 | List | 表单集合（批量） |  |
| needAllConfigs | 否 | Boolean | 是否需要所有配置 |  |
| formId | 否 | Long | 表单ID |  |
| customParam | 否 | Map<String, Object> | 自定义参数 |  |
| module | 是 | String | 业务模块 |  |
| employee |  | 是 | SimpleEmployee | 用户信息 |

**返回值：** 

| 类型 | 具体字段 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- |
| Map<String, FormAttachConfigDto> |  | **com.weaver.common.form.setting.attachment.dto.FormAttachConfigDto** | key为字段ID<br>value为选项列表 |
| FormAttachConfigDto<br>的具体属性 | folderSelectType | Integer | 附件上传目录0：固定目录 1：选项关联 |
| folderId | Long | 附件上传目录id 固定目录为目录id，选择目录为字段id |  |
| optionId | Long | 选项关联-字段id |  |
| customLimitFormat | String | 限制附件上传格式-自定义的文件扩展名 多个请用逗号隔开，如: txt, pdf, mp3等 |  |
| attmentSizeLimit | Integer | 附件大小限制下拉框 0 1MB,1 5MB,2 10MB,3 20MB ,4 50MB,5 100MB, 6 自定义 |  |
| customAttmentSize | String | 自定义附件大小 |  |
| forbinBatchDownload | Boolean | 禁止附件批量下载0 关闭，1 开启 |  |
| secLevel | Boolean | 密级 默认开启 无法关闭 |  |
| showFormat | Integer | 显示格式 0 密级和保密期限 1仅密级 |  |
| attachUploadUser | Boolean | 启用附件上传人 |  |
| attachUploadTime | Boolean | 启用附件上传时间 |  |
| attachFileSize | Boolean | 启用附件大小 |  |
| displayTip | Boolean | 启用附件提示语 |  |
| fieldId | Long | 关联字段id |  |
| fileMenuValue | String | 附件菜单字符串 |  |
| formId | Long | formId |  |
| refId | String | 关联/引用id，或为审批流程id、或为上报id |  |
| module | String | 业务module |  |
| tenantKey | String | 租户key |  |
| customParam | Map<String, Object> | 自定义参数 |  |

**对接示例：**

```java
import com.weaver.common.form.api.rest.second.FormSecondServiceRest;
@RpcReference(group = "workflow")
FormSecondServiceRest formSecondServiceRest;

public void Test() {
    SimpleEmployee employee = new SimpleEmployee();
    employee.setId(918327792617603074L);
    employee.setTenantKey("t82kg113nu");
    
    FormAttachmentParam param = new FormAttachmentParam();
    param.setFormId(1L);
    param.setFieldId(2L);
    Map<String, FormAttachConfigDto> attachConfig = formSecondServiceRest.queryRunAttachConfig(param, employee);
}
```

#### 5.根据关联/选项/级联控件名称查询 控件信息接口

**接口详情：**

```java
    /**
     * @description 根据关联/选项/级联控件名称查询 控件信息接口
     * @param entitys 查询入参
     * @param employee 人员信息
     **/
    Map<String, Map<String, RelateData>> getOptionInfoByParam(List<SearchRelateEntity> entitys, SimpleEmployee employee);
```

**参数说明：**

| 参数名 |  | 必传 | 类型 | 描述 |
| --- | --- | --- | --- | --- |
| param |  | 是 | **com.weaver.common.form.excel.model.SearchRelateEntity** | 参数 |
| SearchRelateEntity<br>具体属性 | module | 是 | String | 业务模块 |
| names | 是 | List | 关联名称 |  |
| ids | 否 | List | 控件id集合 |  |
| searchByNames | 否 | boolean | 查询方式 true = names ;false =ids |  |
| sFormId | 否 | Long | 关联的表单id |  |
| optionIds | 否 | List | 关联id |  |
| fieldLayout | 否 | FieldLayout | 关联eb 数据查询需要字段布局属性 |  |
| customParam | 否 | Map<String, Object> | 查询拓展参数 |  |
| type | 否 | String | 关联浏览类型 |  |
| templateId | 否 | Long | 模型id |  |
| componentKey | 否 | String | 控件类型 |  |
| levelSeparator | 否 | String | 层级-分隔符 |  |
| formBrowserParam | 否 | FormBrowserParam | 标准表单浏览参数 |  |
| fieldId | 否 | Long | 字段id |  |
| formField | 否 | FormField | 表单字段对象 |  |
| appId | 否 | Long | 应用id |  |
| fuzzySearch | 否 | Boolean | 是否模糊查询 |  |
| browserDataParam | 否 | BrowserDataParam | 浏览按钮数据自定义 |  |
| employee |  | 是 | SimpleEmployee | 用户信息 |

**返回值：**

| 类型 | 具体字段 | 类型所属包路径 | 描述 |
| --- | --- | --- | --- |
| Map<String, Map<String,RelateData>> |  | **com.weaver.common.form.excel.model.RelateData** | key为字段ID<br>value为选项列表 |
| 具体属性 | name | String | 查询数据名称 |
| count | int | 匹配到的条数 |  |
| relateId | String | 数据id |  |
| targetName | String | 匹配到的数据名称 |  |
| relateInfo | String[] | 单选导入时重名下拉值 |  |

**对接示例：**

```java
import com.weaver.common.form.api.rest.second.FormSecondServiceRest;
@RpcReference(group = "workflow")
FormSecondServiceRest formSecondServiceRest;

public void Test() {
    SimpleEmployee employee = new SimpleEmployee();
    employee.setId(918327792617603074L);
    employee.setTenantKey("t82kg113nu");
    
    List<SearchRelateEntity> entitys = new ArrayList<>();
    SearchRelateEntity entity = new SearchRelateEntity();
    entity.setFieldId(1159533851598372865L);
    entity.setNames(new ArrayList<>(Arrays.asList("选项1")));
    entitys.add(entity);
    Map<String, Map<String, RelateData>> res = formDataOptionService.getOptionInfoByParam(entitys,employee);
}

```
