11 KiB
11 KiB
出国党籍保留审批功能 - 后续开发任务清单
📊 当前状态分析
✅ 已完成的工作
-
前端审批页面
- ✅ 文件:
web/src/views/rs/party-membership-retention/approval.vue - ✅ 功能:待审批列表、审批记录、审批操作、详情查看
- ✅ 状态:代码完成,无Linter错误
- ✅ 文件:
-
前端API接口
- ✅ 文件:
web/src/api/rs/party-membership-retention.ts - ✅ 新增:
getPendingPartyRetentionList()、approvePartyRetention() - ✅ 状态:接口定义完成
- ✅ 文件:
-
后端审批接口
- ✅ 文件:
RsPartyMembershipRetentionController.java - ✅ 接口:
PUT /rs/party/retention/approve/{retentionId} - ✅ 功能:审批通过/拒绝,更新状态和审批意见
- ✅ 状态:基础实现完成
- ✅ 文件:
-
菜单权限配置
- ✅ 菜单:党籍保留审批
- ✅ 权限:
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
需要添加的接口:
/**
* 查询党籍保留历史列表(已通过的申请)
*/
@SaCheckPermission("rs:partyretention:list")
@GetMapping("/history/list")
public TableDataInfo<RsPartyMembershipRetentionVo> historyList(RsPartyMembershipRetentionQuery query, PageQuery pageQuery) {
// 强制设置status=2,只查询已通过的记录
query.setStatus("2");
return retentionService.queryPageList(query, pageQuery);
}
/**
* 查询党籍保留历史详细信息
*/
@SaCheckPermission("rs:partyretention:query")
@GetMapping("/history/{retentionId}")
public R<RsPartyMembershipRetentionVo> 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<Void> 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<RsPartyMembershipRetentionVo> 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:测试审批流程的完整数据流转(必须)
测试步骤:
-
创建测试数据
-- 插入一条待审批的测试数据 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() ); -
测试审批流程
- 登录审批人账号
- 进入"党籍保留审批"页面
- 在"待审批"选项卡中看到测试数据
- 点击"审批通过"
- 确认审批成功
-
验证数据流转
-- 查询审批后的数据状态 SELECT retention_id, name, status, final_approval, update_time FROM rs_party_membership_retention WHERE name = '测试党员'; -- status 应该为 '2'(已通过) -
验证保留历史显示
- 进入"党籍保留管理"页面
- 切换到"保留历史"选项卡
- 关键验证:应该能看到刚才审批通过的数据
工作量:约20分钟
任务4:完善审批后的业务逻辑(可选)
可能需要的扩展功能:
-
审批通过后自动计算保留期限
// 在 approve() 方法中添加 if (approved) { update.setStatus("2"); // 自动设置保留开始和结束日期 update.setRetentionStartDate(vo.getTravelStartDate()); update.setRetentionEndDate(vo.getTravelEndDate()); // 设置完成状态为"进行中" update.setCompletionStatus("0"); } -
审批通知
- 发送邮件/短信通知申请人
- 系统消息通知
-
审批日志记录
- 记录审批人、审批时间、审批意见
- 可查询审批历史
工作量:根据需求而定,约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)
如果时间紧张,最小可用版本只需要完成:
- ✅ 后端历史查询接口(30分钟)
- ✅ 完整流程测试(20分钟)
总计:约50分钟即可完成基本功能
📝 后续优化建议
短期优化(1-2周)
- 完善审批通知功能
- 添加审批日志记录
- 优化保留历史的字段显示
中期优化(1-2月)
- 添加保留期限提醒功能
- 添加批量审批功能
- 添加审批统计报表
长期优化(3-6月)
- 创建独立的历史表,记录更详细的信息
- 添加保留期间的状态变更记录
- 集成工作流引擎
🚀 下一步行动
立即执行(今天)
-
开发后端历史查询接口
- 文件:
RsPartyMembershipRetentionController.java - 时间:30分钟
- 文件:
-
测试完整流程
- 创建测试数据
- 测试审批流程
- 验证数据流转
- 时间:20分钟
本周完成
- 完善业务逻辑
- 审批通知
- 日志记录
- 时间:1-2小时
下周规划
- 用户培训和文档
- 编写用户手册
- 培训审批人员
📞 需要确认的问题
-
保留历史的字段显示
- 当前
index.vue中保留历史表格显示的字段与党籍保留表格不同 - 需要确认是否需要调整字段映射
- 当前
-
保留历史的编辑功能
- 当前保留历史选项卡有"编辑记录"按钮
- 需要确认编辑的是什么内容(完成状态?备注?)
-
完成状态的含义
completion_status字段:0-进行中,1-已完成,2-已取消- 需要确认何时更新这个状态
-
审批通知方式
- 是否需要邮件通知?
- 是否需要短信通知?
- 是否需要系统消息通知?
文档创建时间:2025-01-09
当前状态:待开发后端历史查询接口
预计完成时间:今天(约1小时)