商城优惠券会员卡系列(一)
目录
优惠券系统
优惠券A:
优惠券B:
设计思想:
设计:
代码:
会员卡系统
需求
感受
结果:
优惠券系统
优惠券A:
满多少金额使用 (满m减X元)
优惠券B:
无门槛使用 (减X元)
设计思想:
合并AB,简化逻辑:未满金额0元 满金额的X元。 (B就是X=0)
设计:
属性:面值X
方法:传入金额计算当前面值
代码:
/*** 优惠券*/
public class Coupon {private String couponId;private double needPay;private double money;private double value;/*** 无门槛优惠券** @param value* @param money*/public Coupon(String couponId, double value, double money) {this(couponId, value, 0, money);}/*** 满多少减多少优惠券** @param value 面值* @param money 需要支付多少金额生效* @param money 传入的金融*/public Coupon(String couponId, double value, double needPay, double money) {this.couponId = couponId;this.value = value;this.needPay = needPay;this.money = money;}public double getBenefit() {return money >= needPay ? value : 0;}}
会员卡系统
需求
在优惠券已经首先的情况的下,产品又出了 会员卡系统,可以选择使用会员卡或者优惠券
会员卡系统:分三种
A会员卡:储值卡 - 多少金额有限使用储值卡
B会员卡:折扣卡 - 可以直接打折 最终优惠金额
C会员卡:储值折扣卡 - 先打折,打折之后使用卡里的钱
在优惠券的基础上,我们可以选择使用会员卡或者优惠券
感受
(当然储值卡钱会对应的减掉 这个就后端处理就好 前端我们只需要当前是面值)
完了,之前写好的推翻重来?
感觉完全不能接受啊
我们理一下思路,优惠券里面有属性面值X。
A会员卡中 储值卡其实也是一种面值
B会员卡优惠的金额也是储值卡的面值
C会员卡储值也是储值卡的面值
那么继续,优化下会员卡的计算方式:
A会员卡中,传入金额为m,储值n大于m,则面值为m,储值n小于等于m,则为面值为n;
B会员卡中,传入金额为m,折扣Z,面值为m-mz;
C会员卡中,传入金额为m,折扣Z,储值n,总价为mz;
储值n大于mz,则储值面值为mz;储值n小于等于mz,则为储值面值为n;
当然优惠部分也是该会员卡的面值 即 (m-mz)+ mz = m 和传入金额一样,即使全部抵扣 或者是储值n小于等于mz, ( m-mz)+ n
OK 我们会员卡就变成一张特殊的优惠券;这样就把会员卡和优惠券等同处理可以复用之前的逻辑,减肥了代码维护内容。
但是这样概念较为抽象,优化一下,抽离一个优惠概念
代码:
/*** 优惠模型*/
public interface Benefit {/*** 获取优惠值** @param money 优惠的价格 即优化的价值 或者说面额* @return*/double getBenefitValue(double money);}/*** 优惠券*/
public class Coupon implements Benefit {private String couponId;/*** 满多少*/private double needPay;/*** 减多少*/private double value;@Overridepublic double getBenefitValue(double money) {return money >= needPay ? value : 0;}}/*** 会员卡*/
public class VipCard implements Benefit {private String vipCardId;/*** 折扣*/private double discount;/*** 储值*/private double storeValue;/*** 卡类型*/private int vipCardType;/*** 储值卡*/private static final int TYPE_STORE_VALUE = 0;/*** 折扣卡*/private static final int TYPE_DISCOUNT = 1;/*** 储值折扣卡*/private static final int TYPE_STORE_VALUE_DISCOUNT = 2;@Overridepublic double getBenefitValue(double money) {switch (vipCardType) {case TYPE_STORE_VALUE://A会员卡中,传入金额为m,储值n大于m,则面值为m,储值n小于等于m,则为面值为n;return money >= storeValue ? storeValue : money;case TYPE_DISCOUNT://B会员卡中,传入金额为m,折扣Z,面值为m-mzreturn money - money * discount;case TYPE_STORE_VALUE_DISCOUNT:/*** 传入金额为m,折扣Z,储值n,总价为mz; * 储值n大于mz,则储值面值为mz;* 储值n小于等于mz,则为储值面值为n;* 当然优惠部分也是该会员卡的面值 即 (m-mz)+ mz = m 和传入金额一样,即使全部抵扣 或者是储值n小于等于mz, ( m-mz)+ n*/double allMoney = money * discount;//这里全部钱都被优惠掉了 储值也算优化if (storeValue > allMoney) {return money;}return money - allMoney + storeValue;default:return 0;}}}
结果:
这里的话会员卡和优惠券我们已经抽离成为同一概念,这样也可以在列表共同选择优惠了。但是目前来看对该项目是基本够用了,但是接下来是否能经得起接下来产品需求对推敲呢,未完待续...
商城优惠券会员卡系列(一)相关推荐
- 商城优惠券会员卡系列(二)
文章目录 前言 对策 策略模式 总结 前言 接上文继续 ,这时候产品又来了一个新需求(PS:这是一个假需求,自己遐想的). 我们来了新出一个需求:需要优惠券里面添加一个功能,优惠券新出折扣优惠券,可以 ...
- 微信小程序购物商城系统开发系列-工具篇
微信小程序购物商城系统开发系列-工具篇 微信小程序开放公测以来,一夜之间在各种技术社区中就火起来啦.对于它 估计大家都不陌生了,对于它未来的价值就不再赘述,简单一句话:可以把小程序简单理解为一个新的操 ...
- vivo全球商城优惠券系统架构设计与实践
业务背景 优惠券是电商常见的营销手段,具有灵活的特点,既可以作为促销活动的载体,也是重要的引流入口.优惠券系统是vivo商城营销模块中一个重要组成部分,早在15年vivo商城还是单体应用时,优惠券就是 ...
- 2022最新淘客三合一cms商城优惠券系统搭建教程
直接在大淘客官网注册账号,然后点击下图的位置,下载index.php部署到自己的云服务器或虚拟主机即可. 注意:此次官网大淘客已经更新了整合了淘客三合一商城系统,无须把自己的拼多多商城和京推推商城导入 ...
- 商城优惠券模块设计与实现
文章目录 前言 优惠券是什么? 优惠券的发行种类有哪些? 优惠券券类型 对优惠券发放进行客群限定 对优惠券发放进行商品限定 优惠券分享方式 兑换码兑换优惠券的场景 优惠券模块包含了什么? 用户侧 平台 ...
- Scrapy 爬取京东商城华为全系列手机评论
向AI转型的程序员都关注了这个号
- Scrapy爬取京东商城华为全系列手机评论
本文转自:https://mp.weixin.qq.com/s?__biz=MzA4MTk3ODI2OA==&mid=2650342004&idx=1&sn=4d270ab7c ...
- 分享大型Java多用户商城系统开发历程
最近公司要搞商城,让我多方咨询,最后看了很多,要不就是代码.表字段注释不全,要不就是bug多,要么就是文档缺少,最后决定自己开发一套商城. 下面是开发的一些心得体会,权且记录下来,给自己做个记录把. ...
- 如何搭建线上商城和线下门店的联合运营解决方案
编辑导语:如今随着互联网的发展以及人们生活水平的提高,再加上上半年疫情的冲击,很多人都开始使用线上商城的方式进行购买生鲜等,实体商业由此受到打击:本文作者分享了关于搭建线上线下的联合运营,我们一起来看 ...
最新文章
- ThreadLocal的空指针异常问题
- oracle logminer java_Oracle logminer
- su: user tomcat does not exist
- C语言之运算符优先级(四十二)
- ConceptDraw Office for mac(跨平台图表办公程序)
- SPI机制入门、SPI机制原理
- java+opencv实现人脸识别
- 计算机考研英语复试如何准备,如何准备考研英语复试听力?
- Docker容器监控cAdvisor
- [方便WAP网站开发]在线手机WAP模拟器或软件
- ADAS功能中LCA、LKA、LCK...区别
- MT8516芯片原理图资料(6MIC_RESERVE_4MIC_ARRA)
- gis 大屏_大屏简介
- iOS 实现二维码的彩色效果
- WhatsApp API介绍
- 回望过去,感觉现在的自己十分功利
- Unity文件转移出现的粉红色材质的处理方法
- 2013 HTML5 峰会,HTML5 守望者的盛宴
- 用HBuilderX开发小程序的一些问题
- OUC_SE_Group04_Blog2