Files
ccdi/openspec/changes/add-intermediary-blacklist/design.md
2026-01-30 14:15:21 +08:00

13 KiB
Raw Blame History

Design: 中介人员黑名单管理模块

数据库设计

ccdi_intermediary_blacklist

中介人员/机构黑名单主表。

CREATE TABLE `ccdi_intermediary_blacklist` (
  `intermediary_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '中介ID',
  `name` VARCHAR(100) NOT NULL COMMENT '姓名/机构名称',
  `certificate_no` VARCHAR(50) DEFAULT NULL COMMENT '证件号',
  `intermediary_type` CHAR(1) NOT NULL DEFAULT '1' COMMENT '中介类型1个人 2机构',
  `status` CHAR(1) NOT NULL DEFAULT '0' COMMENT '状态0正常 1停用',
  `remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
  `create_by` VARCHAR(64) DEFAULT '' COMMENT '创建者',
  `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
  `update_by` VARCHAR(64) DEFAULT '' COMMENT '更新者',
  `update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`intermediary_id`),
  KEY `idx_name` (`name`),
  KEY `idx_certificate_no` (`certificate_no`),
  KEY `idx_intermediary_type` (`intermediary_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='中介人员黑名单表';

字段说明

字段名 类型 说明 必填 默认值
intermediary_id BIGINT 中介ID主键 自增
name VARCHAR(100) 姓名/机构名称 -
certificate_no VARCHAR(50) 证件号 NULL
intermediary_type CHAR(1) 中介类型1个人 2机构 '1'
status CHAR(1) 状态0正常 1停用 '0'
remark VARCHAR(500) 备注 NULL
create_by VARCHAR(64) 创建者 -
create_time DATETIME 创建时间 -
update_by VARCHAR(64) 更新者 ''
update_time DATETIME 更新时间 NULL

索引设计

  • 主键索引:intermediary_id
  • 普通索引:name(支持按名称搜索)
  • 普通索引:certificate_no(支持按证件号精确匹配)
  • 普通索引:intermediary_type(支持按类型筛选)

后端设计

模块结构

ruoyi-dpc/
├── src/main/java/com/ruoyi/dpc/
│   ├── controller/
│   │   └── CcdiIntermediaryBlacklistController.java
│   ├── domain/
│   │   ├── CcdiIntermediaryBlacklist.java
│   │   ├── dto/
│   │   │   ├── CcdiIntermediaryBlacklistAddDTO.java
│   │   │   ├── CcdiIntermediaryBlacklistEditDTO.java
│   │   │   └── CcdiIntermediaryBlacklistQueryDTO.java
│   │   └── vo/
│   │       └── CcdiIntermediaryBlacklistVO.java
│   ├── mapper/
│   │   └── CcdiIntermediaryBlacklistMapper.java
│   └── service/
│       ├── ICcdiIntermediaryBlacklistService.java
│       └── impl/
│           └── CcdiIntermediaryBlacklistServiceImpl.java
└── src/main/resources/mapper/dpc/
    └── CcdiIntermediaryBlacklistMapper.xml

Controller 层设计

CcdiIntermediaryBlacklistController

@RestController
@RequestMapping("/dpc/intermediary")
public class CcdiIntermediaryBlacklistController extends BaseController {

    /**
     * 查询中介黑名单列表
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:list')")
    @GetMapping("/list")
    public TableDataInfo list(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
        // 分页查询逻辑
    }

    /**
     * 导出中介黑名单列表
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:export')")
    @Log(title = "中介黑名单", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, CcdiIntermediaryBlacklistQueryDTO queryDTO) {
        // 导出逻辑
    }

    /**
     * 获取中介黑名单详细信息
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:query')")
    @GetMapping(value = "/{intermediaryId}")
    public AjaxResult getInfo(@PathVariable Long intermediaryId) {
        // 查询详情逻辑
    }

    /**
     * 新增中介黑名单
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:add')")
    @Log(title = "中介黑名单", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody CcdiIntermediaryBlacklistAddDTO addDTO) {
        // 新增逻辑
    }

    /**
     * 修改中介黑名单
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:edit')")
    @Log(title = "中介黑名单", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody CcdiIntermediaryBlacklistEditDTO editDTO) {
        // 修改逻辑
    }

    /**
     * 删除中介黑名单
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:remove')")
    @Log(title = "中介黑名单", businessType = BusinessType.DELETE)
    @DeleteMapping("/{intermediaryIds}")
    public AjaxResult remove(@PathVariable Long[] intermediaryIds) {
        // 删除逻辑
    }

    /**
     * 下载导入模板
     */
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) {
        // 生成 Excel 模板
    }

    /**
     * 导入中介黑名单
     */
    @PreAuthorize("@ss.hasPermi('dpc:intermediary:import')")
    @Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) {
        // 导入逻辑
    }
}

Service 层设计

ICcdiIntermediaryBlacklistService

public interface ICcdiIntermediaryBlacklistService {

    /**
     * 查询中介黑名单列表
     */
    List<CcdiIntermediaryBlacklistVO> selectIntermediaryList(CcdiIntermediaryBlacklistQueryDTO queryDTO);

    /**
     * 查询中介黑名单详细信息
     */
    CcdiIntermediaryBlacklistVO selectIntermediaryById(Long intermediaryId);

    /**
     * 新增中介黑名单
     */
    int insertIntermediary(CcdiIntermediaryBlacklistAddDTO addDTO);

    /**
     * 修改中介黑名单
     */
    int updateIntermediary(CcdiIntermediaryBlacklistEditDTO editDTO);

    /**
     * 批量删除中介黑名单
     */
    int deleteIntermediaryByIds(Long[] intermediaryIds);

    /**
     * 导入中介黑名单数据
     */
    String importIntermediary(List<CcdiIntermediaryBlacklistAddDTO> addDTOList, boolean isUpdateSupport);
}

Domain 层设计

实体类注解

public class CcdiIntermediaryBlacklist {

    /** 中介ID */
    private Long intermediaryId;

    /** 姓名/机构名称 */
    @Excel(name = "姓名/机构名称")
    private String name;

    /** 证件号 */
    @Excel(name = "证件号")
    private String certificateNo;

    /** 中介类型 */
    @Excel(name = "中介类型", readConverterExp = "1=个人,2=机构")
    private String intermediaryType;

    /** 状态 */
    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
    private String status;

    /** 备注 */
    @Excel(name = "备注")
    private String remark;

    /** 创建者 */
    private String createBy;

    /** 创建时间 */
    private Date createTime;

    /** 更新者 */
    private String updateBy;

    /** 更新时间 */
    private Date updateTime;
}

前端设计

页面结构

ruoyi-ui/src/views/dpcIntermediary/
├── index.vue           # 主页面(列表 + 搜索)
└── components/
    └── form-dialog.vue  # 新增/编辑对话框

主要功能组件

1. 搜索区

  • 按姓名/机构名称搜索(模糊)
  • 按证件号搜索(精确)
  • 按中介类型筛选(下拉:全部/个人/机构)
  • 按状态筛选(下拉:全部/正常/停用)

2. 操作按钮区

  • 新增按钮
  • 导入按钮
  • 导出按钮
  • 下载模板按钮

3. 数据表格

  • 列:姓名/机构名称、证件号、中介类型、状态、创建时间、操作
  • 操作列:编辑、删除

4. 新增/编辑对话框

  • 姓名/机构名称(必填)
  • 证件号(选填)
  • 中介类型(必填,单选:个人/机构)
  • 状态(必填,单选:正常/停用)
  • 备注(选填,文本域)

5. 导入对话框

  • 上传 Excel 文件
  • 显示导入结果(成功/失败数量)
  • 显示错误详情(如有)

API 设计

dpcIntermediary.js

import request from '@/utils/request'

// 查询中介黑名单列表
export function listIntermediary(query) {
  return request({
    url: '/dpc/intermediary/list',
    method: 'get',
    params: query
  })
}

// 查询中介黑名单详细
export function getIntermediary(intermediaryId) {
  return request({
    url: '/dpc/intermediary/' + intermediaryId,
    method: 'get'
  })
}

// 新增中介黑名单
export function addIntermediary(data) {
  return request({
    url: '/dpc/intermediary',
    method: 'post',
    data: data
  })
}

// 修改中介黑名单
export function updateIntermediary(data) {
  return request({
    url: '/dpc/intermediary',
    method: 'put',
    data: data
  })
}

// 删除中介黑名单
export function delIntermediary(intermediaryIds) {
  return request({
    url: '/dpc/intermediary/' + intermediaryIds,
    method: 'delete'
  })
}

// 导出中介黑名单
export function exportIntermediary(query) {
  return request({
    url: '/dpc/intermediary/export',
    method: 'post',
    params: query
  })
}

// 下载导入模板
export function importTemplate() {
  return request({
    url: '/dpc/intermediary/importTemplate',
    method: 'post'
  })
}

// 导入中介黑名单
export function importData(data) {
  return request({
    url: '/dpc/intermediary/importData',
    method: 'post',
    data: data
  })
}

Excel 导入导出设计

Excel 模板格式

姓名/机构名称 证件号 中介类型 状态 备注
张三 110101199001011234 个人 正常 测试数据
XX中介公司 91110000XXXXXXXXXX 机构 正常 -

导入数据验证规则

  1. 姓名/机构名称:必填,长度 1-100 字符
  2. 证件号:选填,长度不超过 50 字符
  3. 中介类型:必填,只能填"个人"或"机构"
  4. 状态:必填,只能填"正常"或"停用"
  5. 备注:选填,长度不超过 500 字符

导入错误处理

  • 记录每一行的错误信息
  • 返回导入结果统计(成功数、失败数)
  • 失败数据不写入数据库
  • 支持更新模式(可选)

权限设计

权限标识 说明 对应接口
dpc:intermediary:list 查询中介黑名单列表 GET /dpc/intermediary/list
dpc:intermediary:query 查询中介黑名单详情 GET /dpc/intermediary/{id}
dpc:intermediary:add 新增中介黑名单 POST /dpc/intermediary
dpc:intermediary:edit 修改中介黑名单 PUT /dpc/intermediary
dpc:intermediary:remove 删除中介黑名单 DELETE /dpc/intermediary/{ids}
dpc:intermediary:export 导出中介黑名单 POST /dpc/intermediary/export
dpc:intermediary:import 导入中介黑名单 POST /dpc/intermediary/importData

菜单设计

在系统菜单表中添加以下菜单记录:

-- 一级菜单:信息维护
INSERT INTO sys_menu VALUES (
    2000, '信息维护', NULL, 1, 0, 'dpc', NULL, 1, 0, 'M', '0', '0', '', 'example', 'admin', NOW(), '', NULL, '信息维护目录'
);

-- 二级菜单:中介库管理
INSERT INTO sys_menu VALUES (
    2001, '中介库管理', 2000, 1, 0, 'intermediary', 'dpcIntermediary/index', 1, 0, 'C', '0', '0', 'dpc:intermediary:list', 'user', 'admin', NOW(), '', NULL, '中介库管理菜单'
);

-- 中介库管理按钮权限
INSERT INTO sys_menu VALUES (2002, '中介查询', 2001, 1, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:query', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO sys_menu VALUES (2003, '中介新增', 2001, 2, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:add', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO sys_menu VALUES (2004, '中介修改', 2001, 3, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:edit', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO sys_menu VALUES (2005, '中介删除', 2001, 4, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:remove', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO sys_menu VALUES (2006, '中介导出', 2001, 5, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:export', '#', 'admin', NOW(), '', NULL, '');
INSERT INTO sys_menu VALUES (2007, '中介导入', 2001, 6, 0, '', '', 1, 0, 'F', '0', '0', 'dpc:intermediary:import', '#', 'admin', NOW(), '', NULL, '');

字典数据设计

中介类型ccdi_intermediary_type

字典值 字典标签 排序 状态
1 个人 1 正常
2 机构 2 正常

技术约束

  1. 后端框架Spring Boot 3.5.8
  2. ORM 框架MyBatis 3.0.5
  3. Excel 处理EasyExcel 3.3.4(依赖 replace-poi-with-easyexcel change
  4. 前端框架Vue 2.6.12 + Element UI 2.15.14
  5. 数据库MySQL 8.2.0
  6. 字符编码UTF-8utf8mb4