Files
ccdi/docs/design/2026-04-17-intermediary-library-refactor-design.md

15 KiB
Raw Blame History

中介库主从结构改造设计文档

模块: 中介库管理
日期: 2026-04-17
作者: Codex
状态: 已确认

一、背景

当前中介库模块采用“个人中介 / 机构中介”并列维护方式:

  1. 个人中介数据存放于 ccdi_biz_intermediary
  2. 机构中介数据直接复用 ccdi_enterprise_base_info
  3. 前端新增弹窗在“个人 / 机构”之间二选一录入
  4. 首页列表通过联合查询同时展示个人中介与机构中介

现业务需求已变更为新的主从维护模式:

  1. 用户先录入中介个人信息
  2. 再在该中介名下录入亲属个人信息
  3. 再在该中介名下录入关联机构关系信息
  4. 关联机构信息只维护“中介与机构的关系”,实体主档仍由实体信息维护功能负责
  5. 首页列表需要统一查询“中介本人 / 中介亲属 / 中介关联机构”三类记录

本次设计目标是在尽量复用现有中介库模块基础上,将原并列建模改造为“中介本人主记录 + 亲属子记录 + 机构关系子记录”的结构。

二、目标

本次设计目标如下:

  1. 中介库主记录统一为“中介本人”
  2. ccdi_biz_intermediary 同时承载中介本人和中介亲属
  3. 新增 ccdi_intermediary_enterprise_relation 维护中介与机构的关系
  4. 首页统一展示三类记录,并支持统一查询
  5. 新增流程改为“先新增中介本人,再在详情中维护亲属和关联机构”
  6. 保持最短路径实现,不引入额外通用关系模型或平行模块

三、范围

3.1 本次范围

  • 调整中介库数据模型
  • 新增中介关联机构关系表
  • 改造中介库首页联合查询
  • 改造中介新增、详情、亲属维护、关联机构维护交互
  • 调整后端中介、亲属、关联机构关系接口
  • 补充设计文档与实施计划

3.2 不在本次范围

  • 不负责录入或修改实体机构主档
  • 不新增机构主档补录兜底逻辑
  • 不做通用人员关系平台化抽象
  • 不新增独立一级菜单拆分为三个平行模块
  • 不扩展导入、导出、异步任务链路
  • 不新增兼容性补丁、降级方案或过度设计

四、现状分析

4.1 前端现状

当前中介库页面位于:

  • ruoyi-ui/src/views/ccdiIntermediary/index.vue
  • ruoyi-ui/src/views/ccdiIntermediary/components/EditDialog.vue

现有特点:

  1. 首页列表面向“个人中介 / 机构中介”两类并列记录
  2. 新增弹窗先选择类型,再进入不同表单
  3. 个人中介与机构中介使用不同详情接口
  4. 机构中介可直接在中介库模块中新增与修改

这与当前需求存在三个核心偏差:

  1. 主记录不是“中介本人”,而是“个人 / 机构”并列
  2. 没有中介详情下的亲属子列表与机构关系子列表
  3. 首页列表未按“本人 / 亲属 / 机构关系”统一口径展示

4.2 后端现状

当前中介控制器位于:

  • ccdi-info-collection/src/main/java/com/ruoyi/info/collection/controller/CcdiIntermediaryController.java

现有后端特点:

  1. POST /ccdi/intermediary/person 新增个人中介
  2. POST /ccdi/intermediary/entity 新增机构中介
  3. GET /ccdi/intermediary/list 联合查询个人中介与机构中介
  4. 机构中介直接写入 ccdi_enterprise_base_info

这与新需求的偏差在于:

  1. 机构不应再作为中介库主记录新增
  2. 亲属未形成独立子资源模型
  3. 中介与机构之间缺少独立关系表

4.3 现有可复用基础

仓库中已存在以下可参考实现:

  1. ccdi_staff_fmy_relation 员工亲属关系维护
  2. ccdi_staff_enterprise_relation 员工关联企业维护
  3. ccdi_cust_enterprise_relation 客户关联企业维护

可复用的思路主要是:

  1. 子资源独立 CRUD
  2. 统一列表查询 + 独立编辑弹窗
  3. 关系表联查企业主档展示企业名称

但本次不直接照搬上述模块,而是在中介库现有主页面中完成收口。

