跳到主要内容

订单架构介绍

一、概念介绍

  1. 交易的概念:指用户与平台之间,用户将平台的商品加入购物车,并提交订单并付款给平台,平台看到用户发起的订单,并将商品发送给用户,用户确认收款,至此完成了一笔成功的交易。

  2. 订单的概念:把购物车中的商品,结算参数信息归拢在一起,并按照店铺拆分,购物车中每一个店铺为一个订单,一笔交易包含多个订单,交易价格为我的购物车中所有商品的价格。

通过以上的概念得知交易包含:用户,商品,购物车,订单,平台。其中用户和平台代表交易的双方,商品,购物车和订单代表交易的媒介。

二、数据库设计

1. 表结构设计

  • 交易表:es_trade

    jiaoyibiao

  • 订单表:es_order

    00fe7314a5e34ea7dc7259e1f5b00b37

  • 订单货物表: es_order_items

    image-20220530160451376

  • 订单扩展信息表: es_order_meta

    企业微信截图_276ef9aa-0acf-476f-991e-18b6aa3a3a58

  • 订单投诉表: es_order_complain

    企业微信截图_add5a4c0-e399-45a8-9dc9-3df6c7314efe

  • 订单投诉对话表:es_order_complain_communication

企业微信截图_7408a94a-9498-481e-8f74-1f5266bf2385

  • 订单操作日志表

企业微信截图_0bb7dd43-a79d-43f2-b44c-0d5f4a12a7c4

2. 表的关联关系

企业微信截图_267ad06c-fdb0-4187-9ef6-be0a1b9bfc26

三、订单状态及类型

1. 订单状态

  1. 声明方式:

    枚举:cn.shoptnt.model.trade.order.enums.OrderStatusEnum

  2. 存储: es_order表 order_status字段

  3. 详细说明

    企业微信截图_8dfb8c65-74e5-408a-bcd9-116a86327201

  4. 订单状态流程

    • 款到发货

      image-20201102120545609

    • 货到付款

      image-20201102140439119

    • 拼团

      image-20201102142413071

  5. 新订单-->已确认状态变更

    image-20201102154856690

2. 支付状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.PayStatusEnum

  2. 存储: es_order表 pay_status 字段

  3. 详细说明

    企业微信截图_aa53924b-6c96-42ea-ae2c-51ebb72478f3

3. 发货状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.ShipStatusEnum

  2. 存储: es_order表 ship_status 字段

  3. 详细说明

    企业微信截图_293ea891-4b26-4391-8d89-bbe0c40e0492

4. 支付类型

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.PaymentTypeEnum

  2. 存储: es_order表 payment_type 字段

  3. 详细说明

    企业微信截图_4d113f0d-3dc4-4489-adc8-bead5fa90f27

5. 订单操作类型

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderOperateEnum

  2. 详细说明

    image-20220602160229496

6. 评论状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.CommentStatusEnum

  2. 存储: es_order表 comment_status字段

  3. 详细说明

    企业微信截图_293ea891-4b26-4391-8d89-bbe0c40e0492

7. 订单元Key

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderMetaKeyEnum

  2. 存储: es_order_meta表 meta_key字段

  3. 详细说明

    企业微信截图_8f4d16c2-a78a-4d0d-9dae-659519b30820

8. 订单出库类型

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderOutTypeEnum

  2. 存储: es_order_out_status表 out_type字段

  3. 详细说明

    企业微信截图_4a496092-097d-4048-8ffa-2df1b4315aea

9. 订单出库状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderOutStatusEnum

  2. 存储: es_order_out_status表 out_status字段

  3. 详细说明

    企业微信截图_eba4ffc5-4c84-49dc-baa1-532f14356b80

10. 订单申请售后服务状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderServiceStatusEnum

  2. 存储: es_order表 service_status字段

  3. 详细说明

    企业微信截图_823c34a2-28e0-41e8-897f-f74356aed09c

11. 订单类型

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.OrderTypeEnum

  2. 使用: es_order表 order_type字段

  3. 详细说明

    企业微信截图_110b9673-b415-48a4-81b6-ed437090e241

12. 交易状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.order.enums.TradeStatusEnum

  2. 使用: es_trade表 trade_status字段

  3. 详细说明

    企业微信截图_12213d54-d1b6-46aa-9bf9-7fc58c93aeaa

13. 交易投诉状态

  1. 声明方式: 枚举:cn.shoptnt.model.trade.complain.enums.ComplainStatusEnum

  2. 使用: es_order_complain表 status字段

  3. 详细说明

    企业微信截图_04154808-dff7-425c-bcad-ac4e5b9f7387

四、订单创建

1. 订单创建流程

image-20201030175237859

1. 商品详情页面---点击立即购买或加入购物车,此时会将购买的商品存入redis
2. 如果是立即购买会自动跳转至商品结算页面,如果是加入购物车,需要进入购物车页面点击结算,跳转至商品结算页面
3. 商品结算页面---获取结算详情(总价格,优惠活动等)
4. 商品结算页面---用户设置收货地址、支付类型、发票、送货时间等参数信息。
5. 商品结算页面---点击提交订单,此时进行交易入库和订单入库

