秒杀

作者: 万物皆有序和公式 | 来源:发表于2021-05-18 14:23 被阅读0次

秒杀功能实现
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";
    }
    }

相关文章

  • 秒杀系统架构分析、设计、原理书目录

    秒杀系统架构分析、设计、原理 秒杀业务分析 秒杀技术挑战 秒杀架构原则 秒杀架构设计 大并发带来的挑战 作弊的手段...

  • SSM实现高并发秒杀功能之DAO层

    一、该秒杀实现哪些功能 1.列出秒杀的商品2.秒杀接口的暴露(到了秒杀的时间,把秒杀的地址暴露出来)3.执行秒杀4...

  • 12-场景

    1、秒杀场景 应对策略: 1)秒杀系统独立部署 2)秒杀商品页面静态化 3)租借秒杀活动带宽(将秒杀页面缓存到CD...

  • 秒杀让人无法拒接?

    建立我们需要的鱼塘 第一个就是秒杀 秒杀是不是出现这种情况 秒杀成交率不高? 秒杀不留电话? 秒杀完了下次不来? ...

  • redis实现秒杀

    秒杀活动内容实现简单的秒杀页面(显示当前秒杀活动状态)和秒杀接口,不需要考虑下订单和退货流程。秒杀接口要求时间到了...

  • redis实现秒杀抢购

    秒杀订单提前写入 秒杀抢购取出

  • 【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

    秒杀系统 秒杀系统介绍 秒杀系统相信网上已经介绍了很多了,我也不想黏贴很多定义过来了。 废话少说,秒杀系统主要应用...

  • 架构思维学习总结(九)

    4-3 千万级秒杀系统分享 一、秒杀系统发展概要 秒杀系统是中国特色秒杀系统关键字:google: seckill...

  • 高并发下的下单功能设计

    功能需求:设计一个秒杀系统 初始方案 商品表设计:热销商品提供给用户秒杀,有初始库存。 秒杀订单表设计:记录秒杀成...

  • 架构成长之路:高并发下的下单功能设计

    功能需求:设计一个秒杀系统 初始方案 商品表设计:热销商品提供给用户秒杀,有初始库存。 秒杀订单表设计:记录秒杀成...

网友评论

      本文标题:秒杀

      本文链接:https://www.haomeiwen.com/subject/nrdddltx.html