团财业务承保统计及手续费核对(第一阶段)— 后端接口清单
需求编号:BYXM-1891
范围:3.2.1 团财承保清单导入、3.2.1 团财批改清单导入、3.2.1 团财保单查询(已存在)、3.2.1 团财批单查询(新增)、3.2.1 影像件上传(新增)、3.2.1 团财保费预估表(暂不实现)。
不包含:3.2.2 产险对账单优化(下次上线)。
BasePath:/property_insurance(承保/批改/保单/批单),影像件上传单独一个控制器:/property_image_upload
鉴权:与现有所有 Controller 一致,从UserInfoUtil.getUserInfo()取登录信息(无需在入参里传 token)。
响应统一格式:Result(code/msg/data)。成功码000000,业务异常码000001或000002。
一、导入模板与字段定义(必读)
模板由业务方提供,共 4 份:
| 模板 | 列数 | 表头结构 | 数据起始行 | 落库表 |
|---|---|---|---|---|
| 产险车险承保清单导入模板 | 73 | 第 1 行分组标题(合并单元格)+ 第 2 行字段名 | 第 3 行 | pi_policy_car_stg |
| 产险非车承保清单导入模板 | 62 | 第 1 行分组标题 + 第 2 行字段名 | 第 3 行 | pi_policy_nocar_stg |
| 产险非车被保人清单导入模板 | 6 | 第 1 行字段名 | 第 2 行 | pi_policy_insured_stg(新建) |
| 产险批改清单导入模板 | 15 | 第 1 行分组标题 + 第 2 行字段名 | 第 3 行 | pi_endorse_car_stg / pi_endorse_nocar_stg |
约定:
- 只允许
.xlsx;禁止修改表头,后端会逐列校验表头,不一致直接拒绝整份文件(错误码000002)。 - 表中“必录”= 模板里字体标红的字段,与需求 3.2.1.1.1.2 / 3.2.1.1.1.3 一致。
- 日期一律
yyyy-MM-dd;证件有效止期可填汉字“长期”,后端落9999-12-31。 - 非车保单“被保人类型=团体”时,被保人名称等可不录,改由被保人清单导入。
1.1 车险承保清单(73 列)
表头行 = 第 2 行,数据自第 3 行开始。
| 列号 | 信息分组 | 字段名 | 必录 |
|---|---|---|---|
| 1 | 保单基本信息 | 投保单号 | 否 |
| 2 | 保单基本信息 | 保单号 | 是 |
| 3 | 保单基本信息 | 保单状态 | 否 |
| 4 | 保单基本信息 | 投保日期 (格式:yyyy-MM-dd) | 否 |
| 5 | 保单基本信息 | 承保日期 (格式:yyyy-MM-dd) | 是 |
| 6 | 保单基本信息 | 生效日期 (格式:yyyy-MM-dd) | 否 |
| 7 | 保单基本信息 | 保险公司代码 | 是 |
| 8 | 保单基本信息 | 保险公司名称 | 否 |
| 9 | 保单基本信息 | 业务形式 | 是 |
| 10 | 保单基本信息 | 业务属性 | 否 |
| 11 | 业务员信息 | 归属业务员代码 | 否 |
| 12 | 业务员信息 | 归属业务员姓名 | 否 |
| 13 | 车辆信息 | 车牌号码 | 否 |
| 14 | 车辆信息 | 品牌型号 | 否 |
| 15 | 车辆信息 | 车型描述 | 否 |
| 16 | 车辆信息 | 车架号 | 否 |
| 17 | 车辆信息 | 发动机号 | 否 |
| 18 | 车辆信息 | 初次登记日期 | 否 |
| 19 | 车辆信息 | 使用性质 | 否 |
| 20 | 车主信息 | 车主名称 | 否 |
| 21 | 车主信息 | 车主证件类型 | 否 |
| 22 | 车主信息 | 车主证件号码 | 否 |
| 23 | 车主信息 | 移动电话 | 否 |
| 24 | 投保人信息 | 投保人类型 | 是 |
| 25 | 投保人信息 | 投保人名称 | 是 |
| 26 | 投保人信息 | 投保人证件类型 | 否 |
| 27 | 投保人信息 | 投保人证件号码 | 否 |
| 28 | 投保人信息 | 证件有效止期 (格式yyyy-MM-dd,长期录入汉字“长期”) | 否 |
| 29 | 投保人信息 | 性别 (投保人类型为“个人”录入) | 否 |
| 30 | 投保人信息 | 国籍 (投保人类型为“个人”录入) | 否 |
| 31 | 投保人信息 | 移动电话 (投保人类型为“个人”录入) | 否 |
| 32 | 投保人信息 | 职业 (投保人类型为“个人”录入) | 否 |
| 33 | 投保人信息 | 联系地址 (省市区+详细地址) | 否 |
| 34 | 投保人信息 | 经营范围 (投保人类型为“企业”录入) | 否 |
| 35 | 投保人信息 | 法定代表人/负责人名称 (投保人类型为“企业”录入) | 否 |
| 36 | 投保人信息 | 授权业务人员名称 (投保人类型为“企业”录入) | 否 |
| 37 | 投保人信息 | 授权业务人员证件类型 (投保人类型为“企业”录入) | 否 |
| 38 | 投保人信息 | 授权业务人员证件号码 (投保人类型为“企业”录入) | 否 |
| 39 | 投保人信息 | 授权业务人员证件有效止期 (投保人类型为“企业”录入) | 否 |
| 40 | 投保人信息 | 授权业务人员移动电话 (投保人类型为“企业”录入) | 否 |
| 41 | 被保人信息 | 被保人类型 | 否 |
| 42 | 被保人信息 | 被保险人与投保人关系 (“本人”无需录入被保人其他信息) | 否 |
| 43 | 被保人信息 | 被保人名称 | 是 |
| 44 | 被保人信息 | 被保人证件类型 | 否 |
| 45 | 被保人信息 | 被保人证件号码 | 否 |
| 46 | 被保人信息 | 证件有效止期 (格式yyyy-MM-dd长期录入汉字“长期”) | 否 |
| 47 | 被保人信息 | 性别 (被保人类型为“个人”录入) | 否 |
| 48 | 被保人信息 | 国籍 (被保人类型为“个人”录入) | 否 |
| 49 | 被保人信息 | 移动电话 | 否 |
| 50 | 被保人信息 | 职业 (被保人类型为“个人”录入) | 否 |
| 51 | 被保人信息 | 联系地址 (省市区+详细地址) | 否 |
| 52 | 受益人信息 | 受益人标志 (“法定受益人”无需录入后续受益人信息) | 否 |
| 53 | 受益人信息 | 受益人类型 | 否 |
| 54 | 受益人信息 | 受益人与被保人关系 (“本人”无需录入后续受益人信息) | 否 |
| 55 | 受益人信息 | 受益人名称 | 否 |
| 56 | 受益人信息 | 受益人证件类型 | 否 |
| 57 | 受益人信息 | 受益人证件号码 | 否 |
| 58 | 受益人信息 | 证件有效止期 (格式yyyy-MM-dd长期录入汉字“长期”) | 否 |
| 59 | 受益人信息 | 性别 (受益人类型为“个人”录入) | 否 |
| 60 | 受益人信息 | 国籍 (受益人类型为“个人”录入) | 否 |
| 61 | 受益人信息 | 移动电话 | 否 |
| 62 | 受益人信息 | 职业 (受益人类型为“个人”录入) | 否 |
| 63 | 受益人信息 | 联系地址 (省市区+详细地址) | 否 |
| 64 | 险种信息 | 险种代码 | 是 |
| 65 | 险种信息 | 险种名称 | 是 |
| 66 | 险种信息 | 险种大类 | 否 |
| 67 | 险种信息 | 险种小类 | 否 |
| 68 | 险种信息 | 保险金额 | 否 |
| 69 | 险种信息 | 险种保费(含税) | 是 |
| 70 | 险种信息 | 险种保费(不含税) | 否 |
| 71 | 险种信息 | 保险起期 (格式yyyy-MM-dd) | 否 |
| 72 | 险种信息 | 保险止期 (格式yyyy-MM-dd) | 否 |
| 73 | 险种信息 | 缴费方式 | 否 |
1.2 非车承保清单(62 列)
表头行 = 第 2 行,数据自第 3 行开始。
| 列号 | 信息分组 | 字段名 | 必录 |
|---|---|---|---|
| 1 | 保单基本信息 | 投保单号 | 否 |
| 2 | 保单基本信息 | 保单号 | 是 |
| 3 | 保单基本信息 | 保单状态 | 否 |
| 4 | 保单基本信息 | 投保日期 (格式:yyyy-MM-dd) | 否 |
| 5 | 保单基本信息 | 承保日期 (格式:yyyy-MM-dd) | 是 |
| 6 | 保单基本信息 | 生效日期 (格式:yyyy-MM-dd) | 否 |
| 7 | 保单基本信息 | 保险公司代码 | 是 |
| 8 | 保单基本信息 | 保险公司名称 | 否 |
| 9 | 保单基本信息 | 业务形式 | 是 |
| 10 | 保单基本信息 | 业务属性 | 否 |
| 11 | 业务员信息 | 归属业务员代码 | 否 |
| 12 | 业务员信息 | 归属业务员姓名 | 否 |
| 13 | 投保人信息 | 投保人类型 | 是 |
| 14 | 投保人信息 | 投保人名称 | 是 |
| 15 | 投保人信息 | 投保人证件类型 | 否 |
| 16 | 投保人信息 | 投保人证件号码 | 否 |
| 17 | 投保人信息 | 证件有效止期 (格式yyyy-MM-dd,长期录入汉字“长期”) | 否 |
| 18 | 投保人信息 | 性别 (投保人类型为“个人”录入) | 否 |
| 19 | 投保人信息 | 国籍 (投保人类型为“个人”录入) | 否 |
| 20 | 投保人信息 | 移动电话 (投保人类型为“个人”录入) | 否 |
| 21 | 投保人信息 | 职业 (投保人类型为“个人”录入) | 否 |
| 22 | 投保人信息 | 联系地址 (省市区+详细地址) | 否 |
| 23 | 投保人信息 | 经营范围 (投保人类型为“企业”录入) | 否 |
| 24 | 投保人信息 | 法定代表人/负责人名称 (投保人类型为“企业”录入) | 否 |
| 25 | 投保人信息 | 授权业务人员名称 (投保人类型为“企业”录入) | 否 |
| 26 | 投保人信息 | 授权业务人员证件类型 (投保人类型为“企业”录入) | 否 |
| 27 | 投保人信息 | 授权业务人员证件号码 (投保人类型为“企业”录入) | 否 |
| 28 | 投保人信息 | 授权业务人员证件有效止期 (投保人类型为“企业”录入) | 否 |
| 29 | 投保人信息 | 授权业务人员移动电话 (投保人类型为“企业”录入) | 否 |
| 30 | 被保人信息 | 被保人类型 (团体无需录入被保人信息,通过被保人清单导入) | 否 |
| 31 | 被保人信息 | 被保险人与投保人关系 (“本人”无需录入被保人其他信息) | 否 |
| 32 | 被保人信息 | 被保人名称 | 是 |
| 33 | 被保人信息 | 被保人证件类型 | 否 |
| 34 | 被保人信息 | 被保人证件号码 | 否 |
| 35 | 被保人信息 | 证件有效止期 (格式yyyy-MM-dd长期录入汉字“长期”) | 否 |
| 36 | 被保人信息 | 性别 (被保人类型为“个人”录入) | 否 |
| 37 | 被保人信息 | 国籍 (被保人类型为“个人”录入) | 否 |
| 38 | 被保人信息 | 移动电话 | 否 |
| 39 | 被保人信息 | 职业 (被保人类型为“个人”录入) | 否 |
| 40 | 被保人信息 | 联系地址 (省市区+详细地址) | 否 |
| 41 | 受益人信息 | 受益人标志 (“法定受益人”无需录入后续受益人信息) | 否 |
| 42 | 受益人信息 | 受益人类型 | 否 |
| 43 | 受益人信息 | 受益人与被保人关系 (“本人”无需录入后续受益人信息) | 否 |
| 44 | 受益人信息 | 受益人名称 | 否 |
| 45 | 受益人信息 | 受益人证件类型 | 否 |
| 46 | 受益人信息 | 受益人证件号码 | 否 |
| 47 | 受益人信息 | 证件有效止期 (格式yyyy-MM-dd长期录入汉字“长期”) | 否 |
| 48 | 受益人信息 | 性别 (受益人类型为“个人”录入) | 否 |
| 49 | 受益人信息 | 国籍 (受益人类型为“个人”录入) | 否 |
| 50 | 受益人信息 | 移动电话 | 否 |
| 51 | 受益人信息 | 职业 (受益人类型为“个人”录入) | 否 |
| 52 | 受益人信息 | 联系地址 (省市区+详细地址) | 否 |
| 53 | 险种信息 | 险种代码 | 是 |
| 54 | 险种信息 | 险种名称 | 是 |
| 55 | 险种信息 | 险种大类 | 否 |
| 56 | 险种信息 | 险种小类 | 否 |
| 57 | 险种信息 | 保险金额 | 否 |
| 58 | 险种信息 | 险种保费(含税) | 是 |
| 59 | 险种信息 | 险种保费(不含税) | 否 |
| 60 | 险种信息 | 保险起期 (格式yyyy-MM-dd) | 否 |
| 61 | 险种信息 | 保险止期 (格式yyyy-MM-dd) | 否 |
| 62 | 险种信息 | 缴费方式 | 否 |
1.3 非车被保人清单(6 列)
表头行 = 第 1 行,数据自第 2 行开始;一个保单号可有多行。
| 列号 | 信息分组 | 字段名 | 必录 |
|---|---|---|---|
| 1 | 保单号 | 是 | |
| 2 | 被保人名称 | 否 | |
| 3 | 被保人证件类型 | 是 | |
| 4 | 被保人证件号码 | 是 | |
| 5 | 证件有效止期 (格式yyyy-MM-dd长期录入汉字“长期”) | 否 | |
| 6 | 移动电话 | 否 |
1.4 批改清单(15 列)
表头行 = 第 2 行,数据自第 3 行开始;一个保单号可有多行(一行为一个批单险种)。
| 列号 | 信息分组 | 字段名 | 必录 | 落库字段 |
|---|---|---|---|---|
| 1 | 批单基本信息 | 保单号 | 是 | policy_no |
| 2 | 批单基本信息 | 批单号 | 是 | endorse_no |
| 3 | 批单基本信息 | 批单承保日期 (格式:YYYY-MM-DD) | 是 | accept_date |
| 4 | 批单基本信息 | 批单生效日期 (格式:YYYY-MM-DD) | 否 | generate_date |
| 5 | 批单基本信息 | 归属业务员代码 | 否 | handler_code |
| 6 | 批单基本信息 | 归属业务员姓名 | 否 | handler_name |
| 7 | 批单险种信息 | 险种代码 | 是 | risk_code |
| 8 | 批单险种信息 | 险种名称 | 是 | risk_name |
| 9 | 批单险种信息 | 险种大类 | 否 | risk_class |
| 10 | 批单险种信息 | 批单保险金额 | 否 | sum_insured |
| 11 | 批单险种信息 | 批单险种保费(含税) | 是 | premium |
| 12 | 批单险种信息 | 批单险种保费(不含税) | 否 | risk_premium_no_tax |
| 13 | 批单险种信息 | 保险起期 (格式yyyy-MM-dd) | 否 | start_date |
| 14 | 批单险种信息 | 保险止期 (格式yyyy-MM-dd) | 否 | end_date |
| 15 | 批单险种信息 | 缴费方式 | 否 | pay_type |
批改模板的两条特殊规则(与承保清单不同,务必注意):
- 模板没有“产险类型”列。 车险 / 非车由后端按「保单号」反查
car_main、no_car_main自动判定,判定结果回填property_type(车险 / 非车),并决定落到pi_endorse_car_stg还是pi_endorse_nocar_stg。前端无需也无法指定。 - 保单号必须已存在于主表。 两侧主表都查不到时该行记为错误行,错误信息为「保单号在车险/非车保单主表中不存在,请先导入承保清单」。因此批改清单必须在对应承保清单导入并审批回写之后才能导入。
其它校验:日期须为 yyyy-MM-dd;保险止期须 ≥ 保险起期;缴费方式枚举「趸交 / 按年缴 / 不定期」;金额类字段须为数字且最多 2 位小数。
二、接口清单
所有 POST 请求的 Content-Type:
application/json;charset=utf-8
所有 GET 请求的 Content-Type:URL query string
上传接口(除下载外)的 Content-Type:multipart/form-data
2.1 车险承保清单导入
落库
pi_policy_car_stg;行级错误写pi_import_error,可用 §2.5/§2.6 查。
表头校验不通过时返回code=000002,msg里会带出具体哪一列被改。
2.2 非车承保清单导入(可同时传被保人清单)
承保清单落
pi_policy_nocar_stg,被保人清单落pi_policy_insured_stg,共用同一个 batchNo,
一次提交、一次审核。需求 3.2.1.1.1.5 第 7 条:被保人类型=团体时必须上传被保人清单。
2.3 非车被保人清单单独导入(补录场景)
落库
pi_policy_insured_stg。适用于非车保单信息补录时单独补充被保人。
2.4 批改清单导入
返回:Result { code, msg, data: { batchNo, totalRows, successRows, errorRows, insuranceScope } }
落库 pi_endorse_car_stg / pi_endorse_nocar_stg(按保单号自动判定,见 §1.4 规则 1)。返回码与其他导入接口一致:表头不符 000002,解析异常 000001。
导入顺序要求:批改是对已有保单的批改,保单号必须在
car_main/no_car_main中存在,
即对应承保清单需先导入并审批回写。查不到的行计入errorRows,
可在 §2.5 批次详情里看到具体行号与错误原因。
2.5 批次详情(解析明细 + 错误明细)
2.6 批次错误明细(仅错误行)
2.7 下载导入模板
templateType 为必填参数,取值:
| templateType | 下载文件名 | 说明 |
|---|---|---|
car |
产险车险承保清单导入模板.xlsx | 73 列,双行表头 |
nocar |
产险非车承保清单导入模板.xlsx | 62 列,双行表头 |
insured |
产险非车被保人清单导入模板.xlsx | 6 列,单行表头 |
endorse |
产险批改清单导入模板.xlsx | 15 列,双行表头 |
响应:
- Content-Type:
application/octet-stream;charset=ISO8859-1 - Content-disposition:
attachment; filename=<上表文件名> - Body: xlsx 二进制
前端调用注意(容易踩):
- 必须带
templateType,且要按用户点击的是哪一类模板动态传值。四个模板对应四个入口,不要用一个固定 URL。 - 漏传参数不再抛框架异常(原来会报
MissingServletRequestParameterException,浏览器只看到 400 白页),而是返回统一业务响应,前端按普通错误提示即可:JSON复制成功{"code": "000004","msg": "缺少模板类型参数 templateType。可选值:car(车险承保清单)/ nocar(非车承保清单)/ insured(非车被保人清单)/ endorse(批改清单)。示例:/tabycore/property_insurance/import/downloadTemplate?templateType=car"} - 传了不支持的值同样返回
000004:模板类型不支持:xxx,可选值:car(车险承保清单)/ ...。 - 参数值大小写与首尾空格后端会自动归一化(
Car、car均可)。 - 下载类接口建议用
window.location.href或a[download]直接跳转,不要用 ajax(二进制流无法走 JSON 解析)。
2.8 提交审核
2.9 审核(通过/不通过)
2.10 兼容旧接口(前端如果还没改完,可以继续用)
内部均调用 auditBatch。
2.11 团财保单查询(已存在,保持不变)
2.12 团财保单详情(已存在)
2.13 团财保单导出(已存在)
2.14 团财批单查询(新增)
前端校验:承保日期、保单号/批单号至少二选一,否则
000002。
2.15 团财批单详情(新增)
2.16 团财批单导出(新增)
2.17 影像件上传(新增)
本模块完全参考寿险影像件上传(
ImageUploadController)实现,落库沿用同一张表imageupload,
与寿险只有两点差异:①接口名不同;②上传目录由imageUpload/改为propertyimage/。
因此 本次不需要新建任何表(原先准备的pi_policy_image建表 SQL 已作废并删除)。
产险当前业务只要求上传「投保人影像」一类。
落盘路径:
{oss.upload.dir}/propertyimage/{policyNo}/{影像子目录}/{yyyyMMdd + UUID + 后缀}
影像子目录映射(与寿险一致):1→notification、2→homepage、3→insurance、5→policyHolderIdCard、6→insuredIdCard、7→beneficiaryIdCard、其他→trouble
访问 URL:https://{oss.domain}/propertyimage/{policyNo}/{影像子目录}/{文件名},即imageupload.imagepathsftp的值。
失败返回:000002+ 具体原因("不支持上传此类型文件!可上传类型为:jpg,png,pdf!" / "保单号不能为空" / "系统异常,上传失败")。
2.18 影像件查询(按保单号,新增)
保单号超链接进入影像上传页面时调用,返回该保单下的全部影像件,按影像分类分组。
imageURL就是访问地址,前端预览/下载直接用它。查询失败返回000002。
2.19 影像件删除(新增)
同时删除服务器物理文件与
imageupload表记录。删完由前端重新调用 2.18 刷新。
删除失败返回
000002+ "图片删除失败!"。前端需先弹框确认"是否确定删除?"。
2.20 影像件下载(新增)
三、新增/修改的 VO 字段
PolicyEndorseListVo(产险批单列表)
字段:policyNo, endorseNo, acceptDate, generateDate, propertyType, companyName, comName, agentCode, agentName, insureName, insuredName
PolicyEndorseDetailVo(产险批单详情)
- 保单基本信息:
policyNo, policyStatus, policyAcceptDate, policyGenerateDate, companyCode, companyName, insureName, insuredName, handlerCode, handlerName, comCode, comName, propertyType, bizForm - 批单基本信息:
endorseNo, endorseAcceptDate, endorseGenerateDate, totalPremiumTax, totalPremiumNoTax, endorseHandlerCode, endorseHandlerName - 险种信息:
riskClass, riskCode, riskName, sumInsured, riskPremiumTax, riskPremiumNoTax, startDate, endDate, settleCommissionRate, settleCommissionBasis
影像件相关 VO(复用寿险已有的类,无新增)
- 入参
ImageUploadVO:影像件模块用到的字段是policyNo(保单号)、imageType(影像类型)、imageNameFromSftp(服务器文件地址/整条URL) - 出参
ImageReturnVO:imageName(文件名)、imageURL(访问地址)
PolicyEndorseQueryCondition
字段:comCode, codeName, comSubCode, comSubName, companyCode, companyName, acceptStartDate, acceptEndDate, policyNo, endorseNo, propertyType
四、建表 SQL
4.1 影像件
影像件不需要建表。
产险影像件参照寿险实现,直接复用已有的imageupload表(该表已有policyno / filetype / imagename / imagepathsftp / createtime / updatetime / createby / updateby / imagelocation字段)。
原"团财影像件上传表DDL.sql"(pi_policy_image)方案已废弃,文件已从工程中删除,无需在生产执行。
4.2 承保/批改导入(本轮新增,需在生产执行)
真实导入模板比早期占位模板多了车辆信息、车主信息、企业授权业务人员、受益人信息、险种大类/小类等字段,且非车被保人清单需要独立落表。因此新增一份增量脚本:
团财承保批改_新导入表DDL_增量.sql(工程根目录),包含两段:
| 段落 | 内容 | 适用环境 |
|---|---|---|
| 1 | 新建 pi_policy_insured_stg(非车被保人清单暂存) |
所有环境 |
| 2 | pi_policy_car_stg / pi_policy_nocar_stg 增列:车辆 7 列、车主 4 列、企业经营/授权人 7 列、受益人 12 列、险种大类/小类 2 列 |
仅存量库;全新环境执行 团财承保批改_新导入表DDL.sql 即可(CREATE 已含这些列) |
| 3 | pi_endorse_car_stg / pi_endorse_nocar_stg 增列 6 列:risk_class、sum_insured、risk_premium_no_tax、start_date、end_date、pay_type(批改清单模板 15 列中有 6 列原表没有) |
仅存量库;全新环境执行 团财承保批改_新导入表DDL.sql 即可(CREATE 已含这些列) |
已有表
pi_policy_car_stg / pi_policy_nocar_stg / pi_endorse_car_stg / pi_endorse_nocar_stg / pi_import_batch / pi_import_error / pi_endorse_car_main / pi_endorse_nocar_main通过团财承保批改_新导入表DDL.sql建好,不重复创建。
五、错误码表
| code | 含义 |
|---|---|
| 000000 | 成功 |
| 000001 | 业务异常(具体信息看 msg) |
| 000002 | 模板表头校验不通过(列数/字段名与系统模板不一致,msg 里带出具体列);或前端校验不通过 |
| 000003 | 文件解析失败(非 xlsx / 模板格式错) |
| 000004 | 数据回写失败(详见 msg;通常对应某条具体的 stg 行 id) |
| 000005 | 权限不足(非本公司数据) |
| 000099 | 系统异常 |
六、与前端的约定
所有 POST 请求的 body 字段命名沿用驼峰式(与 VO @Data 注解生成的一致)。
导出接口用 GET + queryString;前端如需复杂条件可以用 POST 后端再加。
任何 /upload 接口超时统一 30 秒,前端请用 upload progress 反馈用户。
审核回写是异步的还是同步的?
- 当前实现:审核接口(
/audit、/approve)在事务内同步完成 car_main / no_car_main 的回写;批量 200 行以内 < 5 秒,超过 200 行会返回000004并提示"请分批导入"。 - 后续如果需要异步版本再扩展。
- 当前实现:审核接口(
同一保单号已存在时再导入 → 后端拒绝并提示"保单已存在",不会覆盖。
受益人=指定受益人 时,导入校验要求"受益人姓名、证件、份额"三项;前端录入时也应该在校验层把这三项联动起来。
后端会复用
UserInfoUtil.getUserInfo()取 comCode / operatorCode;前端传过来的 comCode 仅作为展示用,不参与过滤(避免越权)。影像件模块(
/property_image_upload/*)与寿险影像件上传(/ImageUpload/*)是两套独立接口、同一张imageupload表,只是存储目录不同(propertyimage/vsimageUpload/)。前端请按产险这套接口对接,不要混用。影像件预览:直接用 2.18 返回的
imageURL打开即可(走oss.domain);如果浏览器需要强制下载,用 2.20 的下载接口。模板必须走下载接口拿(
?templateType=car|nocar|insured|endorse,templateType必填),不要用前端自己存的旧模板。后端会逐列校验表头,任何改名/删列/加列都会直接拒绝整份文件并返回000002,msg 里会说明第几列对不上。车险、非车是两套模板两套接口(73 列 vs 62 列),不能混用;识别方式就是下载时传的
templateType。非车上传页支持一个承保清单 + 多个被保人清单,一起
multipart提交(file+insuredFiles[]),后端合并到同一个batchNo,失败详情里会按文件名+行号定位。证件有效止期允许填汉字“长期”,后端落
9999-12-31,前端回显时按这个约定处理。批改清单导入(§2.4)模板不带“产险类型”列,前端不要自行加列,也不要让用户选车险/非车——后端按保单号自动判定并在返回的错误明细里说明原因。导入顺序上,需提示用户先导入对应承保清单并完成审批回写,否则批改行会因保单号不存在而失败。
旧版前端 JS 里的产险调用已与后端不一致,请按下表更新(仓库
static/dist下打包产物仍含旧调用):旧前端调用 现状 应改为 GET /property_insurance/import/downloadTemplate(无参数)会报缺参数 带 `?templateType=car POST /property_insurance/import/policy/upload后端已删除 POST /import/car/upload或/import/nocar/uploadGET /property_insurance/import/batch/auditHistory后端无此端点 暂无,需确认是否仍需要(需后端补) POST /property_insurance/import/batch/delete后端无此端点 暂无,需确认是否仍需要(需后端补) POST /property_insurance/import/batch/audit保留 也可改用 /batch/approve、/batch/rejectPOST /property_insurance/import/endorse/upload正常 不变 POST /property_insurance/import/batch/list、/detail、/errors、/submit正常 不变 其中
auditHistory、batch/delete两个端点后端从未实现,若业务确实需要请明确后由后端补。