2. Redis缓存结构

  • 购物车原始数据

    key:{CARTORIGIN_DATA_PREFIX}买家id

    value:List<CartSkuOriginVo>

    存储了购物车商品列表

  • 立即购买原始数据

    key值:{BUYNOW_ORIGIN_DATA_PREFIX}买家id

    value值:List<CartSkuOriginVo>

    存储了立即购买的商品,list的长度是1

  • 用户选择的促销信息

    key值:{CARTPROMOTION_PREFIX}买家id

    value值:SelectedPromotionVo

    存储了优惠活动和优惠卷等信息(按卖家分类)

五、订单支付

1. 跳转支付

img

  1. 前端对某订单发起支付

    通过ajax调用,传递交易或订单SN参数(带token)

  2. 支付API返回跳转参数

    支付api返回跳转form所需的表单项,格式如下:

    {
    gateway_url:"https://openapi.alipay.com/gateway.do",
    form_items[{
    item_name:"",
    item_value:""
    }
    //, other ...
    ]
    }
  1. 由前端向第三方支付发起跳转

    这部分的操作体验为: 新打开窗口来打开第三方平台

    本窗口遮罩,并显示两个按钮: 支付成功、支付出现问题

  2. 用户在第三方平台上完成支付操作

  3. 第三平台跳转回我方平台

    此时会跳向 DomainSettings.buyer/payment/{trade_type}/{sn}/result

    既同步回调地址,但这里我们不再做支付结果校验

    此页面为前端页面,展示出交易或者订单(使用trade_type来判断交易trade或者订单order) “支付已经完成”字样

    支付结果会在异步通知中来完成

  4. 第三方平台异步通知我方系统支付结果

    我方系统更改订单状态

2. 二维码支付

img

  1. 当用户选择某个支付方式时,前端嵌入一个iframe

  2. 在iframe中向支付api发起支付请求

    此api为:get:/order/pay/{trade_type}/{sn}

    企业微信截图_066664c8-98d1-492b-b32b-61e0ddc205f7

  3. api返回跳转的form 项

    支付api返回跳转form所需的表单项,格式如下:

    {
    gateway_url:"https://openapi.alipay.com/gateway.do",
    form_items[{
    item_name:"",
    item_value:""
    }
    //, other ...
    ]
    }
  4. 由前端向第三方支付发起跳转

  5. 第三方支付返回二维码的界面

    在本界面中,支付宝本身提供了 支付状态查询功能

    但微信没有提供这样的功能,所以,如果是微信的话,在第三步中的gateway_url 实际上会是我们自己的一个api,在这个api中我们自己实现了和支付宝二维码界面一样的的支付状态查询功能

    微信二维码显示页的api为:

    POST:/order/pay/weixin/qrpage/{微信交易号}/{微信QR码}

    其中交易号和微信QR码会在第二步中的返回值中得到

    此api的view页面在:/resources/templates/weixin_qr.ftl

    在此页面中会包含一个二维码显示的图片,其src 为:

    /order/pay/weixin/qr/{QR码}

    此页面还包含一个付款状态检测程序,以便及时得到用户付款成功的反馈完成页面的跳转,此api为:

    /order/pay/weixin/status/{微信交易单号}

  6. 用户用手机扫描上述二维码

  7. 手机上的微信或支付宝会调起支付

  8. 用户在第三方平台上完成支付

  9. 第三方平台会通知我平台支付的状态

  10. 此时iframe中的二维码界的js程序会轮询支付状态,就但支付成功统一调用一个规定好的方法:

    parent.payComplete()

  11. 前端在父页面中已经定义好了这样的一个方法来处理相应的支付完成操作

六、订单操作

订单的不同状态,可以进行不同的操作,总结如下

  • 款到发货订单(在线支付的订单)

    企业微信截图_15bfcdac-8f44-4ee7-a869-8686c9877f96

  • 货到付款订单

    企业微信截图_20f2e73c-063c-448f-90b6-844d83e8c817

  • 拼团订单

    企业微信截图_05db744c-a811-4500-b097-8ba2d8098a86

订单状态声明:OrderStatusEnum [查看详情](#1. 订单状态)

操作类型声明:OrderOperateEnum [查看详情](#5. 订单操作类型)

可进行的操作声明:shoptnt-core/src/main/resource/order_flow.xml

程序启动的时候将该配置文件加载到内存中,在使用时,调用校验方法校验是否允许操作。

加载该配置文件的类:cn.shoptnt.model.support.XmlProfileParse

获取的方法:cn.shoptnt.model.support.XmlProfileParse.getFlowMap()

七、交易投诉

1. 交易投诉流程

img

八、定时任务

1. 退款状态检测

执行间隔:每小时执行

定时任务声明:cn.shoptnt.consumer.job.execute.impl.RefundStatusJobConsumer

2. 订单状态扫描

执行间隔:每日执行

有一些订单状态会自动变化,总结如下:

企业微信截图_739e6b3d-e5b3-4e78-a4c5-0c153b30877a

定时任务声明:

cn.shoptnt.consumer.job.execute.impl.OrderStatusCheckJob