Files
hzdyjs/【紧急修复】出国申请OSS_ID数据库问题.md
T
2025-10-14 16:41:19 +08:00

9.2 KiB
Raw Blame History

【紧急修复】出国申请OSS ID数据库问题

🔴 问题确认

现象:重启后端后,仍然提示"文件OSS ID不存在,无法下载"

根本原因:

数据库中的 stamped_file_oss_id 和 party_retention_file_oss_id 字段本身就是NULL!

🔍 问题诊断

已完成的修复(正确)

修复项 状态 说明
后端VO字段 ✅ RsOverseasApplicationVo.java
Mapper XML ✅ RsOverseasApplicationMapper.xml
前端接口 ✅ overseas.ts
前端下载功能 ✅ index.vue
调试日志 ✅ 输出OSS ID字段

新发现的问题

❌ 数据库中OSS ID字段为NULL

可能原因:

  1. 文件上传时没有保存OSS ID - 上传接口没有正确保存OSS ID到数据库
  2. sys_oss表有记录,但rs_overseas_application表没有关联 - 上传成功但没有更新关联
  3. 文件根本没有上传到OSS系统 - 只保存了文件名,没有实际上传

🚀 立即执行的排查步骤

Step 1: 检查数据库当前状态

请在数据库中执行以下SQL(我已经创建了 检查并修复出国申请OSS_ID.sql 文件):

-- 检查出国申请表中的OSS ID状态
SELECT 
    application_id AS '申请ID',
    applicant_name AS '申请人',
    stamped_registration_file_name AS '盖章文件名',
    stamped_file_upload_status AS '上传状态',
    stamped_file_oss_id AS '盖章OSS_ID',
    party_retention_file_name AS '党籍文件名',
    party_retention_upload_status AS '党籍上传状态',
    party_retention_file_oss_id AS '党籍OSS_ID',
    CASE 
        WHEN stamped_file_upload_status = '1' AND stamped_file_oss_id IS NULL THEN '❌ 需要修复'
        WHEN stamped_file_upload_status = '1' AND stamped_file_oss_id IS NOT NULL THEN '✅ 正常'
        ELSE '未上传'
    END AS '盖章文件状态',
    CASE 
        WHEN party_retention_upload_status = '1' AND party_retention_file_oss_id IS NULL THEN '❌ 需要修复'
        WHEN party_retention_upload_status = '1' AND party_retention_file_oss_id IS NOT NULL THEN '✅ 正常'
        ELSE '未上传'
    END AS '党籍文件状态'
FROM rs_overseas_application
WHERE deleted = 0
ORDER BY create_time DESC
LIMIT 20;

期望结果分析:

情况 盖章OSS_ID 上传状态 诊断
✅ 正常 1933084077... 1 数据正常,前端应该能下载
❌ 问题1 NULL 1 已上传但OSS ID丢失 → 执行Step 2
❌ 问题2 NULL 0 未上传 → 需要重新上传

Step 2: 检查sys_oss表中是否有对应文件

-- 检查OSS文件表
SELECT 
    o.oss_id,
    o.file_name,
    o.original_name,
    o.file_suffix,
    o.url,
    o.create_time,
    o.create_by
FROM sys_oss o
WHERE o.file_name LIKE '%出国%' 
   OR o.file_name LIKE '%登记表%'
   OR o.file_name LIKE '%党籍%'
   OR o.original_name LIKE '%出国%'
   OR o.original_name LIKE '%登记表%'
   OR o.original_name LIKE '%党籍%'
ORDER BY o.create_time DESC
LIMIT 20;

期望结果分析:

情况 sys_oss记录 诊断 解决方案
✅ 有记录 找到匹配的文件 文件已上传,需要关联 执行Step 3修复SQL
❌ 无记录 没有找到文件 文件未上传或已删除 需要重新上传文件

Step 3: 修复OSS ID关联(如果Step 2找到了文件)

⚠️ 重要:只有在Step 2中确认sys_oss表有对应文件记录后,才执行这个SQL!

-- 修复盖章文件的OSS ID
UPDATE rs_overseas_application oa
SET oa.stamped_file_oss_id = (
    SELECT o.oss_id 
    FROM sys_oss o
    WHERE o.file_name = oa.stamped_registration_file_name
       OR o.original_name = oa.stamped_registration_file_name
    ORDER BY o.create_time DESC
    LIMIT 1
)
WHERE oa.stamped_file_upload_status = '1' 
  AND oa.stamped_file_oss_id IS NULL
  AND oa.deleted = 0;

-- 修复党籍保留文件的OSS ID
UPDATE rs_overseas_application oa
SET oa.party_retention_file_oss_id = (
    SELECT o.oss_id 
    FROM sys_oss o
    WHERE o.file_name = oa.party_retention_file_name
       OR o.original_name = oa.party_retention_file_name
    ORDER BY o.create_time DESC
    LIMIT 1
)
WHERE oa.party_retention_upload_status = '1' 
  AND oa.party_retention_file_oss_id IS NULL
  AND oa.deleted = 0;

Step 4: 验证修复结果

