9.6 KiB
财务项目申报部门审批功能后端开发完成记录
日期: 2025-01-26
操作人员: AI Assistant
模块: 财务项目申报管理 - 部门审批功能
📋 开发概述
🎯 功能目标
开发预算申报部门审批功能,具有该功能权限的用户,可以看到本部门用户提交的预算申报申请。填写审批意见之后如果同意,则标识状态为部门审批通过,如果不同意,则打回给发起人,发起人修改后可以再次提交。
🗄️ 数据库设计
使用已设计的三级审批流程:
- 第1节点: 部门审批 (
dept_approve) - 第2节点: 财务审批 (
finance_approve) - 第3节点: 领导审批 (
leader_approve)
🔧 开发实施内容
第一步:数据库表结构验证 ✅
核心审批表:
cw_project_application- 主申报表(包含approval_status字段)cw_approver_config- 审批人配置表(支持部门/财务/领导三级审批)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个):
CwApprovalRecord.java- 审批记录实体CwApprovalRecordBo.java- 审批记录业务对象CwApprovalRecordVo.java- 审批记录视图对象CwApprovalRecordMapper.java- 审批记录Mapper接口CwApprovalRecordMapper.xml- 审批记录Mapper XMLICwApprovalRecordService.java- 审批记录Service接口CwApprovalRecordServiceImpl.java- 审批记录Service实现CwApprovalRecordController.java- 审批记录控制器
修改文件(共2个):
ICwProjectApplicationService.java- 新增updateApprovalStatus方法CwProjectApplicationServiceImpl.java- 实现updateApprovalStatus方法
🎯 后续开发建议
前端开发
- 部门审批页面: 查看待审批申报列表
- 审批操作组件: 审批意见填写和动作选择
- 审批历史显示: 显示完整的审批流程记录
- 权限控制: 前端路由和按钮权限控制
功能优化
- 审批人配置: 实现动态的审批人配置功能
- 审批通知: 集成消息通知系统
- 审批期限: 添加审批时限管理
- 批量审批: 支持批量审批操作
权限完善
- 菜单权限: 配置审批相关菜单权限
- 数据权限: 实现基于部门的数据权限过滤
- 角色分配: 为不同角色分配相应的审批权限
✅ 状态: 部门审批功能后端开发完成
🎯 目标: 提供完整的三级审批业务逻辑
📈 价值: 实现规范的预算申报审批流程
🔄 下一步: 需要手动编译重启后端服务,然后进行API接口测试和前端对接