SSM秒杀项目(五)商品详情页

商品详情页展示:

业务处理逻辑:

 在秒杀商品列表页点击商品详情,根据uri路径参数"${goods.id}/to_detail"选择对应的controller进行逻辑业务处理;

@RequestMapping("/{goods.id}/to_detail")
	public String detail(@PathVariable("goods.id") long id,Model model,
			@CookieValue(value=UserServiceImpl.COOKI_NAME_TOKEN,required=false)String 
             cookieToken,
			HttpServletResponse response){
		GoodsVo goods = goodsService.getGoodsVoById(id);
		//未登录不能参与秒杀活动
		//根据Token获取从缓存中取出对应的user对象
		User user = userService.getByToken(response, cookieToken);
		if(user == null) {
			return "redirect:login";//返回到登录界面
		}
		model.addAttribute("goods", goods);
		model.addAttribute("user", user);
		//传入秒杀开始的时间 结束时间 当前服务器时间
		long startTime=goods.getStartDate().getTime();
		long endTime = goods.getEndDate().getTime();
		long nowTime = System.currentTimeMillis();
		int statue = 0;//秒杀状态量
		int remainSecond = 0;//秒杀倒计时秒数
		if(nowTime < startTime){
			statue = 0;//秒杀未开始
			remainSecond = (int)(startTime-nowTime)/1000;
		}else if (nowTime > endTime){
			statue = 2;//秒杀已结束
			remainSecond = -1;
		}else{
			statue = 1;//秒杀进行中
			remainSecond = 0;
		}
		model.addAttribute("statue", statue);
		model.addAttribute("remainSecond", remainSecond);
		return "goods_detail";
	}

②在controller中将路径参数goods.id用PathVariable绑定到传入参数id,用CookieValue将当前请求头中的以token为key对应的value绑定到传入参数cookieToken。

a.第一步仍然是根据cookieToken从redis缓存中取出对应的登录用户user,如果没有直接返回null;

b.当登录用户为null,不能参加秒杀活动,需要重新回到登录页面;

c.秒杀页面一般分为三种情况:第一种是未到秒杀时间,秒杀未开启;第二种是秒杀开启,用户进行秒杀秒杀抢购;第三种是商品库存不足或秒杀时间已过,秒杀结束;

d.如何判断秒杀是否开始?其实在数据库中秒杀商品信息表中应该包括该商品的秒杀开始时间startTime与秒杀结束时间         endTime,判断秒杀是否开启只需要获取服务器当前时间nowTime与startTime进行比较:

e.将秒杀状态量、秒杀倒计时剩余时间、根据商品id从数据库中查询出来的对应商品信息和用户信息等装入数据模型中返回给秒杀商品详情页;

<body>
	<div class="container">
		<div class="row">
		     <div class="col-md-4 col-md-offset-4" >
		        <h1>
		        <span class="label label-primary">商品详情</span>
		        
		        </h1>
		     </div>
		 </div>
		<table class="table" id="goodslist">
		<tr>
			<td><span class="label label-primary">商品名称</span></td>
			<td colspan="3">${goods.goodsName}</td>
		</tr>
		<tr>
			<td><span class="label label-primary">商品图片</span></td>
			<td colspan="6"><img src="${App_Path}/${goods.goodsImg}" width="160" 
            height="130"></img></td>
		</tr>
		<tr>
			<td><span class="label label-primary">商品原价</span></td>
			<td colspan="3" >${goods.goodsPrice}</td>
		</tr>
		<tr>
			<td><span class="label label-primary">秒杀价</span></td>
			<td colspan="3">${goods.miaoshaPrice}</td>
		</tr>
		<tr>
			<td><span class="label label-primary">库存数量</span></td>
			<td colspan="3" >${goods.stockCount}</td>
		</tr>
		<tr>
			<td><span class="label label-primary">开始时间</span></td>
			<td colspan="3" >${goods.startDate}</td>
		</tr>
		<tr>
		    <input type="hidden" id="remainSecond" value="${remainSecond}"/>
		    <input type="hidden" id="goodsId" value="${goods.id }">
		    <td><span id="SeckillInfo"></span></td>
		    <td><span id="Seckill_btn"></span></td>
		</tr>
		</table>
	</div>
