Skip to content

CatchShop 订单模块数据字典

数据表概览

CatchShop 商城订单模块包含 6 个核心数据表:

表名中文名称用途
shop_orders订单主表存储订单基础信息
shop_order_items订单商品表存储订单中的商品明细
shop_order_addresses订单地址表存储订单收货地址信息
shop_order_refunds订单退款表存储退款申请信息
shop_order_refund_addresses退货地址表存储退货收货地址
shop_order_refund_images退款图片表存储退款凭证图片

1. shop_orders - 订单主表

表说明:存储订单的核心信息,包括订单号、用户、金额、支付、物流等所有主要字段。

字段名类型长度是否必填默认值说明
idbigint unsigned--订单 ID(主键,自增)
order_nochar25-订单号
user_idbigint unsigned--用户 ID
total_amountint unsigned-0商品总金额(不含优惠折扣,单位:分)
order_amountint unsigned-0订单金额(含优惠折扣,单位:分)
coupon_idbigint unsigned-NULL优惠券 ID
coupon_amountint unsigned-0优惠券抵扣金额(单位:分)
points_amountint unsigned-0积分抵扣金额(单位:分)
points_countint unsigned-0积分抵扣数量
shipping_amountint unsigned-0运费金额(单位:分)
pay_amountint unsigned-0实际付款金额(包含运费,单位:分)
adjustment_amountint-0后台修改的订单金额(差价,单位:分)
pay_typetinyint unsigned-1支付方式:1=余额支付,2=微信支付,3=支付宝支付,4=积分支付
pay_statustinyint unsigned-1付款状态:1=未付款,2=已付款,3=支付失败
pay_atint unsigned-0付款时间戳
out_trade_novarchar64NULL第三方支付交易号
delivery_typetinyint unsigned-1配送方式:1=快递配送,2=自提
express_idbigint unsigned-NULL物流公司 ID
express_companyvarchar50NULL物流公司名称
express_novarchar50NULL物流单号
delivery_statustinyint unsigned-1发货状态:1=未发货,2=已发货
delivery_atint unsigned-0发货时间戳
receipt_statustinyint unsigned-1收货状态:1=未收货,2=已收货
receipt_atint unsigned-0收货时间戳
order_statustinyint unsigned-1订单状态:1=待付款,2=待发货,3=待收货,4=已完成,5=已取消
order_sourcetinyint unsigned-1订单来源:1=普通订单,2=秒杀订单,3=拼团订单,4=积分订单
order_source_idbigint unsigned-NULL来源记录 ID
buyer_remarktext-NULL买家留言
points_rewardint unsigned-0赠送的积分数量
is_settledtinyint unsigned-0订单是否已结算:0=未结算,1=已结算
is_commentedtinyint unsigned-0是否已评价:0=否,1=是
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_order_no (order_no)
  • INDEX idx_user_id (user_id)

关联关系

  • user_idusers.id (用户基础信息)
  • coupon_idcoupons.id (优惠券信息)

支付方式枚举

  • 1 - 余额支付
  • 2 - 微信支付
  • 3 - 支付宝支付
  • 4 - 积分支付

订单状态枚举

  • 1 - 待付款
  • 2 - 已付款
  • 3 - 已发货
  • 4 - 已完成
  • 5 - 已取消

订单来源枚举

  • 1 - 普通订单
  • 2 - 秒杀订单
  • 3 - 积分订单
  • 4 - 拼团订单

2. shop_order_items - 订单商品表

表说明:存储订单中每个商品的详细信息,包括商品快照、价格、数量等。

