Files
hzdyjs/出国党籍保留审批功能-后续开发任务清单.md
T
2025-10-14 16:41:19 +08:00

11 KiB
Raw Blame History

出国党籍保留审批功能 - 后续开发任务清单

📊 当前状态分析

✅ 已完成的工作

  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

需要添加的接口:

/**
 * 查询党籍保留历史列表(已通过的申请)
 */
@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:测试审批流程的完整数据流转(必须)

测试步骤:

  1. 创建测试数据

    -- 插入一条待审批的测试数据
    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. 验证数据流转

    -- 查询审批后的数据状态
    SELECT retention_id, name, status, final_approval, update_time
    FROM rs_party_membership_retention
    WHERE name = '测试党员';
    -- status 应该为 '2'(已通过)
    
  4. 验证保留历史显示

    • 进入"党籍保留管理"页面
    • 切换到"保留历史"选项卡
    • 关键验证:应该能看到刚才审批通过的数据

工作量:约20分钟


任务4:完善审批后的业务逻辑(可选)

可能需要的扩展功能:

  1. 审批通过后自动计算保留期限

    // 在 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月)

  1. 添加保留期限提醒功能
  2. 添加批量审批功能
  3. 添加审批统计报表

长期优化(3-6月)

  1. 创建独立的历史表,记录更详细的信息
  2. 添加保留期间的状态变更记录
  3. 集成工作流引擎

🚀 下一步行动

立即执行(今天)

  1. 开发后端历史查询接口

    • 文件:RsPartyMembershipRetentionController.java
    • 时间:30分钟
  2. 测试完整流程

    • 创建测试数据
    • 测试审批流程
    • 验证数据流转
    • 时间:20分钟

本周完成

  1. 完善业务逻辑
    • 审批通知
    • 日志记录
    • 时间:1-2小时

下周规划

  1. 用户培训和文档
    • 编写用户手册
    • 培训审批人员

📞 需要确认的问题

  1. 保留历史的字段显示

    • 当前 index.vue 中保留历史表格显示的字段与党籍保留表格不同
    • 需要确认是否需要调整字段映射
  2. 保留历史的编辑功能

    • 当前保留历史选项卡有"编辑记录"按钮
    • 需要确认编辑的是什么内容(完成状态?备注?)
  3. 完成状态的含义

    • completion_status 字段:0-进行中,1-已完成,2-已取消
    • 需要确认何时更新这个状态
  4. 审批通知方式

    • 是否需要邮件通知?
    • 是否需要短信通知?
    • 是否需要系统消息通知?

文档创建时间:2025-01-09
当前状态:待开发后端历史查询接口
预计完成时间:今天(约1小时)