108 lines
3.6 KiB
Markdown
108 lines
3.6 KiB
Markdown
# 用户导入"信息编号已存在"问题说明
|
||
|
||
## 📋 问题描述
|
||
|
||
导入 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 行
|
||
|
||
```java
|
||
// 检查Excel文件内部是否有重复的信息编号
|
||
if (infoNumberSet.contains(profile.getInfoNumber())) {
|
||
failureMsg.append("、信息编号 ").append(profile.getInfoNumber())
|
||
.append(" 在导入文件中重复出现");
|
||
continue;
|
||
}
|
||
```
|
||
|
||
### 2. 改进错误提示
|
||
现在错误提示更清晰,能区分两种情况:
|
||
- **Excel 内部重复**:`信息编号 XX 在导入文件中重复出现`
|
||
- **数据库中已存在**:`信息编号 XX 在数据库中已存在(若需更新请勾选"是否更新已存在数据")`
|
||
|
||
## 🔧 排查方法
|
||
|
||
### 方法 1:运行 SQL 脚本检查
|
||
执行 `检查重复信息编号.sql` 脚本,查看:
|
||
1. 这些信息编号在数据库中是否真的存在
|
||
2. 数据库中是否有其他重复的信息编号
|
||
3. 最近导入的记录情况
|
||
|
||
### 方法 2:检查 Excel 文件
|
||
在 Excel 中使用以下步骤检查重复:
|
||
1. 选中信息编号列
|
||
2. 点击"条件格式" → "突出显示单元格规则" → "重复值"
|
||
3. Excel 会自动标记重复的信息编号
|
||
|
||
### 方法 3:使用 Excel 公式查找重复
|
||
在新列输入公式:
|
||
```excel
|
||
=COUNTIF($A$2:$A$3801, A2)
|
||
```
|
||
如果结果 > 1,说明该信息编号重复出现。
|
||
|
||
## 📝 建议
|
||
|
||
### 给用户的建议
|
||
1. **导入前清理 Excel**:
|
||
- 检查并删除重复的信息编号
|
||
- 或修改重复的信息编号,确保唯一性
|
||
|
||
2. **如果需要更新已存在数据**:
|
||
- 导入时勾选"是否更新已存在数据"选项
|
||
- 系统会自动更新而不是提示失败
|
||
|
||
3. **使用 SQL 脚本检查**:
|
||
- 导入前运行 `检查重复信息编号.sql`
|
||
- 确认哪些信息编号已在数据库中存在
|
||
|
||
### 下次导入优化建议
|
||
1. ✅ 已添加 Excel 内部重复检查
|
||
2. ✅ 已改进错误提示信息
|
||
3. 🔄 建议:添加导入预检查功能,在实际导入前先检查并报告所有问题
|
||
4. 🔄 建议:提供"忽略重复"选项,跳过重复记录继续导入其他数据
|
||
|
||
## 🚀 部署说明
|
||
|
||
修改已完成,需要重新编译后端:
|
||
|
||
```bash
|
||
cd c:\Users\Administrator\Desktop\Project\xinli
|
||
mvn clean package -DskipTests
|
||
```
|
||
|
||
重启后端服务后,新的检查逻辑即可生效。
|
||
|
||
## 📊 问题总结
|
||
|
||
| 问题类型 | 新错误提示 | 解决方法 |
|
||
|---------|-----------|---------|
|
||
| Excel 内部重复 | `信息编号 XX 在导入文件中重复出现` | 清理 Excel 中的重复记录 |
|
||
| 数据库已存在 | `信息编号 XX 在数据库中已存在(若需更新请勾选"是否更新已存在数据")` | 勾选更新选项,或修改信息编号 |
|