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 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 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); } }