package com.ruoyi.chargingPile.controller;
|
|
import com.ruoyi.account.api.dto.SendMessageDTO;
|
import com.ruoyi.account.api.feignClient.AppUserClient;
|
import com.ruoyi.account.api.model.TAppUser;
|
import com.ruoyi.chargingPile.api.model.TChargingPile;
|
import com.ruoyi.chargingPile.service.TChargingPileNotificationService;
|
import com.ruoyi.common.core.constant.Constants;
|
import com.ruoyi.common.core.constant.MsgConstants;
|
import com.ruoyi.common.core.utils.HttpUtils;
|
import com.ruoyi.common.core.utils.MsgUtil;
|
import com.ruoyi.common.core.web.domain.AjaxResult;
|
import com.ruoyi.common.redis.service.RedisService;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
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 javax.annotation.Resource;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.concurrent.TimeUnit;
|
|
@RestController
|
@RequestMapping("/code")
|
public class CodeController {
|
|
@Autowired
|
private RedisService redisService;
|
@Resource
|
private AppUserClient appUserClient;
|
@Autowired
|
private TChargingPileNotificationService chargingPileNotificationService;
|
|
/**
|
* 获取验证码
|
*
|
* @param phone 手机号
|
* @return 结果
|
*/
|
@ApiOperation(value = "获取验证码",notes = "获取验证码",tags = {"更换手机号获取验证码"})
|
@GetMapping("/getCode")
|
public AjaxResult getCode(@RequestParam("phone") String phone) {
|
String regex = "^1[3-9]\\d{9}$";
|
if(!phone.matches(regex)){
|
return AjaxResult.error("无效的手机号");
|
}
|
Map<String, Object> cacheMap = redisService.getCacheMap("sms_code_" + phone);
|
if(null == cacheMap || cacheMap.size() == 0){
|
cacheMap = new HashMap<>();
|
cacheMap.put("timestamp", System.currentTimeMillis());
|
cacheMap.put("time", 1);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
}else{
|
Integer time = (Integer) cacheMap.get("time");
|
Long timestamp = (Long) cacheMap.get("timestamp");
|
if(System.currentTimeMillis() - timestamp > 60000){
|
cacheMap.put("timestamp", System.currentTimeMillis());
|
cacheMap.put("time", 1);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
} else if(System.currentTimeMillis() - timestamp <= 60000 && time < 3){
|
time++;
|
cacheMap.put("time", time);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
}else if(System.currentTimeMillis() - timestamp < 60000 && time >= 3){
|
return AjaxResult.error("请求太频繁,请稍后再试!");
|
}
|
}
|
|
TAppUser appUser = appUserClient.selectByPhone(phone).getData();
|
if (Objects.nonNull(appUser)){
|
return AjaxResult.error();
|
}
|
String code = MsgUtil.createCode();
|
redisService.setCacheObject(phone+ Constants.UPDATE_PHONE,code,5L, TimeUnit.MINUTES);
|
SendMessageDTO sendMessageDTO = new SendMessageDTO();
|
sendMessageDTO.setPhone(phone);
|
sendMessageDTO.setCode(code);
|
sendMessageDTO.setType(1);
|
String result = appUserClient.sendMessage(sendMessageDTO).getData();
|
// String reqStr = MsgUtil.codeMsg(phone, code);
|
// String result = HttpUtils.post(MsgConstants.SEND_URL, reqStr);
|
// 记录短信发送
|
chargingPileNotificationService.saveData(1,-1,-1,phone,"验证码:"+code+",用于更换手机号。请勿转发。");
|
return AjaxResult.success(result);
|
}
|
|
/**
|
* 获取验证码
|
*
|
* @param phone 手机号
|
* @return 结果
|
*/
|
@ApiOperation(value = "获取验证码",notes = "获取验证码",tags = {"申请建桩获取验证码"})
|
@GetMapping("/getApplyCode")
|
public AjaxResult getApplyCode(@RequestParam("phone") String phone) {
|
String regex = "^1[3-9]\\d{9}$";
|
if(!phone.matches(regex)){
|
return AjaxResult.error("无效的手机号");
|
}
|
Map<String, Object> cacheMap = redisService.getCacheMap("sms_code_" + phone);
|
if(null == cacheMap || cacheMap.size() == 0){
|
cacheMap = new HashMap<>();
|
cacheMap.put("timestamp", System.currentTimeMillis());
|
cacheMap.put("time", 1);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
}else{
|
Integer time = (Integer) cacheMap.get("time");
|
Long timestamp = (Long) cacheMap.get("timestamp");
|
if(System.currentTimeMillis() - timestamp > 60000){
|
cacheMap.put("timestamp", System.currentTimeMillis());
|
cacheMap.put("time", 1);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
} else if(System.currentTimeMillis() - timestamp <= 60000 && time < 3){
|
time++;
|
cacheMap.put("time", time);
|
redisService.setCacheMap("sms_code_" + phone, cacheMap, 300);
|
}else if(System.currentTimeMillis() - timestamp < 60000 && time >= 3){
|
return AjaxResult.error("请求太频繁,请稍后再试!");
|
}
|
}
|
|
String code = MsgUtil.createCode();
|
redisService.setCacheObject(phone+ Constants.APPLY_CHARGING,code,5L, TimeUnit.MINUTES);
|
SendMessageDTO sendMessageDTO = new SendMessageDTO();
|
sendMessageDTO.setPhone(phone);
|
sendMessageDTO.setCode(code);
|
sendMessageDTO.setType(2);
|
String result = appUserClient.sendMessage(sendMessageDTO).getData();
|
// String reqStr = MsgUtil.applyCodeMsg(phone, code);
|
// String result = HttpUtils.post(MsgConstants.SEND_URL, reqStr);
|
// 记录短信发送
|
chargingPileNotificationService.saveData(1,-1,-1,phone,"验证码:"+code+",用于申请建桩。请勿转发。");
|
return AjaxResult.success(result);
|
}
|
|
}
|