# 第 2 章-保险基础数据-设计与开发 # 学习目标 - 设计开发基础数据中的保障项、系数项、筛选项、保险分类功能 # 1、基础数据介绍 保险-基础数据。通过基础数据功能的学习我们主要解决下列问题: - 什么是基础数据,包含哪些,分别有什么作用? - 基础数据的表结构如何进行设计? - 分类与保障项、系数项、筛选项有什么关系?  上图是用户端功能截图,从中我们提炼并定义下列 4 个名词: - **保障项:**通常是指在购买保险时所包含的具体风险或事件,以及在这些风险或事件发生时,保险公司愿意提供的经济赔偿或保障。不同类型的保险产品涵盖不同的保障项 - **系数项:**通常是指一系列用于计算保险费率的因子或系数。这些因子可以包括被保险人的年龄、性别、健康状况、驾驶记录、保险类型、地理位置等,它们会影响最终的保险费率计算。 - **筛选项:**通常是指一系列因素和选项,需要根据你的具体需求和情况来考虑,来选择自己需要的保险服务。 - **分类项:**通常是指保险根据不同的标准和覆盖范围进行的分类,不同的分类涵盖的方面不同,此处我们主要讨论下列几类保险:医疗、重疾、意外、养老金、旅游等分类;[附录-保险分类](https://j1wtmv7ajj.feishu.cn/wiki/Au95wpmubiP9emkDFr7coayFndb?from=from_copylink) 这几个数据结合目前四方保险数据库中的表实际情况而梳理的概念模型为:  从上述概念模型可以看出;分类与三类基础数据都有关系;与它们的关系为: - 一个分类下可以有多个保障项,一个保障项也可以对应不同的分类; > 分类与保障项的关系为:多对多 - 一个分类下可以有多个系数项,一个系数项也可以对应不同的分类; > 分类与系数项的关系为:多对多 - 一个分类下可以有多个筛选项,一个筛选项也可以对应不同的分类; > 分类与筛选项的关系为:多对多 概览看起来比较多;我们逐个来实现,一个个分析;以后实际的开发也都将是如此,先一个业务分析,完成之后再做另外的。 # 2、保障项-保险保障范围 ## 2.1、需求分析 由于项目是 `1->2` 的项目;界面与当时产品设计的界面存在出入;所以更好的做法是直接启动项目看系统里面的页面来进行分析更好。要查看保障管理的界面;需要启动的服务有: - 前端 nginx - 后端微服务:GatewayMgtStart、InsuranceMgtStart、SecurityOauthStart、SecurityWebStart 访问:[http://sf.mgt.itheima.net/#/login](http://sf.mgt.itheima.net/#/login) ;登录之后;再点击 基础数据——》保障管理   > **保障项分类**:并不是保险产品分类,只有规则和信息两个下拉选项;如果以后遇到产品原型也是类似的,这信息在 2 个选项以内的话;一般可以写常量或者写死(不需要对这些选项做管理) > **保障项值**:可以设置多个不同的内容(值名称,值,分数) > ① 可以将这些存到一个子表 ----》比较清楚;但是缺点就是以后查询关联比较麻烦 > ② 可以设计一个字段存储保障项值,这个值的类型为 json ---》比较灵活;尤其是这些内容是在前端展示和使用的,返回给前端的话也方便操作 ----》以后遇到类似的原型和设计,可以采用此方法 而在 app 端点击产品查看详情时,也能够看到这些保障项的使用:  **功能方面**:分页搜索、新建、删除、编辑(前端加载数据,不需要后端实现)、保存编辑、启用/禁用、功能栏的全部/启用/禁用(前端未实现;但也是分页查询);也就是要实现的功能总共 **5** 个。 **数据方面**:只是保存编辑页面中的数据、主键、列表中需要的创建时间等。 ## 2.2、数据库表设计 按照需求分析中的思路;只需要设计一张表 `sfbx-insurance.保障项表tab_safeguard` 具体表结构如下:  > 保障项值;在数据库中存储一个 json 字符串;json 的格式参考如下: > [{"name":“共享 400 万”,"val":"4000000",“score”:"1"},{"name":“共享 300 万”,"val":"3000000",“score”:"2"}] ## 2.3、接口设计 - **方式一**:后端结合原型界面,和自己设计的数据库表;先自己设计,然后再与前端确认。在我们项目中,项目已存在,接口被固定;暂时不太适用。 - **方式二**:在 `1-2` 的项目中;接口已经确定,前端也已经使用接口在开发或者前端已经完成;那么作为后端就只需要去追踪出来对应业务模块的接口信息即可;这是更省事的做法。而四方保险属于这种情况。接下来;咱们梳理出来对应分析出来的 **5** 个接口信息: ### 1)分页搜索
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/safeguard/page/{pageNum}/{pageSize} |
| **请求方式** | POST |
| **请求参数** | SafeguardVO 对应的数据结构如:{pageSize: 10, total: 1, pageNum: 1, safeguardKey: "", safeguardKeyName: "身故保险金"} |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": { "records": [ { "id": "1753336375152783362", "createTime": "2024-02-02 16:35:42", "updateTime": "2024-05-13 18:44:03", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "safeguardKey": "BZ056", "safeguardKeyName": "身故保险金", "safeguardVal": "[{\"val\": \"1\", \"name\": \"详见保险条款\", \"score\": \"100\"}]", "safeguardType": "0", "sortNo": null, "remake": null, "checkedIds": null } ], "total": 1, "size": 10, "current": 1, "orders": [], "optimizeCountSql": true, "hitCount": false, "countId": null, "maxLimit": null, "searchCount": true, "pages": 1 }, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "com.baomidou.mybatisplus.extension.plugins.pagination.Page", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 18:44:03" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/safeguard |
| **请求方式** | PUT ---> 全量更新,如果不存在则新增 |
| **请求参数** | { "safeguardKeyName": "test111", "safeguardKey": "111", "safeguardVal": "[{\"name\":\"111\",\"val\":\"11\",\"score\":\"1\"}]", "safeguardType": "1", "icon": "", "dataState": "0", "resourceType": "F" } |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": { "id": "1789999088167677954", "createTime": "2024-05-13 20:40:13", "updateTime": "2024-05-13 20:40:13", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "safeguardKey": "111", "safeguardKeyName": "test111", "safeguardVal": "[{\"name\":\"111\",\"val\":\"11\",\"score\":\"1\"}]", "safeguardType": "1", "sortNo": null, "remake": null, "checkedIds": null }, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "com.itheima.sfbx.insurance.dto.SafeguardVO", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 20:40:13" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/safeguard |
| **请求方式** | PATCH ---》部分更新,不存在的话更新失败 |
| **请求参数** | SafeguardVO 数据结构参考如下: { "id": "1789999088167677954", "createTime": "2024-05-13 20:40:14", "updateTime": "2024-05-13 20:40:14", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "safeguardKey": "111", "safeguardKeyName": "test1112", "safeguardVal": "[{\"val\":\"11\",\"name\":\"111\",\"score\":\"1\"}]", "safeguardType": "1", "sortNo": null, "remake": null, "checkedIds": null } |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": true, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "java.lang.Boolean", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 20:45:02" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/safeguard |
| **请求方式** | DELETE |
| **请求参数** | SafeguardVO 只传递了要删除的Id数组;数据结构参考:{checkedIds: ["1789999088167677954"]} |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": true, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "java.lang.Boolean", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 21:04:36" } |
| 说明 | 请求信息 |
| 接口地址 | http://sf.mgt.itheima.net/api/insurance-mgt/coefficent/page/{pageNum}/{pageSize} |
| **请求方式** | POST |
| **请求参数** | CoefficentVO 对应的数据结构如: {pageSize: 10, total: 15, pageNum: 1, coefficentKey: "", coefficentKeyName: "投保人数", insuranceType: ""} |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": { "records": [ { "id": "1718453920591900673", "createTime": "2023-10-29 10:25:17", "updateTime": "2023-11-30 16:40:55", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "coefficentKey": "XS016", "coefficentKeyName": "投保人数", "coefficentVal": "[{\"end\": \"\", \"start\": \"\", \"endUnit\": \"\", \"startUnit\": \"\"}]", "sortNo": 0, "remake": null, "coefficentType": "1", "checkedIds": null } ], "total": 1, "size": 10, "current": 1, "orders": [], "optimizeCountSql": true, "hitCount": false, "countId": null, "maxLimit": null, "searchCount": true, "pages": 1 }, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "com.baomidou.mybatisplus.extension.plugins.pagination.Page", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-15 18:11:12" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/coefficent |
| **请求方式** | PUT |
| **请求参数** | { "coefficentKeyName": "test系数名称", "coefficentKey": "123", "dataState": "0", "coefficentType": "1", "sortNo": 0, "coefficentVal": "[{\"start\":\"\",\"startUnit\":\"\",\"end\":\"\",\"endUnit\":\"\"}]" } |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": { "id": "1790686821181591553", "createTime": "2024-05-15 18:13:02", "updateTime": "2024-05-15 18:13:02", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "coefficentKey": "123", "coefficentKeyName": "test系数名称", "coefficentVal": "[{\"start\":\"\",\"startUnit\":\"\",\"end\":\"\",\"endUnit\":\"\"}]", "sortNo": 0, "remake": null, "coefficentType": "1", "checkedIds": null }, "operatorId": 1371500419615895553, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "com.itheima.sfbx.insurance.dto.CoefficentVO", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-15 18:13:02" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/cofficent |
| **请求方式** | PATCH |
| **请求参数** | CoefficentVO数据结构参考如下: { "id": "1790686821181591553", "createTime": "2024-05-15 18:13:02", "updateTime": "2024-05-15 18:13:02", "createBy": "1371500419615895553", "updateBy": "1371500419615895553", "dataState": "0", "creator": null, "coefficentKey": "123", "coefficentKeyName": "test系数名称22", "coefficentVal": "[{\"end\":\"\",\"start\":\"\",\"endUnit\":\"\",\"startUnit\":\"\"}]", "sortNo": 0, "remake": null, "coefficentType": "1", "checkedIds": null } |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": true, "operatorId": 13715004196158955xx, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "java.lang.Boolean", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 20:45:12" } |
| 说明 | 请求信息 |
| **接口地址** | http://sf.mgt.itheima.net/api/insurance-mgt/coefficent |
| **请求方式** | DELETE |
| **请求参数** | CoefficentVO 只传递了要删除的Id数组;数据结构参考:{checkedIds: ["1790686821181591553"]} |
| **响应结果** | ResponseResult { "code": 200, "msg": "操作成功", "data": true, "operatorId": 13715004196158955yy, "operatorName": "admin@qq.com", "operatorSex": "0", "_class": "java.lang.Boolean", "tip": "本站点所有接口仅用于教学演示,所有数据均非真实数据,请勿用作其它用途!", "operationTime": "2024-05-13 21:04:46" } |
| 说明 | 请求信息 |
| 接口地址 | http://sf.mgt.itheima.net/api/insurance-mgt/safeguard/list |
| **请求方式** | POST |
| **请求参数** | 无 |
| **响应结果** | ResponseResult
|