首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  Java

Java 实现优惠券系统

  •  
  •   shazh520 · 204 天前 · 3939 次点击
    这是一个创建于 204 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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