开发者学堂课程【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()); //设置使用时间
}
只有 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 = 来接收返回值。然后判断,如果优惠卷状态等于异常或者错误了。就抛出一个异常,代表当前更新状态失败。如果没有问题,输出一个信息,就是使用优惠券。
二、接口实现
下面创建接口方法,
点击 Create method’updateCouponstatus’ 后显示以下页面
上图就是我们的方法, changeCouponstatus 这个方法是没有用的,需要删除。
updateCouponstatus 就是更新优惠券状态的方法。
TradeCoupon findOne 是根据Id查询优惠券对象的方法。
下面我们来实现接口,根据下图操作:
点击 Java Class,把这个类放在 impl.CouponServicelmpl 中,然后会显示:
点击确认,显示以下页面:
在这里去实现 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{}
完整代码如下:
然后点击 Implement methods:
然后会显示:
所以实现了这个接口之后,它让我们把这两个方法进行一个重写。
查询优惠卷 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());//返回
这是更新优惠卷的服务端,服务端写完之后返回到订单。