document
API test

获取商品的秒杀信息

POST

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; // 找不到 } ```