优惠券系统-枚举类使用

158 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情

1.新增constant包

image.png

2.新增三个枚举类型(产品线枚举,分发对象枚举,优惠券分类枚举)

  • 产品线枚举 image.png
@Getter
@AllArgsConstructor
public enum ProductLine {

    DAMAO("大猫", 1),
    DABAO("大宝", 2);

    /** 产品线描述 */
    private String description;

    /** 产品线编码 */
    private Integer code;
 }

代码说明:
DAMAO("大猫", 1):一般优惠券有对应的产品线,比如说针对新人的产品线,针对老客的产品线,这边的DAMAO只是举一个例子而已

  • 分发对象枚举 image.png
@Getter
@AllArgsConstructor
public enum DistributeTarget {

    SINGLE("单用户", 1),
    MULTI("多用户", 2);

    /** 分发目标描述 */
 }

代码说明:

  • SINGLE:单用户对象指的是用户主动去领取优惠券
  • MULTI:指的是平台批量发放优惠券给用户
  • 优惠券分类枚举 image.png 代码:
public enum CouponCategory {

    MANJIAN("满减券", "001"),
    ZHEKOU("折扣券", "002"),
    LIJIAN("立减券", "003");

    /** 优惠券描述(分类) */
    private String description;

    /** 优惠券分类编码 */
    private String code;

    public static CouponCategory of(String code) {

        Objects.requireNonNull(code);

        return Stream.of(values())
                .filter(bean -> bean.code.equals(code))
                .findAny()
                .orElseThrow(() -> new IllegalArgumentException(code + " not exists!"));
    }
}

代码说明:

  • 优惠券存在多种类型,我们举例三种常见的类型;
  • 满减券,比如说我们电商网站经常看到的是满200-10元,满100-5的类型;
  • 折扣券:比如说总价打85折扣;
  • 立减券:比如说无门槛立减五元
  • CouponCategory of(String code):用来判断折扣编码是否存在
    源码如下:
    image.png
  • Objects.requireNonNull(code):判断对象是否为空,如果为空,则会报异常,如果非空则会返回该对象 image.png
  • Stream.of(values()) .filter(bean -> bean.code.equals(code)) .findAny() .orElseThrow(() -> new IllegalArgumentException(code + " not exists!"))
  • 查找任意code,如果不存在这返回异常,
  • bean -> bean.code.equals(code):用来判断code是否相同
  • fandAny:查找任意code;
  • orElseThrow:如果不存在,这提示异常