- 审批历史:按时间降序,仅展示提交/通过/驳回记录,支持多次提交审批的历史展示
- 流程节点(固定 3 个):
- 提审节点:已提交时显示“已提交”(蓝色),展示最近一次提交记录
- 审批过程节点:
- 待审批:显示本轮审批人姓名(蓝色)
- 已完成(通过/驳回):显示审批人姓名、审批时间与意见(蓝色)
- 完成节点:通过显示蓝色,驳回显示红色
- 多次提交支持:再次提交时,将上一轮仍待审的审批人标记为上一轮(creator_flag=3),Node2 在待审批时只展示本轮审批人
- 时间统一使用 java.sql.Timestamp;提交者创建时间早于审批人且唯一(逐毫秒递增)
- POST /api/rules/{ruleId}/approval/submit
- 请求体:SubmitApprovalRequest(提交者信息、审批人列表)
- POST /api/rules/{ruleId}/approval/approve?approverUserId=...&opinion=...&remark=...
- 审批通过:记录置为通过,规则直接置为通过
- POST /api/rules/{ruleId}/approval/reject?approverUserId=...&opinion=...&remark=...
- 审批驳回:记录置为驳回,规则直接置为驳回
- GET /api/rules/{ruleId}/approval/history
- GET /api/rules/{ruleId}/approval/process
- 规则表(rule)
- approval_status:0草稿、1待审批、2通过、3驳回
- approval_time:规则完成时间(Timestamp)
- 审批记录表(approval_record)
- status:1待审批、2通过、3驳回
- creator_flag:1提交者、2审批者、3上一轮审批者
- create_time:创建时间(Timestamp)
- update_time:审批时间(Timestamp)
- 配置数据源(src/main/resources/application.yml),填入你的数据库信息:
spring: datasource: url: jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver mybatis: mapper-locations: classpath*:mapper/*.xml configuration: map-underscore-to-camel-case: true - 刷新 Maven 依赖或执行:
mvn clean package - 启动应用(已有启动类 ApprovalApplication):
mvn spring-boot:run
- 单元测试使用 JUnit 5 + Mockito,控制器测试使用 Spring MockMvc。
- 由于使用 Mock 替代数据库连接,测试可直接运行。
- 主要测试类:
- src/test/java/com/example/approval/service/ApprovalServiceTest.java
- 覆盖 submitApproval、approve、reject、getProcessNodes、getApprovalHistory 核心场景
- src/test/java/com/example/approval/controller/ApprovalControllerTest.java
- 覆盖所有路由的调用与参数绑定
- src/test/java/com/example/approval/service/ApprovalServiceTest.java
- 再次提交审批时,旧的仍待审批人不会影响本轮展示(通过 creator_flag 归档)
- 审批通过/驳回不再评估其他审批人,直接结束规则;若需改为“必须所有人通过才算通过”,可把逻辑切回评估模式
- 对并发与幂等可扩展:为审批记录增加唯一约束或幂等键;统一返回错误码与异常处理
如需补充数据库建表 SQL 或前后端联调示例,请告诉我。