发放优惠券

文章目录

概要

发放优惠券

处于暂停状态,或者待发放状态的优惠券,在优惠券列表中才会出现发放按钮,可以被发放:

需求分析以及接口设计

需要我们选择发放方式使用期限

发放方式分为两种:立刻发放定时发放;使用期限也分两种:固定天数固定时间段。如图:

 

因此,在提交这个表单时,参数包括:

  • 发放(领用)开始时间:如果为空说明是立刻发放,开始时间就是当前时间

  • 发放(领用)结束时间

  • 有效期天数:如果为空说明是固定有效期

  • 使用期限开始时间:如果为空说明是固定天数有效期

  • 使用期限结束时间:如果为空说明是固定天数有效期

最后,肯定要带上优惠券id,我们才知道发放的是哪张券,当然这个可以通过路径占位符传参。

技术细节

1.Controller层

@ApiOperation("发放优惠券接口")
@PutMapping("/{id}/issue")
public void beginIssue(@RequestBody @Valid CouponIssueFormDTO dto) {
    couponService.beginIssue(dto);
}

2.Service层:


@Transactional
@Override
public void beginIssue(CouponIssueFormDTO dto) {
    // 1.查询优惠券
    Coupon coupon = getById(dto.getId());
    if (coupon == null) {
        throw new BadRequestException("优惠券不存在!");
    }
    // 2.判断优惠券状态,是否是暂停或待发放
    if(coupon.getStatus() != CouponStatus.DRAFT && coupon.getStatus() != PAUSE){
        throw new BizIllegalException("优惠券状态错误!");
    }
    // 3.判断是否是立刻发放
    LocalDateTime issueBeginTime = dto.getIssueBeginTime();
    LocalDateTime now = LocalDateTime.now();
    boolean isBegin = issueBeginTime == null || !issueBeginTime.isAfter(now);
    // 4.更新优惠券
    // 4.1.拷贝属性到PO
    Coupon c = BeanUtils.copyBean(dto, Coupon.class);
    // 4.2.更新状态
    if (isBegin) {
        c.setStatus(ISSUING);
        c.setIssueBeginTime(now);
    }else{
        c.setStatus(UN_ISSUE);
    }
    // 4.3.写入数据库
    updateById(c);

    // TODO 兑换码生成
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值