系统架构最佳实践 -- 一般优惠券平台系统架构设计

优惠券是商城的一种基础的营销工具,在目前c端用户对于电子优惠券已经非常熟悉的情况下,一般自营商城的营销活动系统,都是从优惠券开始搭建。

一、名词定义

基于个人理解,为方便表述,首先对可能产生歧义的名词进行如下定义:

  • 业务附属型商城:商城并非公司的主营模块,商城主要目标是为业务服务。例如:饿了么面向配送员的装备商城。更多的是为配送业务提供装备管控,以及为配送员提供权益和福利,销售盈利仅是其附带的目标。
  • 优惠券模板:运营面对的,后台创建的优惠券规则。通过发放活动,生成具体的优惠券。
  • 优惠券:用户收到的,领取到的具体优惠券,可以使用核销。有独立于优惠券模板的状态控制。

二、整体框架

优惠券系统划分为四个功能模块:优惠券模板、发放活动、核销、数据记录和统计。

1. 优惠券模板

优惠券模板主要对优惠券规则进行设置,主要包含:优惠规则、有效期和余量控制。

优惠规则:

优惠规则可以划分为几个基础维度:

(1)类型。优惠券的类型,最常见的是满减券,立减券本质上还是满减券,只是满额要求限制为0。另外还会有折扣券,基于售价进行打折。兑换券主要用于活动奖励,供用户对若干价值相近的商品进行选择赠送。不同类型的优惠券,详细规则的配置也不尽相同。

(2)优惠金额。优惠券的可抵扣金额,不同类型的优惠券配置方式不同。例如:满减券,需要配置满额要求和抵扣金额。

(3)适用商品。优惠券的适用范围,不同的范围对应不同的应用场景。例如:全场通用券,限定类目或品牌的优惠券,指定商品的优惠券,仅抵运费的运费券。

以上只是对规则进行的基础划分,实际业务场景不同,会附加不同的规则。

有效期:

优惠券的有效期,主要有两种模式:

(1)固定时间,例如:10月1日 00:00 ~ 10月7日 23:59的国庆大促券。无论何时发放或领取,用户收到的券的有效时间即为固定。此类券具有分批发放,活动性质的特点。

(2)领取后x天有效,此类券主要是日常活动的券,例如:注册就送7天有效的券。用户领取的时间点不同,有效期也动态变化。

余量控制:

优惠券数量的控制,配合活动预算,支持优惠券定量发放。

根据实际情况,余量控制也可以在发放活动中体现。

2. 发放活动

优惠券发放活动的发放方式众多,业务附属型商城常用的发放方式包含:

(1)范围发放

范围发放主要指,运营一次性面向一定范围内的用户发放优惠券。

手动对一定范围的用户发放优惠券,例如:面向所有用户发放双11全场满100减20的优惠券。范围也可以通过用户的等级和画像精准发放。例如:对于购买了特定活动商品的用户,发放优惠券。

(2)手动领取

手动领取形式的发放活动,支持用户在活动有效期,在商城前端手动领取优惠券。

(3)触发

触发的发放方式,主要是在活动期间,针对达到某个条件的用户,自动发放优惠券。例如:订单金额满100,确定收货时,自动发放5元运费券。

业务附属型商城,也可以由业务系统来进行触发。例如:饿了么骑手每周跑单超过50单,可以获得一张配送箱20元优惠券。

3. 核销

核销是优惠券生命周期的重要一环,一般在订单模块。核销环节是优惠券设计中,最容易忽略的一个环节。核销主要会体现在以下几个方面:

(1)抵扣。在订单层面,计算优惠券是否适用于订单,以及订单可抵扣的金额。订单抵扣计算必须在适用商品范围内计算。同时,如果商城存在积分抵扣时,优惠券抵扣需要和积分抵扣结合来判断。

