# 协议承保规则接口对接文档 --- ## 一、新增承保规则 **接口路径**:`POST /agreementRules/rulesAdd` ### 请求参数 | 字段名 | 类型 | 必填 | 描述 | |---|---|---|---| | `agreementId` | String | 是 | 协议ID | | `startTime` | String | 否 | 生效开始时间 | | `endTime` | String | 否 | 生效截止时间 | | `rulesAttrList` | Array\ | 是 | 并且规则属性(AND 逻辑,单条规则模式) | | `rulesGroups` | Array\ | 否 | **【新增】** 规则属性分组(批量多条规则模式) | #### 两种模式说明 - **单条规则模式**:使用 `rulesAttrList`,创建一条规则,`parentId` 为空 - **批量规则模式**:使用 `rulesGroups`,一次创建多条规则,共享同一个 `parentId`,按分组顺序生成 `orderNum` - 两种模式互斥,优先使用 `rulesGroups` 批量模式 ### RulesGroupParam 结构 | 字段名 | 类型 | 必填 | 描述 | |---|---|---|---| | `rulesAttrList` | Array\ | 是 | 该组规则属性(AND 逻辑) | ### PtlAgreementUndwrtRulesAttrLink 结构 | 字段 | 类型 | 描述 | |---|---|---| | `attrId` | String | 协议属性ID | | `attrCode` | String | 协议属性编码 | | `min` | String | 左操作数(单选/输入值,数组时逗号分隔) | | `operator` | String | 运算符:1.范围 2.小于 3.小于等于 4.大于 5.大于等于 | | `max` | String | 右操作数(范围值上限) | | `minArray` | String[] | 左操作数数组(用于 checkbox/select/inputTag,非数据库字段) | ### 请求体示例 #### 单条规则模式 ```json { "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "rulesAttrList": [ { "attrCode": "VehicleAge", "min": "0", "max": "5", "operator": "1" }, { "attrCode": "LicenseArea", "min": "BJ,SH", "operator": "1" } ] } ``` #### 批量规则模式 ```json { "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "rulesGroups": [ { "rulesAttrList": [ { "attrCode": "VehicleAge", "min": "0", "max": "5", "operator": "1" } ] }, { "rulesAttrList": [ { "attrCode": "LicenseArea", "min": "BJ,SH", "operator": "1" }, { "attrCode": "Brand", "min": "AUDI,BMW", "operator": "1" } ] } ] } ``` ### 响应 ```json { "code": 200, "msg": "添加承保规则成功" } ``` --- ## 二、修改承保规则 **接口路径**:`POST /agreementRules/rulesEdit` ### 请求参数 | 字段名 | 类型 | 必填 | 描述 | |---|---|---|---| | `id` | String | 是 | 承保规则ID | | `agreementId` | String | 是 | 协议ID | | `startTime` | String | 否 | 生效开始时间 | | `endTime` | String | 否 | 生效截止时间 | | `rulesAttrList` | Array\ | 是 | 并且规则属性(AND 逻辑) | ### 请求体示例 ```json { "id": "987654", "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "rulesAttrList": [ { "attrCode": "VehicleAge", "min": "0", "max": "5", "operator": "1" } ] } ``` > **修改逻辑**:先删除该规则下的所有旧属性关联数据,再重新插入新的规则属性。 ### 响应 ```json { "code": 200, "msg": "修改承保规则成功" } ``` --- ## 三、承保规则列表查询 **接口路径**:`GET /agreementRules/rulesList` ### 请求参数 | 参数 | 类型 | 必填 | 描述 | |---|---|---|---| | `agreementId` | String | 是 | 协议ID | ### 响应字段 | 字段 | 类型 | 描述 | |---|---|---| | `id` | String | 主键 | | `agreementId` | String | 协议ID | | `startTime` | String | 生效开始时间 | | `endTime` | String | 生效截止时间 | | `ruleDescription` | String | 规则描述文字 | | `parentId` | String | **【新增】** 父规则ID(批量模式时共用) | | `orderNum` | Integer | 显示顺序 | | `costsAttrLinks` | Array | 规则属性详情 | | `costVoList` | Array | 关联费用列表 | ### 响应示例 ```json { "code": 200, "data": [ { "id": "987654", "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "ruleDescription": "车龄范围值0到5,", "parentId": "1792000000000000001", "orderNum": 1, "costsAttrLinks": [], "costVoList": [] }, { "id": "987655", "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "ruleDescription": "上牌城市为北京市,上海市,品牌为奥迪,宝马,", "parentId": "1792000000000000001", "orderNum": 2, "costsAttrLinks": [], "costVoList": [] } ] } ``` --- ## 四、获取承保规则详情 **接口路径**:`GET /agreementRules/rulesGet` ### 请求参数 | 参数 | 类型 | 必填 | 描述 | |---|---|---|---| | `ruleId` | String | 是 | 承保规则ID | ### 响应 与列表接口返回结构一致,包含 `parentId` 字段。 --- ## 五、根据父ID查询规则列表【新增】 **接口路径**:`GET /agreementRules/rulesListByParentId` ### 请求参数 | 参数 | 类型 | 必填 | 描述 | |---|---|---|---| | `parentId` | String | 是 | 父规则ID | ### 功能说明 当使用批量规则模式(`rulesGroups`)新增规则时,同批次的所有子规则共享同一个 `parentId`。调用此接口可根据 `parentId` 查询该批次下的所有子规则列表。 ### 响应字段 与 `rulesList` 接口返回结构一致。 ### 响应示例 ```json { "code": 200, "data": [ { "id": "987654", "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "ruleDescription": "车龄范围值0到5,", "parentId": "1792000000000000001", "orderNum": 1, "costsAttrLinks": [], "costVoList": [] }, { "id": "987655", "agreementId": "123456", "startTime": "2026-01-01", "endTime": "2026-12-31", "ruleDescription": "上牌城市为北京市,上海市,", "parentId": "1792000000000000001", "orderNum": 2, "costsAttrLinks": [], "costVoList": [] } ] } ``` --- ## 六、删除承保规则 **接口路径**:`DELETE /agreementRules/rulesDelete` ### 请求参数 | 参数 | 类型 | 必填 | 描述 | |---|---|---|---| | `id` | String | 是 | 承保规则ID | ### 响应 ```json { "code": 200, "data": "删除成功" } ``` --- ## 七、获取承保规则明细 **接口路径**:`GET /agreementRules/getRuleInfo` ### 请求参数 | 参数 | 类型 | 必填 | 描述 | |---|---|---|---| | `ruleId` | String | 是 | 承保规则ID | ### 响应 返回该规则下所有属性关联明细列表。 --- ## 八、批量复制规则因子【新增】 **接口路径**:`POST /agreementRules/rulesAttrBatchCopy` ### 功能说明 将源承保规则下的某条或多条规则因子批量复制到某个或多个目标承保协议下:每个目标协议下 **新增一条规则**承接所选因子,并与该协议下已有规则共享 `parentId`(前端按组合并成一条展示);目标协议下没有规则时,新增的规则独立展示。 ### 请求参数 | 字段名 | 类型 | 必填 | 描述 | |-----------|---------------------|------|-----------------------------------------------------------------------------------------------------------| | `attrIds` | Array\ | 是 | 要复制的规则因子关联记录ID列表(来源于`getRuleInfo`返回明细的`id`字段),源规则由所选因子记录所属规则确定 | | `targets` | Array\ | 是 | 目标协议规则列表 | ### CopyTarget 结构 | 字段名 | 类型 | 必填 | 描述 | |---------------|--------|------|-------------------------------------------------------------------------------------------------------------------------------------| | `agreementId` | String | 是 | 目标承保协议ID | | `ruleId` | String | 否 | 归组锚定规则ID:复制出的新规则与该规则共享 `parentId`(同组展示);为空时取该协议下第一条规则作为锚定,协议下无规则则新规则独立展示 | ### 请求体示例 ```json { "attrIds": [ "1692100000000000001", "1692100000000000002" ], "targets": [ { "agreementId": "123456", "ruleId": "987655" }, { "agreementId": "123457" } ] } ``` ### 业务逻辑说明 1. **源规则确定**:源规则由 `attrIds` 所选因子记录所属规则反推;所选因子必须属于同一规则或同一批量规则组,否则返回失败 2. **因子校验**:`attrIds` 中的ID必须全部有效(因子关联记录ID可通过`getRuleInfo`接口获取),存在无效ID时返回失败 3. **锚定规则定位(用于确定归组)**: - 指定 `ruleId`:校验该规则存在且属于对应协议,作为归组锚定 - 未指定 `ruleId`:取该协议下第一条规则(`orderNum` 最小)作为锚定 - 协议下无规则:无锚定,新增规则独立展示 4. **新增规则与归组(每个目标协议均新增一条)**: - 每个目标协议下新增一条规则承接所选因子(仅含本次所选 `attrIds` 因子),基础信息(生效时间、录入描述)沿用源规则, `orderNum` 取该协议下最大序号 + 1 - 锚定规则存在时:新规则与锚定规则共享 `parentId`(前端按组合并展示);锚定规则自身无 `parentId` 时,生成新组ID并将锚定规则归入该组 - 锚定规则不存在(协议下无规则)时:新规则 `parentId` 为空,独立展示 - **源规则保持不变**(不修改源规则的 `parentId`、不复制源规则本身,因此不会出现"目标下多出源规则") 5. **因子复制**:将所选因子直接插入新规则(新规则为全新记录,不覆盖任何已有因子);同一 `attrCode` 仅复制一条(批量组内不同子规则存在相同因子时去重) 6. 复制完成后重新生成新规则的规则描述(`ruleDescription`) ### 响应 ```json { "code": 200, "msg": "批量复制规则因子成功" } ``` --- ## 变更总结 | 接口 | 变更点 | 变更内容 | |----------------------------|--------------|------------------------------------------------------------------------------------------------------------| | `POST /rulesAdd` | 请求参数新增 | `rulesGroups`(批量规则分组),支持一次创建多条规则 | | `POST /rulesAdd` | 逻辑变更 | 批量模式下所有子规则共享同一 `parentId`,按分组顺序生成 `orderNum` | | `GET /rulesList` | 返回值新增 | `parentId`(父规则ID) | | `GET /rulesGet` | 返回值新增 | `parentId`(父规则ID) | | `GET /rulesListByParentId` | **新增接口** | 根据父ID查询子规则列表 | | `POST /rulesAttrBatchCopy` | **新增接口** | 批量复制规则因子到目标协议:每个目标协议下新增一条规则(仅含所选因子)并与已有规则同组展示,源规则保持不变 | ### 业务逻辑说明 - **单条模式**:使用 `rulesAttrList` 创建一条规则,`parentId` 为 `null` - **批量模式**:使用 `rulesGroups` 一次创建多条规则,系统生成统一 `parentId` 关联同一批次的所有子规则 - 批量模式与单条模式互斥,优先处理 `rulesGroups` - 通过 `rulesListByParentId` 接口可按 `parentId` 查询同批次的所有子规则 - 修改接口仅支持对单条规则进行编辑 - `rulesAttrBatchCopy` 支持跨协议批量复制规则因子;源规则由所选因子(`attrIds` )反推,所选因子须属于同一规则或同一规则组;每个目标协议下新增一条规则(仅含所选因子)并与该协议已有规则共享 `parentId` (同组合并展示),源规则保持不变 ### 数据库变更说明 `ptl_agreement_undwrt_rules` 表需新增字段: ```sql ALTER TABLE ptl_agreement_undwrt_rules ADD COLUMN parent_id VARCHAR(64) DEFAULT NULL COMMENT '父规则ID'; ```