</body>

对于秒杀是否开启,我们需要根据controller中返回的秒杀倒计时剩余时间进行判断countdown():

a.如果倒计时剩余时间大于0,则每1s回调一次倒计时函数countdown(),并在countdown函数中对remainSecond标签值进行减1操作,${remainSecond}的初始值为controller中传过来的(startTime-nowTime)/1000。

b.如果倒计时剩余时间等于0,则秒杀时间到,开启秒杀,给出秒杀按钮;

c.如果倒计时剩余时间小于0,结束秒杀;

 function countDown(){
	   var remainSecond = $("#remainSecond").val();
	   var timeout;
       var statue = ${statue};
      if (remainSecond>0){
         $("#SeckillInfo").html("倒计时");
         //倒计时
         timeout = setTimeout(function(){
             $("#Seckill_btn").html(remainSecond-1);
             $("#remainSecond").val(remainSecond-1);
             countDown();
         },1000);//1秒调用一次function()
      }else if(remainSecond==0){
          $("#SeckillInfo").html("秒杀进行中");
          //给出秒杀按钮
          $("#Seckill_btn").html('<button class="btn btn-primary btn-lg" id="buyButton" 
          onclick="getSeckillPath()">立即秒杀</button>');
      }else{
         //秒杀结束
         $("#SeckillInfo").html("秒杀已结束");
         $("#Seckill_btn").html('<button class="btn btn-primary btn-lg">活动已结束 
         </button>');
      }
}

 

 

该课程主要涉及到的技术有:  项目涉及的技术:  1、前端:jsp、css、javascript、jQuery(js框架)、bootstrap框架 2、后台:Spring MVC、Spring、Mybatis框架、javaMail进行邮件发送、jstl 、jstl自定义分页标签、代码生成器等 3、数据库:Mysql 4、服务器:Tomcat项目开发涉及的功能: 1、项目以及数据库搭建2、用户登录、退出3、用户注册、邮件发送、以及用户信息激活4、首页商品信息页面搭建以及查询功能实现5、查询商品明细6、加入商品至购物车、删除、更新、清除购物车商品信息7、确认订单信息8、订单页面搭建以及下订单功能实现9、查询我的购物车以及订单信息10、商品系统后台界面搭建11、代码机器人使用等等其他实战项目:java项目实战之电商系统全套(前台和后台)(java毕业设计ssm框架项目)https://edu.csdn.net/course/detail/25771 java项目之oa办公管理系统(java毕业设计)https://edu.csdn.net/course/detail/23008 java项目之hrm人事管理项目(java毕业设计)https://edu.csdn.net/course/detail/23007 JavaWeb项目实战之点餐系统前台https://edu.csdn.net/course/detail/20543 JavaWeb项目实战之点餐系统后台https://edu.csdn.net/course/detail/19572 JavaWeb项目实战之宿舍管理系统(Java毕业设计含源码)https://edu.csdn.net/course/detail/26721 JavaWeb项目实战之点餐系统全套(前台和后台)https://edu.csdn.net/course/detail/20610 java项目实战之电子商城后台(java毕业设计SSM框架项目)https://edu.csdn.net/course/detail/25770 java美妆商城项目|在线购书系统(java毕业设计项目ssm版)https://edu.csdn.net/course/detail/23989 系统学习课程:JavaSE基础全套视频(环境搭建 面向对象 正则表达式 IO流 多线程 网络编程 java10https://edu.csdn.net/course/detail/26941 Java Web从入门到电商项目实战挑战万元高薪(javaweb教程)https://edu.csdn.net/course/detail/25976其他素材版(毕业设计或课程设计)项目:点击老师头像进行相关课程学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值