(2)分摊。分摊是指订单中有若干商品适用于优惠券时,订单模块需要把抵扣的优惠券金额分摊到各个商品,用于商品成本核算和退款依据。同时如果商城存在积分抵扣或其他活动性质的活动,优惠券抵扣分摊计算时,复杂度会指数级上升。

(3)退回。用户提交订单时使用了优惠券,但最终订单如果未成功支付或支付后成功取消订单,那么必须退回相应优惠券。同样的情况存在于退货过程,但一般退货是在商品层面发起,所以退货时的处理会更加复杂。

(4)失效。优惠券的有效期结束时,尚未使用的优惠券需要自动失效。

4. 数据记录和统计

优惠券模板、发放活动和核销支撑了优惠券的流转,数据统计则是为了让优惠券流转得更加顺畅。从业务角度出发,有两个方面需要数据统计的支持:

(1)优惠券记录。客服需要能够查看优惠券的发放、核销和过期记录,以便解答用户在使用过程中的疑问。

(2)优惠券使用分析。从优惠券的发放和使用数据来分析优惠券活动的结果是否达到了目标预期。例如:优惠券来带的订单增长是否达到了预期。通过可视化图表进行展示。

三、状态流程

优惠券对用户发放成功后,用户使用优惠券涉及到状态流转如上图所示:

未使用:优惠券发放后,用户尚未使用的可用状态。

已使用:提交订单后,优惠券被使用。用户取消或系统取消时,优惠券会进行退回。

已撤回:运营创建优惠券或发放活动时,配置错误时,撤回成功的优惠券状态。

已过期:优惠券直到过期,都未被使用的时效状态。

以上为用户优惠券的基础状态流转,不同的状态对应的显示和操作都有不同。

四、小结

优惠券已经是一种各行各业都在使用,用户也非常熟悉的一种营销方式。具体的场景不同,优惠券的功能流程有很大的不同。再次申明,本文仅从业务附属型自营商城角度探讨优惠券的设计。

后续将从框架中划分的四个模块,探讨具体的模块设计。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/540834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十九.案例演示---天猫订单分析

