秒杀

秒杀功能实现
package com.xxxx.seckill.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xxxx.seckill.pojo.Order;
import com.xxxx.seckill.pojo.User;
import com.xxxx.seckill.vo.GoodsVo;
/**

  • <p>
  • 服务类
  • </p>
  • @author zhoubin
  • @since 1.0.0
    /
    public interface IOrderService extends IService<Order> {
    /
    *
    • 秒杀
    • @param user
    • @param goods
    • @return
      /
      Order seckill(User user, GoodsVo goods);
      }
      package com.xxxx.seckill.service.impl;
      import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
      import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
      import com.xxxx.seckill.mapper.OrderMapper;
      import com.xxxx.seckill.pojo.Order;
      import com.xxxx.seckill.pojo.SeckillGoods;
      import com.xxxx.seckill.pojo.SeckillOrder;
      import com.xxxx.seckill.pojo.User;
      import com.xxxx.seckill.service.IGoodsService;
      import com.xxxx.seckill.service.IOrderService;
      import com.xxxx.seckill.service.ISeckillGoodsService;
      import com.xxxx.seckill.service.ISeckillOrderService;
      import com.xxxx.seckill.vo.GoodsVo;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      import org.springframework.transaction.annotation.Transactional;
      import java.util.Date;
      /
      *
  • <p>
  • 服务实现类
  • </p>
  • @author zhoubin
  • @since 1.0.0
    /
    @Service
    public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
    IOrderService {
    @Autowired
    private ISeckillGoodsService seckillGoodsService;
    @Autowired
    private IGoodsService goodsService;
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private ISeckillOrderService seckillOrderService;
    /
    *
    • 秒杀
    • @param user
    • @param goods
    • @return
      /
      @Override
      @Transactional
      public Order seckill(User user, GoodsVo goods) {
      //秒杀商品表减库存
      SeckillGoods seckillGoods = seckillGoodsService.getOne(new
      QueryWrapper<SeckillGoods>().eq("goods_id",
      goods.getId()));
      seckillGoods.setStockCount(seckillGoods.getStockCount()-1);
      seckillGoodsService.updateById(seckillGoods);
      //生成订单
      Order order = new Order();
      order.setUserId(user.getId());
      order.setGoodsId(goods.getId());
      order.setDeliveryAddrId(0L);
      order.setGoodsName(goods.getGoodsName());
      order.setGoodsCount(1);
      order.setGoodsPrice(seckillGoods.getSeckillPrice());
      order.setOrderChannel(1);
      order.setStatus(0);
      order.setCreateDate(new Date());
      orderMapper.insert(order);
      //生成秒杀订单
      SeckillOrder seckillOrder = new SeckillOrder();
      seckillOrder.setOrderId(order.getId());
      seckillOrder.setUserId(user.getId());
      seckillOrder.setGoodsId(goods.getId());
      seckillOrderService.save(seckillOrder);
      return order;
      }
      }
      package com.xxxx.seckill.controller;
      import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
      import com.xxxx.seckill.pojo.Order;
      import com.xxxx.seckill.pojo.SeckillOrder;
      import com.xxxx.seckill.pojo.User;
      import com.xxxx.seckill.service.IGoodsService;
      import com.xxxx.seckill.service.IOrderService;
      import com.xxxx.seckill.service.ISeckillOrderService;
      import com.xxxx.seckill.vo.GoodsVo;
      import com.xxxx.seckill.vo.RespBeanEnum;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.web.bind.annotation.RequestMapping;
      /
      *
  • <p>
  • 前端控制器
  • </p>
  • @author zhoubin
  • @since 1.0.0
    */
    @Controller
    @RequestMapping("/seckill")
    public class SeckillController {
    @Autowired
    private IGoodsService goodsService;
    @Autowired
    private ISeckillOrderService seckillOrderService;
    @Autowired
    private IOrderService orderService;
    @RequestMapping("/doSeckill")
    public String doSeckill(Model model, User user, Long goodsId) {
    if (user == null) {
    return "login";
    }
    model.addAttribute("user", user);
    GoodsVo goods = goodsService.findGoodsVoByGoodsId(goodsId);
    //判断库存
    if (goods.getStockCount() < 1) {
    model.addAttribute("errmsg", RespBeanEnum.EMPTY_STOCK.getMessage());
    return "seckillFail";
    }
    //判断是否重复抢购
    SeckillOrder seckillOrder = seckillOrderService.getOne(new
    QueryWrapper<SeckillOrder>().eq("user_id", user.getId()).eq(
    "goods_id",
    goodsId));
    if (seckillOrder != null) {
    model.addAttribute("errmsg", RespBeanEnum.REPEATE_ERROR.getMessage());
    return "seckillFail";
    }
    Order order = orderService.seckill(user, goods);
    model.addAttribute("order",order);
    model.addAttribute("goods",goods);
    return "orderDetail";
    }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。