# 中介黑名单导入功能修复说明 ## 问题描述 在导入机构中介黑名单数据时,出现以下错误: ``` Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: Column 'certificate_no' cannot be null ``` ## 问题原因 1. **数据库约束**:`ccdi_intermediary_blacklist` 表的 `certificate_no` 字段设置为 `NOT NULL`,不允许存储 null 值。 2. **代码缺陷**:在 `CcdiIntermediaryBlacklistServiceImpl.java` 的 `importEntityIntermediary` 方法中,导入机构中介时只设置了 `corpCreditCode`(统一社会信用代码),但没有设置 `certificateNo` 字段,导致该字段为 null。 3. **批量插入失败**:`batchInsert` 方法明确插入 `certificate_no` 字段,当值为 null 时违反数据库约束。 ## 解决方案 ### 1. 代码修改 **文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) **修改位置**:第 390-394 行 **修改前**: ```java // 转换为实体 CcdiIntermediaryBlacklist intermediary = new CcdiIntermediaryBlacklist(); intermediary.setName(excel.getName()); intermediary.setIntermediaryType("2"); ``` **修改后**: ```java // 转换为实体 CcdiIntermediaryBlacklist intermediary = new CcdiIntermediaryBlacklist(); intermediary.setName(excel.getName()); // 对于机构中介,使用统一社会信用代码作为证件号 intermediary.setCertificateNo(excel.getCorpCreditCode()); intermediary.setIntermediaryType("2"); ``` ### 2. 验证逻辑增强 **文件**:[CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) **修改位置**:第 484-488 行 **修改前**: ```java private void validateEntityIntermediaryData(CcdiIntermediaryEntityExcel excel) { if (StringUtils.isEmpty(excel.getName())) { throw new RuntimeException("机构名称不能为空"); } } ``` **修改后**: ```java private void validateEntityIntermediaryData(CcdiIntermediaryEntityExcel excel) { if (StringUtils.isEmpty(excel.getName())) { throw new RuntimeException("机构名称不能为空"); } // 验证统一社会信用代码不能为空(因为会用作 certificate_no 字段) if (StringUtils.isEmpty(excel.getCorpCreditCode())) { throw new RuntimeException("统一社会信用代码不能为空"); } } ``` ### 3. 批量更新 XML 配置优化 **文件**:[CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml) **修改位置**:第 125-127 行 **修改前**: ```xml data_source = #{item.dataSource}, update_by = #{item.updateBy}, update_time = #{item.updateTime} ``` **修改后**: ```xml data_source = #{item.dataSource}, certificate_no = #{item.certificateNo}, update_by = #{item.updateBy}, update_time = #{item.updateTime} ``` ## 设计说明 ### 为什么使用统一社会信用代码作为证件号? 1. **数据一致性**:统一社会信用代码本身就是机构的法定证件号,将其同时存储在 `certificate_no` 字段中可以保持数据的一致性。 2. **查询便利**:`certificate_no` 字段有索引,设置后可以快速查询机构中介。 3. **兼容性好**:个人中介和机构中介都使用 `certificate_no` 字段,查询逻辑更统一。 4. **不破坏现有结构**:不需要修改数据库表结构,只修改代码逻辑。 ## 测试验证 ### 测试用例 1. **个人中介导入**:正常导入个人中介数据,验证 `certificate_no` 字段正确存储身份证号。 2. **机构中介导入**:导入机构中介数据,验证 `certificate_no` 字段正确存储统一社会信用代码。 3. **统一社会信用代码为空**:验证当统一社会信用代码为空时,导入被正确拒绝并给出错误提示。 4. **批量更新**:验证批量更新时 `certificate_no` 字段能够正确更新。 ### 测试脚本 测试脚本位于:[doc/test-data/test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) 运行测试: ```bash python doc/test-data/test_import_fix.py ``` ## 影响范围 ### 已影响的功能 - 机构中介批量导入功能 ### 不影响的功能 - 个人中介导入功能 - 手动新增中介功能 - 中介查询功能 - 中介导出功能 ## 注意事项 1. **数据迁移**:如果数据库中已存在机构中介数据且 `certificate_no` 为 null,需要执行以下 SQL 进行数据修复: ```sql UPDATE ccdi_intermediary_blacklist SET certificate_no = corp_credit_code WHERE intermediary_type = '2' AND certificate_no IS NULL AND corp_credit_code IS NOT NULL; ``` 2. **Excel 模板**:确保导入模板中统一社会信用代码字段设置为必填项。 3. **前端验证**:建议在前端表单中也添加统一社会信用代码的必填验证。 ## 修改文件列表 1. [CcdiIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\java\com\ruoyi\dpc\service\impl\CcdiIntermediaryBlacklistServiceImpl.java) - 服务层实现 2. [CcdiIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-ccdi\src\main\resources\mapper\dpc\CcdiIntermediaryBlacklistMapper.xml) - MyBatis 映射文件 3. [test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) - 测试脚本 ## 版本历史 | 版本 | 日期 | 作者 | 说明 | |------|------|------|------| | 1.0 | 2026-01-29 | ruoyi | 初始版本,修复机构中介导入时 certificate_no 为 null 的问题 |