7.6 KiB
文件审批流程调试指南
问题现象
普通用户上传公共文件 → 管理员审批通过 → 文件仍显示在"个人文件"列表而非"制度文件"列表
调试步骤
步骤1:检查后端是否使用了最新代码
方法A:查看日志输出
在后端控制台(终端/命令行)查找以下日志:
上传时应出现:
文件上传成功: fileName=test.docx, userId=5, deptId=null, isPublic=0, category=rule, auditStatus=0, path=...
注意:category 应该是 rule(不是 personal)
审批通过时应出现:
审核通过,文件分类已从 personal 更新为 rule: fileId=123
或者如果没有触发(因为已经是 rule),则不会出现此日志
方法B:直接查看源码
打开文件并确认以下修改存在:
文件位置: demo/demo/demo/src/main/java/top/tqx/demo_1/service/impl/FileServiceImpl.java
检查点1 - 第235-243行(determineFileCategory方法):
private String determineFileCategory(Integer userType, Long targetDeptId, Boolean isPublic) {
if (targetDeptId != null) {
return "rule";
}
if (userType == 3 && Boolean.TRUE.equals(isPublic)) { // ← 这行必须存在
return "rule";
}
return "personal";
}
检查点2 - 第143行(调用处):
String fileCategory = determineFileCategory(userType, targetDeptId, isPublic); // ← 必须传入isPublic参数
fileEntity.setFileCategory(fileCategory);
检查点3 - 第595-598行(approveFile方法):
if ("personal".equals(file.getFileCategory())) {
file.setFileCategory("rule"); // ← 这段代码必须存在
log.info("审核通过,文件分类已从 personal 更新为 rule: fileId={}", fileId);
}
步骤2:重新编译部署后端
如果上述代码不存在或不确定,请执行:
# 1. 进入后端项目目录
cd demo/demo/demo
# 2. 清理并重新编译(跳过测试以加快速度)
mvn clean compile
# 或完整打包
mvn clean package -DskipTests
# 3. 重启后端服务
# 方式A:如果在IDE中运行 → 点击重新启动按钮
# 方式B:如果是jar包运行 → 先停止旧进程,再启动新进程
Windows停止进程:
# 查找Java进程
netstat -ano | findstr :8080
# 结束进程(替换PID为实际进程ID)
taskkill /PID <PID> /F
# 重新启动
java -jar target/demo-1.0.0.jar
步骤3:数据库数据验证与修正
连接到MySQL数据库,执行以下查询:
3.1 查看当前文件状态
-- 查看最近上传的10个文件及其分类
SELECT
id,
file_name,
file_category,
is_public,
audit_status,
upload_user_id,
create_time
FROM file
ORDER BY create_time DESC
LIMIT 10;
预期结果:
| 场景 | file_category | is_public | audit_status |
|---|---|---|---|
| 管理员上传公共文件 | rule | 1 | 1 |
| 管理员上传个人文件 | personal | 0 | 1 |
| 普通用户上传公共(待审) | rule | 0 | 0 |
| 普通用户上传公共(已审) | rule | 1 | 1 |
| 普通用户上传个人文件 | personal | 0 | 1 |
3.2 识别问题数据
-- 查找异常数据:标记为公开但分类为个人的已审批文件
SELECT
id,
file_name,
file_category,
is_public,
audit_status,
create_time
FROM file
WHERE is_public = 1
AND file_category = 'personal'
AND audit_status = 1;
如果有结果返回,说明这些是需要修正的历史数据。
3.3 修正历史数据
-- 备份先(可选但推荐)
CREATE TABLE file_backup_20260506 AS SELECT * FROM file;
-- 批量修正
UPDATE file
SET file_category = 'rule',
update_time = NOW()
WHERE is_public = 1
AND file_category = 'personal'
AND audit_status = 1;
-- 验证修正结果
SELECT COUNT(*) as corrected_count
FROM file
WHERE is_public = 1
AND file_category = 'rule'
AND audit_status = 1;
步骤4:前端刷新与测试
4.1 清除缓存
- Chrome/Edge:
Ctrl + Shift + Delete→ 选择"缓存的图片和文件" → 清除 - 快捷键:
Ctrl + Shift + R(强制刷新)
4.2 完整测试流程
测试场景A:普通用户上传公共文件(全新测试)
- 使用普通用户账号登录(userType=3)
- 点击"上传文件"
- 选择一个新文件
- 勾选"公开文件"选项
- 点击"上传"
- 预期提示:"文件已进入待审批状态"
- 切换到管理员账号登录
- 进入"审批管理"页面
- 找到刚才上传的文件,点击"通过"
- 预期提示:"文件审批通过"
- 切换回普通用户账号
- 查看"制度文件"标签页
- ✅ 预期:应该能看到刚上传的文件
测试场景B:普通用户上传个人文件 1-5步同上,但第4步选择"个人文件" 12. 查看"个人文件"标签页 13. ✅ 预期:应该在个人文件列表中看到该文件
步骤5:实时监控日志(进阶调试)
如果上述步骤仍未解决问题,开启详细日志:
5.1 修改日志级别
在 application.yml 或 application.properties 中添加:
logging:
level:
top.tqx.demo_1.service.impl.FileServiceImpl: DEBUG
5.2 关键日志监控点
上传时关注:
DEBUG [FileServiceImpl] 文件上传成功: fileName=xxx, ..., category=xxx, ...
确认 category 值是否正确
审批时关注:
INFO [FileServiceImpl] 审核通过,文件分类已从 personal 更新为 rule: fileId=xxx
确认是否有此日志输出
数据库查询时关注:
在 pageFiles() 方法中添加临时日志:
log.debug("查询文件列表 - 用户类型: {}, 文件总数: {}", userType, filePage.getTotal());
for (File f : filePage.getRecords()) {
log.debug(" 文件: ID={}, 名称={}, 分类={}, 是否公开={}",
f.getId(), f.getFileName(), f.getFileCategory(), f.getIsPublic());
}
常见问题FAQ
Q1: 为什么我修改了代码但还是不生效?
A: 最可能的原因是后端服务没有重启。Java是编译型语言,修改源码后必须重新编译并重启服务才能生效。
Q2: 数据库修正后还是看不到?
A: 可能是前端缓存。请强制刷新浏览器(Ctrl+Shift+R),或在开发者工具中禁用缓存。
Q3: 新上传的文件正常,但旧的还是不对?
A: 这是正常的。旧数据需要手动执行SQL修正(参见步骤3.3)。新上传的文件会使用新的逻辑自动正确处理。
Q4: 如何确认后端使用的是哪个版本的代码?
A: 在 pom.xml 中查看版本号,或在启动日志中找到类似:
Started DemoApplication in x.xxx seconds
确保是在你最后一次修改之后启动的。
Q5: 审批通过了但文件路径没变?
A: 这是正常的。moveFileToPublic() 会移动物理文件并更新数据库中的路径字段。你可以检查:
SELECT file_path FROM file WHERE id = <文件ID>;
看路径是否从 /pending/... 变成了 /public/...
快速检查清单
- 后端代码已包含所有3个修复点(determineFileCategory、调用处、approveFile)
- 后端服务已重新编译并重启
- 数据库中无异常数据(is_public=1 且 file_category='personal')
- 浏览器缓存已清除
- 使用全新的文件进行测试(非旧数据)
- 测试了普通用户+公共文件、普通用户+个人文件、管理员+公共文件、管理员+个人文件四种场景
- 后端日志显示正确的 category 值
全部勾选 ✅ 后,问题应该已经解决!