17370845950

在Java中开发简易订单管理系统_Java业务流程项目示例
订单管理系统核心流程为:用户下单→订单生成→商品扣减→状态流转→查询统计;采用纯Java实现,含Product、Order、OrderItem实体类,OrderService封装业务逻辑,通过枚举控制状态机,自定义异常处理,并以控制台交互验证全流程。

用Java开发一个简易订单管理系统,核心在于理清业务主线:用户下单 → 订单生成 → 商品扣减 → 状态流转 → 查询统计。不需要Spring Boot或数据库框架也能起步,纯Java + 集合 + 控制台交互就足以体现完整业务逻辑。

订单与商品模型设计

先定义两个关键实体类,体现真实业务约束:

  • Product:含id、name、stock(库存量)、price(单价),库存需支持原子扣减,避免超卖
  • Order:含orderId(自增或UUID)、userId、productList(订单项列表)、totalAmount、status(INIT/PAID/SUCCESS/FAILED)、createTime
  • 每个订单项(OrderItem)建议单独建类:productId、quantity、unitPrice,方便后续扩展优惠、分摊等逻辑

核心业务流程编码实现

用一个OrderService类封装主流程,方法职责清晰:

  • createOrder(userId, productId, quantity):查商品库存 → 扣减库存(同步块或AtomicInteger)→ 构建Order对象 → 存入内存集合(如ConcurrentHashMap)
  • payOrder(orderId):校验订单状态是否为INIT → 更新为PAID → 触发“支付成功”后置动作(如通知、日志)
  • confirmReceipt(orderId):仅允许PAID订单执行 → 改为SUCCESS → 可选触发发货逻辑(如打印运单号)
  • queryOrdersByUser(userId):返回该用户所有订单,按时间倒序排列,便于查看最新动态

状态机与异常控制要点

订单状态不能随意跳转,必须符合业务规则:

  • 用enum定义OrderStatus:INIT → PAID → SUCCESS / FAILED;禁止从SUCCESS再调payOrder
  • 每次状态变更前做合法性检查,例如:只有INIT可支付,只有PAID可确认收货
  • 库存不足、订单不存在、状态冲突等场景统一抛出自定义异常(如InsufficientStockException、InvalidOrderStatusException),并在控制层捕获并提示用户

控制台交互与测试驱动

写一个MainApp类模拟用户操作,每步输出清晰反馈:

  • 显示菜单:“1. 创建订单 2. 支付订单 3. 确认收货 4. 查看我的订单 0. 退出”
  • 输入参数后调用对应service方法,并打印结果,如:“✅ 订单[ORD-001]创建成功,金额¥299.00”
  • 配合简单测试用例(main方法内手动构造数据),验证并发下单不超卖、重复支付被拒绝等边界情况