Files
hzdyjs/docs/变更管理/code-adjust-record-2025-01-26-cw-approval-backend-development.md
T
2025-07-30 23:24:43 +08:00

9.6 KiB
Raw Blame History

财务项目申报部门审批功能后端开发完成记录

日期: 2025-01-26
操作人员: AI Assistant
模块: 财务项目申报管理 - 部门审批功能

📋 开发概述

🎯 功能目标

开发预算申报部门审批功能,具有该功能权限的用户,可以看到本部门用户提交的预算申报申请。填写审批意见之后如果同意,则标识状态为部门审批通过,如果不同意,则打回给发起人,发起人修改后可以再次提交。

🗄️ 数据库设计

使用已设计的三级审批流程:

  • 第1节点: 部门审批 (dept_approve)
  • 第2节点: 财务审批 (finance_approve)
  • 第3节点: 领导审批 (leader_approve)

🔧 开发实施内容

第一步:数据库表结构验证 ✅

核心审批表:

  1. cw_project_application - 主申报表(包含approval_status字段)
  2. cw_approver_config - 审批人配置表(支持部门/财务/领导三级审批)
  3. cw_approval_record - 审批记录表(记录每个审批节点的详细信息)

审批状态字典:

- draft: 草稿
- submitted: 已提交
- approving: 审批中
- approved: 已通过
- rejected: 已拒绝
- returned: 已退回
- cancelled: 已取消

第二步:后端代码开发 ✅

1. 实体类开发

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/domain/CwApprovalRecord.java

  • 继承 TenantEntity,支持多租户
  • 包含完整的审批记录字段
  • 支持审批人、代理审批人、节点状态、审批意见等

2. 业务对象开发

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/domain/bo/CwApprovalRecordBo.java

  • 使用 @AutoMapper 自动映射
  • 完整的验证注解(@NotNull, @NotBlank)
  • 支持新增和编辑分组验证

3. 视图对象开发

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/domain/vo/CwApprovalRecordVo.java

  • 支持Excel导出(@ExcelProperty)
  • 字典格式化(@ExcelDictFormat)
  • 时间格式化(@JsonFormat)

4. 数据访问层开发

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/mapper/CwApprovalRecordMapper.java

  • 继承 BaseMapperPlus 基础功能
  • 自定义查询方法:
    • selectByApplicationId - 根据申报ID查询
    • selectPendingByApproverId - 查询待审批记录
    • selectByApproverAndNode - 按审批人和节点查询
    • selectCurrentApprovalNode - 查询当前审批节点
    • batchInsert - 批量插入审批记录

XML配置: backend/ruoyi-modules/ruoyi-cw/src/main/resources/mapper/CwApprovalRecordMapper.xml

  • 完整的ResultMap映射
  • 优化的SQL查询(带索引提示)
  • 批量操作支持

5. 业务逻辑层开发

Service接口: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/ICwApprovalRecordService.java

核心方法:

  • createApprovalProcess - 创建审批流程
  • processApproval - 处理审批(通用)
  • deptApprove - 部门审批(专用)
  • queryDeptPendingApprovals - 查询部门待审批
  • checkApprovalPermission - 检查审批权限

Service实现: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/impl/CwApprovalRecordServiceImpl.java

核心业务逻辑:

/**
 * 创建审批流程 - 三级节点
 */
public Boolean createApprovalProcess(Long applicationId, String applicationNo) {
    // 第1节点:部门审批(waiting状态)
    // 第2节点:财务审批(pending状态)
    // 第3节点:领导审批(pending状态)
    // 批量插入审批记录
}

/**
 * 处理审批 - 状态流转
 */
public Boolean processApproval(Long applicationId, String nodeCode, String approveAction, String approveOpinion) {
    // 1. 权限检查
    // 2. 更新当前节点状态
    // 3. 根据审批结果流转到下一节点或结束
}

状态流转逻辑:

draft -> submitted -> 创建审批流程
dept_approve: approve -> finance_approve: waiting
dept_approve: reject/return -> rejected/returned (结束)
finance_approve: approve -> leader_approve: waiting  
leader_approve: approve -> approved (完成)

6. 控制器层开发

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/controller/CwApprovalRecordController.java

核心API接口:

  • GET /cw/approval/dept/pending - 查询部门待审批申报
  • POST /cw/approval/dept - 部门审批操作
  • POST /cw/approval/create/{applicationId} - 创建审批流程
  • GET /cw/approval/current/{applicationId} - 查询当前审批节点
  • GET /cw/approval/check/dept/{applicationId} - 检查部门审批权限

权限控制:

  • cw:approval:dept - 部门审批权限
  • cw:approval:process - 审批操作权限
  • cw:approval:query - 查询权限

🔗 模块集成

扩展项目申报Service

