想了解电商促销后台逻辑的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于电商平台促销活动思维导图的相关问题,此外,我们还将为您介绍关于618手机厂商促销杀红眼:骁龙870机型最低1799元、j
想了解电商促销后台逻辑的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于电商平台促销活动思维导图的相关问题,此外,我们还将为您介绍关于618手机厂商促销杀红眼:骁龙870机型最低1799元、java-ee - php和java联合开发一个网站后台逻辑、Java生鲜电商平台-促销架构以及秒杀解决方案实战、Java生鲜电商平台-促销系统的架构设计与源码解析的新知识。
本文目录一览:- 电商促销后台逻辑(电商平台促销活动思维导图)
- 618手机厂商促销杀红眼:骁龙870机型最低1799元
- java-ee - php和java联合开发一个网站后台逻辑
- Java生鲜电商平台-促销架构以及秒杀解决方案实战
- Java生鲜电商平台-促销系统的架构设计与源码解析
电商促销后台逻辑(电商平台促销活动思维导图)
电商所谓营销,归根结底都是订单金额的变化;如果我们清楚的知道订单金额的计算流程是怎样的,那么我们只需要顺着系统的计算流程做促销,就不用担心各种促销类型之间产生重叠或者冲突的情况了。当我们知道这个关系后,就可以将营销活动区分为三种类型:改商品价格、改商品小计价格、改订单价格,因为无论什么营销归根结底都是可以描述成改价格。
购物车中任何增删查改都要重新计算促销,所以促销的计算变得尤为重要,感觉京东已经把促销做到了极致。
从模式上来讲,我们公司的促销就相当于京东自营,所以很多也都是参考京东自营的,但我们还没法做到像京东促销那样强大。
这里,将我们做的促销跟大家分享一下,只涉及后台接口逻辑部分。
接口的功能就是输入商品列表,返回加了促销分组后的商品列表。
首先要声明两点:
一、不是通用的促销设计,只是我们公司目前支持的促销设计及逻辑;
二、作者水平有限,不会画图,所以图画得比较丑,也很粗,希望大家不要介意;
三、不谈性能
废话就不多说了,下面正式开始。。。
促销类型
前面说了,促销归根结底是改价格。在我们这里其它单品促销就是改商品价格;而条件促销就相当于改小计的价格;至于赠品促销不设计改价格,可以认为是单品促销的一种类型。
主流程
“同类型通过实体进行互斥、不同类型可以相互叠加。”这是别人总结的设计电商促销系统的基本原则,我也比较认同。
上面接口主流程就是先应用单品促销,再应用条件促销。稍微再细化一点儿就是这样的:
先处理赠品促销,将赠品挂载到主商品(原先用户添加的购物车中的商品我称之为主商品)上,再应用单品促销。
在进行单品促销的时候,很有可能同一个商品命中多个单品促销。这个时候只能取一个促销,此处的计算逻辑是这样的:
- 优惠力度最大的优先
- 优惠力度相同时,取最新创建的那个(创建时间最新)
例如:
商品A命中四条促销,分别是:【促销1】直降2元,【促销2】折扣8折,【促销3】直降1元。假设A的原价时10元,那么经过计算【促销1】8元,【促销2】8元,【促销3】9元。这个时候,【促销3】应该被剔除,假设【促销2】的创建时间比【促销1】要晚,那么应该取【促销2】。即商品A最终命中【促销2】。原价10元,促销价8元。
计算商品价格流程
稍微解释一下:
- 特价:商品A原价12元,今日特价9.9元。
- 折扣:商品打几折。
- 直降:商品A原价12元,今日直降3元,所以最终9元。且当促销价低于原价的70%时恢复原价。
限购流程
这里有两点需要说明:
- 限购的话需要查订单系统,但是刚才说了购物车中的任意增删查改都要重新计算促销,所以如果这里直接调订单的话可能订单的顶不住(技术实力还比较薄弱,无奈!!!),考虑到这里我们冗余了订单数据,每次从本地数据库去查。当然,这样肯定不准,但是我们只保证90%的情况就可以了,所以这里我们采用这种方式。
- 拆商品行。还是用上面的例子,商品A命中了【促销2】,假设【促销2】限购每人每单1件,而现在A 的数量时3,那么我们会拆成2行,第一行商品A售价8元数量1件,第二行商品A售价10元数量2件。
条件促销分组
同一个商品可能会命中多个条件促销,而最终每个商品只能应用一个条件促销(即每个商品最终只能属于一个组)
我们说,同种类型的促销不能叠加,不同类型的促销可以叠加。在我们这里,单品促销和单品促销不能叠加,条件促销与条件促销不能叠加,单品与条件可以叠加。
程序走到这里,我们已经完成了单品促销的处理,接下来处理条件促销。在决定商品应该最终应用哪个条件促销时,我们的原则是这样的:
1、优先考虑满足条件的促销
这句话的意思是,假设商品A,商品B满足【促销1】满100减20这个阶梯,同时A和B又都命中了【促销2】但是不满足【促销2】的条件,因为假设【促销2】的最小阶梯是满150减30。那么这个时候,虽然A和B都同时命中【促销1】和【促销2】,但A和B一起正好符合【促销1】满100减20的条件,所以这个时候促销A和B应该最终取【促销2】
2、同时满足多个条件促销时,取后创建的那个(创建时间最近)
还是上面的例子,假设A和B的总金额加起来是160元,那么它们都满足【促销1】和【促销2】,假设【促销2】是后创建的,所以此时它们最终命中的条件促销应该取【促销2】。并且,之后应该讲它们从【促销1】的商品组中剔除(PS:因为一个商品只能属于一个组,即只能应用一个条件促销)。京东在这里对每种促销做了计算,把最终用哪个促销的决定权交给用户去选,我们这里不搞这么复杂。
说了这么多,可能有点晕,下面举个例子
假设有A,B,C,D四个商品,促销1234是四个促销
如图,【促销1】是所有商品,所有A,B,C,D四个都命中【促销1】,换句话说【促销1】的商品组中有A,B,C,D
【促销2】的商品组中有A,C
【促销3】的商品组中有A,B
【促销4】的商品组中有A,B,C
假设促销1,2,3,4是依次创建的,也就是说4是最晚创建的,1是最早创建的
再假设,A+B+C符合【促销4】的其中一个阶梯条件,A+B符合【促销3】中的其中一个阶梯条件,A+B+C+D符合【促销1】的其中最低一级的阶梯条件
那么,最终的促销分组应该是这样的:
【促销4】的商品组有:A,B,C
【促销3】的商品组为空
【促销2】的商品组为空
【促销1】的商品组中有:D,而且不满足最低的阶梯,因为原来A+B+C+D满足最低一级的阶梯,现在只剩下D了当然不满足最低一个的阶梯
条件促销分组计算
在代码实现上,这里是两层循环:
- 第一层是条件促销列表
- 第二层是某个条件促销中的商品组
部分代码实现
代码可能是这样的,下面贴出条件促销部分的代码片段
1 // 处理条件促销
2 // 算小计
3 for (PromotionProductDTO promotionProductDTO : promotionProductDTOList) {
4 promotionProductDTO.setSubtotal(promotionProductDTO.getPromotionPrice().multiply(new BigDecimal(promotionProductDTO.getQuantity())));
5 }
6 List<PromotionInfoDTO> conditionPromotionInfoDTOList = promotionInfoMap.get(PromotionTypeEnum.TIAOJIAN.getType());
7 // 限购
8 List<PromotionInfoDTO> validConditionPromotionInfoDTOList = new ArrayList<>();
9 for (PromotionInfoDTO promotionInfoDTO : conditionPromotionInfoDTOList) {
10 if (isMaxConditionPromotionLimit(promotionInfoDTO, userId)) {
11 continue;
12 }
13 validConditionPromotionInfoDTOList.add(promotionInfoDTO);
14 }
15 conditionPromotionInfoDTOList = validConditionPromotionInfoDTOList;
16
17 // 按范围初步将商品归到各个条件促销下(撒网)
18 for (PromotionInfoDTO promotionInfoDTO : conditionPromotionInfoDTOList) {
19 List<PromotionProductDTO> matchedPromotionProductDTOList = new ArrayList<>();
20
21 List<PromotionProductEntity> promotionProductEntityList = promotionInfoDTO.getDefinitiveProductEntityList();
22 for (PromotionProductDTO promotionProductDTO : promotionProductDTOList) {
23 // 商品匹配到的促销
24 if (promotionInfoDTO.getProductRange() == PromotionPruductRangeEnum.ALL.getValue()) {
25 matchedPromotionProductDTOList.add(promotionProductDTO);
26 }else if (promotionInfoDTO.getProductRange() == PromotionPruductRangeEnum.CATEGORY.getValue()) {
27 Set<String> secondCategorySet = promotionProductEntityList.stream().map(PromotionProductEntity::getProCategorySecond).collect(Collectors.toSet());
28 if (secondCategorySet.contains(promotionProductDTO.getCategoryCode())) {
29 matchedPromotionProductDTOList.add(promotionProductDTO);
30 }
31 }else if (promotionInfoDTO.getProductRange() == PromotionPruductRangeEnum.SPECIFIED.getValue()) {
32 Set<Long> specialProductIdSet = promotionProductEntityList.stream().map(PromotionProductEntity::getProductId).collect(Collectors.toSet());
33 if (specialProductIdSet.contains(promotionProductDTO.getId())) {
34 matchedPromotionProductDTOList.add(promotionProductDTO);
35 }
36 }
37 }
38
39 // 促销匹配到的商品
40 promotionInfoDTO.setMatchedProductDTOList(matchedPromotionProductDTOList);
41
42 // 判断促销匹配的这些商品是否满足条件
43 BigDecimal totalAmount = BigDecimal.ZERO;
44 for (PromotionProductDTO promotionProductDTO : matchedPromotionProductDTOList) {
45 totalAmount = totalAmount.add(promotionProductDTO.getSubtotal());
46 }
47 PromotionStairEntity promotionStairEntity = matchStair(promotionInfoDTO.getDefinitiveStairEntityList(), totalAmount);
48 if (null != promotionStairEntity) {
49 promotionInfoDTO.setPromotionStairEntity(promotionStairEntity);
50 }
51 }
52
53 // 按满足条件与否以及促销创建的先后顺序进一步归档商品(即分组)
54 // 挑选出满足条件的促销,并按照创建时间降序排序
55 List<PromotionInfoDTO> matchedConditionPromotionInfoDTOList = conditionPromotionInfoDTOList.stream()
56 .filter(x->null != x.getPromotionStairEntity())
57 .sorted(Comparator.comparing(PromotionInfoDTO::getCreateTime).reversed())
58 .collect(Collectors.toList());
59
60 // 去重,以保证每个组中的商品之间无交集
61 int len = matchedConditionPromotionInfoDTOList.size();
62 for (int i = 0; i < len - 1; i++) {
63 PromotionInfoDTO majorPromotionInfoDTO = matchedConditionPromotionInfoDTOList.get(i);
64 for (int j = i + 1; j < len; j++) {
65 PromotionInfoDTO minorPromotionInfoDTO = matchedConditionPromotionInfoDTOList.get(j);
66 for (PromotionProductDTO majorMatchedPromotionProductDTO : majorPromotionInfoDTO.getMatchedProductDTOList()) {
67 minorPromotionInfoDTO.setMatchedProductDTOList(minorPromotionInfoDTO.getMatchedProductDTOList()
68 .stream()
69 .filter(x -> !x.getId().equals(majorMatchedPromotionProductDTO.getId()))
70 .collect(Collectors.toList()));
71 }
72 }
73 }
74
75 // 最终命中的促销
76 List<PromotionInfoDTO> ultimatePromotionInfoDTOList = new ArrayList<>();
77 // 重新计算各组匹配的阶梯规则
78 for (PromotionInfoDTO promotionInfoDTO : matchedConditionPromotionInfoDTOList) {
79 List<PromotionProductDTO> promotionProductDTOS = promotionInfoDTO.getMatchedProductDTOList();
80 // 过滤掉空的促销
81 if (null == promotionProductDTOS || promotionProductDTOS.size() < 1) {
82 continue;
83 }
84 ultimatePromotionInfoDTOList.add(promotionInfoDTO);
85 BigDecimal totalAmount = BigDecimal.ZERO;
86 for (PromotionProductDTO promotionProductDTO : promotionProductDTOS) {
87 totalAmount = totalAmount.add(promotionProductDTO.getSubtotal());
88 }
89
90 // 查询该组商品满足的最高阶梯
91 PromotionStairEntity promotionStairEntity = matchStair(promotionInfoDTO.getDefinitiveStairEntityList(), totalAmount);
92 if (null != promotionStairEntity) {
93 // 设置这组商品命中的促销的哪一个阶梯
94 promotionInfoDTO.setPromotionStairEntity(promotionStairEntity);
95 // 设置每个商品最终命中的唯一的条件促销
96 for (PromotionProductDTO promotionProductDTO : promotionProductDTOS) {
97 promotionProductDTO.setConditionpromotionInfoDTO(promotionInfoDTO);
98 }
99 }else {
100 // 计算还差多少钱满足最低阶梯
101 List<PromotionStairEntity> promotionStairList = promotionInfoDTO.getDefinitiveStairEntityList().stream().sorted(Comparator.comparing(PromotionStairEntity::getMinimumCharge)).collect(Collectors.toList());
102 PromotionStairEntity promotionStairEntity2 = promotionStairList.get(0);
103 BigDecimal minimumCharge = promotionStairEntity2.getMinimumCharge();
104 BigDecimal balance = minimumCharge.subtract(totalAmount);
105 promotionInfoDTO.setBalance(balance);
106 }
107 }
返回的数据接口
最终返回的应该是一个列表,列表中的每一个元素代表一个条件促销(即分组)
接口看起来可能是这样的:
参考
http://www.woshipm.com/pd/741573.html
http://www.woshipm.com/pd/594963.html
http://www.woshipm.com/pd/716781.html
618手机厂商促销杀红眼:骁龙870机型最低1799元
一年一度的618又来了,屏幕前的小伙伴是否准备详细的剁手清单呢?智能手机作为当前热度最高的电子消费品类之一,各大智能手机厂商都会为了销量大幅度让利给普通消费者。比如,近期热门的电竞旗舰拯救者电竞手机2 Pro为了迎接618,推出16+256GB与18+256GB两个全新超大内存版本,作为业内首发量产18GB内存的机型,拯救者电竞手机2 Pro将18GB内存起售价拉低到4999元,一步到位普及超大内存。此外,拯救者电竞手机的兄弟品牌摩托罗拉也有大动作:moto edge s也推出了全新配色——远岱寒烟,8+128GB的新品首发价仅为1999元,性价比可谓高出天外。
专为游戏玩家打造,掀起18GB大内存普及风暴
作为市面上最顶尖的电竞机皇,拯救者电竞手机2 Pro在618期间的促销力度可谓惊人,下面是官方公布的促销政策:
①拯救者电竞手机2 Pro高能限量版全网首发,新品尝鲜至高特惠300元,16+256GB售价4499元,18+256GB售价4999元,18+512GB售价5899元!
②拯救者电竞手机2 Pro享12期免息分期,12GB+128GB至高优惠500元!
③拯救者电竞手机2 Pro享延保一年超值福利,即刻下单,放心开黑!
④拯救者电竞手机 Pro 终极底价,仅售2999元起!!
除了性能强悍的骁龙888旗舰处理器,拯救者电竞手机2 Pro还有满血版UFS 3.1+LPDDR 5加持,就算后台同时运行多个程序,也不会影响游戏的流畅性。并且为了避免因温度过高出现降频等情况,拯救者电竞手机2 Pro还内置了双涡轮增压风扇、超大面积液VC冷均热板、独立铜管密闭风道等黑科技组成的散热系统,有效避免高温所带来的负面影响。
此外,144Hz定制三星电竞屏还能带来极致的游戏体验以及明亮的游戏画面,让玩家在游戏中掌握更多主动权。再者,这款手机还有一个强大的“外挂”设计——“八神键”。尤其是四组八指按键可实现自定义400+快捷组合,能让小白立马变身成为老手,不管是上分还是吃鸡都能达到如虎添翼的效果。
打响大内存普及第一枪,骁龙870真香旗舰火爆大促
不止是拯救者电竞手机2 Pro,本次618期间moto edge s的促销力度也非常给力,骁龙870 5G芯片,最高3.2GHz主频,并且还有增强型LPDDR5+增强型UFS3.1加持,轻松玩转当下各类大型游戏。另外,moto edge s目前还开启支持《王者荣耀》高帧率模式,流畅度获得进一度提升。
具体到价格,moto edge s的6+128GB 仅1799元,8+128GB 仅1999元,8+256GB 仅2399元。
除了硬核的性能之外,拍照也是moto edge s的主打卖点之一,后置相机由6400万像素主镜头、1600万像素超广角镜头、200万像素景深镜头以及TOF镜头组成,2.8cm微距模式更有环形微距补光灯加持,让细微之处的画面也能清晰记录;另外还支持双景双录、Audio Zoom音频变焦等功能,帮助用户轻松实现大片级视频录制。
对用户来说,各大厂商在618“打起来”是一件好事,这样我们消费者就能一步到位用上心仪产品了,当前拯救者电竞手机2 Pro、motorola edge s都是无短板的超值之选,如果你准备在618期间选购手机,不妨多关注下。
java-ee - php和java联合开发一个网站后台逻辑
那么应该怎么分层 ,那些层次用php?那些用java?
回复内容:
那么应该怎么分层 ,那些层次用php?那些用java?
这里有两个关于PHP和Java配合的的问题,应该能解决你的问题。
http://segmentfault.com/question/51/%...
http://segmentfault.com/question/1055...
Java生鲜电商平台-促销架构以及秒杀解决方案实战
Java生鲜电商平台-促销架构以及秒杀解决方案实战
背景:
随着这几年的电商的大热,我们经常看到一些商家为了促销和快速收益,纷纷推出了秒杀活动.不管是日常的超市里面的促销,明星演唱会门票售卖,还是春节订阅火车票,等等我们都能看到秒杀活动的影子.
1. 构建秒杀活动架构
1.1 说明
系统架构的设计,一定程度上取决于流量的多少、流量的洪峰值和波谷值,有效的预估好流量是至关重要的一步,流量的大小不一样,我们的架构设计相应的也会不一样.这会影响到后续的系统架构设计.反而系统的搭建并不是最难的部分,因为现在很多大公司,都有一套自己的成熟架构体系
1.2 关键设计
1.2.1 围绕着产品设计,驱动技术.
1).一般秒杀活动都是T+N的,这样设计的好处,就是提前帮我们预估好用户流量,这一步也会影响到我们是否扩容,至于坊间传说的临时扩容,本人一直持保守态度,显然对于大流量洪峰来临,这种临时扩容的方案还不够成熟,因为微博一直在砰砰打脸.
2).秒杀活动前,来一波小游戏,有些人问是不是产品脑子冒泡?我是来秒杀商品的.....
3).秒杀活动前,需输入12306式的验证码,产品是不是又该挨打?
4).秒杀活动前,倒计时弹幕提醒,产品已gg
其实这些小伎俩的设计,一方面为了防止活动未开始前大流量涌入,一方面是为了防止恶意用户攻击,另一方面是为活动造势
1.2.2 缓存和预热
1).页面静态话,静态页面部署在CDN服务器上,服务器多机房部署,异地多活,使得用户能就近访问到相应的节点服务器.
2).redis双泳道
3).热点数据提前落地
1.2.3 消息中间件MQ
延迟队列、阻塞队列
1.2.4 限流、降级
推荐sentinel开源中间件,sentinel是以流量为切入点,从流量控制、熔断降级、系统负载保护等多个纬度保护服务稳定性.sentinel和谷歌guaval不同的地方在于它可以做到全局性的限流.对于快到水位线时候,可以随机拒绝一些请求,做好保护.
1.2.5 网关拦截
过滤和限制恶意请求和爬虫之类的,限制参与秒杀的用户需要登陆的token
1.2.6 是否查询数据库
大型秒杀活动是可以不查数据库的,数据异步落库就行
2. 技术难点
其实在第一章节,我并没有过细的赘述,因为现在业界这些框架已经非常成熟了,拿来即用,甚至有些活动并没有那么的流量,可能都无需限流.
2.1 库存是否锁定
是否锁定库存需要看场景,像卖林俊杰演唱会门票这种,是无需锁库存的,why?
对于用户购买意愿非常强烈的活动中,是无需锁定库存的,一方面可以做到公平购买,另一方面防止一些用户其实就是看看的心态,下单了不付钱,导致那些真正想买的人买不到票.而一般的活动是需要锁定库存的,即用户预下单后就锁定库存,但是一般我们秒杀的订单都具有时效性,一般在5-30分钟不等.
2.2 如何释放库存
1)首先查询库存,检查库存状况,库存不足直接返回前端.
2)库存够,用户可以购买商品,用户预下单
3)服务端构建用户订单消息,锁定库存,推送订单消息给延迟消费队列和更新订单缓存,调用预下单接口,然后调用第三方预支付接口
4)前端唤起sdk去付款
5)支付成功,第三方支付会回调通知商户,然后通知业务线去更新支付状态
6)规定时间里面成功支付的订单,删掉缓存
7)延迟消费队列监听,先查询缓存,看缓存数据是否存在,存在的为,超时订单,需要释放库存加1,缓存里面不存在的订单为成功支付的有效订单,落库
2.3 如何解决超卖的问题
redis本质上是没有办法保证是否超卖的问题,在高并发下这种现象很常见.以下提供一些解决方案,性能上可以根据实际情况做调整.
1)悲观锁
2)乐观锁
3)分布式锁
4)队列串行化
5)异步队列分散
6)分段锁
Java生鲜电商平台-促销系统的架构设计与源码解析
Java生鲜电商平台-促销系统的架构设计与源码解析
说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程.
促销系统是电商系统另外一个比较大,也是比较复杂的系统,作为一个卖货的,当我们准备好了店铺、商品,那么剩下的就是卖货了。
但是,卖的好不好,有时候并不取决与你的商品质量,而是会不会营销,会不会做活动,甚至说即便你的商品质量不好。但是如果营销活动做得好,那也是可以卖的比别人挣钱的,所以促销活动很重要。它需要分析市场结合自身条件合理的创建促销活动,我们理解的促销活动可能是优惠券,满X减Y,和一些专题活动。
下面对促销活动进行一个系统的总结:广义上来说,一切为了扩大商家销售和用户优势的行为都属于促销活动。
鉴于软件行业和电商系统的特征,电商的促销系统设计应该是分为这几个大的分类:促销活动、CMS系统、优惠券、拼团。
- 优惠券:这大家可能很熟悉,设置优惠券的规则,然后进行发放,用户可以在购买商品的时候使用优惠券;
- 拼团:这大家也很熟悉,比如:拼多多大家可能都用过,简单来说需要设置拼团的人数,价格,当拼团人数达到时,拼团成功,然后进行发货。
- 促销活动:促销活动一般是与CMS系统一起用的,促销活动模块用于设置活动的规则,而CMS系统用户推广活动。其实来说CMS系统对技术的要求是很高的,一些小的电商是不支持CMS的,那么促销活动就会通过广告位进行推广,或者不推广。
先促销活动,再说优惠券,再说拼团,下面详细说说。
一、促销活动
促销活动是什么呢?
接触电商系统设计的产品经理肯定明白,促销活动与优惠券类似,都是在购买商品时如果满足促销条件或者优惠券的条件就会对用户的购买进行优惠。
不同点在于:优惠券是具体的东西,他与商品是分离的,优惠券更加灵活,而促销活动一般来说会与商品绑定,并且这种活动的制定可能还会与节日有关——清明节了,我要搞个促销活动,促销活动的目的性更强,既然是“活动”那么也就注定了推广的重要性。
这也就是为什么促销活动要与CMS系统连用,可以达到更好的宣传效果,下面我从几个方面说说促销活动:
- 促销活动都有哪些形式,每种形式的规则是什么?
- 促销活动具体的创建规则与业务流程?
- 促销活动在订单中的问题。
- 对促销活动的管理。
- 促销活动在产品中的具体设计方法。
1. 促销活动的各种形式
满减促销:
满减促销是最常见的一种促销活动,当订单满足一定金额优惠一定金额,一般会产与多个订单,比如:满200减20。这样,为了能够获得优惠可能就会多买几件,满减促销分为两种形式:每满减和阶梯满减,在创建活动的时候只能选择一种形式。
什么每满减呢?
——每满X元减Y元,比如每满100元减10元,如果订单满足一个100元优惠10元,如果订单满足两个100元,优惠20元,以此类推。
什么是阶梯满减呢?
——满X1元减Y1元,满X2元减Y2元,满Xn元减Yn元,比如满100减10元,满200减300元,满300减50元。
显而易见阶梯满减是消费越多优惠比例越大,设置多个阶梯,如果设置了每满减同时设置阶梯满减肯定会有冲突的,因为订单金额相同时优惠金额可能不一样,也就是说,不能共用。
单品促销:
单品促销就很简单喽,就是一件商品打折。
这里说明一下哈,不仅仅是这里,所有的,你没看错,我是说所有的打折都支持两种选择,百分比打折和金额打折,在设置打折规则的时候进行单选百分比或者固定金额。
那么,百分比打折和固定金额打折不同点在于哪呢?
差异化的造成主要体现在价格的变动上,当价格变动对折扣打折是没有影响的。因为是按比例计算,而对于固定金额打折就会有影响,无论价格的过高或者过低,都会造成优惠金额的不合理。但是,固定金额打折的优势是易于消费者理解,优惠价格可控,对于资金的掌控更加稳定。
在进行百分比打折的时候,前端同时显示折扣比例和折扣金额。
套装促销:
套装促销就是多件商品捆绑销售,设置套餐价格,但是在设置的时候其他促销形式有所不同。不同点主要体现在前端的展示上,其他的促销获得是依附在某个商品之上的,当我们进入商品详情页就会看到促销活动的介绍。然后选择规格当,数量等信息,当选择满足条件后就会实现优惠。
而套装促销是多商品,下面的赠品促销,满赠促销也是一样,这种多商品的促销在展现形式上有所不同。
首先来说,我们在设置套装的时候肯定选择多个商品,而每一个商品肯定会有多个SKU信息,那么说我们在选择商品的时候应该精确到商品的SKU,也就是把规格选出来。
为什么要这样选呢?因为我们最终要设置套餐价格,那么这个套餐价格肯定基于某个确定的原价的,也就是每个套装商品的SUK价格。
其次,我们要考虑到前端的展示问题。
既然是促销活动,我们现在还原一个场景:
小张没有鞋穿了,要去商场买鞋,而鞋子肯定有很多规格,小张要买43码红色的鞋子100元,如果选择43码黑色的鞋子可能就是200元了。
这个时候服务员告诉他:我们现在搞套装活动,红色的鞋子加红色的袜子一共110元,红色的鞋子加红色的袜子一共120元,黑色的鞋子加红色的袜子一共210元,黑色的鞋子加黑色的袜子一共220元,红色袜子单独购买20元,黑色袜子单独购买40元。
那么,在这种场景下,小张的选择是多样化的,他可以选择任意的组合,然后给钱就行了。但是,如果把这种场景还原到产品设计中就会产生很多问题。
原因很简单:我们在线下购买商品,当我们提交订单之前,我们面向的是所有的商品。而在网上购物的时候,我们要进入某一个具体的商品才能看到促销活动——我们在网上看到一双鞋,然后活动是加上某个袜子110元,难道我们要返回首页在去寻找那个袜子吗,显然是不行的。
也就是说,套装的选择要在鞋子这个商品的详情页面完成,可是鞋子的商品详情页只能展示鞋子的,比如:尺码,颜色;是无法选择袜子的规格信息的。
所以,一般来说有两种处理方式:
- 直接把套装做成商品。
- 在商品详情页面增加套装选项。
直接把套装做成商品:
这个跟商品的编辑流程是一样的,我们在定义商品标题的时候,直接把它写成某个套餐,比如:化妆品套餐,然后利用规格设置不同的套餐价格。
比方说:套餐一牙刷+牙膏10元,套餐二牙刷+牙膏+杯子12元,套餐三单个牙刷5元,以此类推。但是,这种也可以实现套装促销的效果,但是这种方式却偏了促销系统的设计规则。其实根本没有促销规则,商品本身的设定就是套装也就没有规则可言。
在商品详情页面增加套装选项:
这种方式就是设置完套装后,在相关商品的详情页面在选择规格的时候增加套装选项。当选择某个套装后显示套装信息,套装信息是某个具体的SKU信息,套装和主商只能二选一,选择商品就不能购买套餐,选择套装就不能在选择商品信息了。
下面举一个例子:
有A B C D E 五个SKU信息,要进行不同的套装组合,AB AC AD AE BC BD DE ,这是7个套装。
那么,在我们进入A商品的详情页面时,套装信息就会显示所有的,因为跟它都有关。当我们进入B商品的详情页面时,显示AB BC 两种套餐,因为B只有这两种套装。同理,当我们进入E时,显示AE DA ,也就是说只显示跟当前商品有关的套装信息。这是这种设置方式,其实来说产品的设计形式没有固定的,我们也总在寻求更好的解决方案。
赠品促销:
赠品促销也是多商品,当我们在购买主商品满足赠品条件后,就会获得赠品,有两种方式:
- 只要购买主商品就会获得赠品。
- 购买一定数量才能获取赠品。
而赠送的形式也有两种:全部赠送,赠送一件或者N件。
在设置的时候我们首先要选择主商品、满赠条件——购买即赠还是制定购买数量赠送。
然后选择赠品——可以选择多个,是全部赠送还是部分赠送,对于赠品只需要在专题页面说明就可以了,然后在详情页面介绍赠品信息。
加价优惠:
加价优惠是当我们满足了一定金额,如果在多付一定的金额就会优惠多少,或者免费赠送什么。
比如:我们一共花了120元想去结账,然后系统提示你,当订单金额达到150元就是享受-20优惠,或者赠送某某商品。对于加价优惠要选择商品,然后设置当满X元,在加Y元时,优惠N元或者免费送F商品,这样设置。
多买优惠促销:
多买优惠促销就是买的越多,优惠越大,可以设置一定金额随便买几件,或者当几件的时候极则,规则的核心是商品的件数——也就是多买。
这个地方既然是多买,那么在设置活动的时候肯定要设置活动的商品池——可以逐个拉去,也可以按分类拉去,多买优惠只有在这些商品上才能生效,其他商品不生效,在设置规则的时候可以设置。
- 订单满X件N折
- 订单金额X元内任意购
根据具体情况设定。
定金促销:
定金促销一般会出现在商品预售的时候,当商品进行预售时,设置定金促销,用户提前付定金可以抵扣一定金额。
比如:定金30抵扣50,相当于优惠50元,当商品进行发售的时候付尾款即可完成订单。
2. 促销活动的创建规则与业务流程
促销活动的创建分为三个步骤:
- 设置活动基本信息:比如活动的标题,活动时间?
- 设置活动的规则:满赠促销还是单品促销,规则是什么?
- 设置活动商品:参与活动的商品是什么?
创建完成。
2.1 设置活动的基本信息
活动标题:设置活动的标题,可以设置多个标题,不同标题的作用不同,根据需求看你需要几个标题,然后每个标题展示在哪里。
活动编码:活动的唯一编码,创建活动是自动生成,这种编码很常见,不仅仅是这里,比如订单的编码,账单的编码,这些编码的规则,一般与时间,用户,商品等联系进行组合设置。
活动时间:设置活动的时间,只有在时间范围内活动才生效,如果活动时间未到但是活动开启了,需要在前端进行倒计时提升。
推广渠道:商城一般会有很多用户端,选择活动在哪里投放:H5,公众号,微信小程序,支付宝小程序,APP,PC端商城。
限购数量:商品的限购数量,从这几个方面来考虑,每项都是默认不限购,之所以进行限购主要是考虑到库存的原因:
- 每个商品的限购数量:当此商品卖出X件不在参与活动。
- 商品的总数量:参与活动所有的商品一共多少?
- 每个用户的限购数量:每个用户最多可以购买多少件,达到上限不可继续参与活动,
用户范围:活动的用户范围,当用户在范围内才能参与活动,否则无法参与活动,默认不限制用户范围。
- 选择指定用户:从用户列表进行获取多个用户。
- 用户会员等级:选择那个等级的会员才可以参与活动。
- 用户分组:那个用户组才可以参与活动。
对于用户范围的限定,主要看后台是如何对用户进行分类的,根据这些分类记性限购,如果用户有标签;也可以根据标签进行限购——如果分新用户,老用户,也可以根据此限购,主要取决于系统的设置。
是否与优惠券通用:一般来说促销活动是不与优惠券通用的,现在市面上的电商促销活动又不会与优惠券通用,所以这个地方可以再后台写死,只要是参与促销活动的商品都不与优惠券通用。
推广链接:创建活动时会自动生成活动链接和活动二维码用户推广使用。
2.2 设置活动的规则
在上面已经介绍了活动的形式以及它们不同的规则,但我们设置完活动的基本信息后就要设置活动的规则分类两步:
- 选择活动类型:满减,单品,套装,赠品,加价,多买,定金。
- 不同的活动其规则肯定是不同的,然后设置活动的规则。
满减:
选择满减类型:阶梯满减、每满减
设置满减规则:
- 阶梯满减:满X1减Y1、满X2减Y2、满Xn减Yn……
- 每满减:订单每满X元减Y元
单品:
选择打折形式:百分比、指定金额
设置打折程度:
- 百分比:X%
- 指定金额:X元
套装:设置套装价格——X元
赠品:
- 设置赠送条件:买即赠、买X件即赠
- 选择赠送数量:全部赠送,部分赠送(赠送几件)
加价:
- 设置当满X元时加Y元时生效
- 设置奖励形式:减N员或者送F商品
多买优惠:设置多买形式——M件N折或者X元任意购
定金:设置定金金额X抵扣金额Y
2.3 设置活动商品
当我们设置完促销规则的时候就要选择活动商品了,不管是什么类型的活动都要选择活动商品。只是不同的活动选择商品的规则不一样,我们来看下:不同促销活动他们选择活动商品时,有什么不同?
- 满减:选择全部商品或者部分商品,部分商品可以根据分类,品牌进行筛选,可以手动制定某些商品。
- 单品:选择某一个商品。
- 套装:选择多个商品组合,每个组合代表一个套装,这里注意,套装商品的选择需要精确到SKU。
- 赠品:选择主商品,然后选择赠品,赠品可多选可单选,赠品要精确到SKU。
- 多买优惠:这个选择商品的形式有所不同,要选择商品池,构建一个商品的水池,水池里的商品即为活动商品的范围,用户参与活动必须到水池里选择商品。
- 加价:设置商品范围,如果奖励形式是赠品,需要设置赠品。
- 定金:选择定金商品。
2.4 活动创建完成
KO,到现在为止促销活动的创建已经完成,我们总结一些:
首先,定义活动的基本规则,这些基本规则肯定是通用的,它不影响活动规则。
然后,设置活动规则,不同的活动有不同的形式,而不同的形式有不同的设置规则。
最后,根据不同的活动规则选择参与活动的商品。
这样活动就创建完成了,这是促销活动的创建方式与流程。不管什么样的促销活动都可以这样来设置,要把基本设置,活动规则,参与商品相互分开,这样有利于我们理解。下面,最后说说促销活动在订单流程中的问题。
3. 促销活动在订单流程中的问题
当用户进行下单的时候,首先要判断:商品是否参与促销活动?参与哪个促销活动?
然后,判断:是否满足促销规则?满足哪个促狭规则?
最后,计算满足情况下,优惠的金额是多少?在用户订单付款页面要告诉用户优惠金额是多少?
- if(活动商品){哪个活动}
- if(规则1){优惠金额计算}
- else if(规则2){优惠金额计算}
- erse if(不是活动商品)(不计算优惠)
当用户下单完成后,多个商品可以放在一个订单下统一发货,不能统一发货需要进行拆单,订单的详细问题现在先不说,以后会专门讲订单。
4. 对促销活动的管理
促销活动的管理是管理已经创建出来的活动列表,主要管理的是活动的状态和编辑活动,删除活动。
编辑活动:当活动创建完成后可能因为一些原因需要修改,这个时候需要去编辑。
删除:删除活动后,活动将直接终止。
活动状态管理:未开始,活动中,以结束,是否投放。
- 未开始:活动时间未到。
- 活动中:处在活动时间内。
- 已结束:活动时间已过。
是否投放:当投放之后活动才会生效,投放状态与活动时间状态(其他三个状态)相互独立,互不影响,无论是否投放都有可能处在其他三个状态中的一个,时间状态是无法操作的,可以操作投放状态。
删除:直接删除活动,如果活动正在活动中,那么活动将直接终止。
5. 促销活动在产品中的具体设计方法
5.1促销活动的前端展示
促销活动在用户端的展示主要体现在详情页面和列表页面,当满足促销活动是要在商品的列表页面加上标签。
比如:
- “满减”:在商品的详情页面要加上促销栏目。
- “促销:满100件10元”,让用户可以看到,如果是套装商品和赠品,需要展示每个商品的SKU信息、商品图片、价格、规格等。
5.2 促销活动的后台设计
促销活动属于促销系统的一部分,对于后台的设计,活动管理和创建活动两个部分。
创建活动:一个创建活动的菜单,点击进去就是创建页面、填各种表单、最后保存,表单的内容上面已经说了,就是促销活动的创建流程。
活动管理:一个活动管理菜单栏,点击进去是活动列表,管理活动状态、投放状态、删除。
二、优惠券
优惠券与促销活动的不同点是:优惠券突出的是商品。
当我们要买哪个商品时,我们会考虑用哪个优惠券,而从设计上来说,专题活动要比优惠券难度高。
1. 优惠券的各种类型
现金券:优惠券直接抵扣现金,不设置使用门槛,比如:50元现金券,现金券之所以称之为现金券,就是因为它可以当做现金直接使用,相当于你自己的钱,没有订单金额的限制。
满减券:与促销活动的满减类似,当订单满足一定金额才可以使用优惠券,比如:满200减20元。
折扣券:在购买某些商品是可以进行打折,比如8折,那么100块钱的东西就是80元。
单品券:单品券是针对特定的商品才可以使用,指定特定商品后可以设置满减或者折扣或者现金券。
分类券:分类券是针对特定分类的商品才可以使用,指定分类后设置满减或者折扣或者现金券。
品牌券:品类券是针对特定品牌的商品才可以使用,指定品牌后设置满减或者折扣或者现金券。
平台券:平台券适用于所有的店铺的优惠券,无论在哪个商家,哪个店铺,都可以使用,优惠金额由平台承担。
店铺券:店铺券是入驻平台的商家自己发布的优惠券,只在本店铺有效,优惠金额由店铺承担。
2. 优惠券的设计规则
优惠券的设计规则分为三步:
- 创建优惠券
- 领取优惠券
- 优惠券核销
2.1 创建优惠券
在创建优惠券的时候需要填写相关的信息,以及选择一些信息。
优惠券名称:给优惠券起一个名称。
选择优惠券类型:现金券,折扣券,满减券。
优惠券面值和使用条件:现金券(X元)、折扣券(满X元Y折)、满减券(满X元减Y元)。
推广渠道:优惠券的发放渠道:公众号、小程序、app、PC端商城。
有效时间:优惠券的有效时间,这里有两种时间的设置方式,相对时间和绝对时间;相对时间(用户领取后X天内有效)、绝对时间(开始时间——结束时间内有效),时间的设置应该应该精确到某年某月某时某分。
使用范围:设置优惠券的使用范围,全部商品可用,还是部分商品可用,如果是部分商品可用可以通过分类品牌进行筛选,最后可以选择指定商品不可用;也可以直接指定某些商品可用。
返还规则:返还规则主要考虑到退款退货的情况,从订单的流程上来说分为正向流程和逆向流程。
- 正向流程是指:用户正常下单最后收获,没有退款退货操作。计算订单金额时需要减去优惠券的金额,告诉用户优惠金额是多少
- 逆向流程是指:用户付款之后发生退款,退货操作
逆向流程主要考虑到优惠券的返还问题——怎么返还?
因为可能有很多个商品才同时满足优惠,用户如果仅仅退某款商品该怎么办,退款的细节以后讲订单的时候再说还涉及到一些结账分佣的问题,那么现在在这个地方优惠券的返还规则。
- 统一不返还:优惠券用了就不能退了,不管你退货还是退款。
- 优惠分摊:当多个商品满足优惠券使用条件但是用户退款某个商品时,以优惠券的形式返还给用户改商品分摊的优惠金额。优惠券的使用条件不变,比如用户用了一张满200减60的优惠券,订单有两个商品——一个60元,一个120元,根据权重,这减的60元属于60元商品20元,属于120元商品40元,用户退120元商品的就返还给用户一张满200减40的优惠券,那个也一样。
2.2 领取优惠券
优惠券的领取方式有两种:主动领取和被动领取。
主动领取:用户需要在我的优惠券界面主动领取才可以使用优惠券。
被动领取:直接发送给用户,默认领取。
2.3 优惠券核销
当用户下单时需要判断提示用户使用哪种优惠券,逻辑上分为以下几个步骤:
- 从用户的优惠券列表中筛选可用的优惠券,是否是有效时间,是否在商品范围之内,这里用户未领取的优惠券一同计算。
- 如果有多种优惠券满足使用条件默认给用户使用优惠金额最高的。
- 如果金额相同默认为用户选择使用快过期的优惠券。
3. 优惠券的管理
优惠券的管理,主要是:统计优惠券的使用情况。
优惠券发放了多少?用户领取了多少?核销了多少?剩余多少?这些操作对应的时间是什么时候?
4. 优惠券的产品设计方法
4.1 优惠券的前端展示问题
我们主要考虑:优惠券在什么地方展示?展示的形式是什么?
——展示的位置主要有商品详情页面,个人优惠券中心页面。
商品详情页面需要展示用户领取的和未领取的包含在商品下的优惠券,只要是属于商品下的优惠券都需要展示出来。
个人优惠券中心展示用户所有的优惠券,已用的、没有用户,提供领取入口,用户进入可以领取优惠券。
4.2 优惠券管理的后台设计方法
优惠券的后台设计,分为两个菜单:创建优惠券,优惠券管理
- 创建优惠券:点击创建优惠券菜单进入编辑页面,须填写先关信息,选择相关信息,表单内容为 2.2.1创建优惠券的各种信息可以去上面看;创建完成点击保存优惠券创建成功,在优惠券管理菜单里显示
- 优惠券管理:主要以列表的形式展示优惠券。
优惠券的管理,主要是对优惠券的统计作用列表信息为下:
- 优惠券信息:优惠券名称,优惠券金额,使用条件
- 推广信息:展示推广的渠道
- 发放量、领取量、核销量。
如果是没有发放完成的优惠券可以执行停止发放或者继续发放操作,还可以执行删除操作,删除后前端的领券中心将没有优惠券,同时从后台的优惠券管理中删除。
今天关于电商促销后台逻辑和电商平台促销活动思维导图的分享就到这里,希望大家有所收获,若想了解更多关于618手机厂商促销杀红眼:骁龙870机型最低1799元、java-ee - php和java联合开发一个网站后台逻辑、Java生鲜电商平台-促销架构以及秒杀解决方案实战、Java生鲜电商平台-促销系统的架构设计与源码解析等相关知识,可以在本站进行查询。
本文标签: