订单 (Shopping.Order)


订单插件提供了购买商品相关功能,包括

  • 购物车
  • 订单支付
  • 订单管理
  • 发货管理
  • 收货地址管理

购物车的数据结构

购物车商品可以关联用户,也可以关联会话,如果开启了非会员下单,则不需要登陆也可以添加商品到购物车。

购物车的ER图

订单的数据结构

一个订单对应多个订单商品,订单商品保存了下单时的商品价格等信息。
订单可以关联买家和卖家,但不能关联多个卖家,如果购物车中有多个卖家的商品时会分别下单。

订单的ER图

发货单的数据结构

一个订单可以分多次发货,发货单关联了订单商品和发货数量。
如果发货商品中包含了实体商品,应该选择物流和填写物流编号。
订单和发货单会把用户填写的收货地址复制一份保存在内部,不会关联收货地址表中的数据。

发货单和收货地址的ER图

购物车页面

购物车页面

前台订单页面

前台订单列表页 前台订单详情页

后台订单页面

后台订单列表页

订单数据的详细解释

每个订单都会分一个买家订单和卖家订单,买家订单属于买家,卖家订单属于卖家。
订单的数据主要在卖家订单中,交易关联的也是卖家订单。

  • BuyerOrder 买家订单
    • SellerOrder 对应的卖家订单
    • BuyerSessionId 买家的会话Id,仅用于非会员下单
    • Owner 买家用户,没有时等于null
    • CreateTime 创建时间
    • UpdateTime 更新时间
    • Deleted 是否已删除
    • Remark 买家备注
  • SellerOrder 卖家订单
    • Serial 订单编号,唯一键
    • Buyer 买家用户,没有时等于null
    • Owner 卖家用户,没有时等于null
    • State 订单状态,一个枚举值
    • OrderParameters 订单参数,类型是Dictionary
      • ShippingAddress 收货地址,格式是{ Country: 国家Id, RegionId: 地区Id, ... }
      • SellerToLogistics 卖家分别选择的物流,格式是{ SellerId: LogisticsId, ... }
      • PaymentApiId 支付接口Id
      • CartProducts 商品列表,格式是{ 购物车商品Id: 数量, ... }
      • 支持更多的参数
    • TotalCost 当前的订单总金额
    • Currency 货币单位
    • TotalCostCalcResult 当前的订单总金额的计算结果,类型是OrderPriceCalcResult
    • OriginalTotalCostCalcResult 原始的订单总金额的计算结果,类型同上,创建订单时的价格
    • CreateTime 创建时间
    • UpdateTime 更新时间
    • StateTimes 各个状态的切换时间
    • Deleted 是否已删除
    • Remark 卖家备注
    • OrderProducts 订单商品的集合,一对多
      • Product 对应的商品,多对一
      • MatchParameters 商品匹配参数,包含规格等信息
      • Count 购买数量
      • UnitPrice 单价
      • Currency 单价的货币
      • UnitPriceCalcResult 单价的计算结果,类型是OrderPriceCalcResult
      • OriginalUnitPriceCalcResult 原始单价的计算结果,类型同上,创建订单时的价格
      • CreateTime 创建时间
      • LastUpdated 更新时间
      • PropertyValues 关联的属性值集合,多对多,类型是OrderProductToPropertyValue
    • OrderComments 订单留言的集合,一对多
      • Creator 留言人
      • Side 买家或卖家留言,枚举类型
      • Content 留言内容
      • CreateTime 创建时间

  • OrderDelivery 发货单
    • Serial 发货单编号,唯一键
    • Order 属于的订单,多对一
    • Logistics 物流,多对一
    • LogisticsSerial 物流给出的发货编号(快递单编号),虚拟发货时不需要
    • Operator 发货人
    • CreateTime 创建时间
    • LastUpdated 更新时间
    • Remark 备注
    • OrderProducts 包含的商品集合,一对多,类型是ISet
      • OrderProduct 订单商品,多对一
      • Count 发货件数

完整的订单流程

  • 买家添加商品到购物车
  • 买家跳转到购物车页面
  • 买家提交订单
    • 提交商品和数量,收货地址,物流和支付接口等信息
    • 如果提交了包含多个卖家的商品,应该每个卖家创建一个单独的订单
    • 运费每个卖家分别计算
  • 买家跳转到结算页面
    • 结算页面会显示金额和跳转到支付平台的按钮
  • 卖家有需要时可以修改收货地址或金额
  • 买家跳转到支付平台
  • 买家在支付平台上完成付款
    • 即时到账或担保交易
  • 卖家在后台进行发货操作
    • 可以分几次发货完毕
  • 买家确认收货,确认后订单交易完成
    • 可以在会员中心确认收货
    • 也可以在支付平台上确认收货

FAQ

买家可以对订单进行哪些操作?

买家可以付款,取消订单和确认收货。

卖家可以对订单进行哪些操作?

卖家可以修改地址,修改价格和数量,发货和作废订单。

取消订单和作废订单有什么区别?

取消订单是买家操作的,作废订单是卖家或后台操作的,
取消订单只能在付款前操作,作废订单可以在订单交易之前操作。

多卖家下单时是怎样处理的?

多卖家下单时会根据每个卖家分别创建订单和交易,所有交易创建完成后会创建一笔合并交易。
这个插件没有提供卖家发货的管理界面,只能在后台中发货,需要这个功能应该使用关联的其他插件。

合并支付订单是怎么处理的?

如果下单时包含多个卖家的商品,会根据卖家创建多个订单和多个交易,并再创建一笔合并交易。
如果不支付合并交易而是单独打开子交易进行支付,合并交易会自动作废。
会员可以在会员中心手动创建新的合并交易,这时原有的合并交易也会自动作废。

各个操作的条件是什么

  • 买家取消订单: 买家付款之前
  • 买家付款: 买家付款之前
  • 买家确认收货: 卖家全部发货之后,订单交易成功之前
  • 卖家修改地址: 卖家全部发货之前
  • 卖家修改价格: 买家付款之前,和担保交易开始付款之前
  • 卖家发货: 卖家全部发货之前
  • 卖家作废订单: 订单交易成功之前
  • 卖家代确认收货: 卖家全部发货之后,订单交易成功之前