# 出国党籍保留审批功能 - 后续开发任务清单 ## 📊 当前状态分析 ### ✅ 已完成的工作 1. **前端审批页面** - ✅ 文件:`web/src/views/rs/party-membership-retention/approval.vue` - ✅ 功能:待审批列表、审批记录、审批操作、详情查看 - ✅ 状态:代码完成,无Linter错误 2. **前端API接口** - ✅ 文件:`web/src/api/rs/party-membership-retention.ts` - ✅ 新增:`getPendingPartyRetentionList()`、`approvePartyRetention()` - ✅ 状态:接口定义完成 3. **后端审批接口** - ✅ 文件:`RsPartyMembershipRetentionController.java` - ✅ 接口:`PUT /rs/party/retention/approve/{retentionId}` - ✅ 功能:审批通过/拒绝,更新状态和审批意见 - ✅ 状态:基础实现完成 4. **菜单权限配置** - ✅ 菜单:党籍保留审批 - ✅ 权限:`rs:partyretention:approve` - ✅ 状态:已手动配置 --- ## 🔍 核心问题分析 ### 问题1:保留历史数据来源不明确 **现状**: - 前端 `index.vue` 中有"保留历史"选项卡 - 调用接口:`getPartyRetentionHistoryList()` → `/rs/party/retention/history/list` - **但后端没有实现这个接口!** **数据库现状**: - 只有一张表:`rs_party_membership_retention` - 通过 `status` 字段区分状态: - `0` - 草稿 - `1` - 待审批 - `2` - 已通过(应该显示在保留历史中) - `3` - 已拒绝 - `4` - 已撤回 **结论**: 系统设计上**没有独立的历史表**,保留历史应该是查询 `status=2`(已通过)的数据。 --- ## 🎯 需要开发的内容 ### 方案选择 #### 方案一:使用同一张表(推荐)✅ **优点**: - 简单快速,不需要新建表 - 数据一致性好 - 符合当前系统设计 **缺点**: - 无法记录保留期间的动态变化(如提前回国、延期等) #### 方案二:创建独立的历史表 **优点**: - 可以记录更多历史信息 - 可以记录保留期间的状态变化 **缺点**: - 需要新建表和完整的CRUD接口 - 开发工作量大 - 需要数据同步逻辑 **建议**:采用**方案一**,后续如有需要再扩展。 --- ## 📝 具体开发任务 ### 任务1:后端 - 实现保留历史查询接口(必须) **文件**:`backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsPartyMembershipRetentionController.java` **需要添加的接口**: ```java /** * 查询党籍保留历史列表(已通过的申请) */ @SaCheckPermission("rs:partyretention:list") @GetMapping("/history/list") public TableDataInfo historyList(RsPartyMembershipRetentionQuery query, PageQuery pageQuery) { // 强制设置status=2,只查询已通过的记录 query.setStatus("2"); return retentionService.queryPageList(query, pageQuery); } /** * 查询党籍保留历史详细信息 */ @SaCheckPermission("rs:partyretention:query") @GetMapping("/history/{retentionId}") public R getHistoryInfo(@NotNull(message = "主键不能为空") @PathVariable Long retentionId) { RsPartyMembershipRetentionVo vo = retentionService.queryById(retentionId); // 验证是否是已通过状态 if (vo != null && !"2".equals(vo.getStatus())) { return R.fail("该记录不是已通过状态"); } return R.ok(vo); } /** * 修改党籍保留历史(用于更新完成状态等) */ @SaCheckPermission("rs:partyretention:edit") @Log(title = "党籍保留历史", businessType = BusinessType.UPDATE) @PutMapping("/history") public R updateHistory(@Validated(EditGroup.class) @RequestBody RsPartyMembershipRetentionBo bo) { // 验证是否是已通过状态 RsPartyMembershipRetentionVo vo = retentionService.queryById(bo.getRetentionId()); if (vo == null || !"2".equals(vo.getStatus())) { return R.fail("只能修改已通过状态的记录"); } return toAjax(retentionService.updateByBo(bo)); } /** * 导出党籍保留历史 */ @SaCheckPermission("rs:partyretention:export") @Log(title = "党籍保留历史", businessType = BusinessType.EXPORT) @PostMapping("/history/export") public void exportHistory(RsPartyMembershipRetentionQuery query, HttpServletResponse response) { // 强制设置status=2,只导出已通过的记录 query.setStatus("2"); List list = retentionService.queryList(query); ExcelUtil.exportExcel(list, "党籍保留历史", RsPartyMembershipRetentionVo.class, response); } ``` **工作量**:约30分钟 --- ### 任务2:前端 - 调整保留历史查询逻辑(可选优化) **文件**:`web/src/views/rs/party-membership-retention/index.vue` **当前问题**: - 前端调用 `/rs/party/retention/history/list` 接口 - 后端实现后,前端代码无需修改 **建议优化**: - 确认 `PartyRetentionHistoryQuery` 和 `PartyRetentionHistoryVO` 的字段定义 - 如果字段不同,需要调整前端显示逻辑 **工作量**:约15分钟(如需调整) --- ### 任务3:测试审批流程的完整数据流转(必须) **测试步骤**: 1. **创建测试数据** ```sql -- 插入一条待审批的测试数据 INSERT INTO rs_party_membership_retention ( retention_id, name, id_card, destination, purpose, travel_start_date, travel_end_date, stay_days, party_branch, status, application_time, create_time, update_time ) VALUES ( nextval('rs_party_retention_seq'), '测试党员', '330101199001011234', '美国', '探亲访友', '2025-02-01', '2025-02-28', 28, '第一党支部', '1', NOW(), NOW(), NOW() ); ``` 2. **测试审批流程** - 登录审批人账号 - 进入"党籍保留审批"页面 - 在"待审批"选项卡中看到测试数据 - 点击"审批通过" - 确认审批成功 3. **验证数据流转** ```sql -- 查询审批后的数据状态 SELECT retention_id, name, status, final_approval, update_time FROM rs_party_membership_retention WHERE name = '测试党员'; -- status 应该为 '2'(已通过) ``` 4. **验证保留历史显示** - 进入"党籍保留管理"页面 - 切换到"保留历史"选项卡 - **关键验证**:应该能看到刚才审批通过的数据 **工作量**:约20分钟 --- ### 任务4:完善审批后的业务逻辑(可选) **可能需要的扩展功能**: 1. **审批通过后自动计算保留期限** ```java // 在 approve() 方法中添加 if (approved) { update.setStatus("2"); // 自动设置保留开始和结束日期 update.setRetentionStartDate(vo.getTravelStartDate()); update.setRetentionEndDate(vo.getTravelEndDate()); // 设置完成状态为"进行中" update.setCompletionStatus("0"); } ``` 2. **审批通知** - 发送邮件/短信通知申请人 - 系统消息通知 3. **审批日志记录** - 记录审批人、审批时间、审批意见 - 可查询审批历史 **工作量**:根据需求而定,约1-2小时 --- ## 🔄 数据流转图 ### 完整流程 ``` ┌─────────────────────────────────────────────────────────────┐ │ 党籍保留申请流程 │ └─────────────────────────────────────────────────────────────┘ 1. 申请人提交申请 ↓ 状态:草稿(0) → 待审批(1) 表:rs_party_membership_retention ↓ 2. 审批人审批 ↓ 页面:党籍保留审批 (approval.vue) 接口:PUT /rs/party/retention/approve/{retentionId} ↓ ┌─────────┴─────────┐ ↓ ↓ 审批通过 审批拒绝 status=2 status=3 ↓ ↓ 保留历史 审批记录 ↓ 3. 显示在保留历史选项卡 ↓ 页面:党籍保留管理 (index.vue) → 保留历史选项卡 接口:GET /rs/party/retention/history/list 查询条件:status=2 ``` --- ## ✅ 开发检查清单 ### 后端开发 - [ ] 实现 `/rs/party/retention/history/list` 接口 - [ ] 实现 `/rs/party/retention/history/{retentionId}` 接口 - [ ] 实现 `/rs/party/retention/history` 更新接口 - [ ] 实现 `/rs/party/retention/history/export` 导出接口 - [ ] 测试接口功能正常 ### 前端开发 - [ ] 确认前端接口调用正常 - [ ] 测试保留历史列表显示 - [ ] 测试保留历史详情查看 - [ ] 测试保留历史编辑功能 ### 数据流转测试 - [ ] 创建测试数据 - [ ] 测试审批通过流程 - [ ] 验证数据状态变更 - [ ] 验证保留历史显示 - [ ] 测试审批拒绝流程 - [ ] 验证审批记录显示 ### 权限测试 - [ ] 测试审批权限控制 - [ ] 测试查询权限控制 - [ ] 测试编辑权限控制 --- ## 📊 工作量评估 | 任务 | 优先级 | 工作量 | 状态 | |------|--------|--------|------| | 后端历史查询接口 | 🔴 必须 | 30分钟 | ⏳ 待开发 | | 前端逻辑调整 | 🟡 可选 | 15分钟 | ⏳ 待确认 | | 完整流程测试 | 🔴 必须 | 20分钟 | ⏳ 待测试 | | 业务逻辑完善 | 🟢 扩展 | 1-2小时 | ⏳ 待规划 | **总计**:核心功能约1小时,完整功能约2-3小时 --- ## 🎯 最小可用版本(MVP) 如果时间紧张,**最小可用版本**只需要完成: 1. ✅ 后端历史查询接口(30分钟) 2. ✅ 完整流程测试(20分钟) **总计**:约50分钟即可完成基本功能 --- ## 📝 后续优化建议 ### 短期优化(1-2周) 1. 完善审批通知功能 2. 添加审批日志记录 3. 优化保留历史的字段显示 ### 中期优化(1-2月) 4. 添加保留期限提醒功能 5. 添加批量审批功能 6. 添加审批统计报表 ### 长期优化(3-6月) 7. 创建独立的历史表,记录更详细的信息 8. 添加保留期间的状态变更记录 9. 集成工作流引擎 --- ## 🚀 下一步行动 ### 立即执行(今天) 1. **开发后端历史查询接口** - 文件:`RsPartyMembershipRetentionController.java` - 时间:30分钟 2. **测试完整流程** - 创建测试数据 - 测试审批流程 - 验证数据流转 - 时间:20分钟 ### 本周完成 3. **完善业务逻辑** - 审批通知 - 日志记录 - 时间:1-2小时 ### 下周规划 4. **用户培训和文档** - 编写用户手册 - 培训审批人员 --- ## 📞 需要确认的问题 1. **保留历史的字段显示** - 当前 `index.vue` 中保留历史表格显示的字段与党籍保留表格不同 - 需要确认是否需要调整字段映射 2. **保留历史的编辑功能** - 当前保留历史选项卡有"编辑记录"按钮 - 需要确认编辑的是什么内容(完成状态?备注?) 3. **完成状态的含义** - `completion_status` 字段:0-进行中,1-已完成,2-已取消 - 需要确认何时更新这个状态 4. **审批通知方式** - 是否需要邮件通知? - 是否需要短信通知? - 是否需要系统消息通知? --- **文档创建时间**:2025-01-09 **当前状态**:待开发后端历史查询接口 **预计完成时间**:今天(约1小时)