基本优惠券抢购功能
This commit is contained in:
parent
bb80b6da7a
commit
12e6c4e1b7
@ -1 +1 @@
|
|||||||
14688
|
45680
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package com.hmdp.controller;
|
|||||||
|
|
||||||
|
|
||||||
import com.hmdp.dto.Result;
|
import com.hmdp.dto.Result;
|
||||||
|
import com.hmdp.service.impl.VoucherOrderServiceImpl;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@ -18,8 +20,12 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/voucher-order")
|
@RequestMapping("/voucher-order")
|
||||||
public class VoucherOrderController {
|
public class VoucherOrderController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private VoucherOrderServiceImpl voucherOrderService;
|
||||||
|
|
||||||
@PostMapping("seckill/{id}")
|
@PostMapping("seckill/{id}")
|
||||||
public Result seckillVoucher(@PathVariable("id") Long voucherId) {
|
public Result seckillVoucher(@PathVariable("id") Long voucherId) {
|
||||||
return Result.fail("功能未完成");
|
return voucherOrderService.seckillVoucher(voucherId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.hmdp.service;
|
package com.hmdp.service;
|
||||||
|
|
||||||
|
import com.hmdp.dto.Result;
|
||||||
import com.hmdp.entity.VoucherOrder;
|
import com.hmdp.entity.VoucherOrder;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
|||||||
*/
|
*/
|
||||||
public interface IVoucherOrderService extends IService<VoucherOrder> {
|
public interface IVoucherOrderService extends IService<VoucherOrder> {
|
||||||
|
|
||||||
|
Result seckillVoucher(Long voucherId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,22 @@
|
|||||||
package com.hmdp.service.impl;
|
package com.hmdp.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.db.handler.RsHandler;
|
||||||
|
import com.hmdp.dto.Result;
|
||||||
|
import com.hmdp.entity.SeckillVoucher;
|
||||||
|
import com.hmdp.entity.Voucher;
|
||||||
import com.hmdp.entity.VoucherOrder;
|
import com.hmdp.entity.VoucherOrder;
|
||||||
import com.hmdp.mapper.VoucherOrderMapper;
|
import com.hmdp.mapper.VoucherOrderMapper;
|
||||||
|
import com.hmdp.service.ISeckillVoucherService;
|
||||||
import com.hmdp.service.IVoucherOrderService;
|
import com.hmdp.service.IVoucherOrderService;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.hmdp.service.IVoucherService;
|
||||||
|
import com.hmdp.utils.RedisIdWorker;
|
||||||
|
import com.hmdp.utils.UserHolder;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 服务实现类
|
* 服务实现类
|
||||||
@ -16,5 +27,38 @@ import org.springframework.stereotype.Service;
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {
|
public class VoucherOrderServiceImpl extends ServiceImpl<VoucherOrderMapper, VoucherOrder> implements IVoucherOrderService {
|
||||||
|
@Autowired
|
||||||
|
private ISeckillVoucherService iSeckillVoucherService;
|
||||||
|
@Autowired
|
||||||
|
private RedisIdWorker redisIdWorker;
|
||||||
|
@Override
|
||||||
|
public Result seckillVoucher(Long voucherId) {
|
||||||
|
// 根据vorcherId查询优惠券
|
||||||
|
SeckillVoucher seckillVoucher = iSeckillVoucherService.getById(voucherId);
|
||||||
|
// 判断秒杀功能是否已经开始或结束
|
||||||
|
if (seckillVoucher.getBeginTime().isAfter(LocalDateTime.now())) {
|
||||||
|
return Result.fail("秒杀功能还未开始");
|
||||||
|
} else if (seckillVoucher.getEndTime().isBefore(LocalDateTime.now())) {
|
||||||
|
return Result.fail("秒杀功能已经结束");
|
||||||
|
}
|
||||||
|
// 判断库存是否充足
|
||||||
|
if(seckillVoucher.getStock()<1){
|
||||||
|
return Result.fail("库存不足");
|
||||||
|
}
|
||||||
|
// 扣减库存
|
||||||
|
boolean succed = iSeckillVoucherService.update().setSql("stock = stock-1").eq("voucher_id",voucherId).update();
|
||||||
|
if(!succed){
|
||||||
|
return Result.fail("失败");
|
||||||
|
}
|
||||||
|
// 创建一个新的voucherOrder订单
|
||||||
|
VoucherOrder voucherOrder = new VoucherOrder();
|
||||||
|
long orderId = redisIdWorker.nextId("order");
|
||||||
|
voucherOrder.setId(orderId);
|
||||||
|
Long userID = UserHolder.getUser().getId();
|
||||||
|
voucherOrder.setUserId(userID);
|
||||||
|
voucherOrder.setVoucherId(voucherId);
|
||||||
|
save(voucherOrder);
|
||||||
|
// 返回订单id
|
||||||
|
return Result.ok(orderId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user