目录 1.数据预处理 2.对订单状况进行分析 3.不同省份订单数详情 4.省份地图绘制 5.不同星期,订单分布 6.订单金额与订单数量 本次案例演示数据条数为:28010 import pandas as pd from pyecharts import options as optsdf_data pd.read_excel(../data/天猫订单…

【笔记】探索生成范式:大型语言模型在信息提取中的作用

探索生成范式:大型语言模型在信息提取中的作用 摘要介绍 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长&am…

五、书架开发--3.弹出框功能开发、离线缓存功能开发

实现弹出框真实业务逻辑 私密阅读tab业务逻辑 1、根据点击的tab不同,从而展示出不同的popup弹窗 每个tab中都有自己的index,点击的时候获取这个index,就可以知道当前点击的是哪个tab,然后用switch-case来根据不同的index展示不…

【GD32】MQ-6丙烷检测传感器

2.34 MQ-6丙烷检测传感器 MQ-6气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(Sno2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为该气体浓度相对应的输出信号。M…

Windows下使用PanguVip实现浮动IP

在某些高可用场景下,我们往往需要使用浮动IP来进行实际访问的切换,比如为了保证Web应用的高可用,当主节点宕机后,我们将浮动IP切换到备节点,那么备节点就继续可以提供服务,在linux下我们可以使用keepalived…

scala---基础核心知识

一、什么是scala Scala 是一种多范式的编程语言,其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

【SpringBoot】获取参数

获取参数 传递单个参数传递多个参数传递对象后端参数重命名传递数组传递 json 数据获取 URL 中参数上传文件获取 cookie 和 session获取cookie获取session 传递单个参数 RequestMapping("/user") RestController public class UserController {// 传递单个参数Reque…

【Delphi 爬虫库 1】GET和POST方法

文章目录 1.最简单的Get方法实现2.可自定义请求头、自定义Cookie的Get方法实现3.提取响应协议头4.实现Post请求完成单词翻译 爬虫的基本原理是根据需求获取信息并返回。就像当我们感到饥饿时,可以选择自己烹饪食物、外出就餐,或者订外卖一样。在编程中&a…

Linux之bpfjit(2)使用分析和mini-tcpdump实现

Linux之bpfjit(2)使用分析和mini-tcpdump实现 Author: Once Day Date: 2024年4月13日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可以参考专栏:…

纯纯python实现梯度下降、随机梯度下降

最近面试有要求手撕SGD,这里顺便就把梯度下降、随机梯度下降、批次梯度下降给写出来了 有几个注意点: 1.求梯度时注意label[i]和pred[i]不要搞反,否则会导致模型发散 2.如果跑了几千个epoch,还是没有收敛,可能是学习率…

Linux 秋招必知必会(三、线程、线程同步)

六、线程 38. 什么是线程 线程是参与系统调度的最小单位,它被包含在进程之中,是进程中的实际运行单位 一个进程中可以创建多个线程,多个线程实现并发运行,每个线程执行不同的任务 主线程:当一个程序启动时&#xff0…

【Qt 学习笔记】Qt控件概述

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt控件概述 文章编号:Qt 学习笔记 / 14 文章目录 Qt控件概…

排序之快速排序

代码 class Solution {public int[] sortArray(int[] nums) {merge(nums, 0, nums.length - 1);return nums;}private void merge(int[] nums, int l, int r){if(l > r) return;// 随机选取主元int i new Random().nextInt(r - l 1) l;int temp nums[i];nums[i] nums[…

探索ElasticSearch高级特性:从映射到智能搜索

欢迎关注我的公众号“知其然亦知其所以然”,获取更多技术干货! 大家好,我是小米!今天我们来聊聊阿里巴巴面试题中的一个高级话题:ElasticSearch(以下简称ES)的高级特性。ES作为一款强大的搜索引擎,在处理大规模数据和复杂查询时发挥着重要作用。而了解其高级特性,则是…

微服务-6 Gateway网关

一、网关搭建 此时浏览器访问 localhost:10010/user/list 后正常返回数据,说明网关已生效,其原理流程图如下: 二、网关过滤器 作用:处理一切进入网关的请求和微服务响应。 1. 网关过滤器的分类: a. 某个路由的过滤器 …

购物车实现

目录 1.购物车常见的实现方式 2.购物车数据结构介绍 3.实例分析 1.controller层 2.service层 1.购物车常见的实现方式 方式一:存储到数据库 性能存在瓶颈方式二:前端本地存储 localstorage在浏览器中存储 key/value 对,没有过期时间。s…

Linux中使用Alias技术实现虚拟网卡

背景 在《Linux中虚拟网络技术有哪些》一文中,我们介绍了多种创建虚拟网卡的方法。本文介绍使用Alias技术创建虚拟网卡。 分析 Alias技术 在计算机领域中,Alias技术指的是给一个实体(如文件、命令、网络接口等)起一个别名或替代…

【leetcode】 跳跃游戏 IV

跳跃游戏IV 题目思路代码 题目 给你一个整数数组 arr &#xff0c;你一开始在数组的第一个元素处&#xff08;下标为 0&#xff09;。每一步&#xff0c;你可以从下标 i 跳到下标 i 1 、i - 1 或者 j &#xff1a;i 1 需满足&#xff1a;i 1 < arr.length i - 1 需满足&…

C++静态库与动态库

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载…

Linux中磁盘的分区,格式化,挂载和文件系统的修复

一.分区工具 1.分区工具介绍 fdisk 2t及以下分区 推荐 (分完区不保存不生效&#xff0c;有反悔的可能) gdisk 全支持 推荐 parted 全支持 不推荐 ( 即时生效&#xff0c;分完立即生效) 2.fdisk 分区,查看磁盘 格式:fdisk -l [磁盘设备] fdisk -l 查看…