字段名类型长度是否必填默认值说明
idbigint unsigned--主键 ID(自增)
order_idbigint unsigned--订单 ID
user_idbigint unsigned--用户 ID
product_idbigint unsigned--商品 ID
sku_idbigint unsigned-NULLSKU ID
product_namevarchar255-商品名称
product_novarchar100NULL商品编码
image_idbigint unsigned-NULL商品封面图 ID
product_imagevarchar500NULL商品封面图 URL
product_contentlongtext-NULL商品详情快照
deduct_stock_typetinyint unsigned-2库存计算方式:1=下单减库存,2=付款减库存
spec_typetinyint unsigned-1规格类型:1=单规格,2=多规格
sku_novarchar255NULL商品 SKU 唯一标识
sku_namevarchar500NULLSKU 规格名称
sku_attrsjson-NULLSKU 的规格属性(JSON 格式)
product_weightdecimal unsigned8,20.00商品重量(Kg)
product_priceint unsigned-0商品价格(单价,单位:分)
line_priceint unsigned-0商品划线价(单位:分)
is_member_discounttinyint unsigned-0是否存在会员等级折扣:0=否,1=是
member_discount_ratiotinyint unsigned-0会员折扣比例(0-100)
member_priceint unsigned-0会员折扣的商品单价(单位:分)
member_discount_amountint unsigned-0会员折扣的总额差(单位:分)
coupon_amountint unsigned-0优惠券折扣金额(单位:分)
points_amountint unsigned-0积分抵扣金额(单位:分)
points_countint unsigned-0积分抵扣数量
points_rewardint unsigned-0赠送的积分数量
quantityint unsigned-0购买数量
total_amountint unsigned-0商品总价(数量 × 单价,单位:分)
pay_amountint unsigned-0实际付款价(折扣和优惠后,单位:分)
order_sourcetinyint unsigned-1订单来源:1=普通订单,2=秒杀订单,3=拼团订单,4=积分订单
is_commentedtinyint unsigned-0是否已评价:0=否,1=是
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • INDEX idx_order_id (order_id)

关联关系

  • order_idshop_orders.id (订单主表)
  • user_idusers.id (用户表)
  • product_idshop_products.id (商品表)
  • sku_idshop_product_sku.id (SKU 表)

3. shop_order_addresses - 订单地址表

表说明:存储订单的收货地址信息,保存下单时的地址快照。

字段名类型长度是否必填默认值说明
idbigint unsigned--地址 ID(主键,自增)
order_idbigint unsigned--订单 ID
user_idbigint unsigned--用户 ID
recipient_namevarchar30-收货人姓名
recipient_phonevarchar20-联系电话
province_idbigint unsigned--省份 ID
city_idbigint unsigned--城市 ID
district_idbigint unsigned--区/县 ID
province_namevarchar50-省份名称
city_namevarchar50-城市名称
district_namevarchar50-区/县名称
detail_addressvarchar255-详细地址
full_addressvarchar500-完整地址
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_order_id (order_id)

关联关系

  • order_idshop_orders.id (订单主表)
  • user_idusers.id (用户表)

4. shop_order_refunds - 订单退款表

表说明:存储订单退款申请信息,包括退款原因、金额、状态等。

字段名类型长度是否必填默认值说明
idbigint unsigned--售后单 ID(主键,自增)
refund_nochar25-售后单号
order_idbigint unsigned--订单 ID
order_item_idbigint unsigned-NULL订单商品 ID(整单退款时为空)
user_idbigint unsigned--用户 ID
refund_typetinyint unsigned--售后类型:1=仅退款,2=退货退款,3=换货
refund_reasonvarchar1000-用户申请原因(说明)
audit_statustinyint unsigned-0商家审核状态:0=待审核,1=已同意,2=已拒绝
audit_timeint unsigned-0审核时间
audit_user_idbigint unsigned-NULL审核人员 ID
refuse_reasonvarchar1000NULL商家拒绝原因(说明)
refund_amountint unsigned-0申请退款金额(单位:分)
actual_refund_amountint unsigned-0实际退款金额(单位:分)
is_user_shippedtinyint unsigned-0用户是否发货:0=未发货,1=已发货
user_ship_timeint unsigned-0用户发货时间
user_express_companyvarchar50NULL用户发货物流公司
user_express_novarchar50NULL用户发货物流单号
is_merchant_receivedtinyint unsigned-0商家收货状态:0=未收货,1=已收货
merchant_receive_timeint unsigned-0商家收货时间
is_merchant_shippedtinyint unsigned-0商家是否重新发货:0=未发货,1=已发货
merchant_ship_timeint unsigned-0商家发货时间
merchant_express_companyvarchar50NULL商家发货物流公司
merchant_express_novarchar50NULL商家发货物流单号
refund_statustinyint unsigned-1售后单状态:1=进行中,2=已同意,3=已拒绝,4=已完成,5=已取消
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
completed_atint unsigned-0完成时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • INDEX idx_order_id (order_id)
  • INDEX idx_user_id (user_id)

关联关系

  • order_idshop_orders.id (订单主表)
  • order_item_idshop_order_items.id (订单商品表)
  • user_idusers.id (用户表)

退款类型枚举

  • 1 - 仅退款
  • 2 - 退货退款

退款状态枚举

  • 1 - 申请中
  • 2 - 已同意
  • 3 - 已拒绝
  • 4 - 已退款

5. shop_order_refund_addresses - 退货地址表

表说明:存储退货时的收货地址信息。

字段名类型长度是否必填默认值说明
idbigint unsigned--主键 ID(自增)
order_refund_idbigint unsigned--售后单 ID
recipient_namevarchar30-收货人姓名
recipient_phonevarchar20-联系电话
province_idbigint unsigned--所在省份 ID
city_idbigint unsigned--所在城市 ID
district_idbigint unsigned--所在区/县 ID
province_namevarchar50-省份名称
city_namevarchar50-城市名称
district_namevarchar50-区/县名称
detail_addressvarchar255-详细地址
full_addressvarchar500-完整地址
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_order_refund_id (order_refund_id)

关联关系

  • refund_idshop_order_refunds.id (退款申请表)

6. shop_order_refund_images - 退款图片表

表说明:存储退款申请时上传的凭证图片。

字段名类型长度是否必填默认值说明
idbigint unsigned--主键 ID(自增)
order_refund_idbigint unsigned--售后单 ID
image_pathvarchar500-图片路径
image_namevarchar255NULL图片原始名称
image_sizeint unsigned-0图片大小(字节)
image_typevarchar20NULL图片类型(jpg,png,gif 等)
sorttinyint unsigned-0排序
created_attimestamp-NULL创建时间
updated_attimestamp-NULL更新时间
deleted_attimestamp-NULL软删除时间

索引信息

  • PRIMARY KEY (id)
  • INDEX idx_order_refund_id (order_refund_id)

关联关系

  • order_refund_idshop_order_refunds.id (售后单记录表)

业务规则说明

订单创建规则

  1. 订单号唯一性:订单号全局唯一,格式为 T + 时间戳 + 随机数
  2. 金额一致性:各个金额字段必须满足计算关系
  3. 库存扣减:根据 deduct_stock_type 决定扣库存时机
  4. 地址快照:订单创建时保存地址快照,后续地址变更不影响订单

支付处理规则

  1. 支付状态流转:未付款 → 已付款 → 支付失败(可逆)
  2. 支付金额校验:支付金额必须等于订单实付金额
  3. 重复支付防护:已支付订单不能重复支付
  4. 支付超时:未付款订单超时自动取消

物流管理规则

  1. 发货条件:订单必须已付款才能发货
  2. 物流信息:发货时必须填写快递公司和快递单号
  3. 收货确认:用户确认收货或系统自动确认收货
  4. 虚拟商品:虚拟商品无需物流,直接完成

售后处理规则

  1. 申请条件:已付款订单才能申请售后
  2. 退款金额:不能超过实际支付金额
  3. 退货地址:退货退款必须填写退货地址
  4. 状态流转:申请中 → 已同意/已拒绝 → 已退款