五、方案对比

5.1 方案 A中介本人为主记录亲属与机构关系作为子记录

做法:

  1. ccdi_biz_intermediary 统一存中介本人和中介亲属
  2. 新增 ccdi_intermediary_enterprise_relation
  3. 首页列表联合查询三类记录
  4. 首页新增只允许新增中介本人
  5. 详情页维护亲属与关联机构

优点:

  1. 最贴合当前业务口径
  2. 最大程度复用现有中介库菜单、权限与主页面
  3. 后端改造边界清晰
  4. 前端操作路径与“先建中介,再维护子信息”一致

缺点:

  1. 需要重写现有“个人 / 机构并列”的列表语义
  2. 需要补一张新的机构关系表

5.2 方案 B拆成中介本人、亲属、机构关系三个平行页面

做法:

  1. 中介本人独立页面
  2. 中介亲属独立页面
  3. 中介关联机构独立页面

问题:

  1. 与“先建中介,再在下面维护”不一致
  2. 页面、菜单、权限改动面更大
  3. 首页聚合查询与跳转链路更复杂

5.3 方案 C抽象统一关系模型

做法:

  1. 抽象统一的人员关系与机构关系模型
  2. 中介、员工、客户共用一套关系平台

问题:

  1. 抽象过重
  2. 明显超出当前需求
  3. 会引入额外改造面,不符合最短路径原则

5.4 结论

采用 方案 A中介本人为主记录亲属与机构关系作为子记录

六、总体设计

6.1 设计原则

本次设计遵循以下原则:

  1. 中介库只维护中介本人、亲属和中介机构关系
  2. 机构主档继续归实体信息维护功能负责
  3. 不新增无必要的身份字段,优先复用现有字段表达业务含义
  4. 首页统一查询,编辑入口按记录类型分流
  5. 删除中介本人时同时清理亲属与机构关系

6.2 数据流

新增中介链路:

  1. 首页点击新增
  2. 打开中介本人新增弹窗
  3. 保存中介本人到 ccdi_biz_intermediary
  4. 自动进入中介详情
  5. 在详情中新增亲属与关联机构关系

首页查询链路:

  1. 前端调用 GET /ccdi/intermediary/list
  2. 后端联合查询:
    • ccdi_biz_intermediaryperson_sub_type = 本人
    • ccdi_biz_intermediaryperson_sub_type != 本人
    • ccdi_intermediary_enterprise_relation 联查 ccdi_enterprise_base_info
  3. 统一返回前端展示字段与 recordType

删除中介链路:

  1. 删除中介本人
  2. 删除本人记录
  3. 删除名下亲属记录
  4. 删除名下关联机构关系记录
  5. 不删除企业主档

七、数据模型设计

7.1 ccdi_biz_intermediary 使用方式调整

ccdi_biz_intermediary 继续作为人员表,不新增新的身份字段,直接复用:

  • person_sub_type
  • related_num_id

字段口径调整如下:

  1. 中介本人

    • person_sub_type = 本人
    • related_num_id 为空
  2. 中介亲属

    • person_sub_type = 配偶 / 子女 / 父母 / 兄弟姐妹 / 其他
    • related_num_id = 所属中介本人的 biz_id

因此:

  • person_sub_type 负责表达“本人 / 亲属关系”
  • related_num_id 负责表达“归属到哪个中介本人”

7.2 新增 ccdi_intermediary_enterprise_relation

新增表:ccdi_intermediary_enterprise_relation

建议字段:

  1. id BIGINT 主键
  2. intermediary_biz_id VARCHAR(64)
    关联中介本人 biz_id
  3. social_credit_code VARCHAR(18)
    关联机构统一社会信用代码
  4. relation_person_post VARCHAR(100)
    中介在该机构的关联角色/职务
  5. remark VARCHAR(500)
  6. created_by
  7. create_time
  8. updated_by
  9. update_time

唯一性约束建议:

  • uk_intermediary_enterprise (intermediary_biz_id, social_credit_code)

说明:

  1. 只维护关系,不维护企业主档
  2. 企业名称通过联查 ccdi_enterprise_base_info.enterprise_name 获取
  3. 删除关系时只删该表记录

7.3 删除规则

