ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

黑马点评-优惠卷秒杀-实现一人一单功能

2026/8/31 4:32:30 拓冰建站 浏览量
黑马点评-优惠卷秒杀-实现一人一单功能 黑马点评-优惠卷秒杀-实现一人一单功能使用syn实现未使用分布式锁packagecom.hmdp.service.impl;importcom.hmdp.dto.Result;importcom.hmdp.entity.SeckillVoucher;importcom.hmdp.entity.VoucherOrder;importcom.hmdp.mapper.VoucherOrderMapper;importcom.hmdp.service.ISeckillVoucherService;importcom.hmdp.service.IVoucherOrderService;importcom.baomidou.mybatisplus.extension.service.impl.ServiceImpl;importcom.hmdp.utils.RedisIdWorker;importcom.hmdp.utils.UserHolder;importlombok.NonNull;importorg.springframework.aop.framework.AopContext;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importjavax.annotation.Resource;importjava.time.LocalDateTime;/** * p * 服务实现类 * /p * * author 虎哥 * since 2021-12-22 */ServicepublicclassVoucherOrderServiceImplextendsServiceImplVoucherOrderMapper,VoucherOrderimplementsIVoucherOrderService{ResourceprivateISeckillVoucherServiceseckillVoucherService;ResourceprivateRedisIdWorkerredisIdWorker;OverridepublicResultseckillVoucher(LongvoucherId){//1.查询优惠卷SeckillVouchervoucherseckillVoucherService.getById(voucherId);//2.判断秒杀是否开始if(voucher.getBeginTime().isAfter(LocalDateTime.now())){returnResult.fail(秒杀尚未开始!);}//3.判断秒杀是否结束if(voucher.getEndTime().isBefore(LocalDateTime.now())){returnResult.fail(秒杀已结束!);}//4.判断库存是否充足if(voucher.getStock()1){returnResult.fail(库存不足!);}LonguserIdUserHolder.getUser().getId();synchronized(userId.toString().intern()){//获取代理对象事务IVoucherOrderServiceproxy(IVoucherOrderService)AopContext.currentProxy();returnproxy.createVoucherOrder(voucherId);}}TransactionalpublicResultcreateVoucherOrder(LongvoucherId){//5.一人一单LonguserIdUserHolder.getUser().getId();//5.1.查询订单Integercountquery().eq(user_id,userId).eq(voucher_id,voucherId).count();//5.2.判断是否存在if(count0){//用户已经购买过了returnResult.fail(用户已经购买过一次了!);}//6.扣减库存booleansuccessseckillVoucherService.update().setSql(stock stock - 1).eq(voucher_id,voucherId).gt(stock,0)//乐观锁.update();if(!success){//扣减失败returnResult.fail(库存不足!);}//7.创建订单VoucherOrdervoucherOrdernewVoucherOrder();//7.1.订单idlongorderIdredisIdWorker.nextId(order);voucherOrder.setId(orderId);//7.2.用户idvoucherOrder.setUserId(userId);//7.3.代金卷idvoucherOrder.setVoucherId(voucherId);save(voucherOrder);//8.返回订单idreturnResult.ok(orderId);}}