shazh520
V2EX  ›  Java

Java 实现优惠券系统

  •  
  •   shazh520 · May 24, 2019 · 9731 views
    This topic created in 2722 days ago, the information mentioned may be changed or developed.

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

    31 replies  •  2023-04-18 12:44:59 +08:00
    alittlefun
    alittlefun
    May 24, 2019 via Android
    1
    用枚举加类别,平台啊,商家啊,活动啊等,使用的时候用 if 判断,我也不是很懂,个人觉得
    tommyzhang
    tommyzhang
    May 24, 2019
    2
    自己写一个处理器接口 把模板 发放 使用抽离成小流程
    sazima
    sazima
    May 24, 2019
    3
    使用 python 做过, 没有考虑过互斥, 互斥是什么?
    jc89898
    jc89898
    May 24, 2019
    4
    算法搞
    uxstone
    uxstone
    May 24, 2019
    5
    用规则引擎搞?
    azh7138m
    azh7138m
    May 25, 2019 via Android
    6
    @sazima 一单里面可以出现多个优惠
    比如 jd 可以
    京券 东券 满减 支付券
    说起来不同类的就能叠加,比如满减和 X 折是可以一起出现的
    zjsxwc
    zjsxwc
    May 25, 2019 via Android
    7
    其实和运费计算差不多吧。

    一个是卖家设置不同省份的按重量还是按数量计算的运费模板,下单时根据买家收获地址和所买的东西计算运费。

    一个是卖家设置不同的优惠券规则,下单时根据买家优惠券计算价格。
    changdy
    changdy
    May 25, 2019
    8
    有想过 但是其实最重要的 是 产品的设计思路.
    需要先定义好 商家, 物品 ,用户,券的各种类型,才能写代码.
    要不然坑就比较大. 改动也可能会比较复杂
    nonprocoder
    nonprocoder
    May 25, 2019
    9
    让产品定规则
    DovaKeen
    DovaKeen
    May 25, 2019
    10
    大胆写,有 bug 就说是 feature
    shazh520
    shazh520
    OP
    May 25, 2019
    11
    看了大家的回复,有所思考。之前一直以为优惠券和权限认证一样,和业务不强相关,可以剥离出来,并且可能还会有一些成熟的开源框架可以研究学习,但是这两天看了网上的一些资料和大家的回复,颠覆了之前的认知。
    shazh520
    shazh520
    OP
    May 25, 2019
    12
    @sazima 互斥就是两种优惠券不能同时使用。
    shazh520
    shazh520
    OP
    May 25, 2019
    13
    @uxstone 这个东西需要去详细了解一下,之前没有接触过哈哈
    shazh520
    shazh520
    OP
    May 25, 2019
    14
    @zjsxwc 主要就是在计算价格这一块弯弯比较多。
    shazh520
    shazh520
    OP
    May 25, 2019
    15
    @changdy 就是在设计阶段有点难受,有很多的不确定性。券的类型需要可以可扩展,数据库怎么设计。券可以同时使用,计算链该怎么设计。做的是一个平台,而且规则可能还得依着入驻的商家,所以要封装这些不确定性。
    shazh520
    shazh520
    OP
    May 25, 2019
    16
    @DovaKeen 有意思哈哈
    laojiaqing
    laojiaqing
    May 25, 2019
    17
    你这些不应该等产品出规则再搞么,自己想这么多干什么
    shazh520
    shazh520
    OP
    May 25, 2019 via Android
    18
    @laojiaqing 不想想自己没底,拍着胸脯说可以干,然后干不出来咋办 哈哈
    shazh520
    shazh520
    OP
    May 25, 2019 via Android
    19
    还有就是这个前端在选择优惠券或者增减商品的时候是不是都要请求后端计算价格?前端计算价格我感觉不太现实
    kanepan19
    kanepan19
    May 25, 2019
    20
    应该会炸出不少 电商小伙伴
    sindri
    sindri
    May 25, 2019
    21
    不错不错。。
    Raymon111111
    Raymon111111
    May 25, 2019
    22
    搜一下

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