当前位置: 首页 > news >正文

订单模块

首先,订单模块是家政项目的 “核心枢纽”—— 它衔接了用户端(下单需求)、服务端(服务信息)、支付模块(资金流转)和优惠券模块(权益核销),核心目标是管理订单从创建到完成 / 取消的全生命周期,确保流程合规、数据准确且用户体验流畅。
一、订单模块的核心设计细节
这部分是模块的基础,我们当时重点做了三件事:表结构设计、状态定义、订单号生成。
订单表设计:采用 “主表 + 关联表” 的结构。
主表(order_main)核心字段包括:订单号(唯一标识)、用户 ID(关联用户表)、服务 ID(关联服务表)、订单总金额、实付金额、优惠券 ID(关联优惠券表)、订单状态、创建时间、支付时间、取消时间等;如果用户一次下单多个服务,会有订单明细表(order_item)存每个服务的明细(服务名称、单价、数量)。这样设计能清晰追溯订单的核心信息,也方便后续联表查询。
订单状态定义:结合业务流程定了 7 种核心状态,且状态变更有严格顺序,避免混乱:
待支付(下单未付款)→ 已支付(付款成功)→ 服务中(阿姨上门服务)→ 已完成(服务结束用户确认);另外,待支付可转 “已取消”(超时或用户主动取消),已支付可转 “退款中”“已退款”(取消订单或服务问题)。
订单号生成方案:考虑到 “唯一性 + 业务可读性”,我们用了 “时间戳(yyyyMMddHHmmss)+ 用户 ID 后 4 位 + 3 位随机数” 的格式。比如 20241110143025_1234_567,既保证不会重复(时间戳 + 随机数),又能通过订单号快速定位用户(后 4 位用户 ID),后续排查问题也方便。如果项目并发更高,会考虑雪花算法,但家政项目的下单峰值用前者足够。
二、核心功能开发与关键问题解决
这部分是模块落地的重点,我们不仅要实现功能,还要解决 “事务、重复提交、超时取消” 等常见坑。
下单接口开发与优化:
核心流程是 “校验→计算→创建→调用支付”:先校验用户状态(是否正常)、服务信息(是否可预约、库存足够);再计算实付金额(总金额 - 优惠券优惠,需判断优惠券有效性);然后生成订单号,在事务里创建订单主表和明细表记录;最后调用支付模块的小程序支付接口,返回支付参数给前端。
调试用 Postman 测了各种场景:无优惠券下单、有优惠券但过期、服务不可预约等,确保边界 case 都能处理;优化点是把 “下单后给用户发通知(短信 / 推送)” 改成异步(用 RabbitMQ),原来同步发通知接口响应要 1.5s,优化后降到 300ms 内。
Service 事务失效问题:
开发时踩过两个坑:一是把加了@Transactional的方法设为 private,导致 Spring 无法代理,改成 public 就好了;二是 try-catch 里吞了异常,没抛出来,事务无法回滚,后来在 catch 里主动抛RuntimeException。另外还要确保数据源配置了事务管理器,不然注解也不生效。
防止订单重复提交:
做了 “前端 + 后端” 双重保障:前端是用户点击 “下单” 后按钮置灰,禁止重复点击;后端是用 Redis 存 “用户 ID + 服务 ID” 作为 key,下单前先查 Redis,存在就拒绝(提示 “请勿重复下单”),不存在就存 key(过期时间 30 分钟,和超时取消时间一致),同时给订单号加数据库唯一索引,就算 Redis 出问题,数据库也能拦截重复订单。
优惠券核销设计与开发:
核销逻辑绑定在 “支付成功” 节点:订单创建时先关联优惠券 ID(但不核销,只是占坑),等支付结果通知接口确认支付成功后,再更新优惠券表的状态为 “已核销”,同时记录核销订单号和核销时间。这里要重点校验:优惠券是否属于当前用户、是否未过期、是否未被其他订单核销,避免错核销或重复核销。
超时未支付订单取消:
最终选了 “延迟队列” 方案(RabbitMQ 的延迟交换机):用户下单时,往延迟队列发一条 30 分钟后到期的消息;消息到期后消费端查询订单状态,如果还是 “待支付”,就更新为 “已取消”,同时释放优惠券(把优惠券状态改回 “可用”)。之前考虑过定时任务(XXL-Job),但定时任务是 “批量扫表”,可能有 1-2 分钟延迟,延迟队列更实时,用户体验更好。
三、与支付模块的协同逻辑
订单模块不能独立存在,和支付模块的联动很关键:
支付接口对接:因为项目主要是小程序端,所以对接了微信小程序支付接口 —— 下单接口最后一步会调用支付服务的 “创建支付订单” 接口,传入订单号、金额、用户 openid,拿到微信返回的支付参数(如 prepay_id),再返回给前端调起支付。
支付结果通知:微信支付成功后会回调我们的 “支付结果通知接口”,接口里先验签(确保是微信官方回调,防伪造),验签通过后更新订单状态为 “已支付”,同时触发优惠券核销逻辑。
取消订单自动退款:如果订单已支付(比如用户付了钱但临时取消),取消时会自动调用支付服务的 “退款接口”,传入订单号、退款金额。这里用了策略模式:比如 “已支付未服务” 的订单是全额退款,“服务进行到一半” 的是按比例退款(比如退 50%),不同场景对应不同的退款策略,代码扩展性更好,后续加新场景不用改原有逻辑。
四、订单模块的系统优化(结合第九章内容)
随着订单数据量增长(比如运营 1 年有几十万订单),原来的设计会有性能问题,我们做了三方面优化:
用状态机管理订单状态:
早期订单状态变更靠大量 if-else(比如 “待支付能不能转已退款?”“已完成能不能取消?”),逻辑混乱还容易出 bug。后来用 Spring StateMachine 实现状态机,定义 “状态(待支付、已支付等)” 和 “转换事件(支付、取消、完成)”,比如只有 “支付” 事件能触发 “待支付→已支付”,“取消” 事件只能触发 “待支付→已取消” 或 “已支付→退款中”,逻辑可视化,维护起来很方便,实战里取消订单就完全基于状态机做的。
分库分表优化查询:
因为订单数据按年增长,单表查历史订单越来越慢,所以用 ShardingSphere-JDBC 做分库分表:按 “用户 ID 哈希” 分库(分 2 个库,分摊写压力),按 “创建时间” 分表 —— 近期订单(1 年内)存在主表(order_main),历史订单按年分表(比如order_main_2023、order_main_2024)。查询时按时间路由到对应表,比如查 2023 年的订单就查order_main_2023,运营端的订单列表还加了 “用户 ID + 创建时间” 的联合索引,查询速度从原来的 2s 降到 200ms 内。
订单快照与冷热分离:
订单快照:订单创建后,服务价格、描述可能会改(比如阿姨涨价),所以下单时把服务信息、用户信息、优惠信息存到 “订单快照表(order_snapshot)”,用户查订单详情时直接查快照,不用联表查服务表,接口响应快了很多。
冷热分离:1 年内的 “热数据” 存在 MySQL(支持高频查询),1 年以上的 “冷数据” 迁移到 HBase(存储成本低),用户查历史订单时,系统自动判断是热数据还是冷数据,冷数据就转发到 HBase 查询,既减轻 MySQL 压力,又节省存储成本。
总结下来,家政项目的订单模块核心是 “全生命周期管理”—— 从设计阶段就考虑数据准确性(事务、唯一索引),开发阶段解决并发和联动问题(防重复、延迟队列、策略模式),优化阶段应对数据增长(分库分表、冷热分离),最终保证模块稳定、高效,同时衔接好其他模块,给用户流畅的下单体验。

