/**
* 提交订单
* @param seckillId
* @param userId
*/
public void submitOrder(Long seckillId,String userId);
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private IdWorker idWorker;
@Override
public void submitOrder(Long seckillId, String userId) {
//从缓存中查询秒杀商品
TbSeckillGoods seckillGoods =(TbSeckillGoods)
redisTemplate.boundHashOps("seckillGoods").get(seckillId);
if(seckillGoods==null){
throw new RuntimeException("商品不存在");
}
if(seckillGoods.getStockCount()<=0){
throw new RuntimeException("商品已抢购一空");
}
//扣减(redis)库存
seckillGoods.setStockCount(seckillGoods.getStockCount()-1);
redisTemplate.boundHashOps("seckillGoods").put(seckillId, seckillGoods);//放
回缓存
if(seckillGoods.getStockCount()==0){//如果已经被秒光
seckillGoodsMapper.updateByPrimaryKey(seckillGoods);//同步到数据库
redisTemplate.boundHashOps("seckillGoods").delete(seckillId);
}
//保存(redis)订单
long orderId = idWorker.nextId();
TbSeckillOrder seckillOrder=new TbSeckillOrder();
seckillOrder.setId(orderId);
seckillOrder.setCreateTime(new Date());
seckillOrder.setMoney(seckillGoods.getCostPrice());//秒杀价格
seckillOrder.setSeckillId(seckillId);
seckillOrder.setSellerId(seckillGoods.getSellerId());
seckillOrder.setUserId(userId);//设置用户 ID
seckillOrder.setStatus("0");//状态
redisTemplate.boundHashOps("seckillOrder").put(userId, seckillOrder);
}
@RequestMapping("/submitOrder")
public Result submitOrder(Long seckillId){
String userId =
SecurityContextHolder.getContext().getAuthentication().getName();
if("anonymousUser".equals(userId)){//如果未登录
return new Result(false, "用户未登录");
}
try {
seckillOrderService.submitOrder(seckillId, userId);
return new Result(true, "提交成功");
}catch (RuntimeException e) {
e.printStackTrace();
return new Result(false, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
return new Result(false, "提交失败");
}
} | 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |