Description or Example
# 知识点
## 随机码的问题
> **随机码只有在商品秒杀的时候才能存储在前端, 否则在秒杀外也相应到前端的话, 会出现恶意秒杀的情况, 因此, 我们需要条件判断是否商品属于秒杀时间, 属于在响应随机码, 不属于则清空随机码, 响应空数据**
# 核心代码
```java
/**
* 获取商品的秒杀信息
* @return
*/
@GetMapping("/getSku/seckillStatus/{skuId}")
public R getSkuSeckillInfo(@PathVariable String skuId) {
SeckillSkuTO seckillSkuTO = secKillService.getSkuSeckillInfo(skuId);
return R.ok().setData(seckillSkuTO);
}
```
```java
public SeckillSkuTO getSkuSeckillInfo(String skuId) {
// 获取哈希操作
BoundHashOperations<String, String, String> operations = redisTemplate.boundHashOps(SecKillConstant.SEC_KILL_SKU_MAP_SKU_INFO);
Set<String> keys = operations.keys();
if (keys != null && !keys.isEmpty())
for (String key : keys) {
if (key.matches("\\d+_" + skuId)) { // 如果匹配, 就是我们想要的商品信息
String seckillSkuToJson = operations.get(key);
// 目标对象
SeckillSkuTO seckillSkuTO = JSON.parseObject(seckillSkuToJson, SeckillSkuTO.class);
// 获取当前时间
long nowTime = new Date().getTime();
// 进一步判断, 是否处于秒杀期间, 如果处于秒杀期间, 不需要屏蔽随机码 否则 屏蔽随机码
assert seckillSkuTO != null;
if (nowTime < seckillSkuTO.getStartTime() || nowTime > seckillSkuTO.getEndTime()) {
// 不再秒杀范围内, 应该屏蔽掉
seckillSkuTO.setRandomToken(null);
}
return seckillSkuTO;
}
}
return null; // 找不到
}
```