From dc8f1be4c35784c085f5727f0ad0d86a87331aad Mon Sep 17 00:00:00 2001
From: wkc <978997012@qq.com>
Date: Wed, 4 Feb 2026 19:16:34 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E4=BB=8B=E9=BB=91=E5=90=8D=E5=8D=95?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.claude/settings.local.json | 3 +-
...026-02-04-intermediary-blacklist-design.md | 532 +++++
doc/docs/中介黑名单后端.md | 2 +-
...4-intermediary-blacklist-implementation.md | 1958 +++++++++++++++++
.../CcdiIntermediaryBlacklistController.java | 202 --
.../ccdi/domain/CcdiBizIntermediary.java | 90 -
.../ccdi/domain/CcdiEnterpriseBaseInfo.java | 105 -
.../domain/CcdiIntermediaryBlacklist.java | 154 --
.../dto/CcdiIntermediaryBlacklistAddDTO.java | 68 -
.../dto/CcdiIntermediaryBlacklistEditDTO.java | 386 ----
.../CcdiIntermediaryBlacklistQueryDTO.java | 60 -
.../dto/CcdiIntermediaryEntityAddDTO.java | 95 -
.../dto/CcdiIntermediaryEntityEditDTO.java | 89 -
.../dto/CcdiIntermediaryPersonAddDTO.java | 83 -
.../dto/CcdiIntermediaryPersonEditDTO.java | 76 -
.../excel/CcdiIntermediaryBlacklistExcel.java | 186 --
.../excel/CcdiIntermediaryEntityExcel.java | 96 -
.../excel/CcdiIntermediaryPersonExcel.java | 84 -
.../vo/CcdiIntermediaryBlacklistVO.java | 56 -
.../vo/CcdiIntermediaryEntityDetailVO.java | 111 -
.../vo/CcdiIntermediaryPersonDetailVO.java | 98 -
.../mapper/CcdiBizIntermediaryMapper.java | 16 -
.../mapper/CcdiEnterpriseBaseInfoMapper.java | 16 -
.../CcdiIntermediaryBlacklistMapper.java | 49 -
.../ICcdiIntermediaryBlacklistService.java | 148 --
.../CcdiIntermediaryBlacklistServiceImpl.java | 716 ------
.../ccdi/CcdiIntermediaryBlacklistMapper.xml | 192 --
27 files changed, 2493 insertions(+), 3178 deletions(-)
create mode 100644 doc/designs/2026-02-04-intermediary-blacklist-design.md
create mode 100644 doc/plans/2026-02-04-intermediary-blacklist-implementation.md
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryBlacklistController.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiIntermediaryBlacklist.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistAddDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistEditDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistQueryDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryBlacklistExcel.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryBlacklistVO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryBlacklistMapper.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryBlacklistService.java
delete mode 100644 ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryBlacklistServiceImpl.java
delete mode 100644 ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryBlacklistMapper.xml
diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index cf64617..88a51a1 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -68,7 +68,8 @@
"Bash(chmod:*)",
"Bash(ls:*)",
"Bash(test_report.sh \")",
- "mcp__mysql__show_statement"
+ "mcp__mysql__show_statement",
+ "Bash(if not exist \"doc\\\\designs\" mkdir docdesigns)"
]
},
"enabledMcpjsonServers": [
diff --git a/doc/designs/2026-02-04-intermediary-blacklist-design.md b/doc/designs/2026-02-04-intermediary-blacklist-design.md
new file mode 100644
index 0000000..053965d
--- /dev/null
+++ b/doc/designs/2026-02-04-intermediary-blacklist-design.md
@@ -0,0 +1,532 @@
+# 中介黑名单管理模块 - 系统设计文档
+
+## 文档信息
+
+- **版本**: v1.0
+- **日期**: 2026-02-04
+- **作者**: Claude
+- **项目**: 纪检初核系统 (CCDI)
+
+---
+
+## 1. 概述
+
+### 1.1 功能简介
+
+中介黑名单管理模块提供个人中介和实体中介两类中介信息的完整管理功能,包括:
+- 个人中介的增删改查
+- 实体中介的增删改查
+- 统一列表查询(支持联合查询和个人/实体分类查询)
+- 带字典下拉框的Excel导入模板下载
+- 批量数据导入
+
+### 1.2 核心特性
+
+1. **双表存储**: 个人中介和实体中介分别存储在不同的数据表中
+2. **统一查询**: 使用SQL UNION实现高效的联合查询和分页
+3. **类型区分**: 通过`intermediary_type`字段区分个人(1)和实体(2)中介
+4. **智能筛选**: 实体中介通过`risk_level='1'`(高风险) AND `ent_source='INTERMEDIARY'(中介)`筛选
+5. **唯一性保证**: 个人中介的证件号`person_id`作为业务唯一键
+
+### 1.3 技术栈
+
+- **后端框架**: Spring Boot 3.5.8
+- **ORM框架**: MyBatis Plus 3.5.10
+- **Excel处理**: EasyExcel (带字典下拉框)
+- **数据库**: MySQL 8.2.0
+- **API文档**: SpringDoc 2.8.14
+
+---
+
+## 2. 数据库设计
+
+### 2.1 个人中介表 (ccdi_biz_intermediary)
+
+| 字段名 | 类型 | 可空 | 主键 | 注释 |
+|--------|------|------|------|------|
+| biz_id | VARCHAR | 否 | 是 | 人员ID |
+| person_type | VARCHAR | 否 | 否 | 人员类型(中介、职业背债人等) |
+| person_sub_type | VARCHAR | 是 | 否 | 人员子类型 |
+| relation_type | VARCHAR | 是 | 否 | 关系类型(配偶、子女、父母等) |
+| name | VARCHAR | 否 | 否 | 姓名 |
+| gender | CHAR | 是 | 否 | 性别 |
+| id_type | VARCHAR | 否 | 否 | 证件类型(默认身份证) |
+| person_id | VARCHAR | 否 | 否 | **证件号码(业务唯一键)** |
+| mobile | VARCHAR | 是 | 否 | 手机号码 |
+| wechat_no | VARCHAR | 是 | 否 | 微信号 |
+| contact_address | VARCHAR | 是 | 否 | 联系地址 |
+| company | VARCHAR | 是 | 否 | 所在公司 |
+| social_credit_code | VARCHAR | 是 | 否 | 企业统一信用码 |
+| position | VARCHAR | 是 | 否 | 职位 |
+| related_num_id | VARCHAR | 是 | 否 | 关联人员ID |
+| relation_type | VARCHAR | 是 | 否 | 关联关系 |
+| data_source | VARCHAR | 是 | 否 | 数据来源(MANUAL/SYSTEM/IMPORT/API) |
+| remark | VARCHAR | 是 | 否 | 备注信息 |
+| created_by | VARCHAR | 否 | 否 | 记录创建人 |
+| updated_by | VARCHAR | 是 | 否 | 记录更新人 |
+| create_time | DATETIME | 否 | 否 | 记录创建时间 |
+| update_time | DATETIME | 是 | 否 | 记录更新时间 |
+
+**索引设计**:
+- PRIMARY KEY: `biz_id`
+- UNIQUE KEY: `uk_person_id` (`person_id`)
+
+### 2.2 实体中介表 (ccdi_enterprise_base_info)
+
+| 字段名 | 类型 | 可空 | 主键 | 注释 |
+|--------|------|------|------|------|
+| social_credit_code | VARCHAR | 否 | 是 | **统一社会信用代码(主键)** |
+| enterprise_name | VARCHAR | 否 | 否 | 企业名称 |
+| enterprise_type | VARCHAR | 否 | 否 | 企业类型(有限责任公司、股份有限公司等) |
+| enterprise_nature | VARCHAR | 是 | 否 | 企业性质(国企、民企、外企等) |
+| industry_class | VARCHAR | 是 | 否 | 行业分类 |
+| industry_name | VARCHAR | 是 | 否 | 所属行业 |
+| establish_date | DATE | 是 | 否 | 成立日期 |
+| register_address | VARCHAR | 是 | 否 | 注册地址 |
+| legal_representative | VARCHAR | 是 | 否 | 法定代表人 |
+| legal_cert_type | VARCHAR | 是 | 否 | 法定代表人证件类型 |
+| legal_cert_no | VARCHAR | 是 | 否 | 法定代表人证件号码 |
+| shareholder1-5 | VARCHAR | 是 | 否 | 股东信息 |
+| status | VARCHAR | 是 | 否 | 经营状态 |
+| create_time | DATETIME | 否 | 否 | 创建时间 |
+| update_time | DATETIME | 否 | 否 | 更新时间 |
+| created_by | VARCHAR | 否 | 否 | 创建人 |
+| updated_by | VARCHAR | 是 | 否 | 更新人 |
+| data_source | VARCHAR | 是 | 否 | 数据来源(MANUAL/SYSTEM/API/IMPORT) |
+| **risk_level** | VARCHAR(10) | 是 | 否 | **风险等级:1-高风险, 2-中风险, 3-低风险** |
+| **ent_source** | VARCHAR(20) | 否 | 否 | **企业来源:GENERAL/EMP_RELATION/CREDIT_CUSTOMER/INTERMEDIARY/BOTH** |
+
+**索引设计**:
+- PRIMARY KEY: `social_credit_code`
+- INDEX: `idx_risk_ent_source` (`risk_level`, `ent_source`)
+
+**实体中介筛选条件**:
+- `risk_level = '1'` (高风险)
+- `ent_source = 'INTERMEDIARY'` (中介)
+
+---
+
+## 3. 架构设计
+
+### 3.1 整体架构
+
+```
+Controller Layer (CcdiIntermediaryController)
+ ↓
+Service Layer (ICcdiIntermediaryService)
+ ↓
+Mapper Layer (CcdiBizIntermediaryMapper, CcdiEnterpriseBaseInfoMapper)
+ ↓
+Database (ccdi_biz_intermediary, ccdi_enterprise_base_info)
+```
+
+### 3.2 分层说明
+
+**Controller层**:
+- 统一的Controller处理个人和实体中介的请求
+- 使用不同的路径区分个人和实体中介操作
+- 权限控制: `ccdi:intermediary:*`
+
+**Service层**:
+- 统一的服务接口
+- 根据中介类型路由到不同的业务逻辑
+- 处理唯一性校验、数据自动填充等业务规则
+
+**Mapper层**:
+- 每个表对应独立的Mapper接口
+- 继承MyBatis Plus的BaseMapper
+- 自定义XML实现UNION联合查询
+
+**DTO/VO层**:
+- 严格分离,不与Entity混用
+- DTO用于接口参数接收
+- VO用于数据返回
+
+---
+
+## 4. 接口设计
+
+### 4.1 基础信息
+
+- **基础路径**: `/ccdi/intermediary`
+- **权限前缀**: `ccdi:intermediary`
+- **响应格式**: AjaxResult
+
+### 4.2 统一列表查询
+
+**接口**: `GET /ccdi/intermediary/list`
+
+**权限**: `ccdi:intermediary:list`
+
+**请求参数**:
+| 参数名 | 类型 | 必填 | 说明 |
+|--------|------|------|------|
+| name | String | 否 | 姓名/机构名称(模糊查询) |
+| certificateNo | String | 否 | 证件号/统一社会信用代码(精确查询) |
+| intermediaryType | String | 否 | 中介类型(1=个人, 2=实体, null=全部) |
+| pageNum | Integer | 否 | 页码(默认1) |
+| pageSize | Integer | 否 | 每页数量(默认10) |
+
+**响应**: TableDataInfo (分页结果)
+
+**实现**: SQL UNION联合查询,支持按类型筛选优化
+
+### 4.3 个人中介接口
+
+#### 4.3.1 新增个人中介
+**接口**: `POST /ccdi/intermediary/person`
+**权限**: `ccdi:intermediary:add`
+**请求体**: CcdiIntermediaryPersonAddDTO
+**业务逻辑**:
+- 校验姓名必填
+- 校验证件号必填且唯一
+- 自动设置data_source='MANUAL'
+- 自动设置person_type='中介'
+
+#### 4.3.2 修改个人中介
+**接口**: `PUT /ccdi/intermediary/person`
+**权限**: `ccdi:intermediary:edit`
+**请求体**: CcdiIntermediaryPersonEditDTO
+**业务逻辑**:
+- biz_id不可修改
+- 证件号修改时需校验唯一性(排除自身)
+
+#### 4.3.3 查询个人中介详情
+**接口**: `GET /ccdi/intermediary/person/{bizId}`
+**权限**: `ccdi:intermediary:query`
+**响应**: CcdiIntermediaryPersonDetailVO
+
+### 4.4 实体中介接口
+
+#### 4.4.1 新增实体中介
+**接口**: `POST /ccdi/intermediary/entity`
+**权限**: `ccdi:intermediary:add`
+**请求体**: CcdiIntermediaryEntityAddDTO
+**业务逻辑**:
+- 校验企业名称必填
+- 校验统一社会信用代码唯一
+- 自动设置risk_level='1'(高风险)
+- 自动设置ent_source='INTERMEDIARY'(中介)
+- 自动设置data_source='MANUAL'
+
+#### 4.4.2 修改实体中介
+**接口**: `PUT /ccdi/intermediary/entity`
+**权限**: `ccdi:intermediary:edit`
+**请求体**: CcdiIntermediaryEntityEditDTO
+**业务逻辑**:
+- social_credit_code不可修改
+- 企业名称修改时需校验唯一性(排除自身)
+
+#### 4.4.3 查询实体中介详情
+**接口**: `GET /ccdi/intermediary/entity/{socialCreditCode}`
+**权限**: `ccdi:intermediary:query`
+**响应**: CcdiIntermediaryEntityDetailVO
+
+### 4.5 删除接口
+
+**接口**: `DELETE /ccdi/intermediary/{ids}`
+**权限**: `ccdi:intermediary:remove`
+**路径参数**: ids (支持个人和实体的ID,逗号分隔)
+
+### 4.6 导入导出接口
+
+#### 4.6.1 个人中介模板下载
+**接口**: `POST /ccdi/intermediary/importPersonTemplate`
+**权限**: 无需登录
+**功能**: 下载带字典下拉框的Excel模板
+**下拉字段**:
+- 性别: `ccdi_indiv_gender`
+- 证件类型: `ccdi_certificate_type`
+- 关联关系: `ccdi_relation_type`
+
+#### 4.6.2 实体中介模板下载
+**接口**: `POST /ccdi/intermediary/importEntityTemplate`
+**权限**: 无需登录
+**功能**: 下载带字典下拉框的Excel模板
+**下拉字段**:
+- 主体类型: `ccdi_entity_type`
+- 企业性质: `ccdi_enterprise_nature`
+- 法人证件类型: `ccdi_certificate_type`
+
+#### 4.6.3 个人中介数据导入
+**接口**: `POST /ccdi/intermediary/importPersonData`
+**权限**: `ccdi:intermediary:import`
+**参数**:
+- file: MultipartFile
+- updateSupport: Boolean (是否更新已存在数据)
+**Excel类**: CcdiIntermediaryPersonExcel
+**业务逻辑**:
+- 解析Excel数据
+- 校验姓名必填、证件号必填
+- 检查person_id唯一性
+- 批量插入ccdi_biz_intermediary表
+- 自动设置: data_source='IMPORT', person_type='中介'
+
+#### 4.6.4 实体中介数据导入
+**接口**: `POST /ccdi/intermediary/importEntityData`
+**权限**: `ccdi:intermediary:import`
+**参数**:
+- file: MultipartFile
+- updateSupport: Boolean (是否更新已存在数据)
+**Excel类**: CcdiIntermediaryEntityExcel
+**业务逻辑**:
+- 解析Excel数据
+- 校验企业名称必填
+- 检查social_credit_code唯一性
+- 批量插入ccdi_enterprise_base_info表
+- 自动设置: risk_level='1', ent_source='INTERMEDIARY', data_source='IMPORT'
+
+---
+
+## 5. UNION联合查询实现
+
+### 5.1 SQL查询语句
+
+```xml
+
+```
+
+### 5.2 分页实现
+
+- 使用MyBatis Plus的Page对象进行分页
+- 在Service层调用`page(intermediaryQueryDTO, Page)`方法
+- 自动处理total和rows
+
+### 5.3 查询优化
+
+- 根据intermediaryType参数优化查询,如果指定类型则只查询对应表
+- 添加索引优化查询性能
+
+---
+
+## 6. 数据对象设计
+
+### 6.1 Entity实体类
+
+**CcdiBizIntermediary**:
+- 使用`@Data`注解
+- 不继承BaseEntity
+- 单独添加审计字段
+- 主键: biz_id (String)
+
+**CcdiEnterpriseBaseInfo**:
+- 使用`@Data`注解
+- 不继承BaseEntity
+- 单独添加审计字段
+- 主键: social_credit_code (String)
+
+### 6.2 DTO数据传输对象
+
+**CcdiIntermediaryPersonAddDTO**: 个人中介新增DTO
+- 包含所有个人字段
+- 使用JSR-303校验注解
+
+**CcdiIntermediaryPersonEditDTO**: 个人中介修改DTO
+- 包含biz_id和可编辑字段
+- biz_id不可为空
+
+**CcdiIntermediaryEntityAddDTO**: 实体中介新增DTO
+- 包含所有企业字段
+- 使用JSR-303校验注解
+
+**CcdiIntermediaryEntityEditDTO**: 实体中介修改DTO
+- 包含social_credit_code和可编辑字段
+- social_credit_code不可为空
+
+**CcdiIntermediaryQueryDTO**: 统一查询DTO
+- 支持: name, certificateNo, intermediaryType筛选
+
+### 6.3 VO视图对象
+
+**CcdiIntermediaryVO**: 统一列表VO
+- 包含intermediary_type字段区分类型(1=个人, 2=实体)
+- 统一字段: id, name, certificate_no, intermediary_type, company, create_time等
+
+**CcdiIntermediaryPersonDetailVO**: 个人中介详情VO
+- 包含个人中介的所有详细信息
+
+**CcdiIntermediaryEntityDetailVO**: 实体中介详情VO
+- 包含实体中介的所有详细信息
+
+### 6.4 Excel导入导出类
+
+**CcdiIntermediaryPersonExcel**: 个人中介Excel类
+- 使用EasyExcel注解
+- 字段校验和格式化
+
+**CcdiIntermediaryEntityExcel**: 实体中介Excel类
+- 使用EasyExcel注解
+- 字段校验和格式化
+
+---
+
+## 7. 业务规则
+
+### 7.1 唯一性约束
+
+1. **个人中介**:
+ - `person_id`(证件号)必须唯一
+ - 新增时检查是否已存在
+ - 修改时检查是否已存在(排除自身)
+
+2. **实体中介**:
+ - `social_credit_code`(统一社会信用代码)必须唯一
+ - 新增时检查是否已存在
+ - 修改时检查是否已存在(排除自身)
+
+### 7.2 数据自动填充
+
+**个人中介**:
+- data_source: MANUAL(手动录入) / IMPORT(批量导入)
+- person_type: 中介
+
+**实体中介**:
+- risk_level: 1 (高风险)
+- ent_source: INTERMEDIARY (中介)
+- data_source: MANUAL(手动录入) / IMPORT(批量导入)
+
+### 7.3 字典类型
+
+| 字典类型 | 用途 |
+|---------|------|
+| ccdi_indiv_gender | 个人中介性别 |
+| ccdi_certificate_type | 证件类型 |
+| ccdi_relation_type | 关联关系 |
+| ccdi_entity_type | 主体类型 |
+| ccdi_enterprise_nature | 企业性质 |
+
+---
+
+## 8. 错误处理
+
+### 8.1 业务错误码
+
+| 错误码 | 说明 |
+|--------|------|
+| 1001 | 证件号已存在 |
+| 1002 | 统一社会信用代码已存在 |
+| 1003 | 数据不存在 |
+| 1004 | 姓名不能为空 |
+| 1005 | 证件号不能为空 |
+| 1006 | 企业名称不能为空 |
+
+### 8.2 异常处理策略
+
+- 使用`@ControllerAdvice`全局异常处理
+- 业务异常使用自定义BizException
+- 参数校验异常自动返回字段错误信息
+
+---
+
+## 9. 测试策略
+
+### 9.1 单元测试
+
+- Service层业务逻辑测试
+- Mapper层SQL查询测试
+- 唯一性校验测试
+
+### 9.2 集成测试
+
+- Controller接口测试
+- 导入导出功能测试
+- 联合查询分页测试
+
+### 9.3 测试脚本
+
+- 生成可执行的HTTP测试脚本
+- 使用admin/admin123账号获取token
+- 保存测试结果并生成测试报告
+
+---
+
+## 10. 实现计划
+
+### 10.1 开发顺序
+
+1. 创建Entity实体类
+2. 创建Mapper接口和XML
+3. 创建DTO/VO对象
+4. 实现Service层业务逻辑
+5. 实现Controller层接口
+6. 实现Excel导入导出功能
+7. 编写测试用例
+8. 生成API文档
+
+### 10.2 技术要点
+
+- 使用MyBatis Plus的BaseMapper简化CRUD操作
+- 使用@Resource注入,替代@Autowired
+- 实体类不继承BaseEntity,单独添加审计字段
+- 简单CRUD使用MyBatis Plus方法,复杂查询使用XML
+- 所有Controller接口添加完整的Swagger注解
+- 使用@Validated和JSR-303进行参数校验
+
+---
+
+## 11. 附录
+
+### 11.1 相关文档
+
+- [中介黑名单管理API文档.md](../api/中介黑名单管理API文档.md)
+- [中介黑名单后端.md](../docs/中介黑名单后端.md)
+- [ccdi_biz_intermediary.csv](../docs/ccdi_biz_intermediary.csv)
+- [ccdi_enterprise_base_info.csv](../docs/ccdi_enterprise_base_info.csv)
+
+### 11.2 更新日志
+
+| 版本 | 日期 | 说明 |
+|------|------|------|
+| 1.0 | 2026-02-04 | 初始版本,完成系统设计 |
+
+---
+
+**文档结束**
diff --git a/doc/docs/中介黑名单后端.md b/doc/docs/中介黑名单后端.md
index 4aca538..a3e533b 100644
--- a/doc/docs/中介黑名单后端.md
+++ b/doc/docs/中介黑名单后端.md
@@ -1 +1 @@
-我想实现中介黑名单管理的功能需求。中介分为个人中介和实体中介。个人中介的字段为 @ccdi_biz_intermediary.csv。实体中介字段为 @ccdi_enterprise_base_info.csv,风险等级为高风险,企业来源为中介。需要生成的接口:个人中介的新增、修改接口,以证件号为关联键;个人中介导入模板下载,个人中介文件上传导入新增;实体中介类的新增、修改接口;实体中介导入模板下载,上传导入新增;列表查询,要求联合查询两种类型的中介,也可以支持查询单种类的中介。
\ No newline at end of file
+实现中介黑名单管理的后端接口开发。中介分为个人中介和实体中介。个人中介的表字段为 @ccdi_biz_intermediary.csv。实体中介表字段为 @ccdi_enterprise_base_info.csv,风险等级为高风险,企业来源为中介。需要生成的接口:个人中介的新增、修改接口,以证件号为关联键;个人中介导入模板下载,个人中介文件上传导入新增;实体中介类的新增、修改接口;实体中介导入模板下载,上传导入新增;列表查询,要求联合查询两种类型的中介,也可以支持查询单种类的中介。
\ No newline at end of file
diff --git a/doc/plans/2026-02-04-intermediary-blacklist-implementation.md b/doc/plans/2026-02-04-intermediary-blacklist-implementation.md
new file mode 100644
index 0000000..3b2fb5a
--- /dev/null
+++ b/doc/plans/2026-02-04-intermediary-blacklist-implementation.md
@@ -0,0 +1,1958 @@
+# 中介黑名单管理模块实施计划
+
+> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
+
+**Goal:** 实现个人中介和实体中介的完整CRUD功能,包括统一列表查询、Excel导入导出,使用SQL UNION联合查询实现高效分页。
+
+**Architecture:** 采用分层架构(Controller -> Service -> Mapper -> Database),个人中介存储在ccdi_biz_intermediary表,实体中介存储在ccdi_enterprise_base_info表(通过risk_level='1' AND ent_source='INTERMEDIARY'筛选)。使用MyBatis Plus进行CRUD操作,自定义XML实现UNION联合查询。
+
+**Tech Stack:** Spring Boot 3.5.8, MyBatis Plus 3.5.10, EasyExcel (带字典下拉框), MySQL 8.2.0, SpringDoc 2.8.14
+
+---
+
+## Task 1: 创建个人中介Entity实体类
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java`
+
+**Step 1: 创建CcdiBizIntermediary实体类**
+
+```java
+package com.ruoyi.ccdi.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 个人中介对象 ccdi_biz_intermediary
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@TableName("ccdi_biz_intermediary")
+public class CcdiBizIntermediary implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 人员ID */
+ @TableId(type = IdType.ASSIGN_UUID)
+ private String bizId;
+
+ /** 人员类型,中介、职业背债人、房产中介等 */
+ private String personType;
+
+ /** 人员子类型 */
+ private String personSubType;
+
+ /** 关系类型,如:配偶、子女、父母、兄弟姐妹等 */
+ private String relationType;
+
+ /** 姓名 */
+ private String name;
+
+ /** 性别 */
+ private String gender;
+
+ /** 证件类型 */
+ private String idType;
+
+ /** 证件号码 */
+ private String personId;
+
+ /** 手机号码 */
+ private String mobile;
+
+ /** 微信号 */
+ private String wechatNo;
+
+ /** 联系地址 */
+ private String contactAddress;
+
+ /** 所在公司 */
+ private String company;
+
+ /** 企业统一信用码 */
+ private String socialCreditCode;
+
+ /** 职位 */
+ private String position;
+
+ /** 关联人员ID */
+ private String relatedNumId;
+
+ /** 关联关系 */
+ private String relationType;
+
+ /** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, IMPORT:批量导入, API:接口获取 */
+ private String dataSource;
+
+ /** 备注信息 */
+ private String remark;
+
+ /** 记录创建人 */
+ @TableField(fill = FieldFill.INSERT)
+ private String createdBy;
+
+ /** 记录创建时间 */
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+ /** 记录更新人 */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updatedBy;
+
+ /** 记录更新时间 */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date updateTime;
+}
+```
+
+**Step 2: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
+git commit -m "feat: 添加个人中介实体类CcdiBizIntermediary"
+```
+
+---
+
+## Task 2: 创建实体中介Entity实体类
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java`
+
+**Step 1: 创建CcdiEnterpriseBaseInfo实体类**
+
+```java
+package com.ruoyi.ccdi.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 企业主体信息对象 ccdi_enterprise_base_info
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@TableName("ccdi_enterprise_base_info")
+public class CcdiEnterpriseBaseInfo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 统一社会信用代码,员工企业关联关系表的外键 */
+ @TableId(type = IdType.INPUT)
+ private String socialCreditCode;
+
+ /** 企业名称 */
+ private String enterpriseName;
+
+ /** 企业类型,有限责任公司、股份有限公司、合伙企业、个体工商户、外资企业等 */
+ private String enterpriseType;
+
+ /** 企业性质,国企、民企、外企、合资、其他 */
+ private String enterpriseNature;
+
+ /** 行业分类 */
+ private String industryClass;
+
+ /** 所属行业 */
+ private String industryName;
+
+ /** 成立日期 */
+ private Date establishDate;
+
+ /** 注册地址 */
+ private String registerAddress;
+
+ /** 法定代表人 */
+ private String legalRepresentative;
+
+ /** 法定代表人证件类型 */
+ private String legalCertType;
+
+ /** 法定代表人证件号码 */
+ private String legalCertNo;
+
+ /** 股东1 */
+ private String shareholder1;
+
+ /** 股东2 */
+ private String shareholder2;
+
+ /** 股东3 */
+ private String shareholder3;
+
+ /** 股东4 */
+ private String shareholder4;
+
+ /** 股东5 */
+ private String shareholder5;
+
+ /** 经营状态 */
+ private String status;
+
+ /** 创建人 */
+ @TableField(fill = FieldFill.INSERT)
+ private String createdBy;
+
+ /** 创建时间 */
+ @TableField(fill = FieldFill.INSERT)
+ private Date createTime;
+
+ /** 更新人 */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private String updatedBy;
+
+ /** 更新时间 */
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date updateTime;
+
+ /** 数据来源,MANUAL:手动录入, SYSTEM:系统同步, API:接口获取, IMPORT:批量导入 */
+ private String dataSource;
+
+ /** 风险等级:1-高风险, 2-中风险, 3-低风险 */
+ private String riskLevel;
+
+ /** 企业来源:GENERAL-一般企业, EMP_RELATION-员工关系人, CREDIT_CUSTOMER-信贷客户, INTERMEDIARY-中介, BOTH-兼有 */
+ private String entSource;
+}
+```
+
+**Step 2: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
+git commit -m "feat: 添加实体中介实体类CcdiEnterpriseBaseInfo"
+```
+
+---
+
+## Task 3: 创建个人中介DTO
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java`
+
+**Step 1: 创建个人中介新增DTO**
+
+```java
+package com.ruoyi.ccdi.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 个人中介新增DTO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "个人中介新增DTO")
+public class CcdiIntermediaryPersonAddDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 姓名 */
+ @Schema(description = "姓名")
+ @NotBlank(message = "姓名不能为空")
+ @Size(max = 100, message = "姓名长度不能超过100个字符")
+ private String name;
+
+ /** 人员类型 */
+ @Schema(description = "人员类型")
+ private String personType;
+
+ /** 人员子类型 */
+ @Schema(description = "人员子类型")
+ private String personSubType;
+
+ /** 关系类型 */
+ @Schema(description = "关系类型")
+ private String relationType;
+
+ /** 性别 */
+ @Schema(description = "性别")
+ private String gender;
+
+ /** 证件类型 */
+ @Schema(description = "证件类型")
+ private String idType;
+
+ /** 证件号码 */
+ @Schema(description = "证件号码")
+ @NotBlank(message = "证件号码不能为空")
+ @Size(max = 50, message = "证件号码长度不能超过50个字符")
+ private String personId;
+
+ /** 手机号码 */
+ @Schema(description = "手机号码")
+ @Size(max = 20, message = "手机号码长度不能超过20个字符")
+ private String mobile;
+
+ /** 微信号 */
+ @Schema(description = "微信号")
+ @Size(max = 50, message = "微信号长度不能超过50个字符")
+ private String wechatNo;
+
+ /** 联系地址 */
+ @Schema(description = "联系地址")
+ @Size(max = 200, message = "联系地址长度不能超过200个字符")
+ private String contactAddress;
+
+ /** 所在公司 */
+ @Schema(description = "所在公司")
+ @Size(max = 200, message = "所在公司长度不能超过200个字符")
+ private String company;
+
+ /** 企业统一信用码 */
+ @Schema(description = "企业统一信用码")
+ @Size(max = 50, message = "企业统一信用码长度不能超过50个字符")
+ private String socialCreditCode;
+
+ /** 职位 */
+ @Schema(description = "职位")
+ @Size(max = 100, message = "职位长度不能超过100个字符")
+ private String position;
+
+ /** 关联人员ID */
+ @Schema(description = "关联人员ID")
+ @Size(max = 50, message = "关联人员ID长度不能超过50个字符")
+ private String relatedNumId;
+
+ /** 关联关系 */
+ @Schema(description = "关联关系")
+ @Size(max = 50, message = "关联关系长度不能超过50个字符")
+ private String relation;
+
+ /** 备注 */
+ @Schema(description = "备注")
+ @Size(max = 500, message = "备注长度不能超过500个字符")
+ private String remark;
+}
+```
+
+**Step 2: 创建个人中介修改DTO**
+
+```java
+package com.ruoyi.ccdi.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 个人中介修改DTO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "个人中介修改DTO")
+public class CcdiIntermediaryPersonEditDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 人员ID */
+ @Schema(description = "人员ID")
+ @NotBlank(message = "人员ID不能为空")
+ private String bizId;
+
+ /** 姓名 */
+ @Schema(description = "姓名")
+ @NotBlank(message = "姓名不能为空")
+ @Size(max = 100, message = "姓名长度不能超过100个字符")
+ private String name;
+
+ /** 人员类型 */
+ @Schema(description = "人员类型")
+ private String personType;
+
+ /** 人员子类型 */
+ @Schema(description = "人员子类型")
+ private String personSubType;
+
+ /** 关系类型 */
+ @Schema(description = "关系类型")
+ private String relationType;
+
+ /** 性别 */
+ @Schema(description = "性别")
+ private String gender;
+
+ /** 证件类型 */
+ @Schema(description = "证件类型")
+ private String idType;
+
+ /** 证件号码 */
+ @Schema(description = "证件号码")
+ @Size(max = 50, message = "证件号码长度不能超过50个字符")
+ private String personId;
+
+ /** 手机号码 */
+ @Schema(description = "手机号码")
+ @Size(max = 20, message = "手机号码长度不能超过20个字符")
+ private String mobile;
+
+ /** 微信号 */
+ @Schema(description = "微信号")
+ @Size(max = 50, message = "微信号长度不能超过50个字符")
+ private String wechatNo;
+
+ /** 联系地址 */
+ @Schema(description = "联系地址")
+ @Size(max = 200, message = "联系地址长度不能超过200个字符")
+ private String contactAddress;
+
+ /** 所在公司 */
+ @Schema(description = "所在公司")
+ @Size(max = 200, message = "所在公司长度不能超过200个字符")
+ private String company;
+
+ /** 企业统一信用码 */
+ @Schema(description = "企业统一信用码")
+ @Size(max = 50, message = "企业统一信用码长度不能超过50个字符")
+ private String socialCreditCode;
+
+ /** 职位 */
+ @Schema(description = "职位")
+ @Size(max = 100, message = "职位长度不能超过100个字符")
+ private String position;
+
+ /** 关联人员ID */
+ @Schema(description = "关联人员ID")
+ @Size(max = 50, message = "关联人员ID长度不能超过50个字符")
+ private String relatedNumId;
+
+ /** 关联关系 */
+ @Schema(description = "关联关系")
+ @Size(max = 50, message = "关联关系长度不能超过50个字符")
+ private String relation;
+
+ /** 备注 */
+ @Schema(description = "备注")
+ @Size(max = 500, message = "备注长度不能超过500个字符")
+ private String remark;
+}
+```
+
+**Step 3: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
+git commit -m "feat: 添加个人中介DTO类"
+```
+
+---
+
+## Task 4: 创建实体中介DTO
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java`
+
+**Step 1: 创建实体中介新增DTO**
+
+```java
+package com.ruoyi.ccdi.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体中介新增DTO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "实体中介新增DTO")
+public class CcdiIntermediaryEntityAddDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 机构名称 */
+ @Schema(description = "机构名称")
+ @NotBlank(message = "机构名称不能为空")
+ @Size(max = 200, message = "机构名称长度不能超过200个字符")
+ private String enterpriseName;
+
+ /** 统一社会信用代码 */
+ @Schema(description = "统一社会信用代码")
+ @Size(max = 50, message = "统一社会信用代码长度不能超过50个字符")
+ private String socialCreditCode;
+
+ /** 主体类型 */
+ @Schema(description = "主体类型")
+ @Size(max = 50, message = "主体类型长度不能超过50个字符")
+ private String enterpriseType;
+
+ /** 企业性质 */
+ @Schema(description = "企业性质")
+ @Size(max = 50, message = "企业性质长度不能超过50个字符")
+ private String enterpriseNature;
+
+ /** 行业分类 */
+ @Schema(description = "行业分类")
+ @Size(max = 100, message = "行业分类长度不能超过100个字符")
+ private String industryClass;
+
+ /** 所属行业 */
+ @Schema(description = "所属行业")
+ @Size(max = 100, message = "所属行业长度不能超过100个字符")
+ private String industryName;
+
+ /** 成立日期 */
+ @Schema(description = "成立日期")
+ private Date establishDate;
+
+ /** 注册地址 */
+ @Schema(description = "注册地址")
+ @Size(max = 500, message = "注册地址长度不能超过500个字符")
+ private String registerAddress;
+
+ /** 法定代表人 */
+ @Schema(description = "法定代表人")
+ @Size(max = 100, message = "法定代表人长度不能超过100个字符")
+ private String legalRepresentative;
+
+ /** 法定代表人证件类型 */
+ @Schema(description = "法定代表人证件类型")
+ @Size(max = 50, message = "法定代表人证件类型长度不能超过50个字符")
+ private String legalCertType;
+
+ /** 法定代表人证件号码 */
+ @Schema(description = "法定代表人证件号码")
+ @Size(max = 50, message = "法定代表人证件号码长度不能超过50个字符")
+ private String legalCertNo;
+
+ /** 股东1 */
+ @Schema(description = "股东1")
+ @Size(max = 100, message = "股东1长度不能超过100个字符")
+ private String shareholder1;
+
+ /** 股东2 */
+ @Schema(description = "股东2")
+ @Size(max = 100, message = "股东2长度不能超过100个字符")
+ private String shareholder2;
+
+ /** 股东3 */
+ @Schema(description = "股东3")
+ @Size(max = 100, message = "股东3长度不能超过100个字符")
+ private String shareholder3;
+
+ /** 股东4 */
+ @Schema(description = "股东4")
+ @Size(max = 100, message = "股东4长度不能超过100个字符")
+ private String shareholder4;
+
+ /** 股东5 */
+ @Schema(description = "股东5")
+ @Size(max = 100, message = "股东5长度不能超过100个字符")
+ private String shareholder5;
+
+ /** 备注 */
+ @Schema(description = "备注")
+ @Size(max = 500, message = "备注长度不能超过500个字符")
+ private String remark;
+}
+```
+
+**Step 2: 创建实体中介修改DTO**
+
+```java
+package com.ruoyi.ccdi.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体中介修改DTO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "实体中介修改DTO")
+public class CcdiIntermediaryEntityEditDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 统一社会信用代码 */
+ @Schema(description = "统一社会信用代码")
+ @NotBlank(message = "统一社会信用代码不能为空")
+ private String socialCreditCode;
+
+ /** 机构名称 */
+ @Schema(description = "机构名称")
+ @NotBlank(message = "机构名称不能为空")
+ @Size(max = 200, message = "机构名称长度不能超过200个字符")
+ private String enterpriseName;
+
+ /** 主体类型 */
+ @Schema(description = "主体类型")
+ @Size(max = 50, message = "主体类型长度不能超过50个字符")
+ private String enterpriseType;
+
+ /** 企业性质 */
+ @Schema(description = "企业性质")
+ @Size(max = 50, message = "企业性质长度不能超过50个字符")
+ private String enterpriseNature;
+
+ /** 行业分类 */
+ @Schema(description = "行业分类")
+ @Size(max = 100, message = "行业分类长度不能超过100个字符")
+ private String industryClass;
+
+ /** 所属行业 */
+ @Schema(description = "所属行业")
+ @Size(max = 100, message = "所属行业长度不能超过100个字符")
+ private String industryName;
+
+ /** 成立日期 */
+ @Schema(description = "成立日期")
+ private Date establishDate;
+
+ /** 注册地址 */
+ @Schema(description = "注册地址")
+ @Size(max = 500, message = "注册地址长度不能超过500个字符")
+ private String registerAddress;
+
+ /** 法定代表人 */
+ @Schema(description = "法定代表人")
+ @Size(max = 100, message = "法定代表人长度不能超过100个字符")
+ private String legalRepresentative;
+
+ /** 法定代表人证件类型 */
+ @Schema(description = "法定代表人证件类型")
+ @Size(max = 50, message = "法定代表人证件类型长度不能超过50个字符")
+ private String legalCertType;
+
+ /** 法定代表人证件号码 */
+ @Schema(description = "法定代表人证件号码")
+ @Size(max = 50, message = "法定代表人证件号码长度不能超过50个字符")
+ private String legalCertNo;
+
+ /** 股东1 */
+ @Schema(description = "股东1")
+ @Size(max = 100, message = "股东1长度不能超过100个字符")
+ private String shareholder1;
+
+ /** 股东2 */
+ @Schema(description = "股东2")
+ @Size(max = 100, message = "股东2长度不能超过100个字符")
+ private String shareholder2;
+
+ /** 股东3 */
+ @Schema(description = "股东3")
+ @Size(max = 100, message = "股东3长度不能超过100个字符")
+ private String shareholder3;
+
+ /** 股东4 */
+ @Schema(description = "股东4")
+ @Size(max = 100, message = "股东4长度不能超过100个字符")
+ private String shareholder4;
+
+ /** 股东5 */
+ @Schema(description = "股东5")
+ @Size(max = 100, message = "股东5长度不能超过100个字符")
+ private String shareholder5;
+
+ /** 备注 */
+ @Schema(description = "备注")
+ @Size(max = 500, message = "备注长度不能超过500个字符")
+ private String remark;
+}
+```
+
+**Step 3: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
+git commit -m "feat: 添加实体中介DTO类"
+```
+
+---
+
+## Task 5: 创建查询DTO和统一VO
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java`
+
+**Step 1: 创建查询DTO**
+
+```java
+package com.ruoyi.ccdi.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 中介查询DTO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "中介查询DTO")
+public class CcdiIntermediaryQueryDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** 姓名/机构名称 */
+ @Schema(description = "姓名/机构名称")
+ private String name;
+
+ /** 证件号/统一社会信用代码 */
+ @Schema(description = "证件号/统一社会信用代码")
+ private String certificateNo;
+
+ /** 中介类型(1=个人, 2=实体) */
+ @Schema(description = "中介类型(1=个人, 2=实体)")
+ private String intermediaryType;
+}
+```
+
+**Step 2: 创建统一列表VO**
+
+```java
+package com.ruoyi.ccdi.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 中介统一列表VO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "中介统一列表VO")
+public class CcdiIntermediaryVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /** ID (bizId 或 socialCreditCode) */
+ @Schema(description = "ID")
+ private String id;
+
+ /** 姓名/机构名称 */
+ @Schema(description = "姓名/机构名称")
+ private String name;
+
+ /** 证件号/统一社会信用代码 */
+ @Schema(description = "证件号/统一社会信用代码")
+ private String certificateNo;
+
+ /** 中介类型(1=个人, 2=实体) */
+ @Schema(description = "中介类型(1=个人, 2=实体)")
+ private String intermediaryType;
+
+ /** 人员类型/实体 */
+ @Schema(description = "人员类型")
+ private String personType;
+
+ /** 公司 */
+ @Schema(description = "公司")
+ private String company;
+
+ /** 数据来源 */
+ @Schema(description = "数据来源")
+ private String dataSource;
+
+ /** 创建时间 */
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+}
+```
+
+**Step 3: 创建个人中介详情VO**
+
+```java
+package com.ruoyi.ccdi.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 个人中介详情VO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "个人中介详情VO")
+public class CcdiIntermediaryPersonDetailVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "人员ID")
+ private String bizId;
+
+ @Schema(description = "姓名")
+ private String name;
+
+ @Schema(description = "人员类型")
+ private String personType;
+
+ @Schema(description = "人员子类型")
+ private String personSubType;
+
+ @Schema(description = "性别")
+ private String gender;
+
+ @Schema(description = "证件类型")
+ private String idType;
+
+ @Schema(description = "证件号码")
+ private String personId;
+
+ @Schema(description = "手机号码")
+ private String mobile;
+
+ @Schema(description = "微信号")
+ private String wechatNo;
+
+ @Schema(description = "联系地址")
+ private String contactAddress;
+
+ @Schema(description = "所在公司")
+ private String company;
+
+ @Schema(description = "职位")
+ private String position;
+
+ @Schema(description = "关联人员ID")
+ private String relatedNumId;
+
+ @Schema(description = "关联关系")
+ private String relationType;
+
+ @Schema(description = "数据来源")
+ private String dataSource;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+}
+```
+
+**Step 4: 创建实体中介详情VO**
+
+```java
+package com.ruoyi.ccdi.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体中介详情VO
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+@Schema(description = "实体中介详情VO")
+public class CcdiIntermediaryEntityDetailVO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @Schema(description = "统一社会信用代码")
+ private String socialCreditCode;
+
+ @Schema(description = "企业名称")
+ private String enterpriseName;
+
+ @Schema(description = "企业类型")
+ private String enterpriseType;
+
+ @Schema(description = "企业性质")
+ private String enterpriseNature;
+
+ @Schema(description = "行业分类")
+ private String industryClass;
+
+ @Schema(description = "所属行业")
+ private String industryName;
+
+ @Schema(description = "成立日期")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date establishDate;
+
+ @Schema(description = "注册地址")
+ private String registerAddress;
+
+ @Schema(description = "法定代表人")
+ private String legalRepresentative;
+
+ @Schema(description = "法定代表人证件类型")
+ private String legalCertType;
+
+ @Schema(description = "法定代表人证件号码")
+ private String legalCertNo;
+
+ @Schema(description = "股东1")
+ private String shareholder1;
+
+ @Schema(description = "股东2")
+ private String shareholder2;
+
+ @Schema(description = "股东3")
+ private String shareholder3;
+
+ @Schema(description = "股东4")
+ private String shareholder4;
+
+ @Schema(description = "股东5")
+ private String shareholder5;
+
+ @Schema(description = "风险等级")
+ private String riskLevel;
+
+ @Schema(description = "企业来源")
+ private String entSource;
+
+ @Schema(description = "数据来源")
+ private String dataSource;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+}
+```
+
+**Step 5: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryQueryDTO.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryVO.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
+git commit -m "feat: 添加中介查询DTO和VO类"
+```
+
+---
+
+## Task 6: 创建Mapper接口
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java`
+- Create: `ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml`
+
+**Step 1: 创建个人中介Mapper接口**
+
+```java
+package com.ruoyi.ccdi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 个人中介Mapper接口
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Mapper
+public interface CcdiBizIntermediaryMapper extends BaseMapper {
+
+}
+```
+
+**Step 2: 创建实体中介Mapper接口**
+
+```java
+package com.ruoyi.ccdi.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 实体中介Mapper接口
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Mapper
+public interface CcdiEnterpriseBaseInfoMapper extends BaseMapper {
+
+}
+```
+
+**Step 3: 创建联合查询XML映射文件**
+
+```xml
+
+
+
+
+
+
+
+
+```
+
+**Step 4: 提交代码**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
+git add ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryMapper.xml
+git commit -m "feat: 添加中介Mapper接口和XML映射"
+```
+
+---
+
+## Task 7: 创建Service接口和实现类
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryService.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
+
+**Step 1: 创建Service接口**
+
+```java
+package com.ruoyi.ccdi.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.ccdi.domain.dto.*;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryEntityDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryPersonDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO;
+
+/**
+ * 中介Service接口
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+public interface ICcdiIntermediaryService {
+
+ /**
+ * 分页查询中介列表(UNION联合查询)
+ */
+ Page selectIntermediaryPage(Page page, CcdiIntermediaryQueryDTO queryDTO);
+
+ /**
+ * 查询个人中介详情
+ */
+ CcdiIntermediaryPersonDetailVO selectIntermediaryPersonDetail(String bizId);
+
+ /**
+ * 查询实体中介详情
+ */
+ CcdiIntermediaryEntityDetailVO selectIntermediaryEntityDetail(String socialCreditCode);
+
+ /**
+ * 新增个人中介
+ */
+ int insertIntermediaryPerson(CcdiIntermediaryPersonAddDTO addDTO);
+
+ /**
+ * 修改个人中介
+ */
+ int updateIntermediaryPerson(CcdiIntermediaryPersonEditDTO editDTO);
+
+ /**
+ * 新增实体中介
+ */
+ int insertIntermediaryEntity(CcdiIntermediaryEntityAddDTO addDTO);
+
+ /**
+ * 修改实体中介
+ */
+ int updateIntermediaryEntity(CcdiIntermediaryEntityEditDTO editDTO);
+
+ /**
+ * 批量删除中介
+ */
+ int deleteIntermediaryByIds(String[] ids);
+
+ /**
+ * 校验个人中介证件号唯一性
+ */
+ boolean checkPersonIdUnique(String personId, String bizId);
+
+ /**
+ * 校验实体中介信用代码唯一性
+ */
+ boolean checkSocialCreditCodeUnique(String socialCreditCode, String excludeId);
+}
+```
+
+**Step 2: 创建Service实现类**
+
+```java
+package com.ruoyi.ccdi.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
+import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
+import com.ruoyi.ccdi.domain.dto.*;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryEntityDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryPersonDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO;
+import com.ruoyi.ccdi.mapper.CcdiBizIntermediaryMapper;
+import com.ruoyi.ccdi.mapper.CcdiEnterpriseBaseInfoMapper;
+import com.ruoyi.ccdi.service.ICcdiIntermediaryService;
+import com.ruoyi.common.utils.StringUtils;
+import jakarta.annotation.Resource;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 中介Service实现
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Service
+public class CcdiIntermediaryServiceImpl implements ICcdiIntermediaryService {
+
+ @Resource
+ private CcdiBizIntermediaryMapper personMapper;
+
+ @Resource
+ private CcdiEnterpriseBaseInfoMapper entityMapper;
+
+ @Resource
+ private SqlSessionFactory sqlSessionFactory;
+
+ /**
+ * 分页查询中介列表(UNION联合查询)
+ */
+ @Override
+ public Page selectIntermediaryPage(Page page, CcdiIntermediaryQueryDTO queryDTO) {
+ // 使用MyBatis原生查询实现UNION分页
+ var sqlSession = sqlSessionFactory.openSession();
+ try {
+ var countSql = buildCountQuery(queryDTO);
+ var dataSql = buildDataQuery(queryDTO);
+
+ // 查询总数
+ var countStatement = sqlSession.getConnection().prepareStatement(countSql);
+ var countResult = countStatement.executeQuery();
+ int total = 0;
+ if (countResult.next()) {
+ total = countResult.getInt(1);
+ }
+
+ // 设置总数
+ page.setTotal(total);
+
+ // 查询分页数据
+ var offset = (page.getCurrent() - 1) * page.getSize();
+ var dataSqlWithPage = dataSql + " LIMIT " + page.getSize() + " OFFSET " + offset;
+ var dataStatement = sqlSession.getConnection().prepareStatement(dataSqlWithPage);
+ var dataResult = dataStatement.executeQuery();
+
+ var records = new java.util.ArrayList();
+ while (dataResult.next()) {
+ var vo = new CcdiIntermediaryVO();
+ vo.setId(dataResult.getString("id"));
+ vo.setName(dataResult.getString("name"));
+ vo.setCertificateNo(dataResult.getString("certificate_no"));
+ vo.setIntermediaryType(dataResult.getString("intermediary_type"));
+ vo.setPersonType(dataResult.getString("person_type"));
+ vo.setCompany(dataResult.getString("company"));
+ vo.setDataSource(dataResult.getString("data_source"));
+ vo.setCreateTime(dataResult.getTimestamp("create_time"));
+ records.add(vo);
+ }
+ page.setRecords(records);
+
+ return page;
+ } catch (Exception e) {
+ throw new RuntimeException("查询失败", e);
+ } finally {
+ sqlSession.close();
+ }
+ }
+
+ private String buildCountQuery(CcdiIntermediaryQueryDTO queryDTO) {
+ String sql = """
+ SELECT COUNT(*) FROM (
+ SELECT biz_id FROM ccdi_biz_intermediary WHERE person_type = '中介'
+ """;
+ }
+ }
+}
+```
+
+由于Service实现类代码较长,完整代码见补充文档。此处提供核心方法框架。
+
+**Step 3: 提交Service框架**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/
+git commit -m "feat: 添加中介Service接口和实现类框架"
+```
+
+---
+
+## Task 8: 创建Excel导入导出类
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java`
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java`
+
+**Step 1: 创建个人中介Excel类**
+
+```java
+package com.ruoyi.ccdi.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.ruoyi.ccdi.handler.DictDropdownWriteHandler;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 个人中介Excel类
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+public class CcdiIntermediaryPersonExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @ExcelProperty(value = "姓名", index = 0)
+ @ColumnWidth(15)
+ private String name;
+
+ @ExcelProperty(value = "人员类型", index = 1)
+ @ColumnWidth(15)
+ private String personType;
+
+ @ExcelProperty(value = "人员子类型", index = 2)
+ @ColumnWidth(15)
+ private String personSubType;
+
+ @ExcelProperty(value = "性别", index = 3)
+ @ColumnWidth(10)
+ @DictDropdown(dictType = "ccdi_indiv_gender")
+ private String gender;
+
+ @ExcelProperty(value = "证件类型", index = 4)
+ @ColumnWidth(15)
+ @DictDropdown(dictType = "ccdi_certificate_type")
+ private String idType;
+
+ @ExcelProperty(value = "证件号码", index = 5)
+ @ColumnWidth(20)
+ private String personId;
+
+ @ExcelProperty(value = "手机号码", index = 6)
+ @ColumnWidth(15)
+ private String mobile;
+
+ @ExcelProperty(value = "微信号", index = 7)
+ @ColumnWidth(15)
+ private String wechatNo;
+
+ @ExcelProperty(value = "联系地址", index = 8)
+ @ColumnWidth(30)
+ private String contactAddress;
+
+ @ExcelProperty(value = "所在公司", index = 9)
+ @ColumnWidth(30)
+ private String company;
+
+ @ExcelProperty(value = "职位", index = 10)
+ @ColumnWidth(15)
+ private String position;
+
+ @ExcelProperty(value = "关联人员ID", index = 11)
+ @ColumnWidth(15)
+ private String relatedNumId;
+
+ @ExcelProperty(value = "关联关系", index = 12)
+ @ColumnWidth(15)
+ @DictDropdown(dictType = "ccdi_relation_type")
+ private String relationType;
+
+ @ExcelProperty(value = "备注", index = 13)
+ @ColumnWidth(30)
+ private String remark;
+}
+```
+
+**Step 2: 创建实体中介Excel类**
+
+```java
+package com.ruoyi.ccdi.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.ruoyi.ccdi.handler.DictDropdownWriteHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 实体中介Excel类
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Data
+public class CcdiIntermediaryEntityExcel implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @ExcelProperty(value = "机构名称", index = 0)
+ @ColumnWidth(30)
+ private String enterpriseName;
+
+ @ExcelProperty(value = "统一社会信用代码", index = 1)
+ @ColumnWidth(25)
+ private String socialCreditCode;
+
+ @ExcelProperty(value = "主体类型", index = 2)
+ @ColumnWidth(15)
+ @DictDropdown(dictType = "ccdi_entity_type")
+ private String enterpriseType;
+
+ @ExcelProperty(value = "企业性质", index = 3)
+ @ColumnWidth(15)
+ @DictDropdown(dictType = "ccdi_enterprise_nature")
+ private String enterpriseNature;
+
+ @ExcelProperty(value = "行业分类", index = 4)
+ @ColumnWidth(15)
+ private String industryClass;
+
+ @ExcelProperty(value = "所属行业", index = 5)
+ @ColumnWidth(15)
+ private String industryName;
+
+ @ExcelProperty(value = "成立日期", index = 6)
+ @ColumnWidth(15)
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private Date establishDate;
+
+ @ExcelProperty(value = "注册地址", index = 7)
+ @ColumnWidth(30)
+ private String registerAddress;
+
+ @ExcelProperty(value = "法定代表人", index = 8)
+ @ColumnWidth(15)
+ private String legalRepresentative;
+
+ @ExcelProperty(value = "法人证件类型", index = 9)
+ @ColumnWidth(15)
+ @DictDropdown(dictType = "ccdi_certificate_type")
+ private String legalCertType;
+
+ @ExcelProperty(value = "法人证件号码", index = 10)
+ @ColumnWidth(20)
+ private String legalCertNo;
+
+ @ExcelProperty(value = "股东1", index = 11)
+ @ColumnWidth(15)
+ private String shareholder1;
+
+ @ExcelProperty(value = "股东2", index = 12)
+ @ColumnWidth(15)
+ private String shareholder2;
+
+ @ExcelProperty(value = "股东3", index = 13)
+ @ColumnWidth(15)
+ private String shareholder3;
+
+ @ExcelProperty(value = "股东4", index = 14)
+ @ColumnWidth(15)
+ private String shareholder4;
+
+ @ExcelProperty(value = "股东5", index = 15)
+ @ColumnWidth(15)
+ private String shareholder5;
+
+ @ExcelProperty(value = "备注", index = 16)
+ @ColumnWidth(30)
+ private String remark;
+}
+```
+
+**Step 3: 提交Excel类**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/
+git commit -m "feat: 添加中介Excel导入导出类"
+```
+
+---
+
+## Task 9: 创建Controller控制器
+
+**Files:**
+- Create: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java`
+
+**Step 1: 创建CcdiIntermediaryController**
+
+```java
+package com.ruoyi.ccdi.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.ccdi.domain.dto.*;
+import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
+import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryEntityDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryPersonDetailVO;
+import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryVO;
+import com.ruoyi.ccdi.service.ICcdiIntermediaryService;
+import com.ruoyi.ccdi.utils.EasyExcelUtil;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.enums.BusinessType;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 中介黑名单管理Controller
+ *
+ * @author ruoyi
+ * @date 2026-02-04
+ */
+@Tag(name = "中介黑名单管理")
+@RestController
+@RequestMapping("/ccdi/intermediary")
+public class CcdiIntermediaryController extends BaseController {
+
+ @Resource
+ private ICcdiIntermediaryService intermediaryService;
+
+ /**
+ * 查询中介列表(UNION联合查询)
+ */
+ @Operation(summary = "查询中介列表")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(CcdiIntermediaryQueryDTO queryDTO) {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
+ Page result = intermediaryService.selectIntermediaryPage(page, queryDTO);
+ return getDataTable(result.getRecords(), result.getTotal());
+ }
+
+ /**
+ * 查询个人中介详情
+ */
+ @Operation(summary = "查询个人中介详情")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
+ @GetMapping("/person/{bizId}")
+ public AjaxResult getPersonInfo(@PathVariable String bizId) {
+ CcdiIntermediaryPersonDetailVO detail = intermediaryService.selectIntermediaryPersonDetail(bizId);
+ return success(detail);
+ }
+
+ /**
+ * 查询实体中介详情
+ */
+ @Operation(summary = "查询实体中介详情")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
+ @GetMapping("/entity/{socialCreditCode}")
+ public AjaxResult getEntityInfo(@PathVariable String socialCreditCode) {
+ CcdiIntermediaryEntityDetailVO detail = intermediaryService.selectIntermediaryEntityDetail(socialCreditCode);
+ return success(detail);
+ }
+
+ /**
+ * 新增个人中介
+ */
+ @Operation(summary = "新增个人中介")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
+ @Log(title = "中介黑名单", businessType = BusinessType.INSERT)
+ @PostMapping("/person")
+ public AjaxResult addPerson(@Validated @RequestBody CcdiIntermediaryPersonAddDTO addDTO) {
+ if (!intermediaryService.checkPersonIdUnique(addDTO.getPersonId(), null)) {
+ return error("新增个人中介失败,证件号已存在");
+ }
+ return toAjax(intermediaryService.insertIntermediaryPerson(addDTO));
+ }
+
+ /**
+ * 修改个人中介
+ */
+ @Operation(summary = "修改个人中介")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
+ @Log(title = "中介黑名单", businessType = BusinessType.UPDATE)
+ @PutMapping("/person")
+ public AjaxResult editPerson(@Validated @RequestBody CcdiIntermediaryPersonEditDTO editDTO) {
+ if (!intermediaryService.checkPersonIdUnique(editDTO.getPersonId(), editDTO.getBizId())) {
+ return error("修改个人中介失败,证件号已存在");
+ }
+ return toAjax(intermediaryService.updateIntermediaryPerson(editDTO));
+ }
+
+ /**
+ * 新增实体中介
+ */
+ @Operation(summary = "新增实体中介")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
+ @Log(title = "中介黑名单", businessType = BusinessType.INSERT)
+ @PostMapping("/entity")
+ public AjaxResult addEntity(@Validated @RequestBody CcdiIntermediaryEntityAddDTO addDTO) {
+ if (!intermediaryService.checkSocialCreditCodeUnique(addDTO.getSocialCreditCode(), null)) {
+ return error("新增实体中介失败,统一社会信用代码已存在");
+ }
+ return toAjax(intermediaryService.insertIntermediaryEntity(addDTO));
+ }
+
+ /**
+ * 修改实体中介
+ */
+ @Operation(summary = "修改实体中介")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
+ @Log(title = "中介黑名单", businessType = BusinessType.UPDATE)
+ @PutMapping("/entity")
+ public AjaxResult editEntity(@Validated @RequestBody CcdiIntermediaryEntityEditDTO editDTO) {
+ return toAjax(intermediaryService.updateIntermediaryEntity(editDTO));
+ }
+
+ /**
+ * 删除中介
+ */
+ @Operation(summary = "删除中介")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:remove')")
+ @Log(title = "中介黑名单", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids) {
+ return toAjax(intermediaryService.deleteIntermediaryByIds(ids));
+ }
+
+ /**
+ * 下载个人中介导入模板
+ */
+ @Operation(summary = "下载个人中介导入模板")
+ @PostMapping("/importPersonTemplate")
+ public void importPersonTemplate(HttpServletResponse response) {
+ EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryPersonExcel.class, "个人中介黑名单");
+ }
+
+ /**
+ * 下载实体中介导入模板
+ */
+ @Operation(summary = "下载实体中介导入模板")
+ @PostMapping("/importEntityTemplate")
+ public void importEntityTemplate(HttpServletResponse response) {
+ EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryEntityExcel.class, "实体中介黑名单");
+ }
+
+ /**
+ * 导入个人中介数据
+ */
+ @Operation(summary = "导入个人中介数据")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
+ @Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
+ @PostMapping("/importPersonData")
+ public AjaxResult importPersonData(MultipartFile file, boolean updateSupport) throws Exception {
+ List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiIntermediaryPersonExcel.class);
+ String message = intermediaryService.importIntermediaryPerson(list, updateSupport);
+ return success(message);
+ }
+
+ /**
+ * 导入实体中介数据
+ */
+ @Operation(summary = "导入实体中介数据")
+ @PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
+ @Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
+ @PostMapping("/importEntityData")
+ public AjaxResult importEntityData(MultipartFile file, boolean updateSupport) throws Exception {
+ List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiIntermediaryEntityExcel.class);
+ String message = intermediaryService.importIntermediaryEntity(list, updateSupport);
+ return success(message);
+ }
+}
+```
+
+**Step 2: 提交Controller**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryController.java
+git commit -m "feat: 添加中介黑名单Controller"
+```
+
+---
+
+## Task 10: 补充Service实现类的完整代码
+
+**Files:**
+- Complete: `ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java`
+
+完整的Service实现需要包含所有业务逻辑方法,包括:
+- UNION联合查询的分页实现
+- 个人中介和实体中介的CRUD
+- 唯一性校验
+- Excel导入处理
+
+由于代码较长,建议参考CcdiEmployeeServiceImpl的实现模式,逐步完善每个方法。
+
+**Step 1: 提交完整的Service实现**
+
+```bash
+git add ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryServiceImpl.java
+git commit -m "feat: 完善中介Service实现类"
+```
+
+---
+
+## Task 11: 编写测试脚本
+
+**Files:**
+- Create: `doc/scripts/test-intermediary-api.sh`
+
+**Step 1: 创建API测试脚本**
+
+```bash
+#!/bin/bash
+
+# 获取token
+TOKEN=$(curl -s -X POST "http://localhost:8080/login/test" \
+ -H "Content-Type: application/json" \
+ -d '{"username":"admin","password":"admin123"}' | jq -r '.data.token')
+
+echo "Token: $TOKEN"
+echo ""
+
+# 测试查询列表
+echo "=== 测试查询列表 ==="
+curl -s -X GET "http://localhost:8080/ccdi/intermediary/list?pageNum=1&pageSize=10" \
+ -H "Authorization: Bearer $TOKEN" | jq '.'
+
+echo ""
+echo "=== 测试新增个人中介 ==="
+curl -s -X POST "http://localhost:8080/ccdi/intermediary/person" \
+ -H "Authorization: Bearer $TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "name": "测试中介",
+ "personType": "中介",
+ "gender": "M",
+ "idType": "身份证",
+ "personId": "110101199001011234",
+ "mobile": "13800138000",
+ "company": "测试公司"
+ }' | jq '.'
+
+echo ""
+echo "=== 测试新增实体中介 ==="
+curl -s -X POST "http://localhost:8080/ccdi/intermediary/entity" \
+ -H "Authorization: Bearer $TOKEN" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "enterpriseName": "测试中介公司",
+ "socialCreditCode": "91110000123456789X",
+ "enterpriseType": "有限责任公司",
+ "enterpriseNature": "民企"
+ }' | jq '.'
+
+echo ""
+echo "=== 测试完成 ==="
+```
+
+**Step 2: 创建测试报告模板**
+
+**Files:**
+- Create: `doc/test/intermediary-blacklist-test-report.md`
+
+```markdown
+# 中介黑名单管理模块测试报告
+
+## 测试环境
+- 测试账号: admin / admin123
+- 测试日期: 2026-02-04
+
+## 测试用例
+
+### 1. 统一列表查询
+- [ ] 查询全部中介
+- [ ] 按类型筛选(个人)
+- [ ] 按类型筛选(实体)
+- [ ] 按名称模糊查询
+- [ ] 按证件号精确查询
+- [ ] 分页功能
+
+### 2. 个人中介管理
+- [ ] 新增个人中介
+- [ ] 证件号唯一性校验
+- [ ] 修改个人中介
+- [ ] 查询个人中介详情
+- [ ] 删除个人中介
+
+### 3. 实体中介管理
+- [ ] 新增实体中介
+- [ ] 信用代码唯一性校验
+- [ ] 修改实体中介
+- [ ] 查询实体中介详情
+- [ ] 删除实体中介
+
+### 4. Excel导入导出
+- [ ] 下载个人中介模板
+- [ ] 个人中介模板下拉框验证
+- [ ] 导入个人中介数据
+- [ ] 下载实体中介模板
+- [ ] 实体中介模板下拉框验证
+- [ ] 导入实体中介数据
+
+## 测试结果
+
+(测试完成后填写实际结果)
+
+## 问题记录
+
+(记录发现的问题)
+```
+
+**Step 3: 提交测试文件**
+
+```bash
+git add doc/scripts/test-intermediary-api.sh
+git add doc/test/intermediary-blacklist-test-report.md
+git commit -m "test: 添加中介黑名单测试脚本和报告模板"
+```
+
+---
+
+## Task 12: 生成API文档
+
+**Files:**
+- Create: `doc/api/中介黑名单管理API文档-v2.0.md`
+
+**Step 1: 生成Swagger API文档**
+
+访问 `http://localhost:8080/swagger-ui/index.html` 并导出所有中介相关接口的文档。
+
+**Step 2: 创建API文档**
+
+参考已有的API文档格式,创建完整的API文档,包括所有接口的请求参数、响应格式、错误码等。
+
+**Step 3: 提交文档**
+
+```bash
+git add doc/api/中介黑名单管理API文档-v2.0.md
+git commit -m "docs: 添加中介黑名单管理API文档"
+```
+
+---
+
+## Task 13: 前端菜单配置
+
+**Step 1: 更新系统菜单表**
+
+在数据库中执行SQL,添加中介黑名单管理的菜单项:
+
+```sql
+-- 中介黑名单管理菜单
+INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+VALUES
+('中介黑名单', 2000, 5, 'intermediary', 'ccdi/intermediary/index', NULL, NULL, 1, 0, 'C', '0', '0', 'ccdi:intermediary:list', 'peoples', 'admin', NOW(), '', NULL, '中介黑名单管理菜单');
+
+-- 获取刚插入的菜单ID
+SET @menu_id = LAST_INSERT_ID();
+
+-- 按钮权限
+INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+VALUES
+('中介查询', @menu_id, 1, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:query', '#', 'admin', NOW(), '', NULL, ''),
+('中介新增', @menu_id, 2, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:add', '#', 'admin', NOW(), '', NULL, ''),
+('中介修改', @menu_id, 3, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:edit', '#', 'admin', NOW(), '', NULL, ''),
+('中介删除', @menu_id, 4, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:remove', '#', 'admin', NOW(), '', NULL, ''),
+('中介导出', @menu_id, 5, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:export', '#', 'admin', NOW(), '', NULL, ''),
+('中介导入', @menu_id, 6, NULL, NULL, NULL, NULL, 1, 0, 'F', '0', '0', 'ccdi:intermediary:import', '#', 'admin', NOW(), '', NULL, '');
+```
+
+**Step 2: 提交菜单SQL**
+
+```bash
+git add sql/menu-intermediary.sql
+git commit -m "feat: 添加中介黑名单管理菜单SQL"
+```
+
+---
+
+## Task 14: 最终验证和文档整理
+
+**Step 1: 运行完整测试**
+
+执行测试脚本,验证所有功能:
+```bash
+bash doc/scripts/test-intermediary-api.sh > doc/test/intermediary-test-result.log 2>&1
+```
+
+**Step 2: 生成测试报告**
+
+根据测试结果填写测试报告。
+
+**Step 3: 提交最终代码**
+
+```bash
+git add .
+git commit -m "feat: 完成中介黑名单管理模块开发"
+```
+
+---
+
+**计划完成并已保存到 `doc/plans/2026-02-04-intermediary-blacklist-implementation.md`。**
+
+**两种执行选项:**
+
+**1. Subagent-Driven (当前会话)** - 我会为每个任务派发新的子代理,任务之间进行审查,快速迭代
+
+**2. Parallel Session (独立会话)** - 在新会话中打开worktree,使用executing-plans批量执行,带有检查点
+
+**您选择哪种方式?**
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryBlacklistController.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryBlacklistController.java
deleted file mode 100644
index 5f42566..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/controller/CcdiIntermediaryBlacklistController.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package com.ruoyi.ccdi.controller;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.ccdi.domain.CcdiIntermediaryBlacklist;
-import com.ruoyi.ccdi.domain.dto.*;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryBlacklistExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
-import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO;
-import com.ruoyi.ccdi.service.ICcdiIntermediaryBlacklistService;
-import com.ruoyi.ccdi.utils.EasyExcelUtil;
-import com.ruoyi.common.annotation.Log;
-import com.ruoyi.common.core.controller.BaseController;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.page.PageDomain;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.page.TableSupport;
-import com.ruoyi.common.enums.BusinessType;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
-
-/**
- * 中介人员黑名单Controller
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-@Tag(name = "中介黑名单管理")
-@RestController
-@RequestMapping("/ccdi/intermediary")
-public class CcdiIntermediaryBlacklistController extends BaseController {
-
- @Resource
- private ICcdiIntermediaryBlacklistService intermediaryService;
-
- /**
- * 查询中介黑名单列表
- */
- @Operation(summary = "查询中介黑名单列表")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:list')")
- @GetMapping("/list")
- public TableDataInfo list(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- // 使用MyBatis Plus分页
- PageDomain pageDomain = TableSupport.buildPageRequest();
- Page page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
- Page result = intermediaryService.selectIntermediaryPage(page, queryDTO);
- return getDataTable(result.getRecords(), result.getTotal());
- }
-
- /**
- * 导出中介黑名单列表
- */
- @Operation(summary = "导出中介黑名单列表")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:export')")
- @Log(title = "中介黑名单", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- public void export(HttpServletResponse response, CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- List list = intermediaryService.selectIntermediaryListForExport(queryDTO);
- EasyExcelUtil.exportExcel(response, list, CcdiIntermediaryBlacklistExcel.class, "中介黑名单");
- }
-
- /**
- * 获取中介黑名单详细信息(根据类型返回不同结构)
- */
- @Operation(summary = "获取中介黑名单详细信息")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:query')")
- @GetMapping(value = "/{intermediaryId}")
- public AjaxResult getInfo(@PathVariable Long intermediaryId) {
- return success(intermediaryService.selectIntermediaryDetailById(intermediaryId));
- }
-
- /**
- * 新增中介黑名单(已废弃,请使用类型专用接口)
- */
- @Operation(summary = "新增中介黑名单(已废弃,请使用类型专用接口)")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
- @Log(title = "中介黑名单", businessType = BusinessType.INSERT)
- @PostMapping
- @Deprecated
- public AjaxResult add(@Validated @RequestBody CcdiIntermediaryBlacklistAddDTO addDTO) {
- return toAjax(intermediaryService.insertIntermediary(addDTO));
- }
-
- /**
- * 新增个人中介黑名单
- */
- @Operation(summary = "新增个人中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
- @Log(title = "个人中介黑名单", businessType = BusinessType.INSERT)
- @PostMapping("/person")
- public AjaxResult addPerson(@Validated @RequestBody CcdiIntermediaryPersonAddDTO addDTO) {
- return toAjax(intermediaryService.insertPersonIntermediary(addDTO));
- }
-
- /**
- * 新增机构中介黑名单
- */
- @Operation(summary = "新增机构中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:add')")
- @Log(title = "机构中介黑名单", businessType = BusinessType.INSERT)
- @PostMapping("/entity")
- public AjaxResult addEntity(@Validated @RequestBody CcdiIntermediaryEntityAddDTO addDTO) {
- return toAjax(intermediaryService.insertEntityIntermediary(addDTO));
- }
-
- /**
- * 修改中介黑名单
- */
- @Operation(summary = "修改中介黑名单(已废弃,请使用类型专用接口)")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
- @Log(title = "中介黑名单", businessType = BusinessType.UPDATE)
- @PutMapping
- @Deprecated
- public AjaxResult edit(@Validated @RequestBody CcdiIntermediaryBlacklistEditDTO editDTO) {
- return toAjax(intermediaryService.updateIntermediary(editDTO));
- }
-
- /**
- * 修改个人中介黑名单
- */
- @Operation(summary = "修改个人中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
- @Log(title = "个人中介黑名单", businessType = BusinessType.UPDATE)
- @PutMapping("/person")
- public AjaxResult editPerson(@Validated @RequestBody CcdiIntermediaryPersonEditDTO editDTO) {
- return toAjax(intermediaryService.updatePersonIntermediary(editDTO));
- }
-
- /**
- * 修改机构中介黑名单
- */
- @Operation(summary = "修改机构中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:edit')")
- @Log(title = "机构中介黑名单", businessType = BusinessType.UPDATE)
- @PutMapping("/entity")
- public AjaxResult editEntity(@Validated @RequestBody CcdiIntermediaryEntityEditDTO editDTO) {
- return toAjax(intermediaryService.updateEntityIntermediary(editDTO));
- }
-
- /**
- * 删除中介黑名单
- */
- @Operation(summary = "删除中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:remove')")
- @Log(title = "中介黑名单", businessType = BusinessType.DELETE)
- @DeleteMapping("/{intermediaryIds}")
- public AjaxResult remove(@PathVariable Long[] intermediaryIds) {
- return toAjax(intermediaryService.deleteIntermediaryByIds(intermediaryIds));
- }
-
- /**
- * 下载个人中介导入模板(带字典下拉框)
- */
- @Operation(summary = "下载个人中介导入模板")
- @PostMapping("/importPersonTemplate")
- public void importPersonTemplate(HttpServletResponse response) {
- EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryPersonExcel.class, "个人中介黑名单");
- }
-
- /**
- * 下载机构中介导入模板(带字典下拉框)
- */
- @Operation(summary = "下载机构中介导入模板")
- @PostMapping("/importEntityTemplate")
- public void importEntityTemplate(HttpServletResponse response) {
- EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiIntermediaryEntityExcel.class, "机构中介黑名单");
- }
-
- /**
- * 导入个人中介黑名单
- */
- @Operation(summary = "导入个人中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
- @Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
- @PostMapping("/importPersonData")
- public AjaxResult importPersonData(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", defaultValue = "false") boolean updateSupport) throws Exception {
- List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiIntermediaryPersonExcel.class);
- String message = intermediaryService.importPersonIntermediary(list, updateSupport);
- return success(message);
- }
-
- /**
- * 导入机构中介黑名单
- */
- @Operation(summary = "导入机构中介黑名单")
- @PreAuthorize("@ss.hasPermi('ccdi:intermediary:import')")
- @Log(title = "中介黑名单", businessType = BusinessType.IMPORT)
- @PostMapping("/importEntityData")
- public AjaxResult importEntityData(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", defaultValue = "false") boolean updateSupport) throws Exception {
- List list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiIntermediaryEntityExcel.class);
- String message = intermediaryService.importEntityIntermediary(list, updateSupport);
- return success(message);
- }
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
deleted file mode 100644
index 7e39720..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiBizIntermediary.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.ruoyi.ccdi.domain;
-
-import com.baomidou.mybatisplus.annotation.*;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 中介人员业务对象 ccdi_biz_intermediary
- *
- * @author ruoyi
- * @date 2026-02-04
- */
-@Data
-@TableName("ccdi_biz_intermediary")
-public class CcdiBizIntermediary implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 业务ID */
- @TableId(type = IdType.AUTO)
- private Long bizId;
-
- /** 人员类型 */
- private String personType;
-
- /** 人员子类型 */
- private String personSubType;
-
- /** 姓名 */
- private String name;
-
- /** 性别 */
- private String gender;
-
- /** 证件类型 */
- private String idType;
-
- /** 证件号 */
- private String personId;
-
- /** 手机号 */
- private String mobile;
-
- /** 微信号 */
- private String wechatNo;
-
- /** 联系地址 */
- private String contactAddress;
-
- /** 所在公司 */
- private String company;
-
- /** 社会信用代码 */
- private String socialCreditCode;
-
- /** 职位 */
- private String position;
-
- /** 关联人员ID */
- private String relatedNumId;
-
- /** 关联关系 */
- private String relationType;
-
- /** 数据来源 */
- private String dateSource;
-
- /** 备注 */
- private String remark;
-
- /** 创建者 */
- @TableField(fill = FieldFill.INSERT)
- private String createdBy;
-
- /** 更新者 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updatedBy;
-
- /** 创建时间 */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /** 更新时间 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
deleted file mode 100644
index 80a62c2..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiEnterpriseBaseInfo.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.ruoyi.ccdi.domain;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 企业基础信息对象 ccdi_enterprise_base_info
- *
- * @author ruoyi
- * @date 2026-02-04
- */
-@Data
-@TableName("ccdi_enterprise_base_info")
-public class CcdiEnterpriseBaseInfo implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 统一社会信用代码 */
- @TableId
- private String socialCreditCode;
-
- /** 企业名称 */
- private String enterpriseName;
-
- /** 企业类型 */
- private String enterpriseType;
-
- /** 企业性质 */
- private String enterpriseNature;
-
- /** 行业分类 */
- private String industryClass;
-
- /** 所属行业 */
- private String industryName;
-
- /** 成立日期 */
- private Date establishDate;
-
- /** 注册地址 */
- private String registerAddress;
-
- /** 法定代表人 */
- private String legalRepresentative;
-
- /** 法定代表人证件类型 */
- private String legalCertType;
-
- /** 法定代表人证件号码 */
- private String legalCertNo;
-
- /** 股东1 */
- private String shareholder1;
-
- /** 股东2 */
- private String shareholder2;
-
- /** 股东3 */
- private String shareholder3;
-
- /** 股东4 */
- private String shareholder4;
-
- /** 股东5 */
- private String shareholder5;
-
- /** 状态 */
- private String status;
-
- /** 风险等级 */
- private String riskLevel;
-
- /** 企业来源 */
- private String entSource;
-
- /** 数据来源 */
- private String dataSource;
-
- /** 备注 */
- private String remark;
-
- /** 创建者 */
- @TableField(fill = FieldFill.INSERT)
- private String createdBy;
-
- /** 更新者 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updatedBy;
-
- /** 创建时间 */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /** 更新时间 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiIntermediaryBlacklist.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiIntermediaryBlacklist.java
deleted file mode 100644
index 38bccb7..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/CcdiIntermediaryBlacklist.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package com.ruoyi.ccdi.domain;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 中介人员黑名单对象 dpc_intermediary_blacklist
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-@Data
-public class CcdiIntermediaryBlacklist implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 中介ID */
- @TableId(type = IdType.AUTO)
- private Long intermediaryId;
-
- /** 姓名/机构名称 */
- private String name;
-
- /** 证件号 */
- private String certificateNo;
-
- /** 中介类型 */
- private String intermediaryType;
-
- /** 状态 */
- private String status;
-
- /** 备注 */
- private String remark;
-
- // ============================================================
- // 个人类型字段 (以 indiv_ 前缀标识,individual 缩写)
- // ============================================================
- /** 人员类型(中介、职业背债人、房产中介等) */
- private String indivType;
-
- /** 人员子类型(本人、配偶等) */
- private String indivSubType;
-
- /** 性别(M男 F女 O其他) */
- private String indivGender;
-
- /** 证件类型 */
- private String indivCertType;
-
- /** 手机号码(加密存储) */
- private String indivPhone;
-
- /** 微信号 */
- private String indivWechat;
-
- /** 联系地址 */
- private String indivAddress;
-
- /** 所在公司 */
- private String indivCompany;
-
- /** 职位/职务 */
- private String indivPosition;
-
- /** 关联人员ID */
- private String indivRelatedId;
-
- /** 关联关系 */
- private String indivRelation;
-
- // ============================================================
- // 机构类型字段 (以 corp_ 前缀标识,corporation 缩写)
- // ============================================================
- /** 统一社会信用代码 */
- private String corpCreditCode;
-
- /** 主体类型(有限责任公司、股份有限公司等) */
- private String corpType;
-
- /** 企业性质(国企、民企、外企等) */
- private String corpNature;
-
- /** 行业分类 */
- private String corpIndustryCategory;
-
- /** 所属行业 */
- private String corpIndustry;
-
- /** 成立日期 */
- private Date corpEstablishDate;
-
- /** 注册地址 */
- private String corpAddress;
-
- /** 法定代表人 */
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- private String corpLegalCertNo;
-
- /** 股东1 */
- @TableField("corp_shareholder_1")
- private String corpShareholder1;
-
- /** 股东2 */
- @TableField("corp_shareholder_2")
- private String corpShareholder2;
-
- /** 股东3 */
- @TableField("corp_shareholder_3")
- private String corpShareholder3;
-
- /** 股东4 */
- @TableField("corp_shareholder_4")
- private String corpShareholder4;
-
- /** 股东5 */
- @TableField("corp_shareholder_5")
- private String corpShareholder5;
-
- // ============================================================
- // 通用字段
- // ============================================================
- /** 数据来源(MANUAL手动录入 SYSTEM系统同步 IMPORT批量导入 API接口获取) */
- private String dataSource;
-
- /** 创建者 */
- @TableField(fill = FieldFill.INSERT)
- private String createBy;
-
- /** 创建时间 */
- @TableField(fill = FieldFill.INSERT)
- private Date createTime;
-
- /** 更新者 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private String updateBy;
-
- /** 更新时间 */
- @TableField(fill = FieldFill.INSERT_UPDATE)
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistAddDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistAddDTO.java
deleted file mode 100644
index 0c5df6d..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistAddDTO.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 中介人员黑名单新增 DTO
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-public class CcdiIntermediaryBlacklistAddDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 姓名/机构名称 */
- @NotBlank(message = "姓名/机构名称不能为空")
- @Size(min = 1, max = 100, message = "姓名/机构名称长度不能超过100个字符")
- private String name;
-
- /** 证件号 */
- @Size(max = 50, message = "证件号长度不能超过50个字符")
- private String certificateNo;
-
- /** 中介类型 */
- @NotBlank(message = "中介类型不能为空")
- private String intermediaryType;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getCertificateNo() {
- return certificateNo;
- }
-
- public void setCertificateNo(String certificateNo) {
- this.certificateNo = certificateNo;
- }
-
- public String getIntermediaryType() {
- return intermediaryType;
- }
-
- public void setIntermediaryType(String intermediaryType) {
- this.intermediaryType = intermediaryType;
- }
-
- public String getRemark() {
- return remark;
- }
-
- public void setRemark(String remark) {
- this.remark = remark;
- }
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistEditDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistEditDTO.java
deleted file mode 100644
index 0c25383..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistEditDTO.java
+++ /dev/null
@@ -1,386 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 中介人员黑名单编辑 DTO
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-public class CcdiIntermediaryBlacklistEditDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 中介ID */
- @NotNull(message = "中介ID不能为空")
- private Long intermediaryId;
-
- /** 姓名/机构名称 */
- @NotBlank(message = "姓名/机构名称不能为空")
- @Size(min = 1, max = 100, message = "姓名/机构名称长度不能超过100个字符")
- private String name;
-
- /** 证件号 */
- @Size(max = 50, message = "证件号长度不能超过50个字符")
- private String certificateNo;
-
- /** 中介类型 */
- @NotBlank(message = "中介类型不能为空")
- private String intermediaryType;
-
- /** 状态 */
- @NotBlank(message = "状态不能为空")
- private String status;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-
- // ============================================================
- // 个人类型字段 (以 indiv_ 前缀标识,individual 缩写)
- // ============================================================
- /** 人员类型(中介、职业背债人、房产中介等) */
- private String indivType;
-
- /** 人员子类型(本人、配偶等) */
- private String indivSubType;
-
- /** 性别(M男 F女 O其他) */
- private String indivGender;
-
- /** 证件类型 */
- private String indivCertType;
-
- /** 手机号码(加密存储) */
- private String indivPhone;
-
- /** 微信号 */
- private String indivWechat;
-
- /** 联系地址 */
- private String indivAddress;
-
- /** 所在公司 */
- private String indivCompany;
-
- /** 职位/职务 */
- private String indivPosition;
-
- /** 关联人员ID */
- private String indivRelatedId;
-
- /** 关联关系 */
- private String indivRelation;
-
- // ============================================================
- // 机构类型字段 (以 corp_ 前缀标识,corporation 缩写)
- // ============================================================
- /** 统一社会信用代码 */
- private String corpCreditCode;
-
- /** 主体类型(有限责任公司、股份有限公司等) */
- private String corpType;
-
- /** 企业性质(国企、民企、外企等) */
- private String corpNature;
-
- /** 行业分类 */
- private String corpIndustryCategory;
-
- /** 所属行业 */
- private String corpIndustry;
-
- /** 成立日期 */
- private Date corpEstablishDate;
-
- /** 注册地址 */
- private String corpAddress;
-
- /** 法定代表人 */
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- private String corpLegalCertNo;
-
- /** 股东1 */
- private String corpShareholder1;
-
- /** 股东2 */
- private String corpShareholder2;
-
- /** 股东3 */
- private String corpShareholder3;
-
- /** 股东4 */
- private String corpShareholder4;
-
- /** 股东5 */
- private String corpShareholder5;
-
- public Long getIntermediaryId() {
- return intermediaryId;
- }
-
- public void setIntermediaryId(Long intermediaryId) {
- this.intermediaryId = intermediaryId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getCertificateNo() {
- return certificateNo;
- }
-
- public void setCertificateNo(String certificateNo) {
- this.certificateNo = certificateNo;
- }
-
- public String getIntermediaryType() {
- return intermediaryType;
- }
-
- public void setIntermediaryType(String intermediaryType) {
- this.intermediaryType = intermediaryType;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getRemark() {
- return remark;
- }
-
- public void setRemark(String remark) {
- this.remark = remark;
- }
-
- public String getIndivType() {
- return indivType;
- }
-
- public void setIndivType(String indivType) {
- this.indivType = indivType;
- }
-
- public String getIndivSubType() {
- return indivSubType;
- }
-
- public void setIndivSubType(String indivSubType) {
- this.indivSubType = indivSubType;
- }
-
- public String getIndivGender() {
- return indivGender;
- }
-
- public void setIndivGender(String indivGender) {
- this.indivGender = indivGender;
- }
-
- public String getIndivCertType() {
- return indivCertType;
- }
-
- public void setIndivCertType(String indivCertType) {
- this.indivCertType = indivCertType;
- }
-
- public String getIndivPhone() {
- return indivPhone;
- }
-
- public void setIndivPhone(String indivPhone) {
- this.indivPhone = indivPhone;
- }
-
- public String getIndivWechat() {
- return indivWechat;
- }
-
- public void setIndivWechat(String indivWechat) {
- this.indivWechat = indivWechat;
- }
-
- public String getIndivAddress() {
- return indivAddress;
- }
-
- public void setIndivAddress(String indivAddress) {
- this.indivAddress = indivAddress;
- }
-
- public String getIndivCompany() {
- return indivCompany;
- }
-
- public void setIndivCompany(String indivCompany) {
- this.indivCompany = indivCompany;
- }
-
- public String getIndivPosition() {
- return indivPosition;
- }
-
- public void setIndivPosition(String indivPosition) {
- this.indivPosition = indivPosition;
- }
-
- public String getIndivRelatedId() {
- return indivRelatedId;
- }
-
- public void setIndivRelatedId(String indivRelatedId) {
- this.indivRelatedId = indivRelatedId;
- }
-
- public String getIndivRelation() {
- return indivRelation;
- }
-
- public void setIndivRelation(String indivRelation) {
- this.indivRelation = indivRelation;
- }
-
- public String getCorpCreditCode() {
- return corpCreditCode;
- }
-
- public void setCorpCreditCode(String corpCreditCode) {
- this.corpCreditCode = corpCreditCode;
- }
-
- public String getCorpType() {
- return corpType;
- }
-
- public void setCorpType(String corpType) {
- this.corpType = corpType;
- }
-
- public String getCorpNature() {
- return corpNature;
- }
-
- public void setCorpNature(String corpNature) {
- this.corpNature = corpNature;
- }
-
- public String getCorpIndustryCategory() {
- return corpIndustryCategory;
- }
-
- public void setCorpIndustryCategory(String corpIndustryCategory) {
- this.corpIndustryCategory = corpIndustryCategory;
- }
-
- public String getCorpIndustry() {
- return corpIndustry;
- }
-
- public void setCorpIndustry(String corpIndustry) {
- this.corpIndustry = corpIndustry;
- }
-
- public Date getCorpEstablishDate() {
- return corpEstablishDate;
- }
-
- public void setCorpEstablishDate(Date corpEstablishDate) {
- this.corpEstablishDate = corpEstablishDate;
- }
-
- public String getCorpAddress() {
- return corpAddress;
- }
-
- public void setCorpAddress(String corpAddress) {
- this.corpAddress = corpAddress;
- }
-
- public String getCorpLegalRep() {
- return corpLegalRep;
- }
-
- public void setCorpLegalRep(String corpLegalRep) {
- this.corpLegalRep = corpLegalRep;
- }
-
- public String getCorpLegalCertType() {
- return corpLegalCertType;
- }
-
- public void setCorpLegalCertType(String corpLegalCertType) {
- this.corpLegalCertType = corpLegalCertType;
- }
-
- public String getCorpLegalCertNo() {
- return corpLegalCertNo;
- }
-
- public void setCorpLegalCertNo(String corpLegalCertNo) {
- this.corpLegalCertNo = corpLegalCertNo;
- }
-
- public String getCorpShareholder1() {
- return corpShareholder1;
- }
-
- public void setCorpShareholder1(String corpShareholder1) {
- this.corpShareholder1 = corpShareholder1;
- }
-
- public String getCorpShareholder2() {
- return corpShareholder2;
- }
-
- public void setCorpShareholder2(String corpShareholder2) {
- this.corpShareholder2 = corpShareholder2;
- }
-
- public String getCorpShareholder3() {
- return corpShareholder3;
- }
-
- public void setCorpShareholder3(String corpShareholder3) {
- this.corpShareholder3 = corpShareholder3;
- }
-
- public String getCorpShareholder4() {
- return corpShareholder4;
- }
-
- public void setCorpShareholder4(String corpShareholder4) {
- this.corpShareholder4 = corpShareholder4;
- }
-
- public String getCorpShareholder5() {
- return corpShareholder5;
- }
-
- public void setCorpShareholder5(String corpShareholder5) {
- this.corpShareholder5 = corpShareholder5;
- }
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistQueryDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistQueryDTO.java
deleted file mode 100644
index af584d7..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryBlacklistQueryDTO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 中介人员黑名单查询 DTO
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-public class CcdiIntermediaryBlacklistQueryDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 姓名/机构名称(模糊查询) */
- private String name;
-
- /** 证件号(精确查询) */
- private String certificateNo;
-
- /** 中介类型 */
- private String intermediaryType;
-
- /** 状态 */
- private String status;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getCertificateNo() {
- return certificateNo;
- }
-
- public void setCertificateNo(String certificateNo) {
- this.certificateNo = certificateNo;
- }
-
- public String getIntermediaryType() {
- return intermediaryType;
- }
-
- public void setIntermediaryType(String intermediaryType) {
- this.intermediaryType = intermediaryType;
- }
-
- public String getStatus() {
- return status;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
deleted file mode 100644
index c52486e..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityAddDTO.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 机构中介新增 DTO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryEntityAddDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 机构名称 */
- @NotBlank(message = "机构名称不能为空")
- @Size(min = 1, max = 100, message = "机构名称长度不能超过100个字符")
- private String name;
-
- /** 统一社会信用代码 */
- @NotBlank(message = "统一社会信用代码不能为空")
- @Size(max = 18, message = "统一社会信用代码长度不能超过18个字符")
- private String corpCreditCode;
-
- /** 主体类型 */
- @Size(max = 50, message = "主体类型长度不能超过50个字符")
- private String corpType;
-
- /** 企业性质 */
- @Size(max = 50, message = "企业性质长度不能超过50个字符")
- private String corpNature;
-
- /** 行业分类 */
- @Size(max = 100, message = "行业分类长度不能超过100个字符")
- private String corpIndustryCategory;
-
- /** 所属行业 */
- @Size(max = 100, message = "所属行业长度不能超过100个字符")
- private String corpIndustry;
-
- /** 成立日期 */
- private Date corpEstablishDate;
-
- /** 注册地址 */
- @Size(max = 500, message = "注册地址长度不能超过500个字符")
- private String corpAddress;
-
- /** 法定代表人 */
- @Size(max = 50, message = "法定代表人长度不能超过50个字符")
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- @Size(max = 30, message = "法定代表人证件类型长度不能超过30个字符")
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- @Size(max = 30, message = "法定代表人证件号码长度不能超过30个字符")
- private String corpLegalCertNo;
-
- /** 股东1 */
- @Size(max = 30, message = "股东1长度不能超过30个字符")
- private String corpShareholder1;
-
- /** 股东2 */
- @Size(max = 30, message = "股东2长度不能超过30个字符")
- private String corpShareholder2;
-
- /** 股东3 */
- @Size(max = 30, message = "股东3长度不能超过30个字符")
- private String corpShareholder3;
-
- /** 股东4 */
- @Size(max = 30, message = "股东4长度不能超过30个字符")
- private String corpShareholder4;
-
- /** 股东5 */
- @Size(max = 30, message = "股东5长度不能超过30个字符")
- private String corpShareholder5;
-
- /** 状态 */
- @NotBlank(message = "状态不能为空")
- private String status;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
deleted file mode 100644
index 9f74267..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryEntityEditDTO.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 机构中介编辑 DTO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryEntityEditDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 中介ID */
- @NotNull(message = "中介ID不能为空")
- private Long intermediaryId;
-
- /** 机构名称 */
- @NotBlank(message = "机构名称不能为空")
- @Size(min = 1, max = 100, message = "机构名称长度不能超过100个字符")
- private String name;
-
- /** 证件号(统一社会信用代码) */
- @Size(max = 50, message = "证件号长度不能超过50个字符")
- private String certificateNo;
-
- /** 统一社会信用代码 */
- private String corpCreditCode;
-
- /** 主体类型(有限责任公司、股份有限公司等) */
- private String corpType;
-
- /** 企业性质(国企、民企、外企等) */
- private String corpNature;
-
- /** 行业分类 */
- private String corpIndustryCategory;
-
- /** 所属行业 */
- private String corpIndustry;
-
- /** 成立日期 */
- private Date corpEstablishDate;
-
- /** 注册地址 */
- private String corpAddress;
-
- /** 法定代表人 */
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- private String corpLegalCertNo;
-
- /** 股东1 */
- private String corpShareholder1;
-
- /** 股东2 */
- private String corpShareholder2;
-
- /** 股东3 */
- private String corpShareholder3;
-
- /** 股东4 */
- private String corpShareholder4;
-
- /** 股东5 */
- private String corpShareholder5;
-
- /** 状态 */
- @NotBlank(message = "状态不能为空")
- private String status;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
deleted file mode 100644
index a56497d..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonAddDTO.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 个人中介新增 DTO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryPersonAddDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 姓名 */
- @NotBlank(message = "姓名不能为空")
- @Size(min = 1, max = 100, message = "姓名长度不能超过100个字符")
- private String name;
-
- /** 证件号 */
- @NotBlank(message = "证件号不能为空")
- @Size(max = 50, message = "证件号长度不能超过50个字符")
- private String certificateNo;
-
- /** 人员类型(中介、职业背债人、房产中介等) */
- @Size(max = 30, message = "人员类型长度不能超过30个字符")
- private String indivType;
-
- /** 人员子类型(本人、配偶等) */
- @Size(max = 50, message = "人员子类型长度不能超过50个字符")
- private String indivSubType;
-
- /** 性别(M男 F女 O其他) */
- @Size(max = 1, message = "性别长度不能超过1个字符")
- private String indivGender;
-
- /** 证件类型 */
- @Size(max = 30, message = "证件类型长度不能超过30个字符")
- private String indivCertType;
-
- /** 手机号码(加密存储) */
- @Size(max = 20, message = "手机号码长度不能超过20个字符")
- private String indivPhone;
-
- /** 微信号 */
- @Size(max = 50, message = "微信号长度不能超过50个字符")
- private String indivWechat;
-
- /** 联系地址 */
- @Size(max = 200, message = "联系地址长度不能超过200个字符")
- private String indivAddress;
-
- /** 所在公司 */
- @Size(max = 100, message = "所在公司长度不能超过100个字符")
- private String indivCompany;
-
- /** 职位/职务 */
- @Size(max = 100, message = "职位长度不能超过100个字符")
- private String indivPosition;
-
- /** 关联人员ID */
- @Size(max = 20, message = "关联人员ID长度不能超过20个字符")
- private String indivRelatedId;
-
- /** 关联关系 */
- @Size(max = 50, message = "关联关系长度不能超过50个字符")
- private String indivRelation;
-
- /** 状态 */
- @NotBlank(message = "状态不能为空")
- private String status;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
deleted file mode 100644
index 22c6751..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/dto/CcdiIntermediaryPersonEditDTO.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package com.ruoyi.ccdi.domain.dto;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 个人中介编辑 DTO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryPersonEditDTO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 中介ID */
- @NotNull(message = "中介ID不能为空")
- private Long intermediaryId;
-
- /** 姓名 */
- @NotBlank(message = "姓名不能为空")
- @Size(min = 1, max = 100, message = "姓名长度不能超过100个字符")
- private String name;
-
- /** 证件号 */
- @Size(max = 50, message = "证件号长度不能超过50个字符")
- private String certificateNo;
-
- /** 人员类型(中介、职业背债人、房产中介等) */
- private String indivType;
-
- /** 人员子类型(本人、配偶等) */
- private String indivSubType;
-
- /** 性别(M男 F女 O其他) */
- private String indivGender;
-
- /** 证件类型 */
- private String indivCertType;
-
- /** 手机号码(加密存储) */
- private String indivPhone;
-
- /** 微信号 */
- private String indivWechat;
-
- /** 联系地址 */
- private String indivAddress;
-
- /** 所在公司 */
- private String indivCompany;
-
- /** 职位/职务 */
- private String indivPosition;
-
- /** 关联人员ID */
- private String indivRelatedId;
-
- /** 关联关系 */
- private String indivRelation;
-
- /** 状态 */
- @NotBlank(message = "状态不能为空")
- private String status;
-
- /** 备注 */
- @Size(max = 500, message = "备注长度不能超过500个字符")
- private String remark;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryBlacklistExcel.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryBlacklistExcel.java
deleted file mode 100644
index fea2d3c..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryBlacklistExcel.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package com.ruoyi.ccdi.domain.excel;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 中介人员黑名单Excel导入导出对象
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-@Data
-public class CcdiIntermediaryBlacklistExcel implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 姓名/机构名称 */
- @ExcelProperty(value = "姓名/机构名称", index = 0)
- @ColumnWidth(20)
- private String name;
-
- /** 证件号 */
- @ExcelProperty(value = "证件号", index = 1)
- @ColumnWidth(20)
- private String certificateNo;
-
- /** 中介类型 */
- @ExcelProperty(value = "中介类型", index = 2)
- @ColumnWidth(15)
- private String intermediaryType;
-
- /** 状态 */
- @ExcelProperty(value = "状态", index = 3)
- @ColumnWidth(10)
- private String status;
-
- /** 备注 */
- @ExcelProperty(value = "备注", index = 4)
- @ColumnWidth(30)
- private String remark;
-
- /** 数据来源 */
- @ExcelProperty(value = "数据来源", index = 5)
- @ColumnWidth(15)
- private String dataSource;
-
- // ===== 个人字段 =====
-
- /** 人员类型 */
- @ExcelProperty(value = "人员类型", index = 6)
- @ColumnWidth(15)
- private String indivType;
-
- /** 人员子类型 */
- @ExcelProperty(value = "人员子类型", index = 7)
- @ColumnWidth(15)
- private String indivSubType;
-
- /** 性别 */
- @ExcelProperty(value = "性别", index = 8)
- @ColumnWidth(10)
- private String indivGender;
-
- /** 证件类型 */
- @ExcelProperty(value = "证件类型", index = 9)
- @ColumnWidth(15)
- private String indivCertType;
-
- /** 手机号 */
- @ExcelProperty(value = "手机号", index = 10)
- @ColumnWidth(15)
- private String indivPhone;
-
- /** 微信号 */
- @ExcelProperty(value = "微信号", index = 11)
- @ColumnWidth(15)
- private String indivWechat;
-
- /** 联系地址 */
- @ExcelProperty(value = "联系地址", index = 12)
- @ColumnWidth(30)
- private String indivAddress;
-
- /** 所在公司 */
- @ExcelProperty(value = "所在公司", index = 13)
- @ColumnWidth(20)
- private String indivCompany;
-
- /** 职位 */
- @ExcelProperty(value = "职位", index = 14)
- @ColumnWidth(15)
- private String indivPosition;
-
- /** 关联人员ID */
- @ExcelProperty(value = "关联人员ID", index = 15)
- @ColumnWidth(15)
- private String indivRelatedId;
-
- /** 关联关系 */
- @ExcelProperty(value = "关联关系", index = 16)
- @ColumnWidth(15)
- private String indivRelation;
-
- // ===== 机构字段 =====
-
- /** 统一社会信用代码 */
- @ExcelProperty(value = "统一社会信用代码", index = 17)
- @ColumnWidth(20)
- private String corpCreditCode;
-
- /** 主体类型 */
- @ExcelProperty(value = "主体类型", index = 18)
- @ColumnWidth(15)
- private String corpType;
-
- /** 企业性质 */
- @ExcelProperty(value = "企业性质", index = 19)
- @ColumnWidth(15)
- private String corpNature;
-
- /** 行业分类 */
- @ExcelProperty(value = "行业分类", index = 20)
- @ColumnWidth(15)
- private String corpIndustryCategory;
-
- /** 所属行业 */
- @ExcelProperty(value = "所属行业", index = 21)
- @ColumnWidth(15)
- private String corpIndustry;
-
- /** 成立日期 */
- @ExcelProperty(value = "成立日期", index = 22)
- @ColumnWidth(15)
- private Date corpEstablishDate;
-
- /** 注册地址 */
- @ExcelProperty(value = "注册地址", index = 23)
- @ColumnWidth(30)
- private String corpAddress;
-
- /** 法定代表人 */
- @ExcelProperty(value = "法定代表人", index = 24)
- @ColumnWidth(15)
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- @ExcelProperty(value = "法定代表人证件类型", index = 25)
- @ColumnWidth(20)
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- @ExcelProperty(value = "法定代表人证件号码", index = 26)
- @ColumnWidth(20)
- private String corpLegalCertNo;
-
- /** 股东1 */
- @ExcelProperty(value = "股东1", index = 27)
- @ColumnWidth(15)
- private String corpShareholder1;
-
- /** 股东2 */
- @ExcelProperty(value = "股东2", index = 28)
- @ColumnWidth(15)
- private String corpShareholder2;
-
- /** 股东3 */
- @ExcelProperty(value = "股东3", index = 29)
- @ColumnWidth(15)
- private String corpShareholder3;
-
- /** 股东4 */
- @ExcelProperty(value = "股东4", index = 30)
- @ColumnWidth(15)
- private String corpShareholder4;
-
- /** 股东5 */
- @ExcelProperty(value = "股东5", index = 31)
- @ColumnWidth(15)
- private String corpShareholder5;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java
deleted file mode 100644
index f5b5cd9..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryEntityExcel.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.ruoyi.ccdi.domain.excel;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.ruoyi.common.annotation.DictDropdown;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 机构中介黑名单Excel导入对象
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryEntityExcel implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- @ExcelProperty(value = "机构名称", index = 0)
- @ColumnWidth(25)
- private String name;
-
- @ExcelProperty(value = "统一社会信用代码", index = 1)
- @ColumnWidth(20)
- private String corpCreditCode;
-
- @ExcelProperty(value = "主体类型", index = 2)
- @ColumnWidth(20)
- @DictDropdown(dictType = "dpc_entity_type")
- private String corpType;
-
- @ExcelProperty(value = "企业性质", index = 3)
- @ColumnWidth(15)
- @DictDropdown(dictType = "dpc_enterprise_nature")
- private String corpNature;
-
- @ExcelProperty(value = "行业分类", index = 4)
- @ColumnWidth(15)
- private String corpIndustryCategory;
-
- @ExcelProperty(value = "所属行业", index = 5)
- @ColumnWidth(15)
- private String corpIndustry;
-
- @ExcelProperty(value = "成立日期", index = 6)
- @ColumnWidth(15)
- private String corpEstablishDate;
-
- @ExcelProperty(value = "注册地址", index = 7)
- @ColumnWidth(40)
- private String corpAddress;
-
- @ExcelProperty(value = "法定代表人", index = 8)
- @ColumnWidth(15)
- private String corpLegalRep;
-
- @ExcelProperty(value = "法定代表人证件类型", index = 9)
- @ColumnWidth(20)
- private String corpLegalCertType;
-
- @ExcelProperty(value = "法定代表人证件号码", index = 10)
- @ColumnWidth(20)
- private String corpLegalCertNo;
-
- @ExcelProperty(value = "股东1", index = 11)
- @ColumnWidth(15)
- private String corpShareholder1;
-
- @ExcelProperty(value = "股东2", index = 12)
- @ColumnWidth(15)
- private String corpShareholder2;
-
- @ExcelProperty(value = "股东3", index = 13)
- @ColumnWidth(15)
- private String corpShareholder3;
-
- @ExcelProperty(value = "股东4", index = 14)
- @ColumnWidth(15)
- private String corpShareholder4;
-
- @ExcelProperty(value = "股东5", index = 15)
- @ColumnWidth(15)
- private String corpShareholder5;
-
- @ExcelProperty(value = "备注", index = 16)
- @ColumnWidth(30)
- private String remark;
-
- // 以下字段不在 Excel 中显示,由系统自动设置
- // private String status; // 默认:正常(0)
- // private String dataSource; // 默认:批量导入(IMPORT)
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java
deleted file mode 100644
index 7fec17c..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/excel/CcdiIntermediaryPersonExcel.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package com.ruoyi.ccdi.domain.excel;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.alibaba.excel.annotation.write.style.ColumnWidth;
-import com.ruoyi.common.annotation.DictDropdown;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * 个人中介黑名单Excel导入对象
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryPersonExcel implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- @ExcelProperty(value = "姓名", index = 0)
- @ColumnWidth(15)
- private String name;
-
- @ExcelProperty(value = "人员类型", index = 1)
- @ColumnWidth(15)
- private String indivType;
-
- @ExcelProperty(value = "人员子类型", index = 2)
- @ColumnWidth(15)
- private String indivSubType;
-
- @ExcelProperty(value = "性别", index = 3)
- @ColumnWidth(10)
- @DictDropdown(dictType = "dpc_indiv_gender")
- private String indivGender;
-
- @ExcelProperty(value = "证件类型", index = 4)
- @ColumnWidth(15)
- @DictDropdown(dictType = "dpc_certificate_type")
- private String indivCertType;
-
- @ExcelProperty(value = "证件号码", index = 5)
- @ColumnWidth(20)
- private String certificateNo;
-
- @ExcelProperty(value = "手机号码", index = 6)
- @ColumnWidth(15)
- private String indivPhone;
-
- @ExcelProperty(value = "微信号", index = 7)
- @ColumnWidth(15)
- private String indivWechat;
-
- @ExcelProperty(value = "联系地址", index = 8)
- @ColumnWidth(30)
- private String indivAddress;
-
- @ExcelProperty(value = "所在公司", index = 9)
- @ColumnWidth(20)
- private String indivCompany;
-
- @ExcelProperty(value = "职位", index = 10)
- @ColumnWidth(15)
- private String indivPosition;
-
- @ExcelProperty(value = "关联人员ID", index = 11)
- @ColumnWidth(15)
- private String indivRelatedId;
-
- @ExcelProperty(value = "关联关系", index = 12)
- @ColumnWidth(15)
- private String indivRelation;
-
- @ExcelProperty(value = "备注", index = 13)
- @ColumnWidth(30)
- private String remark;
-
- // 以下字段不在 Excel 中显示,由系统自动设置
- // private String status; // 默认:正常(0)
- // private String dataSource; // 默认:批量导入(IMPORT)
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryBlacklistVO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryBlacklistVO.java
deleted file mode 100644
index c6f403f..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryBlacklistVO.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.ruoyi.ccdi.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 中介人员黑名单视图对象 VO
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-@Data
-public class CcdiIntermediaryBlacklistVO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- /** 中介ID */
- private Long intermediaryId;
-
- /** 姓名/机构名称 */
- private String name;
-
- /** 证件号 */
- private String certificateNo;
-
- /** 中介类型 */
- private String intermediaryType;
-
- /** 状态 */
- private String status;
-
- /** 数据来源 */
- private String dataSource;
-
- /** 备注 */
- private String remark;
-
- /** 创建者 */
- private String createBy;
-
- /** 创建时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /** 更新者 */
- private String updateBy;
-
- /** 更新时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
deleted file mode 100644
index 8cf905a..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryEntityDetailVO.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package com.ruoyi.ccdi.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 机构中介黑名单详情 VO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryEntityDetailVO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- // ============================================================
- // 核心字段
- // ============================================================
- /** 中介ID */
- private Long intermediaryId;
-
- /** 机构名称 */
- private String name;
-
- /** 证件号码 */
- private String certificateNo;
-
- /** 中介类型 */
- private String intermediaryType;
-
- /** 状态 */
- private String status;
-
- /** 备注 */
- private String remark;
-
- /** 数据来源 */
- private String dataSource;
-
- // ============================================================
- // 机构专属字段
- // ============================================================
- /** 统一社会信用代码 */
- private String corpCreditCode;
-
- /** 主体类型 */
- private String corpType;
-
- /** 企业性质 */
- private String corpNature;
-
- /** 行业分类 */
- private String corpIndustryCategory;
-
- /** 所属行业 */
- private String corpIndustry;
-
- /** 成立日期 */
- @JsonFormat(pattern = "yyyy-MM-dd")
- private Date corpEstablishDate;
-
- /** 注册地址 */
- private String corpAddress;
-
- /** 法定代表人 */
- private String corpLegalRep;
-
- /** 法定代表人证件类型 */
- private String corpLegalCertType;
-
- /** 法定代表人证件号码 */
- private String corpLegalCertNo;
-
- /** 股东1 */
- private String corpShareholder1;
-
- /** 股东2 */
- private String corpShareholder2;
-
- /** 股东3 */
- private String corpShareholder3;
-
- /** 股东4 */
- private String corpShareholder4;
-
- /** 股东5 */
- private String corpShareholder5;
-
- // ============================================================
- // 审计字段
- // ============================================================
- /** 创建者 */
- private String createBy;
-
- /** 创建时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /** 更新者 */
- private String updateBy;
-
- /** 更新时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
deleted file mode 100644
index c1ecc41..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/domain/vo/CcdiIntermediaryPersonDetailVO.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.ruoyi.ccdi.domain.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.io.Serial;
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 个人中介黑名单详情 VO
- *
- * @author ruoyi
- * @date 2026-01-29
- */
-@Data
-public class CcdiIntermediaryPersonDetailVO implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- // ============================================================
- // 核心字段
- // ============================================================
- /** 中介ID */
- private Long intermediaryId;
-
- /** 姓名 */
- private String name;
-
- /** 证件号码 */
- private String certificateNo;
-
- /** 中介类型 */
- private String intermediaryType;
-
- /** 状态 */
- private String status;
-
- /** 备注 */
- private String remark;
-
- /** 数据来源 */
- private String dataSource;
-
- // ============================================================
- // 个人专属字段
- // ============================================================
- /** 人员类型 */
- private String indivType;
-
- /** 人员子类型 */
- private String indivSubType;
-
- /** 性别 */
- private String indivGender;
-
- /** 证件类型 */
- private String indivCertType;
-
- /** 手机号码 */
- private String indivPhone;
-
- /** 微信号 */
- private String indivWechat;
-
- /** 联系地址 */
- private String indivAddress;
-
- /** 所在公司 */
- private String indivCompany;
-
- /** 职位/职务 */
- private String indivPosition;
-
- /** 关联人员ID */
- private String indivRelatedId;
-
- /** 关联关系 */
- private String indivRelation;
-
- // ============================================================
- // 审计字段
- // ============================================================
- /** 创建者 */
- private String createBy;
-
- /** 创建时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /** 更新者 */
- private String updateBy;
-
- /** 更新时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
deleted file mode 100644
index 115f551..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiBizIntermediaryMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ruoyi.ccdi.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 中介人员业务Mapper接口
- *
- * @author ruoyi
- * @date 2026-02-04
- */
-@Mapper
-public interface CcdiBizIntermediaryMapper extends BaseMapper {
-
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
deleted file mode 100644
index e6538e1..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiEnterpriseBaseInfoMapper.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.ruoyi.ccdi.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 企业基础信息Mapper接口
- *
- * @author ruoyi
- * @date 2026-02-04
- */
-@Mapper
-public interface CcdiEnterpriseBaseInfoMapper extends BaseMapper {
-
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryBlacklistMapper.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryBlacklistMapper.java
deleted file mode 100644
index 1e80c29..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/mapper/CcdiIntermediaryBlacklistMapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.ruoyi.ccdi.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.ccdi.domain.CcdiIntermediaryBlacklist;
-import com.ruoyi.ccdi.domain.dto.CcdiIntermediaryBlacklistQueryDTO;
-import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 中介人员黑名单 数据层
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-public interface CcdiIntermediaryBlacklistMapper extends BaseMapper {
-
- /**
- * 批量插入中介黑名单数据
- *
- * @param list 中介黑名单列表
- * @return 插入行数
- */
- int batchInsert(@Param("list") List list);
-
- /**
- * 批量更新中介黑名单数据
- *
- * @param list 中介黑名单列表
- * @return 更新行数
- */
- int batchUpdate(@Param("list") List list);
-
- /**
- * 联合查询分页 - 个人和机构中介
- * 使用 UNION ALL 合并两张表的数据,在数据库层面完成分页
- *
- * @param page 分页对象
- * @param queryDTO 查询条件
- * @return 分页结果
- */
- IPage selectIntermediaryUnionPage(
- Page page,
- @Param("queryDTO") CcdiIntermediaryBlacklistQueryDTO queryDTO
- );
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryBlacklistService.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryBlacklistService.java
deleted file mode 100644
index 8386a96..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/ICcdiIntermediaryBlacklistService.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.ruoyi.ccdi.service;
-
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.ccdi.domain.CcdiIntermediaryBlacklist;
-import com.ruoyi.ccdi.domain.dto.*;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryBlacklistExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
-import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO;
-
-import java.util.List;
-
-/**
- * 中介人员黑名单 服务层
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-public interface ICcdiIntermediaryBlacklistService {
-
- /**
- * 查询中介黑名单列表
- *
- * @param queryDTO 查询条件
- * @return 中介黑名单集合
- */
- List selectIntermediaryList(CcdiIntermediaryBlacklistQueryDTO queryDTO);
-
- /**
- * 分页查询中介黑名单列表
- *
- * @param page 分页对象
- * @param queryDTO 查询条件
- * @return 中介黑名单VO分页结果
- */
- Page selectIntermediaryPage(Page page, CcdiIntermediaryBlacklistQueryDTO queryDTO);
-
- /**
- * 查询中介黑名单列表(用于导出)
- *
- * @param queryDTO 查询条件
- * @return 中介黑名单Excel实体集合
- */
- List selectIntermediaryListForExport(CcdiIntermediaryBlacklistQueryDTO queryDTO);
-
- /**
- * 查询中介黑名单详细
- *
- * @param intermediaryId 中介ID
- * @return 中介黑名单VO
- */
- CcdiIntermediaryBlacklistVO selectIntermediaryById(Long intermediaryId);
-
- /**
- * 新增中介黑名单(通用接口,不推荐使用)
- *
- * @param addDTO 新增DTO
- * @return 结果
- * @deprecated 请使用 insertPersonIntermediary 或 insertEntityIntermediary 代替
- */
- @Deprecated
- int insertIntermediary(CcdiIntermediaryBlacklistAddDTO addDTO);
-
- /**
- * 新增个人中介黑名单
- *
- * @param addDTO 个人中介新增DTO
- * @return 结果
- */
- int insertPersonIntermediary(CcdiIntermediaryPersonAddDTO addDTO);
-
- /**
- * 新增机构中介黑名单
- *
- * @param addDTO 机构中介新增DTO
- * @return 结果
- */
- int insertEntityIntermediary(CcdiIntermediaryEntityAddDTO addDTO);
-
- /**
- * 修改中介黑名单(通用接口,不推荐使用)
- *
- * @param editDTO 编辑DTO
- * @return 结果
- * @deprecated 请使用 updatePersonIntermediary 或 updateEntityIntermediary 代替
- */
- @Deprecated
- int updateIntermediary(CcdiIntermediaryBlacklistEditDTO editDTO);
-
- /**
- * 修改个人中介黑名单
- *
- * @param editDTO 个人中介编辑DTO
- * @return 结果
- */
- int updatePersonIntermediary(CcdiIntermediaryPersonEditDTO editDTO);
-
- /**
- * 修改机构中介黑名单
- *
- * @param editDTO 机构中介编辑DTO
- * @return 结果
- */
- int updateEntityIntermediary(CcdiIntermediaryEntityEditDTO editDTO);
-
- /**
- * 批量删除中介黑名单
- *
- * @param intermediaryIds 需要删除的中介ID
- * @return 结果
- */
- int deleteIntermediaryByIds(Long[] intermediaryIds);
-
- /**
- * 导入中介黑名单数据
- *
- * @param excelList Excel实体列表
- * @param isUpdateSupport 是否更新支持
- * @return 结果
- */
- String importIntermediary(List excelList, Boolean isUpdateSupport);
-
- /**
- * 根据中介类型获取详情(返回不同类型)
- *
- * @param intermediaryId 中介ID
- * @return 个人返回 CcdiIntermediaryPersonDetailVO,机构返回 CcdiIntermediaryEntityDetailVO
- */
- Object selectIntermediaryDetailById(Long intermediaryId);
-
- /**
- * 导入个人中介数据
- *
- * @param excelList Excel实体列表
- * @param isUpdateSupport 是否更新支持
- * @return 结果
- */
- String importPersonIntermediary(List excelList, Boolean isUpdateSupport);
-
- /**
- * 导入机构中介数据
- *
- * @param excelList Excel实体列表
- * @param isUpdateSupport 是否更新支持
- * @return 结果
- */
- String importEntityIntermediary(List excelList, Boolean isUpdateSupport);
-}
diff --git a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryBlacklistServiceImpl.java b/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryBlacklistServiceImpl.java
deleted file mode 100644
index 1d02543..0000000
--- a/ruoyi-ccdi/src/main/java/com/ruoyi/ccdi/service/impl/CcdiIntermediaryBlacklistServiceImpl.java
+++ /dev/null
@@ -1,716 +0,0 @@
-package com.ruoyi.ccdi.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.ccdi.domain.CcdiBizIntermediary;
-import com.ruoyi.ccdi.domain.CcdiEnterpriseBaseInfo;
-import com.ruoyi.ccdi.domain.CcdiIntermediaryBlacklist;
-import com.ruoyi.ccdi.domain.dto.*;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryBlacklistExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryEntityExcel;
-import com.ruoyi.ccdi.domain.excel.CcdiIntermediaryPersonExcel;
-import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryBlacklistVO;
-import com.ruoyi.ccdi.domain.vo.CcdiIntermediaryPersonDetailVO;
-import com.ruoyi.ccdi.mapper.CcdiBizIntermediaryMapper;
-import com.ruoyi.ccdi.mapper.CcdiEnterpriseBaseInfoMapper;
-import com.ruoyi.ccdi.mapper.CcdiIntermediaryBlacklistMapper;
-import com.ruoyi.ccdi.service.ICcdiIntermediaryBlacklistService;
-import com.ruoyi.common.utils.StringUtils;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-/**
- * 中介人员黑名单 服务层处理
- *
- * @author ruoyi
- * @date 2026-01-27
- */
-@Service
-public class CcdiIntermediaryBlacklistServiceImpl implements ICcdiIntermediaryBlacklistService {
-
- @Resource
- private CcdiBizIntermediaryMapper bizIntermediaryMapper;
-
- @Resource
- private CcdiEnterpriseBaseInfoMapper enterpriseBaseInfoMapper;
-
- @Resource
- private CcdiIntermediaryBlacklistMapper intermediaryBlacklistMapper;
-
- /**
- * 查询中介黑名单列表
- * 同时查询个人中介和机构中介,合并返回
- *
- * @param queryDTO 查询条件
- * @return 中介黑名单集合
- */
- @Override
- public List selectIntermediaryList(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- List resultList = new ArrayList<>();
-
- // 查询个人中介
- if (StringUtils.isEmpty(queryDTO.getIntermediaryType()) || "1".equals(queryDTO.getIntermediaryType())) {
- LambdaQueryWrapper personWrapper = buildPersonQueryWrapper(queryDTO);
- List personList = bizIntermediaryMapper.selectList(personWrapper);
- personList.forEach(person -> resultList.add(convertPersonToVO(person)));
- }
-
- // 查询机构中介
- if (StringUtils.isEmpty(queryDTO.getIntermediaryType()) || "2".equals(queryDTO.getIntermediaryType())) {
- LambdaQueryWrapper entityWrapper = buildEntityQueryWrapper(queryDTO);
- List entityList = enterpriseBaseInfoMapper.selectList(entityWrapper);
- entityList.forEach(entity -> resultList.add(convertEntityToVO(entity)));
- }
-
- return resultList;
- }
-
- /**
- * 分页查询中介黑名单列表
- * 使用 UNION ALL 在数据库层面完成分页,避免手动分页的性能问题
- *
- * @param page 分页对象
- * @param queryDTO 查询条件
- * @return 中介黑名单VO分页结果
- */
- @Override
- public Page selectIntermediaryPage(Page page, CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- // 使用联合查询分页
- Page voPage = new Page<>(page.getCurrent(), page.getSize());
- IPage result = intermediaryBlacklistMapper.selectIntermediaryUnionPage(voPage, queryDTO);
-
- return (Page) result;
- }
-
- /**
- * 查询中介黑名单列表(用于导出)
- *
- * @param queryDTO 查询条件
- * @return 中介黑名单Excel实体集合
- */
- @Override
- public List selectIntermediaryListForExport(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- List excelList = new ArrayList<>();
-
- // 查询个人中介
- LambdaQueryWrapper personWrapper = buildPersonQueryWrapper(queryDTO);
- List personList = bizIntermediaryMapper.selectList(personWrapper);
- personList.forEach(person -> {
- CcdiIntermediaryBlacklistExcel excel = new CcdiIntermediaryBlacklistExcel();
- convertPersonToExcel(person, excel);
- excelList.add(excel);
- });
-
- // 查询机构中介
- LambdaQueryWrapper entityWrapper = buildEntityQueryWrapper(queryDTO);
- List entityList = enterpriseBaseInfoMapper.selectList(entityWrapper);
- entityList.forEach(entity -> {
- CcdiIntermediaryBlacklistExcel excel = new CcdiIntermediaryBlacklistExcel();
- convertEntityToExcel(entity, excel);
- excelList.add(excel);
- });
-
- return excelList;
- }
-
- /**
- * 查询中介黑名单详细
- *
- * @param intermediaryId 中介ID
- * @return 中介黑名单VO
- */
- @Override
- public CcdiIntermediaryBlacklistVO selectIntermediaryById(Long intermediaryId) {
- // 先查个人中介
- CcdiBizIntermediary person = bizIntermediaryMapper.selectById(intermediaryId);
- if (person != null) {
- return convertPersonToVO(person);
- }
-
- // 再查机构中介(社会信用代码作为ID)
- // 注意:这里需要特殊处理,因为机构表的主键是字符串类型
- return null;
- }
-
- /**
- * 新增中介黑名单(已废弃)
- */
- @Override
- @Deprecated
- public int insertIntermediary(CcdiIntermediaryBlacklistAddDTO addDTO) {
- throw new UnsupportedOperationException("请使用类型专用的新增方法: insertPersonIntermediary 或 insertEntityIntermediary");
- }
-
- /**
- * 新增个人中介黑名单
- * 插入到 ccdi_biz_intermediary 表
- *
- * @param addDTO 个人中介新增DTO
- * @return 结果
- */
- @Override
- public int insertPersonIntermediary(CcdiIntermediaryPersonAddDTO addDTO) {
- CcdiBizIntermediary bizIntermediary = new CcdiBizIntermediary();
- bizIntermediary.setName(addDTO.getName());
- bizIntermediary.setPersonId(addDTO.getCertificateNo());
- bizIntermediary.setPersonType(addDTO.getIndivType());
- bizIntermediary.setPersonSubType(addDTO.getIndivSubType());
- bizIntermediary.setGender(addDTO.getIndivGender());
- bizIntermediary.setIdType(StringUtils.isNotEmpty(addDTO.getIndivCertType()) ? addDTO.getIndivCertType() : "身份证");
- bizIntermediary.setMobile(addDTO.getIndivPhone());
- bizIntermediary.setWechatNo(addDTO.getIndivWechat());
- bizIntermediary.setContactAddress(addDTO.getIndivAddress());
- bizIntermediary.setCompany(addDTO.getIndivCompany());
- bizIntermediary.setPosition(addDTO.getIndivPosition());
- bizIntermediary.setRelatedNumId(addDTO.getIndivRelatedId());
- bizIntermediary.setRelationType(addDTO.getIndivRelation());
- bizIntermediary.setDateSource("MANUAL");
- bizIntermediary.setRemark(addDTO.getRemark());
- return bizIntermediaryMapper.insert(bizIntermediary);
- }
-
- /**
- * 新增机构中介黑名单
- * 插入到 ccdi_enterprise_base_info 表
- * 设置 risk_level 为高风险, ent_source 为中介
- *
- * @param addDTO 机构中介新增DTO
- * @return 结果
- */
- @Override
- public int insertEntityIntermediary(CcdiIntermediaryEntityAddDTO addDTO) {
- CcdiEnterpriseBaseInfo enterprise = new CcdiEnterpriseBaseInfo();
- enterprise.setSocialCreditCode(addDTO.getCorpCreditCode());
- enterprise.setEnterpriseName(addDTO.getName());
- enterprise.setEnterpriseType(addDTO.getCorpType());
- enterprise.setEnterpriseNature(addDTO.getCorpNature());
- enterprise.setIndustryClass(addDTO.getCorpIndustryCategory());
- enterprise.setIndustryName(addDTO.getCorpIndustry());
- enterprise.setEstablishDate(addDTO.getCorpEstablishDate());
- enterprise.setRegisterAddress(addDTO.getCorpAddress());
- enterprise.setLegalRepresentative(addDTO.getCorpLegalRep());
- enterprise.setLegalCertType(addDTO.getCorpLegalCertType());
- enterprise.setLegalCertNo(addDTO.getCorpLegalCertNo());
- enterprise.setShareholder1(addDTO.getCorpShareholder1());
- enterprise.setShareholder2(addDTO.getCorpShareholder2());
- enterprise.setShareholder3(addDTO.getCorpShareholder3());
- enterprise.setShareholder4(addDTO.getCorpShareholder4());
- enterprise.setShareholder5(addDTO.getCorpShareholder5());
- // 设置为高风险
- enterprise.setRiskLevel("1");
- // 设置来源为中介
- enterprise.setEntSource("INTERMEDIARY");
- enterprise.setDataSource("MANUAL");
- enterprise.setStatus(addDTO.getStatus());
- return enterpriseBaseInfoMapper.insert(enterprise);
- }
-
- /**
- * 修改中介黑名单(已废弃)
- */
- @Override
- @Deprecated
- public int updateIntermediary(CcdiIntermediaryBlacklistEditDTO editDTO) {
- throw new UnsupportedOperationException("请使用类型专用的修改方法: updatePersonIntermediary 或 updateEntityIntermediary");
- }
-
- /**
- * 修改个人中介黑名单
- *
- * @param editDTO 个人中介编辑DTO
- * @return 结果
- */
- @Override
- public int updatePersonIntermediary(CcdiIntermediaryPersonEditDTO editDTO) {
- CcdiBizIntermediary bizIntermediary = new CcdiBizIntermediary();
- bizIntermediary.setBizId(editDTO.getIntermediaryId());
- bizIntermediary.setName(editDTO.getName());
- bizIntermediary.setPersonId(editDTO.getCertificateNo());
- bizIntermediary.setPersonType(editDTO.getIndivType());
- bizIntermediary.setPersonSubType(editDTO.getIndivSubType());
- bizIntermediary.setGender(editDTO.getIndivGender());
- bizIntermediary.setIdType(editDTO.getIndivCertType());
- bizIntermediary.setMobile(editDTO.getIndivPhone());
- bizIntermediary.setWechatNo(editDTO.getIndivWechat());
- bizIntermediary.setContactAddress(editDTO.getIndivAddress());
- bizIntermediary.setCompany(editDTO.getIndivCompany());
- bizIntermediary.setPosition(editDTO.getIndivPosition());
- bizIntermediary.setRelatedNumId(editDTO.getIndivRelatedId());
- bizIntermediary.setRelationType(editDTO.getIndivRelation());
- bizIntermediary.setRemark(editDTO.getRemark());
- return bizIntermediaryMapper.updateById(bizIntermediary);
- }
-
- /**
- * 修改机构中介黑名单
- *
- * @param editDTO 机构中介编辑DTO
- * @return 结果
- */
- @Override
- public int updateEntityIntermediary(CcdiIntermediaryEntityEditDTO editDTO) {
- CcdiEnterpriseBaseInfo enterprise = new CcdiEnterpriseBaseInfo();
- enterprise.setSocialCreditCode(editDTO.getCorpCreditCode());
- enterprise.setEnterpriseName(editDTO.getName());
- enterprise.setEnterpriseType(editDTO.getCorpType());
- enterprise.setEnterpriseNature(editDTO.getCorpNature());
- enterprise.setIndustryClass(editDTO.getCorpIndustryCategory());
- enterprise.setIndustryName(editDTO.getCorpIndustry());
- enterprise.setEstablishDate(editDTO.getCorpEstablishDate());
- enterprise.setRegisterAddress(editDTO.getCorpAddress());
- enterprise.setLegalRepresentative(editDTO.getCorpLegalRep());
- enterprise.setLegalCertType(editDTO.getCorpLegalCertType());
- enterprise.setLegalCertNo(editDTO.getCorpLegalCertNo());
- enterprise.setShareholder1(editDTO.getCorpShareholder1());
- enterprise.setShareholder2(editDTO.getCorpShareholder2());
- enterprise.setShareholder3(editDTO.getCorpShareholder3());
- enterprise.setShareholder4(editDTO.getCorpShareholder4());
- enterprise.setShareholder5(editDTO.getCorpShareholder5());
- enterprise.setStatus(editDTO.getStatus());
- enterprise.setRemark(editDTO.getRemark());
- return enterpriseBaseInfoMapper.updateById(enterprise);
- }
-
- /**
- * 批量删除中介黑名单
- *
- * @param intermediaryIds 需要删除的中介ID
- * @return 结果
- */
- @Override
- public int deleteIntermediaryByIds(Long[] intermediaryIds) {
- // 同时删除两个表中的数据
- int count = 0;
- for (Long id : intermediaryIds) {
- // 尝试从个人表删除
- count += bizIntermediaryMapper.deleteById(id);
- }
- // 机构表需要按社会信用代码删除,这里暂时跳过
- return count;
- }
-
- /**
- * 导入中介黑名单数据(已废弃)
- */
- @Override
- @Deprecated
- public String importIntermediary(List excelList, Boolean isUpdateSupport) {
- // 根据类型分别导入
- throw new UnsupportedOperationException("请使用类型专用的导入方法");
- }
-
- /**
- * 根据中介ID获取详情(返回不同类型)
- *
- * @param intermediaryId 中介ID
- * @return 个人返回 CcdiIntermediaryPersonDetailVO,机构返回 CcdiIntermediaryEntityDetailVO
- */
- @Override
- public Object selectIntermediaryDetailById(Long intermediaryId) {
- // 先查个人中介
- CcdiBizIntermediary person = bizIntermediaryMapper.selectById(intermediaryId);
- if (person != null) {
- return convertPersonToDetailVO(person);
- }
-
- // 机构中介需要通过其他方式查询
- return null;
- }
-
- /**
- * 导入个人中介数据
- *
- * @param excelList Excel实体列表
- * @param isUpdateSupport 是否更新支持
- * @return 结果
- */
- @Override
- public String importPersonIntermediary(List excelList, Boolean isUpdateSupport) {
- if (excelList == null || excelList.isEmpty()) {
- return "至少需要一条数据";
- }
-
- List toInsertList = new ArrayList<>();
- List toUpdateList = new ArrayList<>();
- List errorMessages = new ArrayList<>();
-
- // 批量查询已存在的记录
- Set existingCertNos = new HashSet<>();
- Map certNoToIdMap = new HashMap<>();
- for (CcdiIntermediaryPersonExcel excel : excelList) {
- if (StringUtils.isNotEmpty(excel.getCertificateNo())) {
- existingCertNos.add(excel.getCertificateNo());
- }
- }
- if (!existingCertNos.isEmpty()) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.in(CcdiBizIntermediary::getPersonId, existingCertNos)
- .select(CcdiBizIntermediary::getBizId, CcdiBizIntermediary::getPersonId);
- List existingList = bizIntermediaryMapper.selectList(wrapper);
- for (CcdiBizIntermediary existing : existingList) {
- certNoToIdMap.put(existing.getPersonId(), existing.getBizId());
- }
- }
-
- // 唯一性校验
- if (!isUpdateSupport) {
- for (CcdiIntermediaryPersonExcel excel : excelList) {
- if (StringUtils.isNotEmpty(excel.getCertificateNo()) && certNoToIdMap.containsKey(excel.getCertificateNo())) {
- throw new RuntimeException("证件号 " + excel.getCertificateNo() + " 已存在,请勿重复导入");
- }
- }
- }
-
- // 处理每条数据
- for (int i = 0; i < excelList.size(); i++) {
- CcdiIntermediaryPersonExcel excel = excelList.get(i);
- try {
- // 验证数据
- if (StringUtils.isEmpty(excel.getName())) {
- throw new RuntimeException("姓名不能为空");
- }
- if (StringUtils.isEmpty(excel.getCertificateNo())) {
- throw new RuntimeException("证件号码不能为空");
- }
-
- // 转换为实体
- CcdiBizIntermediary intermediary = new CcdiBizIntermediary();
- intermediary.setName(excel.getName());
- intermediary.setPersonId(excel.getCertificateNo());
- intermediary.setPersonType(excel.getIndivType());
- intermediary.setPersonSubType(excel.getIndivSubType());
- intermediary.setGender(excel.getIndivGender());
- intermediary.setIdType(StringUtils.isNotEmpty(excel.getIndivCertType()) ? excel.getIndivCertType() : "身份证");
- intermediary.setMobile(excel.getIndivPhone());
- intermediary.setWechatNo(excel.getIndivWechat());
- intermediary.setContactAddress(excel.getIndivAddress());
- intermediary.setCompany(excel.getIndivCompany());
- intermediary.setPosition(excel.getIndivPosition());
- intermediary.setRelatedNumId(excel.getIndivRelatedId());
- intermediary.setRelationType(excel.getIndivRelation());
- intermediary.setDateSource("IMPORT");
- intermediary.setRemark(excel.getRemark());
-
- // 检查是否需要更新
- if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCertificateNo()) && certNoToIdMap.containsKey(excel.getCertificateNo())) {
- intermediary.setBizId(certNoToIdMap.get(excel.getCertificateNo()));
- toUpdateList.add(intermediary);
- } else {
- toInsertList.add(intermediary);
- }
- } catch (Exception e) {
- errorMessages.add("第" + (i + 1) + "行导入失败:" + e.getMessage());
- }
- }
-
- // 批量执行数据库操作
- int successNum = 0;
- int failureNum = errorMessages.size();
-
- for (CcdiBizIntermediary intermediary : toInsertList) {
- bizIntermediaryMapper.insert(intermediary);
- successNum++;
- }
-
- for (CcdiBizIntermediary intermediary : toUpdateList) {
- bizIntermediaryMapper.updateById(intermediary);
- successNum++;
- }
-
- // 构建失败消息
- StringBuilder failureMsg = new StringBuilder();
- for (String error : errorMessages) {
- failureMsg.append("
").append(error);
- }
-
- // 返回结果
- if (failureNum > 0) {
- failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
- throw new RuntimeException(failureMsg.toString());
- } else {
- return "恭喜您,数据已全部导入成功!共 " + successNum + " 条";
- }
- }
-
- /**
- * 导入机构中介数据
- *
- * @param excelList Excel实体列表
- * @param isUpdateSupport 是否更新支持
- * @return 结果
- */
- @Override
- public String importEntityIntermediary(List excelList, Boolean isUpdateSupport) {
- if (excelList == null || excelList.isEmpty()) {
- return "至少需要一条数据";
- }
-
- List toInsertList = new ArrayList<>();
- List toUpdateList = new ArrayList<>();
- List errorMessages = new ArrayList<>();
-
- // 批量查询已存在的记录
- Set existingCreditCodes = new HashSet<>();
- for (CcdiIntermediaryEntityExcel excel : excelList) {
- if (StringUtils.isNotEmpty(excel.getCorpCreditCode())) {
- existingCreditCodes.add(excel.getCorpCreditCode());
- }
- }
-
- // 唯一性校验
- if (!isUpdateSupport) {
- for (CcdiIntermediaryEntityExcel excel : excelList) {
- if (StringUtils.isNotEmpty(excel.getCorpCreditCode())) {
- CcdiEnterpriseBaseInfo existing = enterpriseBaseInfoMapper.selectById(excel.getCorpCreditCode());
- if (existing != null) {
- throw new RuntimeException("统一社会信用代码 " + excel.getCorpCreditCode() + " 已存在,请勿重复导入");
- }
- }
- }
- }
-
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
- // 处理每条数据
- for (int i = 0; i < excelList.size(); i++) {
- CcdiIntermediaryEntityExcel excel = excelList.get(i);
- try {
- // 验证数据
- if (StringUtils.isEmpty(excel.getName())) {
- throw new RuntimeException("机构名称不能为空");
- }
- if (StringUtils.isEmpty(excel.getCorpCreditCode())) {
- throw new RuntimeException("统一社会信用代码不能为空");
- }
-
- // 转换为实体
- CcdiEnterpriseBaseInfo enterprise = new CcdiEnterpriseBaseInfo();
- enterprise.setSocialCreditCode(excel.getCorpCreditCode());
- enterprise.setEnterpriseName(excel.getName());
- enterprise.setEnterpriseType(excel.getCorpType());
- enterprise.setEnterpriseNature(excel.getCorpNature());
- enterprise.setIndustryClass(excel.getCorpIndustryCategory());
- enterprise.setIndustryName(excel.getCorpIndustry());
-
- // 解析成立日期
- if (StringUtils.isNotEmpty(excel.getCorpEstablishDate())) {
- try {
- enterprise.setEstablishDate(sdf.parse(excel.getCorpEstablishDate()));
- } catch (Exception e) {
- // 忽略日期解析错误
- }
- }
-
- enterprise.setRegisterAddress(excel.getCorpAddress());
- enterprise.setLegalRepresentative(excel.getCorpLegalRep());
- enterprise.setLegalCertType(excel.getCorpLegalCertType());
- enterprise.setLegalCertNo(excel.getCorpLegalCertNo());
- enterprise.setShareholder1(excel.getCorpShareholder1());
- enterprise.setShareholder2(excel.getCorpShareholder2());
- enterprise.setShareholder3(excel.getCorpShareholder3());
- enterprise.setShareholder4(excel.getCorpShareholder4());
- enterprise.setShareholder5(excel.getCorpShareholder5());
-
- // 设置为高风险
- enterprise.setRiskLevel("1");
- // 设置来源为中介
- enterprise.setEntSource("INTERMEDIARY");
- enterprise.setDataSource("IMPORT");
- enterprise.setStatus("0");
- enterprise.setRemark(excel.getRemark());
-
- // 检查是否需要更新
- if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCorpCreditCode())) {
- toUpdateList.add(enterprise);
- } else {
- toInsertList.add(enterprise);
- }
- } catch (Exception e) {
- errorMessages.add("第" + (i + 1) + "行导入失败:" + e.getMessage());
- }
- }
-
- // 批量执行数据库操作
- int successNum = 0;
- int failureNum = errorMessages.size();
-
- for (CcdiEnterpriseBaseInfo enterprise : toInsertList) {
- enterpriseBaseInfoMapper.insert(enterprise);
- successNum++;
- }
-
- for (CcdiEnterpriseBaseInfo enterprise : toUpdateList) {
- enterpriseBaseInfoMapper.updateById(enterprise);
- successNum++;
- }
-
- // 构建失败消息
- StringBuilder failureMsg = new StringBuilder();
- for (String error : errorMessages) {
- failureMsg.append("
").append(error);
- }
-
- // 返回结果
- if (failureNum > 0) {
- failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
- throw new RuntimeException(failureMsg.toString());
- } else {
- return "恭喜您,数据已全部导入成功!共 " + successNum + " 条";
- }
- }
-
- // ==================== 私有辅助方法 ====================
-
- /**
- * 构建个人中介查询条件
- */
- private LambdaQueryWrapper buildPersonQueryWrapper(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.like(StringUtils.isNotEmpty(queryDTO.getName()), CcdiBizIntermediary::getName, queryDTO.getName())
- .like(StringUtils.isNotEmpty(queryDTO.getCertificateNo()), CcdiBizIntermediary::getPersonId, queryDTO.getCertificateNo())
- .orderByDesc(CcdiBizIntermediary::getCreateTime);
- return wrapper;
- }
-
- /**
- * 构建机构中介查询条件
- */
- private LambdaQueryWrapper buildEntityQueryWrapper(CcdiIntermediaryBlacklistQueryDTO queryDTO) {
- LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
- wrapper.like(StringUtils.isNotEmpty(queryDTO.getName()), CcdiEnterpriseBaseInfo::getEnterpriseName, queryDTO.getName())
- .like(StringUtils.isNotEmpty(queryDTO.getCertificateNo()), CcdiEnterpriseBaseInfo::getSocialCreditCode, queryDTO.getCertificateNo())
- .eq(CcdiEnterpriseBaseInfo::getEntSource, "INTERMEDIARY")
- .orderByDesc(CcdiEnterpriseBaseInfo::getCreateTime);
- return wrapper;
- }
-
- /**
- * 转换个人中介为VO
- */
- private CcdiIntermediaryBlacklistVO convertPersonToVO(CcdiBizIntermediary person) {
- if (person == null) {
- return null;
- }
- CcdiIntermediaryBlacklistVO vo = new CcdiIntermediaryBlacklistVO();
- vo.setIntermediaryId(person.getBizId());
- vo.setName(person.getName());
- vo.setCertificateNo(person.getPersonId());
- vo.setIntermediaryType("1");
- vo.setStatus("0");
- vo.setDataSource(person.getDateSource());
- vo.setCreateTime(person.getCreateTime());
- vo.setUpdateTime(person.getUpdateTime());
- return vo;
- }
-
- /**
- * 转换机构中介为VO
- */
- private CcdiIntermediaryBlacklistVO convertEntityToVO(CcdiEnterpriseBaseInfo entity) {
- if (entity == null) {
- return null;
- }
- CcdiIntermediaryBlacklistVO vo = new CcdiIntermediaryBlacklistVO();
- // 社会信用代码转为数字ID(仅用于显示)
- vo.setIntermediaryId(0L);
- vo.setName(entity.getEnterpriseName());
- vo.setCertificateNo(entity.getSocialCreditCode());
- vo.setIntermediaryType("2");
- vo.setStatus(entity.getStatus());
- vo.setDataSource(entity.getDataSource());
- vo.setCreateTime(entity.getCreateTime());
- vo.setUpdateTime(entity.getUpdateTime());
- return vo;
- }
-
- /**
- * 转换个人中介为详情VO
- */
- private CcdiIntermediaryPersonDetailVO convertPersonToDetailVO(CcdiBizIntermediary person) {
- if (person == null) {
- return null;
- }
- CcdiIntermediaryPersonDetailVO vo = new CcdiIntermediaryPersonDetailVO();
- vo.setIntermediaryId(person.getBizId());
- vo.setName(person.getName());
- vo.setCertificateNo(person.getPersonId());
- vo.setIntermediaryType("1");
- vo.setStatus("0");
- vo.setRemark(person.getRemark());
- vo.setDataSource(person.getDateSource());
- vo.setCreateBy(person.getCreatedBy());
- vo.setCreateTime(person.getCreateTime());
- vo.setUpdateBy(person.getUpdatedBy());
- vo.setUpdateTime(person.getUpdateTime());
-
- vo.setIndivType(person.getPersonType());
- vo.setIndivSubType(person.getPersonSubType());
- vo.setIndivGender(person.getGender());
- vo.setIndivCertType(person.getIdType());
- vo.setIndivPhone(person.getMobile());
- vo.setIndivWechat(person.getWechatNo());
- vo.setIndivAddress(person.getContactAddress());
- vo.setIndivCompany(person.getCompany());
- vo.setIndivPosition(person.getPosition());
- vo.setIndivRelatedId(person.getRelatedNumId());
- vo.setIndivRelation(person.getRelationType());
-
- return vo;
- }
-
- /**
- * 转换个人中介为Excel
- */
- private void convertPersonToExcel(CcdiBizIntermediary person, CcdiIntermediaryBlacklistExcel excel) {
- excel.setName(person.getName());
- excel.setCertificateNo(person.getPersonId());
- excel.setIntermediaryType("1");
- excel.setStatus("0");
- excel.setRemark(person.getRemark());
- excel.setDataSource(person.getDateSource());
-
- excel.setIndivType(person.getPersonType());
- excel.setIndivSubType(person.getPersonSubType());
- excel.setIndivGender(person.getGender());
- excel.setIndivCertType(person.getIdType());
- excel.setIndivPhone(person.getMobile());
- excel.setIndivWechat(person.getWechatNo());
- excel.setIndivAddress(person.getContactAddress());
- excel.setIndivCompany(person.getCompany());
- excel.setIndivPosition(person.getPosition());
- excel.setIndivRelatedId(person.getRelatedNumId());
- excel.setIndivRelation(person.getRelationType());
- }
-
- /**
- * 转换机构中介为Excel
- */
- private void convertEntityToExcel(CcdiEnterpriseBaseInfo entity, CcdiIntermediaryBlacklistExcel excel) {
- excel.setName(entity.getEnterpriseName());
- excel.setCertificateNo(entity.getSocialCreditCode());
- excel.setIntermediaryType("2");
- excel.setStatus(entity.getStatus());
- excel.setRemark(entity.getRemark());
- excel.setDataSource(entity.getDataSource());
-
- excel.setCorpCreditCode(entity.getSocialCreditCode());
- excel.setCorpType(entity.getEnterpriseType());
- excel.setCorpNature(entity.getEnterpriseNature());
- excel.setCorpIndustryCategory(entity.getIndustryClass());
- excel.setCorpIndustry(entity.getIndustryName());
- excel.setCorpEstablishDate(entity.getEstablishDate());
- excel.setCorpAddress(entity.getRegisterAddress());
- excel.setCorpLegalRep(entity.getLegalRepresentative());
- excel.setCorpLegalCertType(entity.getLegalCertType());
- excel.setCorpLegalCertNo(entity.getLegalCertNo());
- excel.setCorpShareholder1(entity.getShareholder1());
- excel.setCorpShareholder2(entity.getShareholder2());
- excel.setCorpShareholder3(entity.getShareholder3());
- excel.setCorpShareholder4(entity.getShareholder4());
- excel.setCorpShareholder5(entity.getShareholder5());
- }
-}
diff --git a/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryBlacklistMapper.xml b/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryBlacklistMapper.xml
deleted file mode 100644
index 598a546..0000000
--- a/ruoyi-ccdi/src/main/resources/mapper/ccdi/CcdiIntermediaryBlacklistMapper.xml
+++ /dev/null
@@ -1,192 +0,0 @@
-
-
-
-
-
-
- INSERT INTO ccdi_intermediary_blacklist (
- name,
- certificate_no,
- intermediary_type,
- status,
- remark,
- indiv_type,
- indiv_sub_type,
- indiv_gender,
- indiv_cert_type,
- indiv_phone,
- indiv_wechat,
- indiv_address,
- indiv_company,
- indiv_position,
- indiv_related_id,
- indiv_relation,
- corp_credit_code,
- corp_type,
- corp_nature,
- corp_industry_category,
- corp_industry,
- corp_establish_date,
- corp_address,
- corp_legal_rep,
- corp_legal_cert_type,
- corp_legal_cert_no,
- corp_shareholder_1,
- corp_shareholder_2,
- corp_shareholder_3,
- corp_shareholder_4,
- corp_shareholder_5,
- data_source,
- create_by,
- create_time,
- update_by,
- update_time
- ) VALUES
-
- (
- #{item.name},
- #{item.certificateNo},
- #{item.intermediaryType},
- #{item.status},
- #{item.remark},
- #{item.indivType},
- #{item.indivSubType},
- #{item.indivGender},
- #{item.indivCertType},
- #{item.indivPhone},
- #{item.indivWechat},
- #{item.indivAddress},
- #{item.indivCompany},
- #{item.indivPosition},
- #{item.indivRelatedId},
- #{item.indivRelation},
- #{item.corpCreditCode},
- #{item.corpType},
- #{item.corpNature},
- #{item.corpIndustryCategory},
- #{item.corpIndustry},
- #{item.corpEstablishDate},
- #{item.corpAddress},
- #{item.corpLegalRep},
- #{item.corpLegalCertType},
- #{item.corpLegalCertNo},
- #{item.corpShareholder1},
- #{item.corpShareholder2},
- #{item.corpShareholder3},
- #{item.corpShareholder4},
- #{item.corpShareholder5},
- #{item.dataSource},
- #{item.createBy},
- #{item.createTime},
- #{item.updateBy},
- #{item.updateTime}
- )
-
-
-
-
-
-
- UPDATE ccdi_intermediary_blacklist
-
- name = #{item.name},
- certificate_no = #{item.certificateNo},
- intermediary_type = #{item.intermediaryType},
- status = #{item.status},
- remark = #{item.remark},
- indiv_type = #{item.indivType},
- indiv_sub_type = #{item.indivSubType},
- indiv_gender = #{item.indivGender},
- indiv_cert_type = #{item.indivCertType},
- indiv_phone = #{item.indivPhone},
- indiv_wechat = #{item.indivWechat},
- indiv_address = #{item.indivAddress},
- indiv_company = #{item.indivCompany},
- indiv_position = #{item.indivPosition},
- indiv_related_id = #{item.indivRelatedId},
- indiv_relation = #{item.indivRelation},
- corp_credit_code = #{item.corpCreditCode},
- corp_type = #{item.corpType},
- corp_nature = #{item.corpNature},
- corp_industry_category = #{item.corpIndustryCategory},
- corp_industry = #{item.corpIndustry},
- corp_establish_date = #{item.corpEstablishDate},
- corp_address = #{item.corpAddress},
- corp_legal_rep = #{item.corpLegalRep},
- corp_legal_cert_type = #{item.corpLegalCertType},
- corp_legal_cert_no = #{item.corpLegalCertNo},
- corp_shareholder_1 = #{item.corpShareholder1},
- corp_shareholder_2 = #{item.corpShareholder2},
- corp_shareholder_3 = #{item.corpShareholder3},
- corp_shareholder_4 = #{item.corpShareholder4},
- corp_shareholder_5 = #{item.corpShareholder5},
- data_source = #{item.dataSource},
- certificate_no = #{item.certificateNo},
- update_by = #{item.updateBy},
- update_time = #{item.updateTime}
-
- WHERE intermediary_id = #{item.intermediaryId}
-
-
-
-
-
-
-