当前位置: 首页 > 科技观察

Redis优惠券闪杀解决方案

时间:2023-03-16 15:04:44 科技观察

1实现优惠券闪购功能,下单时需要判断两点:1、闪购是否开始或结束;如果没有返回错误信息3.判断秒杀是否结束,如果结束则返回错误信息4.如果在秒杀时间内,判断库存是否充足5.如果充足,扣除库存6.创建订单信息并保存到优惠券订单中表6.1保存订单id6.2保存用户id6.3保存优惠券id7。返回订单id代码实现:(服务层实现类)packagecom.hmdp.service.impl;importcom.hmdp.dto.Result;importcom.hmdp.entity.SeckillVoucher;importcom.hmdp.entity.VoucherOrder;importcom.hmdp.mapper.VoucherOrderMapper;导入com.hmdp.service.ISeckillVoucherService;导入com.hmdp.service.IVoucherOrderService;导入com.baomidou.mybatisplus。extension.service.impl.ServiceImpl;导入com.hmdp.utils.RedisIdWorker;导入com.hmdp.utils.UserHolder;导入org.springframework.stereotype.Service;导入javax.annotation.Resource;导入java.time.LocalDateTime;/***

*服务实现类*

**@author虎哥*@since2021-12-22*/@ServicepublicclassVoucherOrderServiceImplextendsServiceImplimplementsIVoucherOrderService{@Resourcep私有化ISeckillVoucherServiceiSeckillVoucherService;@ResourceprivateRedisIdWorkerredisIdWorker;@OverridepublicResultseckillVoucher(LongvoucherId){//1.获取优惠券信息SeckillVouchervoucher=iSeckillVoucherService.getById(voucherId);//2。判断是否已经开始}//3。判断是否结束if(voucher.getEndTime().isBefore(LocalDateTime.now())){Result.fail("秒杀结束!");}//4。判断库存是否充足if(voucher.getStock()<1){Result.fail("库存不足!");}//5。扣除库存booleansuccess=iSeckillVoucherService.update().setSql("stock=stock-1").eq("voucher_id",voucherId).update();if(!success){Result.fail("库存不足!");}//6。创建订单VoucherOrder凭证erOrder=newVoucherOrder();//6.1添加订单idLongorderId=redisIdWorker.nextId("order");voucherOrder.setId(orderId);//6.2添加用户idLonguserId=UserHolder.getUser().getId();voucherOrder.setUserId(userId);//6.3添加优惠券idvoucherOrder.setVoucherId(voucherId);保存(凭证订单);//7。返回订单idreturnResult.ok(orderId);}}

最新推荐
猜你喜欢