5 订单模块逻辑

1 首先登陆成功之后跳转到订单列表

$.ajax({
   url: "/login/do_login",
    type: "POST",
    data:{
       mobile:$("#mobile").val(),
       password: password
    },
    success:function(data){
       layer.closeAll();
       if(data.code == 0){
          layer.msg("成功");
          window.location.href="/goods/to_list";
       }else{
          layer.msg(data.msg);
       }
    },
    error:function(){
       layer.closeAll();

2 进入商品详情页前,获取一些秒杀的状态信息等等

@RequestMapping("/to_detail/{goodsId}")
public String detail( Model model,                       MiaoshaUser user,                        @PathVariable("goodsId")long goodsId){
    GoodsVo goodsVo = goodsService.getGoodsVoByGoodsId(goodsId);    model.addAttribute("goods", goodsVo);    model.addAttribute("user", user);    //    long startAt = goodsVo.getStartDate().getTime();    long endAt = goodsVo.getEndDate().getTime();    long now = System.currentTimeMillis();    int miaoshaStatus = 0;    int remainSeconds = 0;    if(now < startAt){  // 秒杀还没开始,倒计时        miaoshaStatus =  0;        remainSeconds = (int)((startAt - now) / 1000);    }else if(now >endAt){ // 秒杀已经结束        miaoshaStatus = 2;        remainSeconds = -1;    }else{                // 秒杀进行时        miaoshaStatus = 1;        remainSeconds = 0;    }

    model.addAttribute("miaoshaStatus", miaoshaStatus);    model.addAttribute("remainSeconds", remainSeconds);    return "goods_detail";}

3 在商品详情开始秒杀

@RequestMapping("/do_miaosha")
public String do_miaosha(Model model, MiaoshaUser user,                         @Param("goodsId")long goodsId)
  • 3.1 判断当前用户是否存在
model.addAttribute("user", user);if(user == null){
    return "login";}
  • 3.2 判断库存
// 判断库存GoodsVo goodsVo = goodsService.getGoodsVoByGoodsId(goodsId);int stock = goodsVo.getStockCount();if(stock <= 0){
    model.addAttribute("errmsg", CodeMsg.MIAO_SHA_OVER.getMsg());    return "miaosha_fail";}
  • 3.3 判断是否已经秒杀过该商品
// 判断是否已经秒杀过该商品MiaoshaOrder order;order = orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(), goodsId);if(order != null){
    model.addAttribute("errmsg", CodeMsg.REPEATE_MIAOSHA.getMsg());    System.err.println("这个用户已经有该商品的秒杀订单了...");    return "miaosha_fail";}
  • 3.4 减库存,下订单,写入秒杀订单
// 减库存,下订单,写入秒杀订单OrderInfo orderInfo = miaoshaService.miaosha(user, goodsVo);model.addAttribute("orderInfo", orderInfo);model.addAttribute("goods", goodsVo);return "order_detail";
  • 3.5 在miaoService 中需要做两件事情
@Transactionalpublic OrderInfo miaosha(MiaoshaUser user, GoodsVo goodsVo) {
    // 减库存,下订单,写入秒杀订单    GoodsService.reduceStock(goodsVo);    OrderInfo orderInfo = orderService.createOrder(user, goodsVo);    return orderInfo;}           
  • 3.5.1 减少库存, 调用goodsService
@Update("update miaosha_goods set stock_count = stock_count - 1 where goods_id = #{id}")
int reduceStock(GoodsVo goodsVo);
  • 3.5.2 下订单,在orderService
@Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})")
void insertMiaoshaOrder(MiaoshaOrder miaoshaOrder);
posted @ 2021-07-10 21:41  weidalin  阅读(173)  评论(0)    收藏  举报