SXK促销设计

修订人 时间 备注
周坚林 2021-09-18 初始化文档
周坚林 2021-09-22 完善内容
周坚林 2021-10-11 完善内容
周坚林 2021-11-03 根据实际情况修改设计

概述

促销是指平台、机构根据内外部条件,核算营销过程中发生的各项成本,为了争取最大经济效益,而进行的影响消费者购买态度和行为的一种营销方式,是一种重要的产品运营手段。其核心是怎样”算钱”。
促销系统作为整体系统的一个子模块,为商品价格展示、订单价格计算等场景提供基础服务。


促销的开展形式

  • 开展优惠活动

以开展促销活动形式将用户与促销关联,形成订单后,在订单支付之前,由用户自主选择是否参加活动,参加哪项活动,系统计算适用规则后自动应用

  • 发放/领取优惠卷

以发放优惠卷形式将用户与促销关联,形成订单后,由客户自主选择使用。
其中,优惠卷可以看作是一种特殊的促销活动,其特殊性在于某些优惠卷用户使用前可能需要进行领取,使用时用户需要自行选择,使用之后需要进行核销。优惠卷有用户主动领取,和系统自动发放两种


促销分类

按促销的应用对象来分类

  • 单品促销

直降 直接指定某单品降价或打折销售
赠品 购买某单品获赠
秒杀 限量低价商品竞拍
团购 批发

  • 订单促销

订单金额满减 , 每满减,阶梯满减
满折-同上
满返-满金额后送优惠卷
满赠-订单满额后附送赠品

  • 组合促销

套餐

  • 其它

定金抵扣



SXK中的订单与订单流程设计

在SXK中,只有单个简单订单概念,没有订单项/物流运输等复杂订单概念
预计未来也没有复杂订单场景,因此SXK中的促销调整对象为订单

SXK中共有3个触发促销计算的场景:

  • 课程信息查看

用户在查看课程信息时,可查看到促销信息

  • 课程订单支付

订单与一个课程关联,有课程数量概念,可退款,支付前可看到促销信息

  • 活动订单支付

与一个活动关联,没有活动数量概念,但有报名人数的概念,可退款,支付前可看到促销信息

促销计算将在此三处被触发。
支付之后,促销被应用,此后看到的订单上的信息为当时数据快照,查看时不会再次触发促销计算
此外退款时按照实际付款金额退款,需扣除促销部分,并采用价格分摊形式


SXK促销业务

SXK中,促销的参与者有
其中适用于全平台所有机构的促销称为平台级促销适用于机构的促销称为机构级促销

平台
发布平台级促销
发布机构促销
审核所有级别促销内容
编辑所有级别促销状态
监管方
查看所有促销情况
机构
发布机构促销
审核机构促销内容
终端用户
参与促销活动
领取优惠卷,使用优惠卷


计算的流程


退课流程 – pending


促销模型设计

数据库设计

数据库中主键全部采用long型
常量类型采用string, 以达到表意目的,在应用层中定义枚举类候选值

Promotion
促销表,促销活动与优惠卷的主表

属性名 类型 候选值 默认值 示例 说明
name string / / 三周年全场优惠活动
通用优惠卷 促销活动或优惠卷的名称
promotion_type string ACTIVITY
COUPON / / 促销活动
优惠卷
createDate date 创建日期
description string 描述
enabled boolean 是否启用
priority int / 1 优先级, 数字越小,优先级越高,按口语化来,例如“1级促销”,听起来优先级就很高
mediaLink String 相关媒体链接

PromotionRule
促销的限制条件

属性名 类型 候选值 默认值 说明
promotion_id long / / 关联的促销的ID
allowMultiple boolean / 是否允许叠加使用
beginUsable date / 可使用开始时间
endUsable date / 可使用结束时间
createDate date / 创建日期
description string / 描述
enabled boolean false 是否启用,默认不启用,必须审核
priority int 优先级, 数字越小,优先级越高,按口语化来,例如“1级促销”,听起来优先级就很高
startDate date 促销对外开始日期,例如优惠卷,先发给用户了,但暂时无法使用
endDate date 促销对外结束日期
evaluationLimit int / 1 允许叠加使用次数
minOrderAmount bigdecimal 最小订单价格
minPurchaseCount int 最少购买人数

PromotionAction
促销的实际动作,此表为promotion表拓展表

