更新优惠卷|学习笔记

简介: 快速学习更新优惠卷

开发者学堂课程【RocketMQ 知识精讲与项目实战(第二阶段)更新优惠卷】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/703/detail/12419


更新优惠卷

内容介绍:

一、方法介绍

二、接口实现


一、方法介绍

确认订单的第四步:扣减优惠券。

扣减优惠券,就是当用户的订单使用了优惠券的话,将这个优惠券查询出来,并把它的状态设置为使用,然后将时间以及当前的订单id进行添加,所以扣减优惠卷本质上是一个保存操作。

下面是扣减优惠卷的一个方法:

输入:

updateCouponStatus(order),其中 order 是订单对象

下面封装使用优惠券的方法:

TradeCouponcoupon=

couponService.findOne(order.getCoupon在这里,若用户没有优惠卷,那该用户就无法使用,所以要事先判断用户是否有优惠卷,

输入代码:

if(order.getCouponId ( ) !=null);//判断{

TradeCoupon coupon =

couponService.findOne(order.getCouponId());   //对象查询

coupon.setOrderId( order.getOrderId());  //设置当前订单 id

coupon.setIsUsed(Shopcode.SHOP_COUPON_ISUSED.getCode()); //设置优惠卷使用状态

coupon.setUsedTime(new Date());  //设置使用时间

}

image.png

只有 coupounId 不等于空,才有必要继续下面的操作。封装优惠券的对象,并将信息设置好,然后提交到 coupoun-service 这个微服务当中去做更新操作。

首先将 coupon 对象查询出来,查询出来之后,设置当前的订单的 ID,然后设置我们的优惠券的一个使用状态,然后设置当前的使用时间。

这些信息设置完成后,就可以调用 coupon-service 的微服务去更新优惠卷状态。

在这个地方我们去添加一个更新优惠券状态的注释。

然后,输入代码:

Resultresult=

couponService.updateCouponstatus(coupon);//传递对象if(result.getSuccess().equals(ShopCode.SHOP_FAIL.getSuccess()))//  判断状态    {

castException.cast(shopcode.SHoP_COUPON_USE_FAIL );    //抛出异常

}

log.info("订单: "+order.getorderId()+",使用优惠券");   //输出信息

用代码:

couponService.updateCouponstatus(coupon)把 coupon 的对象传递过去。

然后在前面添加 Result result =  来接收返回值。然后判断,如果优惠卷状态等于异常或者错误了。就抛出一个异常,代表当前更新状态失败。如果没有问题,输出一个信息,就是使用优惠券。


二、接口实现

下面创建接口方法,

image.png

点击 Create method’updateCouponstatus 后显示以下页面

image.png

上图就是我们的方法, changeCouponstatus 这个方法是没有用的,需要删除。

updateCouponstatus 就是更新优惠券状态的方法。

TradeCoupon findOne 是根据Id查询优惠券对象的方法。

下面我们来实现接口,根据下图操作:

image.png

点击  Java Class,把这个类放在  impl.CouponServicelmpl 中,然后会显示:

image.png

点击确认,显示以下页面:

image.png

在这里去实现 ICouponService 的接口,先写上注解啊,在注解里接口的 class 也就是我们的服务的名字。

输入代码:

package com. itheima. shop.service.impl;

Import com.alibaba.dubbo.config.annotation.Service;

import com. itheima. api.ICouponService;

import org.springframework.stereotype.Component;

@component

@service(interfaceclass = Icouponservice.class)//注解

publis.siass.op9nsecviseImpl..implements. .Icouponsecvice{}

完整代码如下:

image.png

然后点击 Implement methods:

image.png

然后会显示:

image.png

所以实现了这个接口之后,它让我们把这两个方法进行一个重写。

查询优惠卷 id 方法重写:

输入代码:

@Autowired

private TradecouponMapper couponMapper;

@override

public Tradecoupon findone(Long coupouId) i

if(coupouId==null)   //判断ID是否为空{

castException.cast(Shopcode.SHOP_REQUEST_PARAMETER_VALID); //抛出异常

}

return couponMapper.selectByPrimaryKey(coupourd);

}

首先要做一个判断,如果当前优惠卷的 couponId 为空。那么当前参数非法,如果没有问题,我们在这里注入的 couponMapper。注入进来之后,将这个逐件传递回去。查询出来当前优惠券的对象。

更新优惠券状态重写:

依然要做判断,首先对象跟 ID 不能为空,如果都为空,就告诉他当前参数非法,如果没有问题,要去通过 updateByPrimarykey 的方法去做一个更新。然后返回result。

代码如下:

public Result updateCouponStatus(TradeCoupon coupon) {

if(coupon==null||coupon.getCouponId()==null)//判断

{

castException.cast(Shopcode.SHOP_REQUEST_PARAMETER_VALID);//通知参数非法

couponMapper.updateByPrimaryKey(coupon);//更新

return new Result(ShopCode.SHOP__uccEss.getSuccess(),

shopCode .SHOP_SUCCESS.getMessage());//返回

这是更新优惠卷的服务端,服务端写完之后返回到订单。

相关文章
|
3月前
|
消息中间件 设计模式 SQL
谷粒商城笔记+踩坑(21)——提交订单。原子性验令牌+锁定库存
完成提交订单功能,并使用分布式事务方案,保证了订单提交的幂等性
谷粒商城笔记+踩坑(21)——提交订单。原子性验令牌+锁定库存
|
5月前
|
监控 供应链 搜索推荐
阿里商旅账单系统架构设计实践问题之账单详情数据未同步会带来问题如何解决
阿里商旅账单系统架构设计实践问题之 账单详情数据未同步会带来问题如何解决
|
6月前
三分钟教会你!客户扫码预约活动后,如何快速核销记录?
我们可以通过“提交成功页设置获取核销凭证”,结合“标记处理进度”功能,对活动预约记录进行手动核销。
|
弹性计算 关系型数据库 数据库
阿里云优惠券领取、使用、常见问题解答(2023年更新)
我们购买阿里云服务器或者其他阿里云产品的时候,在支付订单的时候会看到一个优惠券的选项,如果我们账户有领取优惠券,这里是可以选择使用优惠券直接抵扣的,因此,领取和使用优惠券是我们节约购买阿里云产品成本的一个很重要的优惠方式,关于阿里云优惠券领取、使用、常见问题的解答如下下文所示(2023年更新)。
1355 0
阿里云优惠券领取、使用、常见问题解答(2023年更新)
|
消息中间件 RocketMQ 开发者
回退优惠券|学习笔记
快速学习回退优惠券
回退优惠券|学习笔记
|
消息中间件 RocketMQ 开发者
更新余额1|学习笔记
快速学习更新余额1
更新余额1|学习笔记
|
消息中间件 Java 数据库
更新余额2 |学习笔记
快速学习更新余额2
119 0
更新余额2 |学习笔记
|
消息中间件 缓存 NoSQL
失效问题处理:模拟获取优惠券| 学习笔记
快速学习失效问题处理:模拟获取优惠券。
失效问题处理:模拟获取优惠券| 学习笔记
|
缓存
实战:第三章:更新数据只能是下月修改,当月不能修改
实战:第三章:更新数据只能是下月修改,当月不能修改
|
消息中间件 存储 缓存
面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?
对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别
面试官:生成订单 30 分钟未支付,则自动取消,该怎么实现?