Appearance
问题现象
在平台后台或门店后台查看订单列表、订单详情或打印小票时,发现部分历史订单的商品标题、规格属性或图片缺失,或者商品信息显示为其他无关商品。
根本原因
- 订单商品快照表数据不一致:EBAOZU 在用户下单时会将当时的商品属性、单价、封面图等写入订单商品快照表(
eb_store_order_cart_info)。若手动在数据库删减了该表数据或直接重置了eb_store_order但遗留了旧快照,会导致数据关联错位。 - 多环境 Redis 缓存 Key 碰撞:测试环境与正式环境使用同一个 Redis 实例且未配置独立缓存前缀(
CACHE.PREFIX),导致读取到了其他站点的临时购物车或商品快照缓存。 - 数据库自增 ID 错位:在数据库中直接手动
TRUNCATE或清理订单表却未同步清理cart_info关联表。
解决与预防规范
隔离 Redis 缓存前缀
检查项目根目录 .env 文件,确保每套环境拥有独一无二的缓存前缀:
ini
[CACHE]
DRIVER = redis
PREFIX = ebaozu_v4_prod_
TAG_PREFIX = tag_ebaozu_v4_修改后重启 Swoole 守护进程并清理缓存:
bash
php think clear:cache
supervisorctl restart ebaozu_v4正确测试与清理订单数据规范
若在开发测试阶段需要清空测试订单,必须同时清理订单主表与全部关联子表,切勿单张表清理:
eb_store_order(订单主表)eb_store_order_cart_info(订单商品快照表)eb_store_order_status(订单操作记录表)eb_store_order_invoice(订单发票表)