javaweb商城秒杀系统--秒杀功能的实现(四)
一、秒杀页面的代码
二、秒杀的controller的实现
1.先判断库存是否还存在
2.判断是不是已经秒杀过了
3.库存还有,也没有下过订单然后就是 减库存 下订单 写入秒杀订单
4.将秒杀后的订单信息直接写入页面
@RequestMapping("/do_miaosha")
public String doMiaosha(Model model, MiaoshaUser user, @RequestParam("goodsId") Long goodsId){
model.addAttribute("user",user);
if (user==null){
return "login";
}
//先判断库存是否还存在
GoodsVo goodsVo=goodsService.getGoosVoByGoodsId(goodsId);
int stockCount=goodsVo.getStockCount();
if(stockCount<=0){
model.addAttribute("errmsg", CodeMsg.MIAO_SHA_OVER);
return "miaosha_fail";
}
//判断是不是已经秒杀过了
MiaoshaOrder miaoshaOrder=orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(),goodsId);
if(miaoshaOrder!=null){
model.addAttribute("errmsg", CodeMsg.REPEATE_MIAOSHA);
return "miaosha_fail";
}
//库存还有,也没有下过订单然后就是 减库存 下订单 写入秒杀订单
//因为要满足事务的操作 所以 建一个单独的service
OrderInfo orderInfo= miaoshaService.miaosha(user,goodsVo);
//将秒杀后的订单信息直接写入页面
model.addAttribute("orderInfo",orderInfo);
//显示商品信息
model.addAttribute("goods",goodsVo);
return "order_detail";
三、秒杀的service的实现
/**
* @Author:zhangyx
* @Date:Created in 12:492018/11/17
* @Modified By:
*/
@Service
public class MiaoshaService {
@Autowired
private GoodsService goodsService;
@Autowired
private OrderService orderService;
//做秒杀的操作
@Transactional
public OrderInfo miaosha(MiaoshaUser user, GoodsVo goodsVo) {
//减少库存
goodsService.reduceStock(goodsVo);
//写订单
return orderService.createOrder(user,goodsVo);
}
}