-- 验证修复后的状态
SELECT 
    application_id AS '申请ID',
    applicant_name AS '申请人',
    stamped_registration_file_name AS '盖章文件名',
    stamped_file_oss_id AS '盖章OSS_ID',
    party_retention_file_name AS '党籍文件名',
    party_retention_file_oss_id AS '党籍OSS_ID',
    CASE 
        WHEN stamped_file_upload_status = '1' AND stamped_file_oss_id IS NOT NULL THEN '✅'
        WHEN stamped_file_upload_status = '1' AND stamped_file_oss_id IS NULL THEN '❌'
        ELSE '-'
    END AS '盖章状态',
    CASE 
        WHEN party_retention_upload_status = '1' AND party_retention_file_oss_id IS NOT NULL THEN '✅'
        WHEN party_retention_upload_status = '1' AND party_retention_file_oss_id IS NULL THEN '❌'
        ELSE '-'
    END AS '党籍状态'
FROM rs_overseas_application
WHERE deleted = 0
  AND (stamped_file_upload_status = '1' OR party_retention_upload_status = '1')
ORDER BY create_time DESC;

期望结果:

  • ✅ 盖章状态:✅
  • ✅ 党籍状态:✅(如果是党员且已上传)

Step 5: 刷新浏览器并测试

如果Step 4验证成功:

  1. 硬刷新浏览器:Ctrl+Shift+R (Windows) 或 Cmd+Shift+R (Mac)
  2. 打开开发者工具:F12 → Console
  3. 查看详情:点击"查看详情"按钮
  4. 检查控制台:应该看到OSS ID有数字值

📊 控制台日志验证

修复前(当前状态)

🔍 [盖章文件] 检查盖章文件字段:
  - stampedFileUploadStatus: "1"
  - stampedRegistrationFileName: "出国登记表-盖章.pdf"
  - stampedFileOssId: null          ← ❌ 这里是null!
  - stampedFileUploadTime: "2025-10-11 11:47:03"

修复后(期望状态)

🔍 [盖章文件] 检查盖章文件字段:
  - stampedFileUploadStatus: "1"
  - stampedRegistrationFileName: "出国登记表-盖章.pdf"
  - stampedFileOssId: 1933084077469929470  ← ✅ 有数字了!
  - stampedFileUploadTime: "2025-10-11 11:47:03"

🔧 如果sys_oss表中没有文件记录

诊断:文件根本没有上传成功

可能原因:

  1. 上传接口有问题 - 文件没有保存到OSS
  2. 文件被删除了 - sys_oss记录已删除
  3. 上传状态误标记 - 实际没上传但标记为已上传

解决方案:重新上传文件

方式1:通过前端重新上传

  1. 编辑出国申请
  2. 重新上传盖章文件和党籍保留附件
  3. 保存申请

方式2:检查上传接口逻辑

需要检查以下代码:

  • 上传接口是否正确保存OSS ID
  • 是否有事务回滚导致OSS ID丢失
  • 上传成功后是否正确更新数据库

🎯 根本原因分析

问题链路

1. 文件上传 
   ↓
2. sys_oss表创建记录(oss_id自动生成)
   ↓
3. 【❌ 问题所在】上传接口没有保存oss_id到rs_overseas_application表
   ↓
4. stamped_file_oss_id字段为NULL
   ↓
5. 前端下载时提示"文件OSS ID不存在"

需要检查的上传接口

后端文件:

  • RsOverseasApplicationController.java - 上传接口
  • RsOverseasApplicationServiceImpl.java - 上传逻辑
  • 检查上传文件时是否正确保存了 stampedFileOssId 和 partyRetentionFileOssId

关键点:

// 上传文件后,需要保存OSS ID
if (ossFile != null) {
    application.setStampedFileOssId(ossFile.getOssId());  // ← 检查是否有这行
    application.setStampedFileUploadStatus("1");
    application.setStampedFileUploadTime(new Date());
}

📝 执行清单

请按以下顺序执行:

  • Step 1:执行第一个SQL,检查当前数据状态
  • Step 2:执行第二个SQL,检查sys_oss表
  • 判断:
    • 如果sys_oss有记录 → 执行Step 3修复SQL
    • 如果sys_oss无记录 → 需要重新上传文件或检查上传接口
  • Step 4:执行验证SQL,确认修复成功
  • Step 5:刷新浏览器并测试下载功能

💡 临时解决方案

如果现在需要立即让某个申请的下载功能工作:

-- 假设申请ID是123456,盖章文件的OSS ID是987654321
UPDATE rs_overseas_application
SET stamped_file_oss_id = 987654321
WHERE application_id = 123456;

⚠️ 注意:

  1. 需要先从sys_oss表中找到正确的oss_id
  2. 确保oss_id对应的是正确的文件
  3. 这只是临时修复,需要排查上传接口的问题

📞 反馈信息

请执行Step 1的SQL后,告诉我:

  1. 盖章OSS_ID列的值:是NULL还是有数字?
  2. 上传状态列的值:是"1"还是"0"?
  3. 盖章文件状态列的值:是"❌ 需要修复"还是"✅ 正常"?

根据这些信息,我可以给出更精确的修复方案。


诊断时间:2025-10-11
问题类型:数据库OSS ID字段为NULL
排查文件:检查并修复出国申请OSS_ID.sql
预计修复时间:5-10分钟(如果sys_oss有记录)