【Java秒杀方案】12.功能开发-【订单详情】排队秒杀,查询秒杀结果及订单展示,网页静态化

订单展示

1. 功能要点

秒杀,进入排队,等待秒杀结果 getResult

在这里插入图片描述

秒杀成功,跳转订单页面 跳转

在这里插入图片描述

订单页面

在这里插入图片描述

1./seckill/getResult

商品秒杀后,成功预减库存后,发送下单消息到队列,这个时候先返回前端用户“正在排队中”,只有真正下单,把数据写入到数据库,同时会把订单信息放在redis中,(oredr:userId:goodsId),这个时候才会返回秒杀成功,提示跳转到订单详情页面

如果查询到商品已经没有库存,同时又没有下单成功,这个时候前端就不需要返回调用getResult,直接提示商品已经全部秒杀完成

跳转订单详情页面

window.location.href="/orderDetail.htm?orderId="+result;

2. 代码实现

orderDetail.htm

<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>商品列表</title>
    <script type="text/javascript" src="/js/jquery.min.js" ></script>
    <script type="text/javascript" src="/js/common.js"></script>
</head>
<body>
<table>
    <tr>
        <td>订单号</td>
        <td  id="id" ></td>
    </tr>
    <tr>
        <td>商品名称</td>
        <td id="goodsName"></td>
    </tr>
    <tr>
        <td>商品图片</td>
        <td>
            <img id ="goodsImg" width="200px" height="200px" />
        </td>
    </tr>

    <tr>
        <td>商品单价</td>
        <td  id="goodsPrice"></td>
    </tr>
    <tr>
        <td>创建时间</td>
        <td  id="createDate"></td>
    </tr>
    <tr>
        <td>商品状态</td>
        <td  id="status">

        </td>
    </tr>
</table>

</body>
<script>
    var orderId= g_getQueryString("orderId");
    //orderDetail.htm?orderId=123
    $(function (){
        init();
    })
    function init(){
        console.log("init...");
        $.ajax({
            url:"/order/detail",
            type:"post",
            data:{orderId:orderId},
            success:function (data){
                if(data.code==200){
                    //alert("登录成功");
                    //console.log(data.obj);
                    render(data.obj);
                    //window.location.href="/goods/toList"
                }else{
                    alert(data.message);
                }
            },
            error:function (data){
                alert("商品详情出现问题");
            }
        })

    }

    function render(obj) {

        var status = ["已提交未付款", "其他状态"]

        var order = obj.order;
        var goodsVo=obj.goodsVo;

        $("#id").text(order.id);
        $("#goodsName").text(order.goodsName);
        $("#goodsImg").attr("src",goodsVo.goodsImg);
        $("#goodsPrice").text(order.goodsPrice);
        $("#status").text(status[order.status]);
        $("#createDate").text(new Date(order.createDate).format('yyyy-MM-dd HH:mm:ss'));

    }

</script>

</html>

OrderController detail

package com.example.miaosha.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.miaosha.mapper.OrderMapper;
import com.example.miaosha.pojo.Order;
import com.example.miaosha.pojo.User;
import com.example.miaosha.service.IGoodsService;
import com.example.miaosha.service.IOrderService;
import com.example.miaosha.vo.GoodsVo;
import com.example.miaosha.vo.OrderDetailVo;
import com.example.miaosha.vo.RespBean;
import com.example.miaosha.vo.RespBeanEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author cch
 * @since 2021-11-17
 */
@Controller
@Slf4j
@RequestMapping("/order")
public class OrderController {
    @Autowired
    private IOrderService orderService;
    @Autowired
    private IGoodsService goodsService;


    @RequestMapping("/detail")
    @ResponseBody
    public RespBean detail(Model model, User user, @RequestParam Long orderId){
        if(null==user){
            return RespBean.error(RespBeanEnum.SESSION_ERROR);
        }
        //判断秒杀库存 判断是否重复秒杀 秒杀(减库存 添加订单信息,添加秒杀订单信息)
        Order order = orderService.getOne(new QueryWrapper<Order>().eq("id", orderId));
        if(order==null){
            return RespBean.error(RespBeanEnum.ORDER_NOT_EXIST);
        }

        GoodsVo goodsVo=goodsService.findGoodsVoById(order.getGoodsId());
        OrderDetailVo orderDetailVo = new OrderDetailVo(order, goodsVo);

        return RespBean.success(orderDetailVo);
    }
}

OrderDetailVo

package com.example.miaosha.vo;

import com.example.miaosha.pojo.Order;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class OrderDetailVo {
    private Order order;
    private GoodsVo goodsVo;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值