15 KiB
中介库主从结构改造设计文档
模块: 中介库管理
日期: 2026-04-17
作者: Codex
状态: 已确认
一、背景
当前中介库模块采用“个人中介 / 机构中介”并列维护方式:
- 个人中介数据存放于
ccdi_biz_intermediary - 机构中介数据直接复用
ccdi_enterprise_base_info - 前端新增弹窗在“个人 / 机构”之间二选一录入
- 首页列表通过联合查询同时展示个人中介与机构中介
现业务需求已变更为新的主从维护模式:
- 用户先录入中介个人信息
- 再在该中介名下录入亲属个人信息
- 再在该中介名下录入关联机构关系信息
- 关联机构信息只维护“中介与机构的关系”,实体主档仍由实体信息维护功能负责
- 首页列表需要统一查询“中介本人 / 中介亲属 / 中介关联机构”三类记录
本次设计目标是在尽量复用现有中介库模块基础上,将原并列建模改造为“中介本人主记录 + 亲属子记录 + 机构关系子记录”的结构。
二、目标
本次设计目标如下:
- 中介库主记录统一为“中介本人”
ccdi_biz_intermediary同时承载中介本人和中介亲属- 新增
ccdi_intermediary_enterprise_relation维护中介与机构的关系 - 首页统一展示三类记录,并支持统一查询
- 新增流程改为“先新增中介本人,再在详情中维护亲属和关联机构”
- 保持最短路径实现,不引入额外通用关系模型或平行模块
三、范围
3.1 本次范围
- 调整中介库数据模型
- 新增中介关联机构关系表
- 改造中介库首页联合查询
- 改造中介新增、详情、亲属维护、关联机构维护交互
- 调整后端中介、亲属、关联机构关系接口
- 补充设计文档与实施计划
3.2 不在本次范围
- 不负责录入或修改实体机构主档
- 不新增机构主档补录兜底逻辑
- 不做通用人员关系平台化抽象
- 不新增独立一级菜单拆分为三个平行模块
- 不扩展导入、导出、异步任务链路
- 不新增兼容性补丁、降级方案或过度设计
四、现状分析
4.1 前端现状
当前中介库页面位于:
ruoyi-ui/src/views/ccdiIntermediary/index.vueruoyi-ui/src/views/ccdiIntermediary/components/EditDialog.vue
现有特点:
- 首页列表面向“个人中介 / 机构中介”两类并列记录
- 新增弹窗先选择类型,再进入不同表单
- 个人中介与机构中介使用不同详情接口
- 机构中介可直接在中介库模块中新增与修改
这与当前需求存在三个核心偏差:
- 主记录不是“中介本人”,而是“个人 / 机构”并列
- 没有中介详情下的亲属子列表与机构关系子列表
- 首页列表未按“本人 / 亲属 / 机构关系”统一口径展示
4.2 后端现状
当前中介控制器位于:
ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiIntermediaryController.java
现有后端特点:
POST /ccdi/intermediary/person新增个人中介POST /ccdi/intermediary/entity新增机构中介GET /ccdi/intermediary/list联合查询个人中介与机构中介- 机构中介直接写入
ccdi_enterprise_base_info
这与新需求的偏差在于:
- 机构不应再作为中介库主记录新增
- 亲属未形成独立子资源模型
- 中介与机构之间缺少独立关系表
4.3 现有可复用基础
仓库中已存在以下可参考实现:
ccdi_staff_fmy_relation员工亲属关系维护ccdi_staff_enterprise_relation员工关联企业维护ccdi_cust_enterprise_relation客户关联企业维护
可复用的思路主要是:
- 子资源独立 CRUD
- 统一列表查询 + 独立编辑弹窗
- 关系表联查企业主档展示企业名称
但本次不直接照搬上述模块,而是在中介库现有主页面中完成收口。
五、方案对比
5.1 方案 A:中介本人为主记录,亲属与机构关系作为子记录
做法:
ccdi_biz_intermediary统一存中介本人和中介亲属- 新增
ccdi_intermediary_enterprise_relation - 首页列表联合查询三类记录
- 首页新增只允许新增中介本人
- 详情页维护亲属与关联机构
优点:
- 最贴合当前业务口径
- 最大程度复用现有中介库菜单、权限与主页面
- 后端改造边界清晰
- 前端操作路径与“先建中介,再维护子信息”一致
缺点:
- 需要重写现有“个人 / 机构并列”的列表语义
- 需要补一张新的机构关系表
5.2 方案 B:拆成中介本人、亲属、机构关系三个平行页面
做法:
- 中介本人独立页面
- 中介亲属独立页面
- 中介关联机构独立页面
问题:
- 与“先建中介,再在下面维护”不一致
- 页面、菜单、权限改动面更大
- 首页聚合查询与跳转链路更复杂
5.3 方案 C:抽象统一关系模型
做法:
- 抽象统一的人员关系与机构关系模型
- 中介、员工、客户共用一套关系平台
问题:
- 抽象过重
- 明显超出当前需求
- 会引入额外改造面,不符合最短路径原则
5.4 结论
采用 方案 A:中介本人为主记录,亲属与机构关系作为子记录。
六、总体设计
6.1 设计原则
本次设计遵循以下原则:
- 中介库只维护中介本人、亲属和中介机构关系
- 机构主档继续归实体信息维护功能负责
- 不新增无必要的身份字段,优先复用现有字段表达业务含义
- 首页统一查询,编辑入口按记录类型分流
- 删除中介本人时同时清理亲属与机构关系
6.2 数据流
新增中介链路:
- 首页点击新增
- 打开中介本人新增弹窗
- 保存中介本人到
ccdi_biz_intermediary - 自动进入中介详情
- 在详情中新增亲属与关联机构关系
首页查询链路:
- 前端调用
GET /ccdi/intermediary/list - 后端联合查询:
ccdi_biz_intermediary中person_sub_type = 本人ccdi_biz_intermediary中person_sub_type != 本人ccdi_intermediary_enterprise_relation联查ccdi_enterprise_base_info
- 统一返回前端展示字段与
recordType
删除中介链路:
- 删除中介本人
- 删除本人记录
- 删除名下亲属记录
- 删除名下关联机构关系记录
- 不删除企业主档
七、数据模型设计
7.1 ccdi_biz_intermediary 使用方式调整
ccdi_biz_intermediary 继续作为人员表,不新增新的身份字段,直接复用:
person_sub_typerelated_num_id
字段口径调整如下:
-
中介本人
person_sub_type = 本人related_num_id为空
-
中介亲属
person_sub_type = 配偶 / 子女 / 父母 / 兄弟姐妹 / 其他related_num_id = 所属中介本人的 biz_id
因此:
person_sub_type负责表达“本人 / 亲属关系”related_num_id负责表达“归属到哪个中介本人”
7.2 新增 ccdi_intermediary_enterprise_relation
新增表:ccdi_intermediary_enterprise_relation
建议字段:
idBIGINT 主键intermediary_biz_idVARCHAR(64)
关联中介本人biz_idsocial_credit_codeVARCHAR(18)
关联机构统一社会信用代码relation_person_postVARCHAR(100)
中介在该机构的关联角色/职务remarkVARCHAR(500)created_bycreate_timeupdated_byupdate_time
唯一性约束建议:
uk_intermediary_enterprise (intermediary_biz_id, social_credit_code)
说明:
- 只维护关系,不维护企业主档
- 企业名称通过联查
ccdi_enterprise_base_info.enterprise_name获取 - 删除关系时只删该表记录
7.3 删除规则
删除中介本人时:
- 删除
ccdi_biz_intermediary中本人记录 - 删除
ccdi_biz_intermediary中related_num_id = 本人 biz_id的亲属记录 - 删除
ccdi_intermediary_enterprise_relation中intermediary_biz_id = 本人 biz_id的全部关系记录 - 不删除
ccdi_enterprise_base_info
八、首页列表与查询口径
8.1 列表展示字段
首页列表统一展示以下字段:
- 名称
- 证件号
- 关联中介姓名
- 关联关系
- 创建时间
8.2 三类记录展示映射
-
中介本人
- 名称:
name - 证件号:
person_id - 关联中介姓名:本人姓名
- 关联关系:
本人
- 名称:
-
中介亲属
- 名称:
name - 证件号:
person_id - 关联中介姓名:所属中介本人姓名
- 关联关系:
person_sub_type
- 名称:
-
关联机构
- 名称:机构名称
- 证件号:统一社会信用代码
- 关联中介姓名:所属中介本人姓名
- 关联关系:
relation_person_post
8.3 搜索字段
首页搜索字段固定为:
- 名称
- 证件号
- 记录类型
- 关联中介信息
其中“关联中介信息”为一个合并输入框,同时支持:
- 按关联中介姓名查询
- 按关联中介证件号查询
8.4 记录类型
联合查询结果中增加派生字段 recordType,仅用于前端分流,不落库:
INTERMEDIARYRELATIVEENTERPRISE_RELATION
九、接口设计
9.1 中介本人接口
保留现有中介主线接口,语义调整为“中介本人”:
-
POST /ccdi/intermediary/person- 新增中介本人
- 固定写入:
person_sub_type = 本人related_num_id = null
-
PUT /ccdi/intermediary/person- 修改中介本人
-
GET /ccdi/intermediary/person/{bizId}- 查询中介本人详情
9.2 中介亲属接口
新增中介名下亲属接口,仍然落 ccdi_biz_intermediary:
-
GET /ccdi/intermediary/{bizId}/relatives- 查询某中介名下亲属列表
-
POST /ccdi/intermediary/{bizId}/relative- 新增亲属
- 固定写入:
related_num_id = bizIdperson_sub_type != 本人
-
GET /ccdi/intermediary/relative/{relativeBizId}- 查询亲属详情
-
PUT /ccdi/intermediary/relative- 修改亲属
-
DELETE /ccdi/intermediary/relative/{relativeBizId}- 删除亲属
9.3 中介关联机构关系接口
新增关系表对应接口:
-
GET /ccdi/intermediary/{bizId}/enterprise-relations- 查询某中介名下关联机构列表
-
POST /ccdi/intermediary/{bizId}/enterprise-relation- 新增关联机构关系
-
GET /ccdi/intermediary/enterprise-relation/{id}- 查询单条机构关系详情
-
PUT /ccdi/intermediary/enterprise-relation- 修改机构关系
-
DELETE /ccdi/intermediary/enterprise-relation/{id}- 删除机构关系
9.4 首页联合查询接口
保留:
GET /ccdi/intermediary/list
返回统一字段:
recordTyperecordIdnamecertificateNorelatedIntermediaryNamerelationTextcreateTime
查询条件:
namecertificateNorecordTyperelatedIntermediaryKeyword
其中 relatedIntermediaryKeyword 同时匹配:
- 关联中介姓名
- 关联中介证件号
9.5 删除接口行为
-
删除中介本人:
- 继续使用中介主删除接口
- 服务层执行本人、亲属、机构关系级联清理
-
删除亲属:
- 走亲属删除接口
-
删除关联机构:
- 走关联机构关系删除接口
十、前端页面设计
10.1 首页页面
保留页面:
ruoyi-ui/src/views/ccdiIntermediary/index.vue
页面语义调整为“中介综合库”。
改造内容:
- 搜索区改为新搜索字段
- 列表改为三类记录混合展示
- 新增按钮只允许新增中介本人
10.2 列表操作行为
-
recordType = INTERMEDIARY- 详情
- 修改
- 删除
-
recordType = RELATIVE- 详情 / 编辑亲属
- 删除亲属
-
recordType = ENTERPRISE_RELATION- 详情 / 编辑关联机构关系
- 删除关联关系
10.3 新增流程
首页新增流程固定为:
- 点击新增
- 打开中介本人新增弹窗
- 保存成功
- 自动进入该中介详情
- 在详情中继续维护亲属与关联机构
10.4 中介详情页
中介本人详情建议改为“大弹窗详情维护页”,包含三个区域:
- 中介基本信息
- 亲属信息列表
- 关联机构信息列表
支持在详情中:
- 编辑中介本人
- 新增 / 编辑 / 删除亲属
- 新增 / 编辑 / 删除关联机构关系
10.5 子记录编辑
首页点到亲属或关联机构时:
- 直接打开对应编辑弹窗
- 弹窗中展示所属中介姓名,只读
- 保存成功后刷新首页列表
- 如当前已打开中介详情,同时刷新详情内子列表
10.6 弹窗拆分建议
当前 EditDialog.vue 同时承担个人和机构两套表单,本次建议拆分为:
- 中介本人编辑弹窗
- 亲属编辑弹窗
- 关联机构关系编辑弹窗
如果实现时考虑最短路径,也允许在现有组件上拆成三个分支表单,但从设计上仍以三类用途明确的编辑组件为目标。
十一、校验与业务规则
11.1 中介本人
- 新增时固定
person_sub_type = 本人 related_num_id必须为空- 证件号仍需保持唯一性校验
11.2 中介亲属
person_sub_type禁止保存为本人related_num_id必须指向所属中介本人- 首页展示关联关系时直接取
person_sub_type
11.3 关联机构关系
social_credit_code必须存在于实体信息库- 同一中介下不允许重复关联同一统一社会信用代码
- 不允许通过中介模块新增机构主档
十二、数据库与代码改动清单
12.1 后端
预计改动:
CcdiIntermediaryControllerICcdiIntermediaryServiceCcdiIntermediaryServiceImpl- 中介相关 DTO / VO
- 新增中介关联机构关系 domain / DTO / VO / mapper / service / controller
CcdiIntermediaryMapper.xml- 新增机构关系 Mapper XML
12.2 前端
预计改动:
ruoyi-ui/src/views/ccdiIntermediary/index.vueSearchForm.vueDataTable.vueDetailDialog.vueEditDialog.vue或拆分后的三个编辑组件ruoyi-ui/src/api/ccdiIntermediary.js- 新增关联机构关系 API
12.3 SQL
预计新增:
ccdi_intermediary_enterprise_relation建表脚本- 如需字典补充,再新增对应迁移脚本
十三、测试要点
- 新增中介本人成功,自动进入详情
- 在详情中新增亲属成功,首页能查到亲属记录
- 在详情中新增关联机构关系成功,首页能查到关联机构记录
- 首页支持按名称、证件号、记录类型、关联中介信息查询
- 首页点击亲属记录可直接编辑
- 首页点击关联机构记录可直接编辑
- 删除中介本人后,亲属记录一并删除
- 删除中介本人后,关联机构关系一并删除
- 删除中介本人后,机构主档仍保留
- 同一中介重复关联同一机构时正确拦截
十四、结论
本次中介库改造采用“中介本人主记录 + 亲属子记录 + 关联机构关系子记录”的主从结构:
ccdi_biz_intermediary负责维护中介本人和亲属ccdi_intermediary_enterprise_relation负责维护中介与机构的关系- 首页以统一列表展示三类记录
- 新增流程固定为“先建中介本人,再维护子信息”
- 机构主档继续由实体信息维护功能独立负责
该方案满足当前需求,并保持了最短路径实现与清晰的前后端边界。