package com.atguigu.seckill.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
@RequestMapping("/seckill")
public class SecKController {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping
public String test(){
redisTemplate.opsForValue().set("name", "lucky");
String name = (String)redisTemplate.opsForValue().get("name");
System.out.println(name);
return name;
}
//秒杀过程
@GetMapping("/getThing")
public boolean getThing(@RequestParam String prodid){
String uid = new Random.nextInt(50000)+"";
//1 uid和prodid非空判断
if(uid == null || prodid == null){
return false;
}
//2、拼接key
//2.1 秒杀库存key
String kcKey = "sk:" + prodid +":qt";
//2.2 秒杀成功用户key
String userKey = "sk:" + prodid + ":user";
//3 获取库存,如果库存null,秒杀没有开始
Object kc = redisTemplate.opsForValue().get(kcKey);
if(kc == null){
System.out.println("秒杀还没开始,请等待");
return false;
}
String kcnum = String.valueOf(kc);
//4 判断用户是否重复秒杀操作
if(redisTemplate.opsForSet().isMember(userKey, uid)){
System.out.println("已经秒杀成功,不能重复秒杀");
return false;
}
//5 判断如果商品数量<=0,秒杀结束
if(Integer.parseInt(kcnum)<=0){
System.out.println("秒杀已结束");
return false;
}
//6 秒杀过程
//6.1 秒杀到,库存减一
redisTemplate.opsForValue().decrement(kcKey);
//6.2 把秒杀成功用户添加到清单里面
redisTemplate.opsForSet().add(userKey, uid);
System.out.println("秒杀成功了");
return true;
}
}