3.6 KiB
3.6 KiB
用户导入"信息编号已存在"问题说明
📋 问题描述
导入 3800 条用户数据时,有 11 条失败,提示"信息编号 XX 已存在":
- 信息编号:34, 99, 114, 120, 121, 122, 123, 124 等
🔍 问题原因
经过代码分析,"信息编号已存在"有两种可能:
1. Excel 文件内部重复 ⭐ 最可能
- Excel 文件中有多条记录使用了相同的信息编号
- 第一条记录导入成功
- 第二条相同信息编号的记录尝试导入时,发现数据库中已存在(刚刚导入的那条),导致失败
示例:
Excel 中:
行100: 信息编号=34, 姓名=张三
行500: 信息编号=34, 姓名=李四 ← 这条会失败,提示"34 已存在"
2. 数据库中已存在
- 这些信息编号在之前的导入中已经创建过
- 本次导入时没有勾选"是否更新已存在数据",导致失败
✅ 已修复内容
1. 添加 Excel 内部重复检查
现在导入时会先检查 Excel 文件内部是否有重复的信息编号,提前拦截并给出明确提示。
修改位置: PsyUserProfileServiceImpl.java 第 529-536 行
// 检查Excel文件内部是否有重复的信息编号
if (infoNumberSet.contains(profile.getInfoNumber())) {
failureMsg.append("、信息编号 ").append(profile.getInfoNumber())
.append(" 在导入文件中重复出现");
continue;
}
2. 改进错误提示
现在错误提示更清晰,能区分两种情况:
- Excel 内部重复:
信息编号 XX 在导入文件中重复出现 - 数据库中已存在:
信息编号 XX 在数据库中已存在(若需更新请勾选"是否更新已存在数据")
🔧 排查方法
方法 1:运行 SQL 脚本检查
执行 检查重复信息编号.sql 脚本,查看:
- 这些信息编号在数据库中是否真的存在
- 数据库中是否有其他重复的信息编号
- 最近导入的记录情况
方法 2:检查 Excel 文件
在 Excel 中使用以下步骤检查重复:
- 选中信息编号列
- 点击"条件格式" → "突出显示单元格规则" → "重复值"
- Excel 会自动标记重复的信息编号
方法 3:使用 Excel 公式查找重复
在新列输入公式:
=COUNTIF($A$2:$A$3801, A2)
如果结果 > 1,说明该信息编号重复出现。
📝 建议
给用户的建议
-
导入前清理 Excel:
- 检查并删除重复的信息编号
- 或修改重复的信息编号,确保唯一性
-
如果需要更新已存在数据:
- 导入时勾选"是否更新已存在数据"选项
- 系统会自动更新而不是提示失败
-
使用 SQL 脚本检查:
- 导入前运行
检查重复信息编号.sql - 确认哪些信息编号已在数据库中存在
- 导入前运行
下次导入优化建议
- ✅ 已添加 Excel 内部重复检查
- ✅ 已改进错误提示信息
- 🔄 建议:添加导入预检查功能,在实际导入前先检查并报告所有问题
- 🔄 建议:提供"忽略重复"选项,跳过重复记录继续导入其他数据
🚀 部署说明
修改已完成,需要重新编译后端:
cd c:\Users\Administrator\Desktop\Project\xinli
mvn clean package -DskipTests
重启后端服务后,新的检查逻辑即可生效。
📊 问题总结
| 问题类型 | 新错误提示 | 解决方法 |
|---|---|---|
| Excel 内部重复 | 信息编号 XX 在导入文件中重复出现 |
清理 Excel 中的重复记录 |
| 数据库已存在 | 信息编号 XX 在数据库中已存在(若需更新请勾选"是否更新已存在数据") |
勾选更新选项,或修改信息编号 |