接口分析
我们先来想想配置一个pdf模板需要什么接口
- 需要检查这个pdf模板之前是否已经有上传过了,也就是版本的叠加,如果是同一个pdf模板,需要增加版本以及设置默认版本信息
- 每一页模板上传上来,需要对这个模板进行分析,读取模板表单的字段以及字段属性(主要是为了简化一些输入,例如长度限制、字段名称等可以直接获取到pdf表单的文本域属性进行预填充)
- 对模板表单的字段需要进行合并或者针对不同类型的字段进行一些配置,比如说start__time_y,start_time_d,start_time_m,在模板表单里面是三个字段,但是这三个字段在移动端,只需要合并为一个字段start_time就够了,所以在每一页的表单配置完之后,需要对每一页的表单进行处理
- 需要对表单字段进行归类,例如title_dept_name,title_doc_no,表头部门名称和表头文本编号需要归类为【发文版头】,移动端可以根据这个分类信息进行分隔展示
- 需要提供删除模板的方法
- 保存模板
接口实现
- 获取模板版本号 GET /checkTemplate
根据模板名称,查找是否已经有同个名称的模板,如果有同个名称的模板,返回表名和版本号(递增的版本号),表名和版本号前端控制不可修改
请求参数:
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
name | String | Yes | 模板名称 |
响应内容:
{
"success": true,
"message": null,
"code": 200,
"timestamp": 1590649811153,
"data": {
"isNew": true,
"version": "1.0.0",
"id": "",
"tableName": ""
},
"i18n": null
}
- 上传模板的每一页获取模板表单属性 POST /uploadTemplate
主要做了以下几步
- 判断是否是pdf文件
- 判断是否有存在表单字段并分析文件表单字段
- 保存文件
- 构造返回数据 表单字段列表(字段属性:字段名、长度、是否必输、字段类型)
请求参数:
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
file | File | Yes | 模板文件 |
formData | Object | Yes | {"version":"","tableName":""}主要是接收前一步骤的版本号和表名信息 |
响应内容:
{
// 读取pdf文件的表单预填充内容 具体使用在pdf填充那边详细说明
"fieldDatas": [
{
// 字段大小
"fieldSize": 20,
// 输入提示
"hintName": "请输入/选择其他联系方式",
"id": "e73d0629-684b-4dbf-83d0-80d8d7570da9",
// 字段数据库名称(这里建议pdf表单模板的字段名称和数据库一致)
"name": "other_contact",
// 父级id
"parentId": "b8caa4b5-4bca-4a93-b2b7-9a160e902f08",
// 移动端左侧输入字段提示
"preName": "其他联系方式",
// 字段类型 **具体有多少类型后续说明**
"fieldType": 0,
// 分类名称
"classifyName": "",
// 是否默认取值
"isDefaultTake": 0,
// 默认取值名称
"defaultTakeName": "",
// 字段备注
"fieldRemark": "",
// 字段条件
"condition": "",
// 是否必输
"isRequired": 0,
// 字段排序号
"displayNum": 0,
// 多行取值字段
"multiLineField": "",
// 分类排序号
"classifyDisplayNum": 0,
},
],
"id": "123",
// 文件模板信息
"item": {
// 这个模板的所有字段,后续填充需要使用到
"fields": "[\"other_contact\",\"title_dept_name\",\"end_d\",\"end_h\",\"check_person_one_m\",\"law_enforcement_num_second\",\"check_person_one_y\",\"end_m\",\"liaison_phone\",\"sum_page\",\"licence_name\",\"concerned_person_time_y\",\"check_person\",\"witness_time_m\",\"page1\",\"end_min\",\"concerned_person_sign\",\"end_y\",\"credit_code\",\"witness_time_y\",\"concerned_person_name\",\"place\",\"concerned_person_time_m\",\"check_person_one\",\"contact_address\",\"start_h\",\"legal_person\",\"concerned_person_time_d\",\"address\",\"start_d\",\"witness_time_d\",\"start_min\",\"investigators_first\",\"witness\",\"concerned_reply1\",\"check_person_two\",\"start_y\",\"id_num\",\"inform_party_presence1\",\"investigators_second\",\"inform_party_presence0\",\"start_m\",\"law_enforcement_num_first\",\"check_person_one_d\"]",
// 文件名
"fileName": "live_transcript1.pdf",
// 文件存储路径
"filePath": "\\doc1111\\live_transcript\\1.0.0\\b8caa4b5-4bca-4a93-b2b7-9a160e902f08.pdf",
// 文件大小
"fileSize": 381762,
// 文件id,作为字段表的父id
"id": "b8caa4b5-4bca-4a93-b2b7-9a160e902f08",
// 模板表的id
"parentId": "123",
// 是否多页
"isMulti": 0,
// 排序号
"displayNum": 0,
//多页条件判断字段
"conditionField": "",
// 多页判断条件
"multiCondition": "",
}
}
- 处理模板数据 POST /dealTemplates
将每一页的数据填写完一些规则之后,调用这个方法进行处理,主要对字段进行合并并且设置字段取值规则。
字段合并的规则:
如果需要字段合并,那么在前面一个接口,获取到pdf表单属性后,需要设置多行取值字段multiLineField,比如说start_y,start_d,start_m,start_min,start_h 的取值字段都是start_time 那么最后这五个字段合并后的字段是start_time,并且最后的start_time字段长度为这几个字段的字段长度的合并值。
构造后的原先字段取值规则:
{
"start_h": {
"condition": "",
"size": 2
},
"start_y": {
"condition": "",
"size": 4
},
"start_m": {
"condition": "",
"size": 2
},
"start_d": {
"condition": "",
"size": 2
},
"start_min": {
"condition": "",
"size": 2
}
}
记录这个规则主要是为了后续取值使用
循环表单字段的时候,什么时候结束这个字段的构造呢?
-
一种情况是遇到其他没有取值的字段
例如遇到下一个字段是address 那么start_time这个字段就结束了 可以构造了
-
一种是遇到其他有取值字段但是取值字段不是这个字段的字段
例如遇到下一个字段是end_y 但是取值字段是end_time 那么start_time这个字段也结束了 可以构造了
请求参数:
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
List<TemplateResultDTO> dataList | List | Yes | 表单模板每一页的集合 |
TemplateResultDTO:这个数据传输对象就是上面一个接口返回的值
响应内容:
返回内容为处理后的数据,和上个接口一样
- 保存模板数据 POST /saveTemplate
这个接口主要做了以下事情:
- 如果是不是新的模板,并且这个是否默认模板字段选择了是,那么更新旧的模板是否默认状态
- 保存模板属性
- 保存表单属性
- 构造建表语句
请求参数:
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
SaveTemplateDTO | Object | Yes | 表单模板 |
SaveTemplateDTO:
{
// 这个是模板信息
"formData": {
"name": "",
"id": "",
"isNew": false,
"isDefault": 0,
"tableName": "",
"version": ""
},
// 这个就是TemplateResultDTO的集合
"dataList": [
{
"id": "",
"item": null,
"fieldDatas": [ ]
}
]
}
响应内容:
{
"message": "",
"timestamp": 1590722343143,
"data": null,
"success": true,
"code": 200,
"i18n": null
}
- 删除模板 POST /delTemplate
这个删除模板,是一页页删除,如果需要删除整个模板,另起一个接口吧或者增加参数
请求参数:
字段 | 类型 | 是否必传 | 描述 |
---|---|---|---|
DelTemplateDTO | Object | Yes | 删除表单模板对象 |
DelTemplateDTO:
{
"version": "版本",
"tableName": "表名",
"fileId": "文件id"
}
响应内容:
{
"message": "",
"timestamp": 1590722343143,
"data": null,
"success": true,
"code": 200,
"i18n": null
}
结语
有些字段还未说明是怎么用的,我们后续文章继续讲解,有写的不对的欢迎指正。
下篇
模板管理接口定义好了,下面我们介绍下填充表单的接口
网友评论