数据一致性规则

  1. 订单总价:订单商品总价 = 所有商品明细总价之和
  2. 实付金额:实付金额 = 订单金额 + 运费 - 各种优惠
  3. 积分使用:积分抵扣数量和金额必须符合兑换比例
  4. 库存同步:订单创建/取消时必须同步更新商品库存

枚举类定义

订单模块使用了多个枚举类来标准化状态值,位于 modules/Shop/Enums/Order/ 目录:

OrderStatus - 订单状态

php
enum OrderStatus: int
{
    case PENDING_PAYMENT = 1; // 待付款
    case PENDING_DELIVERY = 2; // 待发货
    case PENDING_RECEIPT = 3; // 待收货
    case COMPLETED = 4; // 已完成
    case CANCELLED = 5; // 已取消
}

OrderSource - 订单来源

php
enum OrderSource: int
{
    case NORMAL = 1; // 普通订单
    case SECKILL = 2; // 秒杀订单
    case GROUP_BUY = 3; // 拼团订单
    case POINTS = 4; // 积分订单
}

PayStatus - 支付状态

php
enum PayStatus: int
{
    case PENDING = 1; // 未付款
    case PAID = 2; // 已付款
    case FAILED = 3; // 支付失败
}

PayType - 支付方式

php
enum PayType: int
{
    case BALANCE = 1; // 余额支付
    case WECHAT = 2; // 微信支付
    case ALIPAY = 3; // 支付宝支付
    case POINTS = 4; // 积分支付
}

DeliveryStatus - 发货状态

php
enum DeliveryStatus: int
{
    case NOT_SHIPPED = 1; // 未发货
    case SHIPPED = 2; // 已发货
}

DeliveryType - 配送方式

php
enum DeliveryType: int
{
    case EXPRESS = 1; // 快递配送
    case PICKUP = 2; // 自提
}

ReceiptStatus - 收货状态

php
enum ReceiptStatus: int
{
    case NOT_RECEIVED = 1; // 未收货
    case RECEIVED = 2; // 已收货
}

RefundStatus - 退款状态

php
enum RefundStatus: int
{
    case IN_PROGRESS = 1; // 进行中
    case APPROVED = 2; // 已同意
    case REJECTED = 3; // 已拒绝
    case COMPLETED = 4; // 已完成
    case CANCELLED = 5; // 已取消
}

RefundType - 退款类型

php
enum RefundType: int
{
    case REFUND_ONLY = 1; // 仅退款
    case RETURN_REFUND = 2; // 退货退款
    case EXCHANGE = 3; // 换货
}

AuditStatus - 审核状态

php
enum AuditStatus: int
{
    case PENDING = 0; // 待审核
    case APPROVED = 1; // 已同意
    case REJECTED = 2; // 已拒绝
}

枚举使用示例

php
// 在 Repository 中使用枚举
class OrderRepository extends Repository
{
    public function findPendingPaymentOrders()
    {
        return $this->query()
            ->where('order_status', OrderStatus::PENDING_PAYMENT->value)
            ->get();
    }

    public function updateOrderStatus(int $orderId, OrderStatus $status)
    {
        return $this->query()
            ->where('id', $orderId)
            ->update(['order_status' => $status->value]);
    }
}

// 在 Service 中使用枚举
class OrderService
{
    public function processPayment(Order $order)
    {
        // 更新支付状态
        $order->update([
            'pay_status' => PayStatus::PAID->value,
            'order_status' => OrderStatus::PENDING_DELIVERY->value,
            'pay_at' => time()
        ]);
    }
}

枚举方法说明

每个枚举类都实现了 Catch\Enums\Enum 接口,提供以下方法:

  • value(): 返回枚举的数值
  • name(): 返回枚举的中文名称
  • equal(int $value): 比较枚举值是否相等

这些枚举类确保了订单系统中状态值的一致性和类型安全,避免了硬编码数值的问题。