From daa697719eb0ddfd170f1ab94c5422a4f5b93951 Mon Sep 17 00:00:00 2001 From: zhaoxiaohao <279049017@qq.com> Date: Fri, 18 Sep 2020 14:36:54 +0800 Subject: [PATCH] Merge branch 'dev' --- kidgrow-plugin/kidgrow-plugin-sms/kidgrow-plugin-sms-center-server/src/main/java/com/kidgrow/sms/lanchuang/controller/SmsChuangLanController.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 156 insertions(+), 0 deletions(-) diff --git a/kidgrow-plugin/kidgrow-plugin-sms/kidgrow-plugin-sms-center-server/src/main/java/com/kidgrow/sms/lanchuang/controller/SmsChuangLanController.java b/kidgrow-plugin/kidgrow-plugin-sms/kidgrow-plugin-sms-center-server/src/main/java/com/kidgrow/sms/lanchuang/controller/SmsChuangLanController.java new file mode 100644 index 0000000..12ba9dc --- /dev/null +++ b/kidgrow-plugin/kidgrow-plugin-sms/kidgrow-plugin-sms-center-server/src/main/java/com/kidgrow/sms/lanchuang/controller/SmsChuangLanController.java @@ -0,0 +1,156 @@ +package com.kidgrow.sms.lanchuang.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.kidgrow.common.model.ResultBody; +import com.kidgrow.common.utils.DateUtils; +import com.kidgrow.redis.util.RedisUtils; +import com.kidgrow.sms.util.SmsChuangLanUtils; +import io.swagger.annotations.Api; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +@RestController +@RequestMapping("smsChangLan") +@Api(tags = "创蓝短信模块") +public class SmsChuangLanController { + @Value("${chuanglan.sms.sendUrl}") + private String CHUANGLAN_SMS_SENDURL; + @Value("${chuanglan.sms.account}") + private String CHUANGLAN_SMS_ACCOUNT; + @Value("${chuanglan.sms.password}") + private String CHUANGLAN_SMS_PASSWORD; + @Value("${chuanglan.sms.num}") + private Integer CHUANGLAN_SMS_NUM; + @Value("${chuanglan.sms.timeLimit}") + private Integer CHUANGLAN_SMS_TIMELIMIT; + @Autowired + private RedisUtils redisUtils; + + /** + * type 为类型, "type":"LOGIN_SMS" 为登录,"type":"PASSWORD_SMS" 为密码找回,"type":"REGISTER_SMS" 为 + * @param map + * @return + */ + @PostMapping("send") + public ResultBody sendVerificationCode(@RequestBody Map map) { + if(CHUANGLAN_SMS_NUM==null){ + CHUANGLAN_SMS_NUM=5; + } + Object phone = map.get("phone"); + if (map.get("phone")==null||"".equals(map.get("phone"))){ + return ResultBody.failed("请输入手机号"); + } + Object type = map.get("type"); + if (map.get("type")==null||"".equals(map.get("type"))){ + return ResultBody.failed("请输入保存的类型"); + } + String verificationCode=""; + Random random=new Random(); + for (int i = 0; i < 6; i++) { + int i1 = random.nextInt(9); + verificationCode+=i1; + } + try { + //组装发送消息的内容 + map.put("account", CHUANGLAN_SMS_ACCOUNT);//API账号 + map.put("password", CHUANGLAN_SMS_PASSWORD);//API密码 + map.put("report","false"); + map.put("msg","您好,您的验证码是"+verificationCode); + //在Redis中获取 + Object hget = redisUtils.hget(map.get("type").toString(), map.get("phone").toString()); + JSONObject jsonObject =new JSONObject(); + Map<String,Object> cunMap=new HashMap<>(); + cunMap.put("verificationCode",verificationCode); + cunMap.put("count",CHUANGLAN_SMS_NUM);//总共 + if(hget==null){ + String send = SmsChuangLanUtils.send(map, CHUANGLAN_SMS_SENDURL); + jsonObject=JSON.parseObject(send); + String s1 = DateUtils.formatCurrentDateTime(); + cunMap.put("date",s1); + cunMap.put("remnant",CHUANGLAN_SMS_NUM-1);//剩余 + Date date2 = DateUtils.addMilliseconds(DateUtils.parseDate(s1), CHUANGLAN_SMS_TIMELIMIT); + cunMap.put("endTime",DateUtils.formatDateTime(date2)); + }else { + JSONObject redisJson = JSON.parseObject(JSON.toJSONString(hget)); + Object remnantObject = redisJson.get("remnant"); + if(remnantObject instanceof Integer){ + Integer remnant=(Integer)remnantObject; + if(remnant>0){ + String send = SmsChuangLanUtils.send(map, CHUANGLAN_SMS_SENDURL); + jsonObject=JSON.parseObject(send); + String s1 = DateUtils.formatCurrentDateTime(); + cunMap.put("date",DateUtils.formatCurrentDateTime()); + cunMap.put("remnant",remnant-1);//剩余 + Date date2 = DateUtils.addMilliseconds(DateUtils.parseDate(s1), CHUANGLAN_SMS_TIMELIMIT); + cunMap.put("endTime",DateUtils.formatDateTime(date2)); + }else{ + return ResultBody.failed().data("每个手机号限用"+CHUANGLAN_SMS_NUM+"次"); + } + }else { + return ResultBody.failed(); + } + } + if ("0".equals(jsonObject.get("code"))) { + redisUtils.hset(map.get("type").toString(), map.get("phone").toString(),cunMap,DateUtils.getSecondsNextEarlyMorning()); +// return ResultBody.ok().data(verificationCode); + return ResultBody.ok(); + } else { + return ResultBody.failed(); + } + } catch (Exception e) { + e.printStackTrace(); + return ResultBody.failed(); + } + } + @PostMapping("verification") + public ResultBody verification(@RequestBody Map<String,Object> map){ + Object phone = map.get("phone"); + if (map.get("phone")==null||"".equals(map.get("phone"))){ + return ResultBody.failed("请输入手机号"); + } + Object verificationCode = map.get("verificationCode"); + if (map.get("verificationCode")==null||"".equals(map.get("verificationCode"))){ + return ResultBody.failed("请输入保存的类型"); + } + Object type = map.get("type"); + if (map.get("type")==null||"".equals(map.get("type"))){ + return ResultBody.failed("请输入保存的类型"); + } + Object hget = redisUtils.hget(map.get("type").toString(), map.get("phone").toString()); + if(hget!=null){ + JSONObject redisJson = JSON.parseObject(JSON.toJSONString(hget)); + Object verificationCodeObject = redisJson.get("verificationCode"); + if(verificationCode.equals(verificationCodeObject)){ + Object date = redisJson.get("date"); + long time = DateUtils.addMilliseconds(DateUtils.parseDate(date.toString()), CHUANGLAN_SMS_TIMELIMIT).getTime(); + Date dateNow=new Date(); + long timeNow = dateNow.getTime(); + if(timeNow<=time){ + return ResultBody.ok(); + }else { + return ResultBody.failed("验证码超时"); + } + }else { + return ResultBody.failed("验证码错误"); + } + }else { + return ResultBody.failed("该手机号没有验证码"); + } + } + //获取 存放 Redis的时间 秒(到今晚的秒数) + public Long getSecondsNextEarlyMorning() { + Date afterDay = DateUtils.getAfterDay(new Date()); + String s = DateUtils.formatDate(afterDay, null); + Date date = DateUtils.parseDate(s); + System.out.println(date.getTime()-System.currentTimeMillis()); + long second= (date.getTime()-System.currentTimeMillis())/1000; + return second; + } +} -- Gitblit v1.8.0