7.8 KiB
7.8 KiB
✅ 出国申请附件下载问题 - 已完全修复
📋 修复内容总结
🐛 原始问题
新增出国申请时上传盖章文件后,提示"文件OSS ID不存在",无法下载。
⚠️ 第一次修复后的新问题
修复后上传文件时提示:
- ❌ "登记备案责任单位联系人不能为空"
- ❌ "保存申请记录失败,请先手动保存"
✅ 最终修复方案
已在上传文件前添加完整的字段映射逻辑,包括:
- 日期格式转换 - startDate、endDate、birthDate等
- 目的国家映射 - destinationCountry → destination
- 身份证号处理 - documentNumber → idNumber
- 户籍所在地 - 使用部门名称填充
- 行程安排 - 自动生成默认内容
- 出国天数 - 默认最少1天
- 人员类别代码 - 根据政治面貌判断
- 🔴 登记备案责任单位联系人 - 使用申请人姓名(最关键!)
- 预算字段 - 设置默认值0
🚀 操作步骤(3步)
第1步:修复ID 39的数据库记录
执行以下SQL查询,找到对应的OSS文件:
SELECT oss_id, file_name, original_name,
DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS create_time
FROM sys_oss
WHERE DATE(create_time) >= CURDATE() - INTERVAL 2 DAY
AND (original_name LIKE '%pdf%' OR original_name LIKE '%jpg%')
ORDER BY create_time DESC LIMIT 20;
然后更新ID 39的记录(替换下面的oss_id值):
UPDATE rs_overseas_application
SET stamped_file_oss_id = [从上面查询到的oss_id]
WHERE application_id = 39 AND deleted = 0;
-- 验证更新结果
SELECT application_id, applicant_name, stamped_file_oss_id
FROM rs_overseas_application
WHERE application_id = 39;
第2步:重启后端
在IDEA中:
- 停止
ruoyi-admin(点击 ⏹️) - 启动
ruoyi-admin(点击 ▶️) - 等待启动完成(看到"Started RuoYiApplication"日志)
第3步:刷新前端
在浏览器中:
- Mac:
Cmd + Shift + R - Windows:
Ctrl + F5
🧪 测试验证
✅ 测试1:修复已有记录(ID 39)
- 进入"出国申请管理" → "我的申请"
- 找到ID 39的记录
- 点击"查看详情"
- 点击下载盖章文件
- 预期结果:文件正常下载 ✅
✅ 测试2:新增申请并上传(完整流程)
步骤1:新增申请
进入"出国申请管理" → "出国申请"标签页 → 点击"新增"
步骤2:填写必填字段
填写以下最少字段即可测试:
| 字段 | 填写示例 |
|---|---|
| 政治面貌 | 中共党员(或其他) |
| 出国开始日期 | 选择任意未来日期 |
| 出国结束日期 | 选择任意未来日期 |
| 应急联系人及电话 | 张三 13800138000 |
| 目的地国家 | 美国 |
💡 提示:其他字段可以留空,系统会自动填充默认值
步骤3:上传盖章文件
- 不要先点"确定"按钮,直接点击"上传盖章文件"
- 选择文件(支持PDF、JPG、PNG格式)
- 观察系统提示:
- ℹ️ "正在保存申请记录..."
- ✅ "申请记录已保存,现在可以上传盖章文件了"
- ✅ "盖章文件上传成功!"
步骤4:提交申请
点击"确定"按钮完成提交
步骤5:验证下载
- 进入"我的申请"标签页
- 找到刚才新增的记录
- 点击"查看详情"
- 点击下载盖章文件
- 预期结果:文件正常下载 ✅
🔍 数据库验证
执行以下SQL检查新增的记录:
SELECT
application_id,
applicant_name,
destination,
stamped_file_oss_id,
unit_contact,
CASE
WHEN stamped_file_oss_id IS NOT NULL THEN '✅ 有附件'
ELSE '❌ 无附件'
END AS attachment_status,
DATE_FORMAT(create_time, '%Y-%m-%d %H:%i:%s') AS create_time
FROM rs_overseas_application
WHERE deleted = 0
ORDER BY application_id DESC
LIMIT 5;
预期结果:
stamped_file_oss_id字段不为NULL ✅unit_contact字段有值(申请人姓名)✅
🐛 问题排查
问题1:上传时提示"登记备案责任单位联系人不能为空"
原因:前端代码未更新
解决:
- 确认已刷新页面(
Cmd+Shift+R) - 清除浏览器缓存
- 重新登录系统
问题2:上传时没有提示"正在保存申请记录..."
原因:浏览器缓存了旧代码
解决:
- 按
F12打开开发者工具 - 右键点击浏览器刷新按钮
- 选择"清空缓存并硬性重新加载"
- 或者使用无痕模式测试
问题3:后端返回404或500错误
原因:后端未更新或启动失败
解决:
- 查看IDEA控制台日志
- 确认后端已成功启动
- 检查是否有编译错误
- 重新编译并启动
问题4:OSS_ID仍然为NULL
原因:上传接口调用失败
解决:
- 按
F12打开开发者工具 - 切换到
Network标签 - 重新上传文件
- 查看
uploadStampedFile请求:- 检查请求参数中的
applicationId是否有值 - 检查响应状态码是否为200
- 查看响应内容是否有错误信息
- 检查请求参数中的
📊 代码修改说明
后端修改(1处)
文件:RsOverseasApplicationController.java
// 修改add方法返回类型,返回新创建的applicationId
public R<Map<String, Object>> add(...) {
boolean result = applicationService.insertByBo(bo);
if (result) {
Map<String, Object> data = new HashMap<>();
data.put("applicationId", bo.getApplicationId());
return R.ok("操作成功", data);
}
return R.fail("新增失败");
}
前端修改(3处)
文件:web/src/views/rs/overseas/index.vue
- 导入dayjs(第1217行)
import dayjs from 'dayjs';
-
修改
beforeStampedFileUpload函数(第2600-2708行)- 添加完整的字段映射逻辑
- 包括日期转换、必填字段填充等
- 最重要:处理
unitContact字段
-
修改
beforePartyRetentionFileUpload函数(第2921-3029行)- 同样的字段映射逻辑
- 确保党籍保留附件上传时也能正常保存
🎯 核心修复点
问题根源
// ❌ 错误:直接调用API,缺少必填字段
const response = await addOverseasApplication(state.applicationForm);
修复方案
// ✅ 正确:上传前先进行字段映射
// 1. 日期格式转换
if (state.applicationForm.startDate) {
state.applicationForm.startDate = dayjs(state.applicationForm.startDate).format('YYYY-MM-DD');
}
// 2. 目的国家映射
if (state.applicationForm.destinationCountry) {
state.applicationForm.destination = state.applicationForm.destinationCountry;
}
// 3. 🔴 最关键:填充后端必填字段
if (!state.applicationForm.unitContact) {
state.applicationForm.unitContact = state.applicationForm.applicantName;
}
// 4. 其他必填字段处理...
// 5. 然后再调用API
const response = await addOverseasApplication(state.applicationForm);
📝 相关文档
- 问题分析:
出国申请附件下载问题分析与修复方案.md - 数据库脚本:
修复ID39的OSS_ID.sql - 快速指南:
README-修复说明.md
✅ 修复验证清单
- 后端代码已修改(返回applicationId)
- 前端代码已修改(字段映射)
- 导入dayjs库
- 盖章文件上传修复
- 党籍保留附件上传修复
- 待执行:修复ID 39的数据库
- 待执行:重启后端服务
- 待执行:刷新前端页面
- 待测试:ID 39文件下载
- 待测试:新增申请文件上传下载
修复时间:2025-10-11
优先级:🔴 高
状态:✅ 代码修复完成 → 🧪 待测试验证
现在请按照上面的3个步骤操作,然后进行测试验证! 🚀