2.14 团财批单查询(新增)
数据源:独立批单表
pi_endorse_bill(§2.4 审批后落地)+ 保单主表car_main/no_car_main。
展示口径:批改导入文件里有的字段取批单表(批单号、承保日期、生效日期、业务员代码/姓名),
其余字段取样单主表(保险公司名称、地市级机构名称、投保人名称、被保人名称、产险类型)。
列表维度是「保单号 + 批单号」,一个批单下多个险种只展示一行。
Code
复制成功
POST /property_insurance/endorse/query
Content-Type: application/json
请求体:PolicyEndorseQueryCondition
{
"comCode": "00", // 省级分公司代码(可选,不传/传 01 看全部;其余按机构前缀过滤)
"codeName": "佰盈总部", // 省级分公司名称(可选,不参与过滤)
"comSubCode": "0001", // 地市级分公司代码(可选,精确匹配)
"comSubName": "北京分公司", // 地市级分公司名称(可选,不参与过滤)
"companyCode": "PICC", // 保险公司代码(可选,精确匹配)
"companyName": "人保财险", // 保险公司名称(可选,不参与过滤)
"acceptStartDate": "2026-05-01", // 承保开始日期(与 保单号/批单号 二者必录其一)
"acceptEndDate": "2026-05-31", // 承保结束日期
"policyNo": "PICC202605001", // 保单号(可选,精确匹配)
"endorseNo": "E001", // 批单号(可选,精确匹配)
"propertyType": "1", // 1=车险 / 2=非车 / 空=全部(已合表,无需并集)
"currentPage": 1,
"pageSize": 20
}
返回:Result,data 是 Spring PageImpl(与保单查询 §2.11 完全同构,读 content + totalElements)
JSON
复制成功
{
"code": "000000",
"msg": "查询成功",
"data": {
"content": [
{
"policyNo": "PICC202605001",
"endorseNo": "E001",
"acceptDate": "2026-05-12 00:00:00",
"generateDate": "2026-05-12 00:00:00",
"propertyType": "车险",
"companyName": "人保财险",
"comName": "上海分公司本部营业部",
"agentCode": "AGENT001",
"agentName": "张三",
"insureName": "XX 物流有限公司",
"insuredName": "XX 物流有限公司"
}
],
"totalElements": 152,
"totalPages": 8,
"size": 20,
"number": 0,
"first": true,
"last": false,
"numberOfElements": 20
}
}
| code | msg | 说明 |
|---|---|---|
| 000000 | 查询成功 | |
| 000003 | 查询条件不能为空 | 未传 body |
| 000003 | 承保日期和保单号、批单号必录其一 | 两个条件都为空 |
| 000003 | 无记录 | 查询结果为空(此时 data 仍为 Page 对象,content 为空数组) |
| 000001 | 系统查询异常! | 后端异常,看服务日志 |
字段说明:
propertyType返回中文「车险 / 非车」(不再是 1/2)。comName返回去掉「天安佰盈保险销售有限公司」前缀的简称(如「上海分公司本部营业部」)。acceptDate/generateDate是Date类型,全站无 jackson 日期配置,序列化为毫秒时间戳(如1785513600000)。前端请自行格式化;直接moment(毫秒数)可用,但不要moment("1785513600000")字符串(会得到 Invalid date)。
调用示例:
JavaScript
复制成功
// api/propertyInsurance.js
export function endorseQuery(data) {
return request({ url: '/property_insurance/endorse/query', method: 'post', data });
}
// 页面
const res = await endorseQuery({ acceptStartDate, acceptEndDate, policyNo, endorseNo, currentPage: 1, pageSize: 20 });
if (res.data.code === '000000') {
const rows = res.data.data.content; // ← 不是 rows / list
const total = res.data.data.totalElements; // ← 不是 total
}
2.15 团财批单详情(新增)
返回结构与保单详情(§2.12
policyQuery/detail)完全一致,都是PolicyDataDetailVo,
只是在保单基本信息之外多出两段:endorseBasicInfo(批单基本信息)、endorseRiskInfoList(批单险种信息)。
保单基本信息段直接取车主表/非车主表(与保单详情同逻辑)。
Code
复制成功
GET /property_insurance/endorse/detail?policyNo=...&endorseNo=...&propertyType=1
| 参数 | 必填 | 说明 |
|---|---|---|
| policyNo | 是 | 保单号 |
| endorseNo | 否 | 批单号;不传则取该保单下最新审批的一条批单 |
| propertyType | 否 | 已不再用于路由(产险类型由批单表自身判定),保留仅为兼容前端旧调用 |
返回:Result,data 是 PolicyDataDetailVo
JSON
复制成功
{
"code": "000000",
"msg": "查询成功",
"data": {
"policyBasicInfo": {
"policyNo": "PICC202605001",
"policyStatus": "有效",
"...": "…"
},
"carInfo": {
"...": "…(车险才有)"
},
"insureInfo": {
"...": "…"
},
"insuredInfoList": [
{
"...": "…"
}
],
"syInfoList": [
{
"...": "…"
}
],
"agentInfo": {
"...": "…"
},
"tciRiskInfo": {
"...": "…(车险才有)"
},
"vciRiskInfo": {
"...": "…(车险才有)"
},
"noCarRiskInfo": {
"...": "…(非车才有)"
},
"endorseBasicInfo": {
"endorseNo": "E001",
"endorseAcceptDate": "2026-05-12",
"endorseEffectDate": "2026-05-13",
"totalPremiumTax": 2000.5,
"totalPremiumNoTax": 1887.27,
"agentCode": "AGENT001",
"agentName": "张三"
},
"endorseRiskInfoList": [
{
"riskClass": "3-机动车辆保险",
"riskCode": "RK001",
"riskName": "机动车损失险",
"sumInsured": 100000,
"premiumTax": 1200.5,
"premiumNoTax": 1132.55,
"startDate": "2026-05-13",
"endDate": "2027-05-12",
"payType": "趸交",
"settleCommissionRate": null,
"settleCommissionBasis": null
}
]
}
}
| code | msg | 说明 |
|---|---|---|
| 000000 | 查询成功 | |
| 000003 | 保单号不能为空 | |
| 000003 | 未查询到批单详情 | 该保单号下没有已审批的批单(data 为 null) |
| 000001 | 系统查询异常! |
endorseBasicInfo.totalPremiumTax / totalPremiumNoTax= 该批单下所有险种对应保费的合计(后端 SUM)。- 日期字段(
endorseAcceptDate/endorseEffectDate/startDate/endDate)后端已格式化为yyyy-MM-dd字符串,前端可直接渲染。 settleCommissionRate/settleCommissionBasis需求文档有这两列,但批改模板未提供,当前恒为null,前端留空占位即可。
2.16 团财批单导出(新增)
入参、过滤逻辑、排序与 §2.14 完全一致(同一套
PolicyEndorseQueryCondition),只是不分页。
导出列与查询结果 11 列一致,「承保日期和保单号、批单号必录其一」的校验同样生效。
Code
复制成功
GET /property_insurance/endorse/export?
comCode=&codeName=&comSubCode=&comSubName=&companyCode=&companyName=
acceptStartDate=&acceptEndDate=&policyNo=&endorseNo=&propertyType=
响应:application/vnd.ms-excel;文件名"产险批单数据导出.xls"
| 导出列顺序 | 表头 | VO 字段 |
|---|---|---|
| 1 | 保单号 | policyNo |
| 2 | 批单号 | endorseNo |
| 3 | 承保日期 | acceptDate |
| 4 | 生效日期 | generateDate |
| 5 | 产险类型 | propertyType |
| 6 | 保险公司名称 | companyName |
| 7 | 地市级机构名称 | comName |
| 8 | 业务员代码 | agentCode |
| 9 | 业务员姓名 | agentName |
| 10 | 投保人名称 | insureName |
| 11 | 被保人名称 | insuredName |
必须走整页跳转(
window.location.href = ...)或responseType: 'blob',不能走普通 ajax,否则拿不到二进制流。
条件不满足时后端抛DataIntegrityViolationException(HTTP 500),前端请先复用 §2.14 的校验规则。
JavaScript
复制成功
export function exportEndorseUrl(params) {
const qs = Object.keys(params).filter(k => params[k] !== '' && params[k] != null)
.map(k => `${k}=${encodeURIComponent(params[k])}`).join('&');
return `/tabycore/property_insurance/endorse/export?${qs}`;
}
// 使用:window.location.href = exportEndorseUrl(form);