Java 实现优惠券系统

2019-05-24 20:57:35 +08:00
 shazh520

开始做 java2 年了,电商的其他部分我都感觉还好,就是这个优惠券模块我就是搞不来。在这里请教一下各位前辈,你们在实现电商的优惠券相关模块是怎么实现的?优惠券之间的互斥、组合等等怎么搞?

7907 次点击
所在节点    Java
31 条回复
sindri
2019-05-25 15:47:37 +08:00
不错不错。。
Raymon111111
2019-05-25 15:54:09 +08:00
搜一下

规则引擎
palmers
2019-05-25 16:03:46 +08:00
我知道的是用规则引擎, 不管是促销规则还是优惠券规则 都是都计算引擎,只要合乎正常逻辑都是可以做出来的 不用担心做不出来 应该担心的是时间
megachweng
2019-05-25 16:25:26 +08:00
注意 1 分钱商品使用优惠券的情况,遇到过坑
batter
2019-05-25 16:32:04 +08:00
说一下我的理解,每一类型的券单独封装一个类进行操作,订单创建完成之后使用 useCoupon 方法,cancelCoupon,等方法来使用券,目前所接触的其实也不是很难,也可能我们公司业务类型不复杂,太复杂暂时没接触过
sammeishi
2019-05-26 12:46:28 +08:00
分享一下最近给我司架构的 ERP 优惠子系统。优惠券只是优惠系统的一个功能,券只是一种发行方式,与免单,折扣,团购等其他优惠本质上是一样的,都是优惠行为即对订单内的目标进行减额或者额外赠送,只不过在使用途径上有区别而已。我司的优惠系统比较复杂而且涉及多分店跨店全部说完太长了。只是简要的说一下核心的逻辑。
首先把优惠系统的模型提出来,然后嵌入到订单系统中做成解析器,所有的优惠都会挨个分解成模型然后根据模型去通知结算系统应用。所以最重要的是提取这个模型,而不是代码层面,那些乱七八糟的 oop 之类的,模型你搞明白用什么实现都行。
我的模型主要是这几个属性: 条件。目标。行为。值。
比如满 3 减 1 优惠,条件是必须购买三份,目标是这 3 份商品,行为是减份,值是 1。
比如第二份半价,条件是购买份数大于 2,目标是第二份商品,行为是减额,值是 0.5
比如满 399 整单八折,条件是消费金额大于 399,目标是支付总额,行为是减额,直是 0.2%
再比如员工免单,条件是员工必须有免单权限,目标是支付总额,行为是减额,值是 100%
上门例子都是常见的业务中用到的,优惠子系统都可以将它们化解成模型,最终统一处理,而不需要将所有的优惠,每个都写一个逻辑。
模型大概是这个样子,你可以将模型分配一个 id,在跟踪这个 id,,给予使用次数得记录,那这个 id 就是优惠券。团购也是同理。
行为和条件可以多个组合的,实现这种复杂的优惠: 如满三减一送商品在整单 95 折最后在送免运费券和给会员积分。
手机码字太累,互斥就不说了,整体大概就是这个逻辑,你可以参考一下。
icerwinter
2019-05-26 12:49:21 +08:00
这个有些复杂, 只了解 规则引擎, 有互斥条件, 具体也不了解
shazh520
2019-05-26 20:10:30 +08:00
@sammeishi 反复读了四五遍。思维上更宽阔了。谢谢
sammeishi
2019-05-26 22:06:22 +08:00
@shazh520 你要是这方面没经验,建议你找一些案例去实际上手体验分析原理或者找有经验同事请教,优惠业务很复杂的因为他牵扯到结算与订单系统,对于电商系统来说这相当于牵扯全部东西了,纯靠凭空想象很难有进展的。 我说的也只是整个的冰山一角,比如比较重要的一个,用户体验方面: 如果你让用户手工去填写复杂的优惠相关参数,用户肯定会疯掉的,还有更复杂的: 场景优先的互斥规则 如何实现等等。
SsorryQaQ
2022-08-23 13:37:26 +08:00
@sammeishi
我的思路也是差不多,不过如何确定触发了条规则呢?目前我知道可以用规则引擎,不过感觉规则引擎用在这里有点杀鸡用牛刀。
wetalk
2023-04-18 12:44:59 +08:00
@SsorryQaQ 不是大材小用。券的叠加,比如满减券和折扣券,先满减再折扣,和先折扣再满减,优惠的金额不一样的,这还只是两种类型叠加

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/567421

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX