diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/shortmessage/controller/BizShortMessageController.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/shortmessage/controller/BizShortMessageController.java index e4e200a..de206ec 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/shortmessage/controller/BizShortMessageController.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/shortmessage/controller/BizShortMessageController.java @@ -1,12 +1,17 @@ package com.chinaunicom.mall.ebtp.extend.shortmessage.controller; +import com.alibaba.fastjson.JSONArray; import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse; +import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum; import com.chinaunicom.mall.ebtp.common.idempotent.annotation.Idempotent; import com.chinaunicom.mall.ebtp.extend.shortmessage.entity.AuthCodeVo; import com.chinaunicom.mall.ebtp.extend.shortmessage.utils.RSA; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -18,6 +23,7 @@ import io.swagger.annotations.ApiParam; import javax.annotation.Resource; import javax.validation.Valid; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import com.chinaunicom.mall.ebtp.extend.shortmessage.entity.BizShortMessage; @@ -34,7 +40,9 @@ public class BizShortMessageController{ private String privateKey; @Resource private BizShortMessageService iBizShortMessageService; - + @Autowired(required = false) + @Qualifier("cacheRedisTemplate") + private RedisTemplate redisTemplate; /** * 认证短信验证码发送 * appCode 应用标识 @@ -45,12 +53,25 @@ public class BizShortMessageController{ * authCode 验证码 * callbackUrl UrlEncode编码 应用系统回调确认用户有效性的地址,应用系统传了这个地址则用户有效性由该地址确定 */ - @Idempotent(expireTime = 30,timeUnit = TimeUnit.SECONDS,info = "距离上次解密时间需间隔30秒",delKey =true) @PostMapping("/send/authCode") public BaseResponse authCodeSend(@RequestBody AuthCodeVo vo){ + + log.info("解密前:"+vo.getMobile()); String value = RSA.decrypt(vo.getMobile(),privateKey); log.info("解密后:"+value); + String key = "mobile_code:" + value; + Object tokenValue = redisTemplate.opsForValue().get(key); + if (tokenValue != null) { + CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.assertNotNullByKey("验证码尚未失效",true); + }else{ + Boolean b = iBizShortMessageService.authCodeSend(value); + if(b){ + Map map = JSONArray.parseObject(JSONArray.toJSONString(vo), Map.class); + redisTemplate.opsForHash().putAll("mobile_code:" + value, map); + redisTemplate.expire(key,30,TimeUnit.SECONDS); + } + } return BaseResponse.success(iBizShortMessageService.authCodeSend(value)); }