import java.util.Date; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import cn.tedu.miaosha.dao.OrderDao; import cn.tedu.miaosha.domain.MiaoshaOrder; import cn.tedu.miaosha.domain.MiaoshaUser; import cn.tedu.miaosha.domain.OrderInfo; import cn.tedu.miaosha.vo.GoodsVo; @Service public class OrderService { //判断秒杀 @Autowired OrderDao orderDao; public MiaoshaOrder getMiaoshaOrderByUserIdGoodsId(long userId, long goodsId) { return orderDao.getMiaoshaOrderByUserIdGoodsId(userId, goodsId); } @Transactional public OrderInfo createOrder(MiaoshaUser user, GoodsVo goods) { OrderInfo orderInfo = new OrderInfo(); orderInfo.setCreateDate(new Date()); orderInfo.setDeliveryAddrId(0L); orderInfo.setGoodsCount(1); orderInfo.setGoodsId(goods.getId()); orderInfo.setGoodsName(goods.getGoodsName()); orderInfo.setGoodsPrice(goods.getMiaoshaPrice()); orderInfo.setOrderChannel(1); orderInfo.setStatus(0); orderInfo.setUserId(user.getId()); long orderId = orderDao.insert(orderInfo); MiaoshaOrder miaoshaOrder = new MiaoshaOrder(); miaoshaOrder.setGoodsId(goods.getId()); miaoshaOrder.setOrderId(orderId); miaoshaOrder.setUserId(user.getId()); orderDao.insertMiaoshaOrder(miaoshaOrder); return orderInfo; } }
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import cn.tedu.miaosha.domain.MiaoshaOrder; import cn.tedu.miaosha.domain.MiaoshaUser; import cn.tedu.miaosha.domain.OrderInfo; import cn.tedu.miaosha.redis.RedisService; import cn.tedu.miaosha.result.CodeMsg; import cn.tedu.miaosha.service.GoodsService; import cn.tedu.miaosha.service.MiaoshaService; import cn.tedu.miaosha.service.MiaoshaUserService; import cn.tedu.miaosha.service.OrderService; import cn.tedu.miaosha.vo.GoodsVo; @Controller @RequestMapping("/miaosha") public class MiaoshaController { @Autowired MiaoshaUserService userService; @Autowired RedisService redisService; @Autowired GoodsService goodsService; @Autowired OrderService orderService; @Autowired MiaoshaService miaoshaService; @RequestMapping("/do_miaosha") public String list(Model model,MiaoshaUser user, @RequestParam("goodsId")long goodsId) { model.addAttribute("user", user); if(user == null) {//用户为空 return "login"; } //判断库存 GoodsVo goods = goodsService.getGoodsVoByGoodsId(goodsId); int stock = goods.getStockCount(); if(stock <= 0) { model.addAttribute("errmsg", CodeMsg.MIAO_SHA_OVER.getMsg()); return "miaosha_fail"; } //判断是否已经秒杀到了 MiaoshaOrder order = orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(), goodsId); if(order != null) { model.addAttribute("errmsg", CodeMsg.REPEATE_MIAOSHA.getMsg()); return "miaosha_fail"; } //减库存 下订单 写入秒杀订单 OrderInfo orderInfo = miaoshaService.miaosha(user, goods); model.addAttribute("orderInfo", orderInfo); model.addAttribute("goods", goods); return "order_detail"; }
import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.SelectKey; import cn.tedu.miaosha.domain.MiaoshaOrder; import cn.tedu.miaosha.domain.OrderInfo; @Mapper public interface OrderDao { @Select("select * from miaosha_order where user_id=#{userId} and goods_id=#{goodsId}") public MiaoshaOrder getMiaoshaOrderByUserIdGoodsId(@Param("userId")long userId, @Param("goodsId")long goodsId); @Insert("insert into order_info(user_id, goods_id, goods_name, goods_count, goods_price, order_channel, status, create_date)values(" + "#{userId}, #{goodsId}, #{goodsName}, #{goodsCount}, #{goodsPrice}, #{orderChannel},#{status},#{createDate} )") @SelectKey(keyColumn="id", keyProperty="id", resultType=long.class, before=false, statement="select last_insert_id()") public long insert(OrderInfo orderInfo); @Insert("insert into miaosha_order (user_id, goods_id, order_id)values(#{userId}, #{goodsId}, #{orderId})") public int insertMiaoshaOrder(MiaoshaOrder miaoshaOrder); }