当前位置: 首页 > news >正文

京东秒杀之秒杀详情

1 编写前端页面(商品详情)

<!DOCTYPE html>
<head><title>商品详情</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><script type="text/javascript" src="/js/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css" /><!-- bootstrap --><script type="text/javascript" src="/bootstrap/js/bootstrap.min.js"></script><script type="text/javascript" src="/jquery-validation/jquery.validate.min.js"></script> <!-- jquery-validator --><script type="text/javascript" src="/jquery-validation/localization/messages_zh.min.js"></script><script type="text/javascript" src="/layer/layer.js"></script><!-- layer --><script type="text/javascript" src="/js/md5.min.js"></script><!-- md5.js --><script type="text/javascript" src="/js/common.js"></script><!-- common.js --><script type="text/javascript" src="/js/socket.js"></script><!-- common.js -->
</head>
<body>
<div class="panel panel-default"><div class="panel-heading">秒杀商品详情</div><div class="panel-body"><div id="userTip" style="display: none"><span> 您还没有登录,请<a href="/login.html">登陆</a>后再操作<br/></span></div><span>没有收货地址的提示。。。</span>
</div>
<table class="table"><tr><td>商品名称</td><td colspan="3" id="goodName"></td></tr><tr><td>商品图片</td><td colspan="3"><img id="goodImg"  width="200" height="200" /></td></tr><tr><td>秒杀开始时间</td><td id="startDate"></td><td id="seckillTip"></td><td><img id="verifyCodeImg" width="80" height="32"  onclick="initVerifyCodeImg()" style="display: none"><input id="verifyCode" style="display: none"><button class="btn btn-primary btn-block" type="button" id="buyButton" onclick="">立即秒杀</button></td></tr><tr><td>商品原价</td><td colspan="3" id="goodPrice"></td></tr><tr><td>秒杀价</td><td colspan="3" id="seckillPrice"></td></tr><tr><td>库存数量</td><td colspan="3" id="stockCount"></td></tr>
</table>
</div>
<script type="text/javascript">var seckillId;$(function () {seckillId = getQueryString("seckillId");initGood();});function initGood(){$(function () {$.ajax({url: "http://localhost:9000/seckill/seckillGood/find?seckillId="+seckillId,type: "get",xhrFields: {withCredentials: true}, //启用cookiesuccess:function (data) {if(data.code==200){//填充表格中的数据renderGood(data.data);}else{layer.msg(data.msg)}}});});}function renderGood(good) {$("#goodName").html(good.goodName);$("#goodImg").prop("src",good.goodImg);$("#startDate").html(good.startDate);$("#goodPrice").html(good.goodPrice);$("#stockCount").html(good.stockCount);$("#seckillPrice").html(good.seckillPrice);//调用时间renderDate(good.startDate,good.endDate);}//定义秒杀的三个阶段var timer;  //计时器//距离抢购开始还有多久var remainStartSeconds;//距离结束还有多久var remainEndSeconds;function renderDate(sDate,eDate) {var startTime = new Date(sDate);  // 2023-11-25 16:00var endTime = new Date(eDate);   // 2023-11-25 18:00var now = new Date();        // 2023-11-25 14:37remainStartSeconds=parseInt((startTime.getTime()-now.getTime())/1000);//秒remainEndSeconds=parseInt((endTime.getTime()-now.getTime())/1000);//秒timer=window.setInterval(showSeckillTip,1000);}function showSeckillTip() {remainStartSeconds--;remainEndSeconds--;if(remainStartSeconds>0){$("#seckillTip").html("距离本场秒杀开始还有"+remainStartSeconds+"秒");//禁用按钮$("#buyButton").prop("disabled",true);}else{if(remainEndSeconds>0){//秒杀中$("#seckillTip").html("秒杀进行中....");//禁用按钮$("#buyButton").prop("disabled",false);}else{$("#seckillTip").html("秒杀结束了");//禁用按钮$("#buyButton").prop("disabled",true);window.clearInterval(timer);//取消计时器}}}</script>
</body>
</html>

2 编写Mapper接口

@Mapper
public interface SeckillGoodMapper {@Select("SELECT * FROM t_seckill_goods")public List<SeckillGood> query();@Select("SELECT * FROM t_seckill_goods where id=#{seckillId}")public SeckillGoodVo find(Long seckillId);
}

3 编写service业务逻辑接口及其实现类


service业务逻辑接口

public interface SeckillGoodService {/*** 查询商品数据* @return*/public List<SeckillGoodVo> query();/*** 查询商品详情* @param seckillId* @return*/public SeckillGoodVo find(Long seckillId);
}

实现类

    @Overridepublic SeckillGoodVo find(Long seckillId) {if (seckillId == null){return null;}//根据场次id查询商品SeckillGood sg=  seckillGoodMapper.find(seckillId);if(sg==null){return null;}List<SeckillGood> seckillGoodList = new ArrayList<>();seckillGoodList.add(sg);//调用聚合的方法List<SeckillGoodVo> seckillGoodVos = getSeckillGoodVos(seckillGoodList);//获取单个对象return seckillGoodVos.get(0);}

4 创建controller层

    @RequestMapping("/find")public Result find(Long seckillId){SeckillGoodVo seckillGoodVo = seckillGoodService.find(seckillId);return Result.success(seckillGoodVo);}
http://www.lryc.cn/news/246299.html

相关文章:

  • mobaxterm 下载、安装、使用
  • 办公技巧:Word中插入图片、形状、文本框排版技巧
  • apple macbook M系列芯片安装 openJDK17
  • C语言——打印出所有的“水仙花数”
  • <HarmonyOS第一课>应用程序框架 【课后考核】
  • 自动驾驶学习笔记(十一)——高精地图
  • HCIA-H12-811题目解析(2)
  • Docker-简介、基本操作
  • Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)
  • 给csgo游戏搬砖新手的十大建议
  • 西南科技大学模拟电子技术实验一(常用电子仪器的使用及电子元器件的识别)预习报告
  • 回归分析例题(多元统计分析期末复习)
  • Linux多路转接select,poll
  • 如何轻松将 4K 转换为 1080p 高清视频
  • 责任链模式 (Chain of Responsibility Pattern)
  • 企业营销管理能够实现自动化吗?怎么做?
  • 【数据结构】什么是栈?
  • 基于C#实现鸡尾酒排序(双向冒泡排序)
  • CentOS添加开机启动
  • SpringCloudAlibaba之Nacos的持久化和高可用——详细讲解
  • vue3安装eslint和prettier,最简单的步骤
  • Day32| Leetcode 122. 买卖股票的最佳时机 II Leetcode 55. 跳跃游戏 Leetcode 45. 跳跃游戏 II
  • 95.STL-遍历算法 for_each
  • Python基础语法之学习type()函数
  • filebeat报错dropping too large message of size
  • 【C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )
  • 在CentOS 7.9上搭建高性能的FastDFS+Nginx文件服务器集群并实现外部远程访问
  • YOLOv8独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表
  • Docker pause/unpause命令
  • PostgreSQL create or replace view和重建视图 有什么区别?