秒殺

秒殺功能實現(xiàn)
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>
  • 服務(wù)類
  • </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>
  • 服務(wù)實現(xiàn)類
  • </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";
    }
    //判斷是否重復(fù)搶購
    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";
    }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容