删除中介本人时:

  1. 删除 ccdi_biz_intermediary 中本人记录
  2. 删除 ccdi_biz_intermediaryrelated_num_id = 本人 biz_id 的亲属记录
  3. 删除 ccdi_intermediary_enterprise_relationintermediary_biz_id = 本人 biz_id 的全部关系记录
  4. 不删除 ccdi_enterprise_base_info

八、首页列表与查询口径

8.1 列表展示字段

首页列表统一展示以下字段:

  1. 名称
  2. 证件号
  3. 关联中介姓名
  4. 关联关系
  5. 创建时间

8.2 三类记录展示映射

  1. 中介本人

    • 名称:name
    • 证件号:person_id
    • 关联中介姓名:本人姓名
    • 关联关系:本人
  2. 中介亲属

    • 名称:name
    • 证件号:person_id
    • 关联中介姓名:所属中介本人姓名
    • 关联关系:person_sub_type
  3. 关联机构

    • 名称:机构名称
    • 证件号:统一社会信用代码
    • 关联中介姓名:所属中介本人姓名
    • 关联关系:relation_person_post

8.3 搜索字段

首页搜索字段固定为:

  1. 名称
  2. 证件号
  3. 记录类型
  4. 关联中介信息

其中“关联中介信息”为一个合并输入框,同时支持:

  1. 按关联中介姓名查询
  2. 按关联中介证件号查询

8.4 记录类型

联合查询结果中增加派生字段 recordType,仅用于前端分流,不落库:

  1. INTERMEDIARY
  2. RELATIVE
  3. ENTERPRISE_RELATION

九、接口设计

9.1 中介本人接口

保留现有中介主线接口,语义调整为“中介本人”:

  1. POST /ccdi/intermediary/person

    • 新增中介本人
    • 固定写入:
      • person_sub_type = 本人
      • related_num_id = null
  2. PUT /ccdi/intermediary/person

    • 修改中介本人
  3. GET /ccdi/intermediary/person/{bizId}

    • 查询中介本人详情

9.2 中介亲属接口

新增中介名下亲属接口,仍然落 ccdi_biz_intermediary

  1. GET /ccdi/intermediary/{bizId}/relatives

    • 查询某中介名下亲属列表
  2. POST /ccdi/intermediary/{bizId}/relative

    • 新增亲属
    • 固定写入:
      • related_num_id = bizId
      • person_sub_type != 本人
  3. GET /ccdi/intermediary/relative/{relativeBizId}

    • 查询亲属详情
  4. PUT /ccdi/intermediary/relative

    • 修改亲属
  5. DELETE /ccdi/intermediary/relative/{relativeBizId}

    • 删除亲属

9.3 中介关联机构关系接口

新增关系表对应接口:

  1. GET /ccdi/intermediary/{bizId}/enterprise-relations

    • 查询某中介名下关联机构列表
  2. POST /ccdi/intermediary/{bizId}/enterprise-relation

    • 新增关联机构关系
  3. GET /ccdi/intermediary/enterprise-relation/{id}

    • 查询单条机构关系详情
  4. PUT /ccdi/intermediary/enterprise-relation

    • 修改机构关系
  5. DELETE /ccdi/intermediary/enterprise-relation/{id}

    • 删除机构关系

9.4 首页联合查询接口

保留:

  • GET /ccdi/intermediary/list

返回统一字段:

  1. recordType
  2. recordId
  3. name
  4. certificateNo
  5. relatedIntermediaryName
  6. relationText
  7. createTime

查询条件:

  1. name
  2. certificateNo
  3. recordType
  4. relatedIntermediaryKeyword

其中 relatedIntermediaryKeyword 同时匹配:

  1. 关联中介姓名
  2. 关联中介证件号

9.5 删除接口行为

  1. 删除中介本人:

    • 继续使用中介主删除接口
    • 服务层执行本人、亲属、机构关系级联清理
  2. 删除亲属:

    • 走亲属删除接口
  3. 删除关联机构:

    • 走关联机构关系删除接口

十、前端页面设计

10.1 首页页面

保留页面:

  • ruoyi-ui/src/views/ccdiIntermediary/index.vue

页面语义调整为“中介综合库”。

改造内容:

  1. 搜索区改为新搜索字段
  2. 列表改为三类记录混合展示
  3. 新增按钮只允许新增中介本人

