『互联网架构』软件架构-解密电商系统-订单交易业务(74)

很多人都在淘宝购买过东西,基本得流程都是一致的。

(一)订单

  • 购物车
    > 例如:jd分为自营和多家店铺的,它的购物车比较复杂些。
    > 购物车如果保存在session中的话,用户量比较大的情况下,tomcat承受不住。比较合理的方式是保存在redis中,来一起说下redis保存的数据格式。
    >针对购物车结构
  1. CartGroup(一个店铺一个CartGroup)
  2. CartPkg(一个订单就是一个包裹)
  3. 一个订单里面就是一个List

购物车分两种,登录前购物车和登录后购物车
1. 登录前是通过redis内部保存的,key=ip_类型(pc,ios,android)
2. 登录后是通过用户的userid,key=userId
3. 登录前到登录后他们两者通过redis进行对比,获取最新的合并结果。

  • 下单
    > 买个索尼电视,佳能的相机,这是2个店铺,配送方式不同,仓库也不一样,每个商家的优惠力度也不一样,有打五折的,有打七折的。例如:苹果打5折,我买10个,地址是在郑州,配送方式是从武汉,武汉仓库只有9个苹果,但是河北那边有2个,长沙有3个。按照订单理论如果武汉有11个,买10个刚刚够你买。但是现在武汉只有9个,所以直接就给你发了武汉的9个,河北的1个,够你的10个,这个就是就近原则。但是这样有个问题退单怎么办,整体退单要退一起退,反之不要退。 设计到订单的拆分合并。

订单号生成?订单防重。只要保证分布式下不重复就可以
1. redis incr 自增
2. 时间戳+自增变量
3. UUID

  • 电商订单的流程梳理

t_order 订单表

字段名 数据类型 是否主键 描述
id int 订单编号。
account String 账号
payType varchar 付款方式
carry varchar 运送方式
rebate DECIMAL(9,2) 折扣
createdate datetime 创建日期
remark varchar 备注、支付宝的WIDsubject
status String init:未审核;pass:已审核;send:已发货;sign:已签收;cancel:已取消;file:已归档;finish:交易完成;
refundStatus String 退款状态(直接借用了支付宝的退款状态)。WAIT_SELLER_AGREE:等待卖家同意退款;WAIT_BUYER_RETURN_GOODS:卖家同意退款,等待买家退货;WAIT_SELLER_CONFIRM_GOODS:买家已退货,等待卖家收到退货;REFUND_SUCCESS:卖家收到退货,退款成功,交易关闭
paystatus String n:未支付;p:部分支付;y:全部支付
lowStocks String n:库存不足;y:库存充足。默认n
amount Double 订单总金额
amountExchangeScore Int 订单总兑换积分
fee Double 运费总金额
ptotal Double 商品总金额
quantity Int 商品总数量
updateAmount String n:没有修改过;y:修改过;默认:n
expressCode String 配送方式编码
expressName String 配送方式名称
expressNo String 快递运单号
expressCompanyName String 快递公司名称
confirmSendProductRemark String 确认发货备注
otherRequirement String 客户的附加要求
closedComment String 此订单的所有订单项对应的商品都进行了评论,则此值为y,表示此订单的评论功能已经关闭,默认为null,在订单状态为已发货后,则用户可以对订单进行评价。
score Int 订单获赠的积分

t_orderdetail订单明细表

字段名 数据类型 是否主键 描述
ID int ID号
orderID int 与t_order表的id字段关联
orderdetailID String 订单项ID
productID int 商品ID
giftID String 商品赠品ID
productName String 商品名称
price money 价格
number int 数量
total0 Double 总金额(数量*价格)
fee Double 配送费
isComment String 是否评价过。n:未评价,y:已评价;默认n
lowStocks String n:库存不足;y:库存充足。默认n
s String 商品规格信息

t_orderpay 支付记录表

字段名 数据类型 是否主键 描述
id int 自增
orderid String 订单ID
paystatus String 支付状态。y:支付成功,n:支付失败
payamount Double 支付金额
createtime String 支付时间
paymethod String 支付方式
confirmdate String 确认日期
confirmuser String 确认人
remark String 备注
tradeNo String 支付宝交易号,以后用来发货

t_ordership 订单配送表

字段名 数据类型 是否主键 描述
id int 自增
orderid String 订单ID
shipname String 收货人姓名
shipaddress String 收货人详细地址
provinceCode String 省份代码
province String 省份
cityCode String 城市代码
city String 城市
areaCode String 区域代码
area String 区域
phone String 手机
tel String 座机
zip String 邮编
sex String 性别
remark String 备注

t_orderlog订单日志表

字段名 数据类型 是否主键 描述
id int 自增
orderid String 订单ID
account String 操作人
createdate date 记录时间,默认是当前时间
content String 日志内容
accountType String w:会员;m:后台管理人员;p:第三方支付系统异步通知

t_express快递配送表

字段名 描述 类型 数据类型
id 自增长 int 唯一
code 快递编码 String 三个值可选:EXPRESS(快递)、POST(平邮)、EMS(EMS)
name 快递名称 String
fee 物流费用 Double
order1 排序 Int
  • MQ实现最大特点:异步和解耦。(付款,订单状态,发布状态)
显示状态 订单状态 支付状态 发货状态
已付款 活动订单 已支付 未发货
已发货 活动订单 已支付 已发货
待自提 活动订单 已支付 自提点签收
已签收 活动订单 已支付 用户签收
已拒收 活动订单 已支付 用户拒收
配送成功 活动订单 已支付 配送成功
配送失败 活动订单 已支付 配送失败
交易成功 已完成 已支付 配送成功
交易失败 已完成 已支付 配送失败
取消中 取消中 已支付 未发货
已取消 订单取消 未发货 | 

(二)统一配置文件神器-Disconf

百度disconf是一套完整的基于zookeeper的分布式配置统一解决方案。
一个分布式环境中,同类型的服务往往会部署很多实例。这些实例使用了一些配置,为了更好地维护这些配置就产生了配置管理服务。通过这个服务可以轻松地管理成千上百个服务实例的配置问题.

  • 官网介绍
    > https://github.com/knightliao/disconf
    > 虽然3年没维护了,但是依然很给力

  • 文档
    > http://disconf.readthedocs.io/zh_CN/latest/

  • 介绍

  • disconf的模块架构图

  • 快速开始

    这里直说pom里面的配置,具体看disconf文档写的更清楚

<dependency>
    <groupId>com.baidu.disconf</groupId>
    <artifactId>disconf-client</artifactId>
    <version>2.6.36</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.5</version>
</dependency>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.6</version>
</dependency>

PS:订单交易的流程和在web开发中如果多项目通过统一配置文件来进行处理。

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>>原文链接地址:『互联网架构』软件架构-解密电商系统-订单交易业务(74)
上一篇: 下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注