xinli/用户导入重复问题说明.md
2025-12-02 15:12:55 +08:00

3.6 KiB
Raw Blame History

用户导入"信息编号已存在"问题说明

📋 问题描述

导入 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 脚本,查看:

  1. 这些信息编号在数据库中是否真的存在
  2. 数据库中是否有其他重复的信息编号
  3. 最近导入的记录情况

方法 2检查 Excel 文件

在 Excel 中使用以下步骤检查重复:

  1. 选中信息编号列
  2. 点击"条件格式" → "突出显示单元格规则" → "重复值"
  3. Excel 会自动标记重复的信息编号

方法 3使用 Excel 公式查找重复

在新列输入公式:

=COUNTIF($A$2:$A$3801, A2)

如果结果 > 1说明该信息编号重复出现。

📝 建议

给用户的建议

  1. 导入前清理 Excel

    • 检查并删除重复的信息编号
    • 或修改重复的信息编号,确保唯一性
  2. 如果需要更新已存在数据

    • 导入时勾选"是否更新已存在数据"选项
    • 系统会自动更新而不是提示失败
  3. 使用 SQL 脚本检查

    • 导入前运行 检查重复信息编号.sql
    • 确认哪些信息编号已在数据库中存在

下次导入优化建议

  1. 已添加 Excel 内部重复检查
  2. 已改进错误提示信息
  3. 🔄 建议:添加导入预检查功能,在实际导入前先检查并报告所有问题
  4. 🔄 建议:提供"忽略重复"选项,跳过重复记录继续导入其他数据

🚀 部署说明

修改已完成,需要重新编译后端:

cd c:\Users\Administrator\Desktop\Project\xinli
mvn clean package -DskipTests

重启后端服务后,新的检查逻辑即可生效。

📊 问题总结

问题类型 新错误提示 解决方法
Excel 内部重复 信息编号 XX 在导入文件中重复出现 清理 Excel 中的重复记录
数据库已存在 信息编号 XX 在数据库中已存在(若需更新请勾选"是否更新已存在数据" 勾选更新选项,或修改信息编号