Java 实现优惠券系统 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shazh520
V2EX    Java

Java 实现优惠券系统

  •  
  •   shazh520 2019-05-24 20:57:35 +08:00 8875 次点击
    这是一个创建于 2387 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    规则引擎
    palmers
        23
    palmers  
       2019-05-25 16:03:46 +08:00
    我知道的是用规则引擎, 不管是促销规则还是优惠券规则 都是都计算引擎,只要合乎正常逻辑都是可以做出来的 不用担心做不出来 应该担心的是时间
    megachweng
        24
    megachweng  
       2019-05-25 16:25:26 +08:00 via iPhone
    注意 1 分钱商品使用优惠券的情况,遇到过坑
    batter
        25
    batter  
       2019-05-25 16:32:04 +08:00
    说一下我的理解,每一类型的券单独封装一个类进行操作,订单创建完成之后使用 useCoupon 方法,cancelCoupon,等方法来使用券,目前所接触的其实也不是很难,也可能我们公司业务类型不复杂,太复杂暂时没接触过
    sammeishi
        26
    sammeishi  
       2019-05-26 12:46:28 +08:00 via Android   2
    分享一下最近给我司架构的 ERP 优惠子系统。优惠券只是优惠系统的一个功能,券只是一种发行方式,与免单,折扣,团购等其他优惠本质上是一样的,都是优惠行为即对订单内的目标进行减额或者额外赠送,只不过在使用途径上有区别而已。我司的优惠系统比较复杂而且涉及多分店跨店全部说完太长了。只是简要的说一下核心的逻辑。
    首先把优惠系统的模型提出来,然后嵌入到订单系统中做成解析器,所有的优惠都会挨个分解成模型然后根据模型去通知结算系统应用。所以最重要的是提取这个模型,而不是代码层面,那些乱七八糟的 oop 之类的,模型你搞明白用什么实现都行。
    我的模型主要是这几个属性: 条件。目标。行为。值。
    比如满 3 减 1 优惠,条件是必须购买三份,目标是这 3 份商品,行为是减份,值是 1。
    比如第二份半价,条件是购买份数大于 2,目标是第二份商品,行为是减额,值是 0.5
    比如满 399 整单八折,条件是消费金额大于 399,目标是支付总额,行为是减额,直是 0.2%
    再比如员工免单,条件是员工必须有免单权限,目标是支付总额,行为是减额,值是 100%
    上门例子都是常见的业务中用到的,优惠子系统都可以将它们化解成模型,最终统一处理,而不需要将所有的优惠,每个都写一个逻辑。
    模型大概是这个样子,你可以将模型分配一个 id,在跟踪这个 id,,给予使用次数得记录,那这个 id 就是优惠券。团购也是同理。
    行为和条件可以多个组合的,实现这种复杂的优惠: 如满三减一送商品在整单 95 折最后在送免运费券和给会员积分。
    手机码字太累,互斥就不说了,整体大概就是这个逻辑,你可以参考一下。
    icerwinter
        27
    icerwinter  
       2019-05-26 12:49:21 +08:00
    这个有些复杂, 只了解 规则引擎, 有互斥条件, 具体也不了解
    shazh520
        28
    shazh520  
    OP
       2019-05-26 20:10:30 +08:00
    @sammeishi 反复读了四五遍。思维上更宽阔了。谢谢
    sammeishi
        29
    sammeishi  
       2019-05-26 22:06:22 +08:00 via Android
    @shazh520 你要是这方面没经验,建议你找一些案例去实际上手体验分析原理或者找有经验同事请教,优惠业务很复杂的因为他牵扯到结算与订单系统,对于电商系统来说这相当于牵扯全部东西了,纯靠凭空想象很难有进展的。 我说的也只是整个的冰山一角,比如比较重要的一个,用户体验方面: 如果你让用户手工去填写复杂的优惠相关参数,用户肯定会疯掉的,还有更复杂的: 场景优先的互斥规则 如何实现等等。
    SsorryQaQ
        30
    SsorryQaQ  
       2022-08-23 13:37:26 +08:00 via Android
    @sammeishi
    我的思路也是差不多,不过如何确定触发了条规则呢?目前我知道可以用规则引擎,不过感觉规则引擎用在这里有点杀鸡用牛刀。
    wetalk
        31
    wetalk  
       2023-04-18 12:44:59 +08:00 via iPhone
    @SsorryQaQ 不是大材小用。券的叠加,比如满减券和折扣券,先满减再折扣,和先折扣再满减,优惠的金额不一样的,这还只是两种类型叠加
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2777 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 02:36 PVG 10:36 LAX 18:36 JFK 21:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86