关于订单业务的一些思考

1、商品业务

 

业务思想:

一般的订单业务设计:主要分为3part, 主订单表, 子订单表, 订单详情表。

                                                   图(1)

售前:拿货
售中:卖货
履约:给货
售后:退换

 

1,下单减库存,如唯品会,减30分钟,JD,减1天,天猫,减3天。

2,付款减库存,如时效性特别高的秒杀,很少见。

总结:何时减库存,最终的目的是要保障每个商品都能卖出去(卖方利益),每个人都能买到想要买的商品(买方利益),需要在买方与卖方之间权衡,现在大部分的做法就是下单减库存(保障你每个人都能买到-买方利益),但会有一定的时间限制(保障每个商品都能卖出去-卖方权益)。

 

关于下单时,订单信息+ 商品快照的使用

涉及领域 订单中心、商品中心

场景:

 

订单的逻辑的拆分:

根据以上的规则,订单逻辑上面应该按照这样的方式来拆分。

                                                                图(2)

根据以上的规则,订单逻辑上面应该按照这样的方式来拆分。

订单的金额拆分:

                                                     图(3)

这里会引入部分商品打折,部分商品搞活动,部分商品有优惠券,这种情况发生,基于这种考虑需要引入子订单的概念。

例子:营销那边有很多的优惠券和营销工具,商户可以通过营销系统的各种工具把各种优惠券派发到用户手上,怎么派发我们不管,用户手上就是一张买满500 赠送一本书的券,券A。

此时用户把sku1价值400的蛋糕(常价,非特价商品)和价值200的酒sku2(特价商品),加入到购物车,此时用户sku1标注,买2件非特惠价的商品,可以打8折,用户就把sku3价值150的枕头加入到购物车。此时,sku1+sku3 总价打8折,sku1+sku2+sku3 8折后符合满赠,送了一本书价值0元。

同时,该用户是该店的老客户了,商城系统有积分抵扣的规则,目前该用户有200积分,按规则每10积分抵扣1毛钱,既能抵扣2块钱。

总订单:

    支付金额638

    金额:640

    积分抵扣金额2块

    运费0

子订单1:

    sku1

   蛋糕  

  总价320

  商品价格400

  优惠类型:优惠8折(订单表关联到某优惠类型,这里的优惠类型是优惠8折)

子订单2:

  sku2

 酒

 总价200

 商品价格200

优惠类型: 特惠价(订单表关联到某优惠类型,这里的优惠类型是特价商品)

子订单3:

   sku3

   枕头

  总价120

  商品价格150

  优惠类型:优惠8折(订单表关联到某优惠类型,这里是优惠8折)

子订单4:

    sku4

   书

  总价0

  商品价格0

  优惠类型:赠品(订单表关联到某优惠类型,这里是满赠)

优惠券的价值

是优惠,不是现金。

请注意电商领域通俗意义上的优惠券是指下单可以优惠金额的券,使用即作废。不是那种可以充值到账户的现金券,也不是可以使用多张的折扣券。

退款的时候优惠的金额怎么处理

如果不处理,那用户下单100+50-20优惠,如果全部退款则是退款150,很明显对商家造成营收上面的损失。

如果处理则按照”哪里优惠回哪里”的规则来处理:

  • 如果是指定某件商品/某类商品的优惠券,那优惠金额肯定由该商品承担的。当退该商品,需减去优惠券金额。
  • 如果是指定某些(分类、商户、活动等),那优惠金额分摊到符合资格的商品上。
  • 如果是全店铺通用,那优惠金额分摊到每一个购买商品上。

分摊金额的算法有两种:

  • 按照符合优惠券的商品金额进行均摊
  • 按照订单剩余部分是否符合优惠券

举例:顾客购买了A商品1件90元,B商品1件30元,使用了一张优惠券满100元减20元。如果顾客想退款A商品:

  • 按照算法1,提交退款的最多金额为90*(90+30-20)/(90+30)=75元。
  • 按照算法2,因为商品B<100元,则提交退款的最多金额为90-20=70元。

实际情况中方案A和B的金额,有高有低。如果由于特殊原因需要给用户多退,客服可在后台修改。

采用的是第一种,对用户比较公平,体验比较好。

    

常用的交易流程:

                                                            图(4)

我们项目现状需求的流程:

                                                           图(5)

上面的状态扭转时间是可以根据需要来调整,并设计job来做一定的自动补偿(job定时跑任务实现)和人工手动补偿(Oem页面手动触发补偿)的机制,实物商品取消订单,要考虑退款的时效性。      

 

                                                                  图(6)

对于目前项目现状的实现方案:

订单单品的思路:

mall_product_order + product_order作为订单主表(这2张表后面需要改造,可以分步进行)

字段名类型允许空值默认值是否主键注释
orderNo    订单中心的OrderId
customerId    买家用户Id
status    订单状态
totalFee    主订单金额
create_time     
update_time     

 

sub_product_order(字段待补充)

字段名类型允许空值默认值是否主键注释
orderNo    订单中心的OrderId
subOrderNo    子订单Id
totalFee    订单金额
subOrderType    子订单状态
     积分
     折扣

