Skip to content

Latest commit

 

History

History
72 lines (51 loc) · 3.78 KB

File metadata and controls

72 lines (51 loc) · 3.78 KB

Spring StateMachine 订单状态管理系统

一个基于 Spring StateMachine 实现的订单全生命周期状态管理方案,通过状态机模式规范订单状态流转,支持单机和分布式部署,适用于电商、新零售等业务场景。

项目背景

在传统订单系统开发中,订单状态的流转逻辑(如“待支付→待发货”“待发货→待收货”)往往分散在业务代码中,导致:

  • 状态判断条件冗余(大量 if-elseswitch 语句)
  • 状态流转规则不透明,新开发者难以理解
  • 新增状态或流转规则时,需修改多处代码,易出错

本项目通过 Spring StateMachine 框架,将订单状态和转换规则集中管理,通过事件驱动状态变更,解决上述问题,提升代码可维护性和扩展性。

核心价值

  • 状态集中管控:所有订单状态(如「待支付」「待发货」)和转换规则在配置类中统一定义,避免状态判断逻辑散落在业务代码中。
  • 事件驱动设计:通过「支付」「发货」「收货」等事件触发状态变更,业务操作与状态转换解耦,便于扩展新场景。
  • 多环境兼容:支持单机部署(内存存储状态)和分布式部署(Redis 存储状态),满足不同规模业务需求。
  • 可扩展性强:新增状态或事件只需扩展枚举和配置,无需修改核心逻辑,降低迭代成本。

适用场景

  • 电商平台订单管理(从创建到完成的全生命周期)
  • 零售系统交易流程控制
  • 任何需要严格管控状态流转的业务场景(如工单系统、审批流程等)

技术架构

组件 技术/版本 作用说明
基础框架 Spring Boot 2.7.18 快速开发Spring应用
状态机核心 Spring StateMachine 3.2.0 实现状态管理和事件驱动
数据访问 MyBatis 3.0.2 数据库交互
数据库 MySQL 8.0+ 存储订单业务数据
分布式存储 Redis 6.0+ 状态机上下文分布式存储(可选)
构建工具 Maven 3.6+ 项目构建和依赖管理
运行环境 JDK 17+ 代码运行环境

环境准备

1. 依赖安装

  • JDK 17+:配置 JAVA_HOME 环境变量,验证 java -version 输出正确版本
  • MySQL 8.0+:启动服务并创建数据库 statemachine_demo(编码 utf8mb4
  • Redis 6.0+(可选):分布式部署时需启动,默认端口 6379
  • Maven 3.9+:验证 mvn -version 输出正确版本

2. 数据库初始化

执行以下 SQL 脚本创建订单表:

-- 创建数据库(若不存在)
CREATE DATABASE IF NOT EXISTS statemachine_demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE statemachine_demo;

-- 订单表
CREATE TABLE IF NOT EXISTS tb_order (
  id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  order_code VARCHAR(64) NOT NULL COMMENT '订单编号(唯一)',
  status INT NOT NULL COMMENT '订单状态:1=待支付,2=待发货,3=待收货,4=已完成',
  name VARCHAR(128) NOT NULL COMMENT '商品名称',
  price DECIMAL(10,2) NOT NULL COMMENT '商品单价',
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (id),
  UNIQUE KEY uk_order_code (order_code) COMMENT '订单编号唯一索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '订单主表';