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