Files
aue/调试指南-文件审批流程.md
2026-06-03 13:16:30 +08:00

7.6 KiB
Raw Blame History

文件审批流程调试指南

问题现象

普通用户上传公共文件 → 管理员审批通过 → 文件仍显示在"个人文件"列表而非"制度文件"列表

调试步骤

步骤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普通用户上传公共文件全新测试

  1. 使用普通用户账号登录userType=3
  2. 点击"上传文件"
  3. 选择一个新文件
  4. 勾选"公开文件"选项
  5. 点击"上传"
  6. 预期提示:"文件已进入待审批状态"
  7. 切换到管理员账号登录
  8. 进入"审批管理"页面
  9. 找到刚才上传的文件,点击"通过"
  10. 预期提示:"文件审批通过"
  11. 切换回普通用户账号
  12. 查看"制度文件"标签页
  13. 预期:应该能看到刚上传的文件

测试场景B普通用户上传个人文件 1-5步同上但第4步选择"个人文件" 12. 查看"个人文件"标签页 13. 预期:应该在个人文件列表中看到该文件


步骤5实时监控日志进阶调试

如果上述步骤仍未解决问题,开启详细日志:

5.1 修改日志级别

application.ymlapplication.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 值

全部勾选 后,问题应该已经解决!