10.2 列表操作行为

  1. recordType = INTERMEDIARY

    • 详情
    • 修改
    • 删除
  2. recordType = RELATIVE

    • 详情 / 编辑亲属
    • 删除亲属
  3. recordType = ENTERPRISE_RELATION

    • 详情 / 编辑关联机构关系
    • 删除关联关系

10.3 新增流程

首页新增流程固定为:

  1. 点击新增
  2. 打开中介本人新增弹窗
  3. 保存成功
  4. 自动进入该中介详情
  5. 在详情中继续维护亲属与关联机构

10.4 中介详情页

中介本人详情建议改为“大弹窗详情维护页”,包含三个区域:

  1. 中介基本信息
  2. 亲属信息列表
  3. 关联机构信息列表

支持在详情中:

  1. 编辑中介本人
  2. 新增 / 编辑 / 删除亲属
  3. 新增 / 编辑 / 删除关联机构关系

10.5 子记录编辑

首页点到亲属或关联机构时:

  1. 直接打开对应编辑弹窗
  2. 弹窗中展示所属中介姓名,只读
  3. 保存成功后刷新首页列表
  4. 如当前已打开中介详情,同时刷新详情内子列表

10.6 弹窗拆分建议

当前 EditDialog.vue 同时承担个人和机构两套表单,本次建议拆分为:

  1. 中介本人编辑弹窗
  2. 亲属编辑弹窗
  3. 关联机构关系编辑弹窗

如果实现时考虑最短路径,也允许在现有组件上拆成三个分支表单,但从设计上仍以三类用途明确的编辑组件为目标。

十一、校验与业务规则

11.1 中介本人

  1. 新增时固定 person_sub_type = 本人
  2. related_num_id 必须为空
  3. 证件号仍需保持唯一性校验

11.2 中介亲属

  1. person_sub_type 禁止保存为 本人
  2. related_num_id 必须指向所属中介本人
  3. 首页展示关联关系时直接取 person_sub_type

11.3 关联机构关系

  1. social_credit_code 必须存在于实体信息库
  2. 同一中介下不允许重复关联同一统一社会信用代码
  3. 不允许通过中介模块新增机构主档

十二、数据库与代码改动清单

12.1 后端

预计改动:

  1. CcdiIntermediaryController
  2. ICcdiIntermediaryService
  3. CcdiIntermediaryServiceImpl
  4. 中介相关 DTO / VO
  5. 新增中介关联机构关系 domain / DTO / VO / mapper / service / controller
  6. CcdiIntermediaryMapper.xml
  7. 新增机构关系 Mapper XML

12.2 前端

预计改动:

  1. ruoyi-ui/src/views/ccdiIntermediary/index.vue
  2. SearchForm.vue
  3. DataTable.vue
  4. DetailDialog.vue
  5. EditDialog.vue 或拆分后的三个编辑组件
  6. ruoyi-ui/src/api/ccdiIntermediary.js
  7. 新增关联机构关系 API

12.3 SQL

预计新增:

  1. ccdi_intermediary_enterprise_relation 建表脚本
  2. 如需字典补充,再新增对应迁移脚本

十三、测试要点

  1. 新增中介本人成功,自动进入详情
  2. 在详情中新增亲属成功,首页能查到亲属记录
  3. 在详情中新增关联机构关系成功,首页能查到关联机构记录
  4. 首页支持按名称、证件号、记录类型、关联中介信息查询
  5. 首页点击亲属记录可直接编辑
  6. 首页点击关联机构记录可直接编辑
  7. 删除中介本人后,亲属记录一并删除
  8. 删除中介本人后,关联机构关系一并删除
  9. 删除中介本人后,机构主档仍保留
  10. 同一中介重复关联同一机构时正确拦截

十四、结论

本次中介库改造采用“中介本人主记录 + 亲属子记录 + 关联机构关系子记录”的主从结构:

  1. ccdi_biz_intermediary 负责维护中介本人和亲属
  2. ccdi_intermediary_enterprise_relation 负责维护中介与机构的关系
  3. 首页以统一列表展示三类记录
  4. 新增流程固定为“先建中介本人,再维护子信息”
  5. 机构主档继续由实体信息维护功能独立负责

该方案满足当前需求,并保持了最短路径实现与清晰的前后端边界。