备注:子订单为母订单拆分出来的一个订单,子订单也含有多个商品,一个商品sku会有一个订单明细即sub_product_order_detail。

 

sub_product_order_detail(看是和sub_product_order 合并还是独立出来,字段待补充)

字段名类型允许空值默认值是否主键注释
subOrderNo    子订单号
shopId    商户Id
goodId    商品Id
skuiId    规格Id
goods_version    商品变更的历史版本号
totalFee    商品金额
amount    单商品sku数量
be_salse_status    售后状态
     审核状态
      

备注: goods_version 商品库存做版本化,除上架下架操作外,商品信息没做一次修改都会生成一个版本。

 

举个例子:比如订单有A 2X10元   B 1X20元  C 3X30元 的商品, 目前对 B C 商品进行退款,  那么sub_product_order 有 A B C 3个单品的单, 对B C(BC单独发起还是合并发起都可以) 发起退款,就是按原来的全量退款来做,这样退款和订单就分离开来了,原来的退款逻辑不变。

思路还不成熟,需要考虑。

涉及修改的逻辑:

1:下单逻辑需要再调整,需要对购物车List商品进行拆单,insert到子订单表中。

2: 

 

参考文章:

B2C自营商城的订单设计方案 https://zhuanlan.zhihu.com/p/26470223?utm_source=wechat_session&utm_medium=social

大众点评订单系统分库分表实践 https://zhuanlan.zhihu.com/p/24036067?utm_source=wechat_session&utm_medium=social

B2C自营电商APP的优惠券设计方案(上篇) https://zhuanlan.zhihu.com/p/25083430

B2C自营商城的商品设计方案:http://www.woshipm.com/pd/628034.html

转载于:https://my.oschina.net/u/1187675/blog/1618297

<think>好的,我需要帮助用户了解如何使用StarUML设计订单业务流程的类图,并提供示例教程。根据用户提供的引用内容,首先需要结合引用[2]中提到的类图的重要性,以及引用[3]中关于用户对象的概念。 首先,我应该解释类图的基本组成部分,比如类、属性和方法,然后结合订单业务流程的具体例子,比如订单、客户、订单项等类。接着,根据引用[1]中的步骤,指导用户在StarUML中创建类图,添加类并定义它们的属性和方法。需要确保每个类之间的关系正确,比如关联、聚合或组合,比如客户可以有多个订单订单包含多个订单项。 另外,用户可能需要了解如何验证模型,如引用[1]提到的模型验证功能,指出可能的错误。这部分可以作为注意事项或优化建议。同时,示例代码或结构化的步骤会帮助用户更清晰地操作。最后,生成相关问题,引导用户深入思考其他相关方面,比如类图与其他UML图的区别或设计模式的应用。 需要确保回答结构清晰,分步骤说明,并引用相关参考资料。同时,注意使用中文和正确的LaTeX格式,比如在提到数学表达式时使用$...$,但在这个问题中可能数学内容不多,需视情况而定。最后检查是否有遗漏的引用或格式错误,确保回答准确有用。</think>### 如何用StarUML设计订单业务流程的类图? #### 1. **理解订单业务流程的核心元素** 订单业务流程通常涉及以下核心类: - **客户类 (Customer)**:记录客户信息,如姓名、联系方式等。 - **订单类 (Order)**:包含订单编号、创建时间、状态(如待支付、已发货等)。 - **订单项类 (OrderItem)**:描述订单中的商品详情,如商品名称、数量、单价。 - **商品类 (Product)**:定义商品属性,如库存、价格、分类。 #### 2. **在StarUML中创建类图** **步骤:** 1. **新建类图**:打开StarUML,选择“文件” → “新建” → “类图”。 2. **添加类**:右键点击画布 → “添加” → “类”,依次创建`Customer`、`Order`、`OrderItem`、`Product`。 3. **定义属性和方法**: - 双击类,在属性面板中添加字段(如`Customer`类添加`name: String`)。 - 为方法命名(如`Order`类添加`calculateTotalPrice(): Double`)。 4. **建立类之间的关系**: - **关联 (Association)**:客户与订单(1对多),用带箭头的实线表示。 - **聚合 (Aggregation)**:订单订单项(整体与部分),用空心菱形箭头表示。 - **组合 (Composition)**:订单项与商品(强依赖关系),用实心菱形箭头表示[^2]。 #### 3. **示例类图结构** ```plaintext +-------------+ +------------+ +-------------+ | Customer | | Order | | Product | +-------------+ +------------+ +-------------+ | -id: Int |<>------->| -id: Int |<>------->| -id: Int | | -name: String|1 * | -status: String | | -price: Double| +-------------+ +------------+ +-------------+ | -items: List<OrderItem> | +-------------------------+ | v +-----------------+ | OrderItem | +-----------------+ | -quantity: Int | | -unitPrice: Double| +-----------------+ ``` #### 4. **验证模型** 通过“模型验证”功能检查错误(如类型不匹配或缺失关联)。例如,若`OrderItem`未关联到`Product`,系统会提示引用错误[^1]。 #### 5. **优化建议** - 使用**设计模式**:如工厂模式创建订单,观察者模式监听订单状态变化。 - 添加**注释**:在复杂关系旁添加说明,提升可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值