新增方法: ICwProjectApplicationService.updateApprovalStatus

/**
 * 更新审批状态
 */
Boolean updateApprovalStatus(Long id, String approvalStatus);

修改提交申报流程:

  • 提交时记录创建审批流程的需求(避免循环依赖)
  • 状态从 draft -> submitted

审批流程集成

  • 申报提交后需要手动或通过事件触发创建审批流程
  • 审批流程自动管理状态流转
  • 支持多节点串行审批

🎯 核心功能特性

1. 三级审批流程 ✅

部门审批 -> 财务审批 -> 领导审批

2. 灵活的审批控制 ✅

  • 通过: 自动流转到下一个节点
  • 拒绝: 直接结束,状态变为已拒绝
  • 退回: 退回申请人修改,状态变为已退回

3. 权限精确控制 ✅

  • 只有指定的审批人可以审批对应节点
  • 审批人基于用户ID精确匹配
  • 支持权限检查API

4. 完整的审批记录 ✅

  • 记录每个节点的审批人、时间、意见
  • 支持代理审批记录
  • 审批历史完整可追溯

5. 部门视图支持 ✅

  • 部门审批人可查看本部门提交的申报
  • 过滤出waiting状态的部门审批节点
  • 支持审批权限验证

🧪 API接口测试

核心接口列表:

1. 查询部门待审批

GET /cw/approval/dept/pending
权限: cw:approval:dept
返回: 当前用户作为审批人的部门待审批记录列表

2. 部门审批操作

POST /cw/approval/dept
参数: applicationId, approveAction, approveOpinion
权限: cw:approval:dept
动作: approve(通过) / reject(拒绝) / return(退回)

3. 创建审批流程

POST /cw/approval/create/{applicationId}
参数: applicationNo
权限: cw:approval:create
功能: 为已提交的申报创建三级审批流程

4. 权限检查

GET /cw/approval/check/dept/{applicationId}
权限: cw:approval:dept
返回: Boolean - 当前用户是否有该申报的部门审批权限

📋 数据流程设计

申报提交流程:

1. 用户填写申报信息 (status: draft)
2. 用户点击"提交申请" (status: submitted)
3. 系统调用创建审批流程接口
4. 创建三级审批记录 (dept_approve: waiting, others: pending)
5. 通知部门审批人

部门审批流程:

1. 部门审批人查看待审批列表
2. 选择申报,填写审批意见
3. 选择审批动作 (通过/拒绝/退回)
4. 系统更新审批记录和申报状态
5. 如果通过,启动财务审批节点

状态变化链:

draft -> submitted -> approving -> approved/rejected/returned

🚨 部署要求

编译和重启要求

由于创建了大量新的后端文件,需要完整的编译和重启:

编译步骤:

cd backend
mvn clean compile -pl ruoyi-modules/ruoyi-cw

重启要求:

  • 停止当前后端服务
  • 重新启动后端服务
  • 确保所有新增的Bean正确加载

数据库准备

确保已执行建表脚本:

-- 执行建表脚本
source script/sql/cw-budget-approval-create-tables.sql

📊 开发文件清单

新增文件(共9个):

  1. CwApprovalRecord.java - 审批记录实体
  2. CwApprovalRecordBo.java - 审批记录业务对象
  3. CwApprovalRecordVo.java - 审批记录视图对象
  4. CwApprovalRecordMapper.java - 审批记录Mapper接口
  5. CwApprovalRecordMapper.xml - 审批记录Mapper XML
  6. ICwApprovalRecordService.java - 审批记录Service接口
  7. CwApprovalRecordServiceImpl.java - 审批记录Service实现
  8. CwApprovalRecordController.java - 审批记录控制器

修改文件(共2个):

  1. ICwProjectApplicationService.java - 新增updateApprovalStatus方法
  2. CwProjectApplicationServiceImpl.java - 实现updateApprovalStatus方法

🎯 后续开发建议

前端开发

  1. 部门审批页面: 查看待审批申报列表
  2. 审批操作组件: 审批意见填写和动作选择
  3. 审批历史显示: 显示完整的审批流程记录
  4. 权限控制: 前端路由和按钮权限控制

功能优化

  1. 审批人配置: 实现动态的审批人配置功能
  2. 审批通知: 集成消息通知系统
  3. 审批期限: 添加审批时限管理
  4. 批量审批: 支持批量审批操作

权限完善

  1. 菜单权限: 配置审批相关菜单权限
  2. 数据权限: 实现基于部门的数据权限过滤
  3. 角色分配: 为不同角色分配相应的审批权限

✅ 状态: 部门审批功能后端开发完成
🎯 目标: 提供完整的三级审批业务逻辑
📈 价值: 实现规范的预算申报审批流程

🔄 下一步: 需要手动编译重启后端服务,然后进行API接口测试和前端对接