http://www.hskmm.com/?act=detail&tid=20584

相关文章:

  • PS中如何让文字中两行文字实现左对齐且中间部分文字对齐
  • 告别复制粘贴!Chat2File-DeepSeek 让 DeepSeek 对话成果直接变“成品” - 指南
  • 详解 PHP 中的命名空间 Namespace 与 PSR4 自动加载
  • 构建易受攻击的AWS DevOps环境:CloudGoat场景实践
  • 摩尔线程88天过会,过会当天提交注册:看懂这3个关键,才算懂国产GPU的“生存逻辑”
  • 2025最新四面刨厂家权威推荐排行榜:四面刨厂家实力品牌测评,含定制,高速,重型四面刨优选指南
  • Java之泛型使用教程
  • 单调栈优化DP [ROI 2018] Decryption
  • 上海住宅新规调整,背后的野心可大了
  • 魔兽争霸3冰封王座安装包下载
  • vscode tunnel远程隧道访问 正确重启方法
  • PS时文本框图层如何与图片图层水平中心对齐
  • AI两周手搓一个进度管理神器,快来安排你的国庆假期吧
  • MX 练石 2025 NOIP #10
  • 读人形机器人26人类情感
  • 岐金兰AI元人文构想的全面系统研究——声明ai研究
  • Amazon Q Developer扩展安全漏洞分析与修复指南
  • 价值共生的语法革命:从“悬荡悟空”到“元人文构境”
  • 2025工业冷水机、风冷式、螺杆式、小型、水冷式、实验室等多类型冷水机品牌排行榜,帮企业选靠谱设备
  • FreeFileSync 本地文件同步及开机自启
  • 2025登车桥生产厂家最新推荐榜单:聚焦月台登车桥、装卸登车桥、卸货平台登车桥、10吨登车桥产品,精选五家实力企业助力采购
  • 2025 年最新留学中介机构 TOP3 权威推荐排行榜,深度解析留学机构服务特色与核心优势
  • 2025 年最新权威推荐!化妆品代工公司 TOP3 排行榜:OEM/ODM/ 一站式服务优质企业精选指南
  • 2025年中国超声波清洗机源头厂家最新权威推荐排行榜:聚焦核心优势精选超声波清洗机品牌助力企业选购
  • 2025 年传感器品牌最新权威推荐排行榜:聚焦磁致伸缩等多类型传感器,传感器厂家选购指南!
  • 2025 年杭州画室推荐:之江画室 —— 央清班十年口碑加持,设计学录取亮眼的专业美术培训之选
  • 从流程适配到合规校验:AI赋能智能工单5天交付全流程
  • Tabnine+Sourcery协同:企业级动态仪表盘4天落地的底层逻辑
  • MySQL数据误删或者误更新如何恢复25-9-29
  • 使用 logwatch 监控系统日志