属性名 类型 候选值 默认值 说明
adjuster double / 0 折扣价 或者 折扣百分比,取决于打折类型
type string PERCENT_OFF
AMOUNT_OFF
FIXED_DISCOUNT PERCENT_OFF 百分比折扣
总价折扣
固定折价
createDate timestamp / 创建日期
description / 描述

PromotionHistory
促销发生历史,用于记录数据并做分析,每次实际促销将写入或修改数据

属性名 类型 候选值 说明
promotion_id long 关联的促销ID
user_id long 用户ID
order_id long 订单ID
create_time date 创建记录的时间

Coupon
优惠卷表, 为promotion的拓展表

属性名 类型 候选值 说明
promotion_id long 关联的促销的ID
couponCode string / 优惠卷码,自动生成
couponType string 优惠卷类型
publish_count int 发行数量
used_count int
已使用数量
claimed_count int 已领取数量

CouponHistory
优惠卷历史,为promotionHistory的拓展表,每次优惠卷操作将写入或修改一行数据

属性名 类型 候选值 说明
coupon_id long / 优惠卷ID
user_id long 用户ID
order_id long 订单ID
coupon_code string
优惠卷码,冗余
status string UNUSED / USED / EXPIRED 使用状态
use_time date 使用时间

GroupOrder
团购订单,拓展订单表

属性名 类型 候选值 说明
order_id long / 关联的order的ID
course_id long 关联的课程ID
bigdecimal 调整的价格
promotion_id long / 关联的促销的ID

OrderAdjustment
订单级别的促销应用结果,每条促销的应用将产生一行对应的数据

属性名 类型 候选值 说明
order_id long / 关联的order的ID
description string 描述,默认使用促销的描述
adjuster bigdecimal 调整的价格
promotion_id long / 关联的促销的ID

核心接口设计


使用案例

  • 拼团折扣-3人拼团购买课程打95折— pending

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "promotion":{
    "name": "3人拼团购买课程打95折",
    "promotionType":"ACTIVITY",
    "description":"三人组团购买课程价格95折优惠",
    "enabled":true,
    "priority":1,
    "mediaLink":"http://sample.jpg",
    "rule":{
    "allowMultiple":true,
    "startDate":"2021-09-09",
    "endDate":"2021-09-09",
    "beginUsable":"2021-09-09",
    "endUsable":"2021-09-09",
    "createDate":"2021-09-09",
    "description":"blablablabla..",
    "evaluationLimit":0,
    },
    "action":{
    "adjuster":0.95,
    "type":"PERCENT_OFF",
    "description":"打95折",
    }
    }

    }
  • 平台级别打折-周年庆全场满300元95折

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    {
    "promotion":{
    "name": "周年庆全场95折",
    "promotionType":"ACTIVITY",
    "description":"周年庆全场95折",
    "enabled":true,
    "priority":1,
    "mediaLink":"http://sample.jpg",
    "rule":{
    "allowMultiple":true,
    "startDate":"2021-09-09",
    "endDate":"2021-09-09",
    "beginUsable":"2021-09-09",
    "endUsable":"2021-09-09",
    "createDate":"2021-09-09",
    "description":"blablablabla..",
    "evaluationLimit":0,
    "minOrderAmount":300
    },
    "action":{
    "adjuster":0.95,
    "type":"PERCENT_OFF",
    "description":"打95折",
    }
    }

    }
  • 发放满减优惠卷-使用满1000减1毛优惠卷

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    {
    "coupon":{
    "name": "满1000减1毛优惠卷",
    "promotionType":"COUPON",
    "description":"满1000减1毛优惠卷",
    "enabled":true,
    "priority":1,
    "mediaLink":"http://sample.jpg",
    "couponCode":"#284NJF",
    "publish_count":"99999",
    "used_count":"0",
    "claimed_count":"0",
    "rule":{
    "allowMultiple":false, // 代表不能多次应用,如果是每满1000减1毛,那么这里设置成true
    "startDate":"2021-09-09",
    "endDate":"2021-09-09",
    "beginUsable":"2021-09-09",
    "endUsable":"2021-09-09",
    "createDate":"2021-09-09",
    "description":"blablablabla..",
    "evaluationLimit":0,
    "minOrderAmount":300
    },
    "action":{
    "adjuster":0.1,
    "type":"AMOUNT_OFF",
    "description":"满1000减1毛",
    }
    }

    }

Troubleshooting

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧

微信