# 文件审批流程调试指南 ## 问题现象 普通用户上传公共文件 → 管理员审批通过 → 文件仍显示在"个人文件"列表而非"制度文件"列表 ## 调试步骤 ### 步骤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方法):** ```java 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行(调用处):** ```java String fileCategory = determineFileCategory(userType, targetDeptId, isPublic); // ← 必须传入isPublic参数 fileEntity.setFileCategory(fileCategory); ``` **检查点3 - 第595-598行(approveFile方法):** ```java if ("personal".equals(file.getFileCategory())) { file.setFileCategory("rule"); // ← 这段代码必须存在 log.info("审核通过,文件分类已从 personal 更新为 rule: fileId={}", fileId); } ``` --- ### 步骤2:重新编译部署后端 如果上述代码不存在或不确定,请执行: ```bash # 1. 进入后端项目目录 cd demo/demo/demo # 2. 清理并重新编译(跳过测试以加快速度) mvn clean compile # 或完整打包 mvn clean package -DskipTests # 3. 重启后端服务 # 方式A:如果在IDE中运行 → 点击重新启动按钮 # 方式B:如果是jar包运行 → 先停止旧进程,再启动新进程 ``` **Windows停止进程:** ```bash # 查找Java进程 netstat -ano | findstr :8080 # 结束进程(替换PID为实际进程ID) taskkill /PID /F # 重新启动 java -jar target/demo-1.0.0.jar ``` --- ### 步骤3:数据库数据验证与修正 连接到MySQL数据库,执行以下查询: #### 3.1 查看当前文件状态 ```sql -- 查看最近上传的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 识别问题数据 ```sql -- 查找异常数据:标记为公开但分类为个人的已审批文件 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 修正历史数据 ```sql -- 备份先(可选但推荐) 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.yml` 或 `application.properties` 中添加: ```yaml 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()` 方法中添加临时日志: ```java 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()` 会移动物理文件并更新数据库中的路径字段。你可以检查: ```sql SELECT file_path FROM file WHERE id = <文件ID>; ``` 看路径是否从 `/pending/...` 变成了 `/public/...` --- ## 快速检查清单 - [ ] 后端代码已包含所有3个修复点(determineFileCategory、调用处、approveFile) - [ ] 后端服务已重新编译并重启 - [ ] 数据库中无异常数据(is_public=1 且 file_category='personal') - [ ] 浏览器缓存已清除 - [ ] 使用全新的文件进行测试(非旧数据) - [ ] 测试了普通用户+公共文件、普通用户+个人文件、管理员+公共文件、管理员+个人文件四种场景 - [ ] 后端日志显示正确的 category 值 全部勾选 ✅ 后,问题应该已经解决!