fanxp 1 year ago
parent
commit
784c302775

+ 1 - 1
src/main/java/com/xjrsoft/common/constant/GlobalConstant.java

@@ -462,7 +462,7 @@ public interface GlobalConstant {
     /**
      * 验证码
      */
-    String CAPTCHA =  "captcha";
+    String CAPTCHA =  "captcha:";
 
 
     /**

+ 93 - 0
src/main/java/com/xjrsoft/common/sms/SmsCtcc.java

@@ -0,0 +1,93 @@
+package com.xjrsoft.common.sms;
+
+import cn.dev33.satoken.secure.SaSecureUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.utils.RedisUtil;
+import com.xjrsoft.config.CtccSmsConfig;
+import com.xjrsoft.config.MqttConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 电信三网短信
+ */
+@Component
+public class SmsCtcc {
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    /**
+     * 发送短信
+     *
+     * @param mobile  手机号
+     * @param content 短信内容
+     * @return {"message":"提交成功","taskId":7103189661382795265,"status":1} || {"message":"提交数据错误","status":2}
+     */
+    public JSONObject send(String mobile, String content) {
+        CtccSmsConfig config = SpringUtil.getBean(CtccSmsConfig.class);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("appKey", config.getAppKey());
+        params.put("timestamp", System.currentTimeMillis());
+        params.put("mobile", mobile);
+        params.put("content", config.getSignature() + content);
+
+        String str = params.get("appKey").toString()
+                + params.get("timestamp").toString()
+                + params.get("mobile").toString()
+                + params.get("content").toString()
+                + config.getAppSecret();
+
+        params.put("sign", SaSecureUtil.md5(str));
+
+        String result = HttpUtil.post("http://182.92.7.106:7892/api/sms/air/send", params);
+
+        return JSONUtil.parseObj(result);
+    }
+
+    /**
+     * 发送验证码
+     *
+     * @param mobile 手机号
+     * @param code   验证码
+     * @return {"message":"提交成功","taskId":7103189661382795265,"status":1} || {"message":"提交数据错误","status":2}
+     */
+    public JSONObject sendCaptcha(String mobile, String code) {
+        String key = GlobalConstant.CAPTCHA + mobile;
+        if (redisUtil.containsKey(key)) {
+            throw new MyException("验证码发送频繁,请稍后再试!");
+        }
+        String content = String.format("验证码为%s,有效时间为%d分钟,请勿将验证码泄露给其他人。", code, 2);
+        JSONObject result = send(mobile, content);
+        if (result.getInt("status") == 1) {
+            redisUtil.set(key, code, 120L);
+        }
+        return result;
+    }
+
+    /**
+     * 用户验证码验证
+     *
+     * @param mobile 手机号
+     * @param code   验证码
+     * @return
+     */
+    public boolean captchaVerify(String mobile, String code) {
+        String key = GlobalConstant.CAPTCHA + mobile;
+        String rCode = redisUtil.get(key);
+        if (rCode.equals(code)) {
+            return true;
+        }
+        return false;
+    }
+}

+ 18 - 0
src/main/java/com/xjrsoft/config/CtccSmsConfig.java

@@ -0,0 +1,18 @@
+package com.xjrsoft.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+/**
+ * 电信三网短信配置
+ */
+@Data
+@Component
+@ConfigurationProperties("xjrsoft.ctccsms")
+public class CtccSmsConfig {
+    private String appKey;
+    private String appSecret;
+    private String signature;
+}

+ 1 - 0
src/main/java/com/xjrsoft/module/system/service/impl/LoginServiceImpl.java

@@ -120,6 +120,7 @@ public class LoginServiceImpl implements ILoginService {
         }
         LoginVo loginVo = getLoginInfo(loginUser, "WX-MP");
         result.setToken(loginVo.getToken());
+        result.setUserType(loginVo.getUserType());
         return result;
     }
 

+ 4 - 0
src/main/resources/application-dev.yml

@@ -123,6 +123,10 @@ xjrsoft:
     circulated-template-id: 5c179070a72447c79568ac22371be803 #提示类传阅短信 模板id
     timeout-sender: 8823053111843 # 提示类短超时信 通道号
     timeout-template-id: 5c179070a72447c79568ac22371be803 #提示类超时短信 模板id
+  ctccsms: #电信三网短信配置
+    app-key: 105649
+    app-secret: c3868470891526d9
+    signature: "【重庆市铜梁职业教育中心】"
   license:
     enabled: false                  #是否需要验证
     login-max: 100                  #最大登陆人数

+ 17 - 1
src/main/resources/sqlScript/init_sql.sql

@@ -1,6 +1,7 @@
 SET NAMES utf8mb4;
 SET FOREIGN_KEY_CHECKS = 0;
 
+-- 用户表添加字段
 ALTER TABLE xjr_user ADD COLUMN `credential_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证件类型(xjr_dictionary_item[credential_type])' AFTER sort_code;
 ALTER TABLE xjr_user ADD COLUMN `credential_number` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '证件号码' AFTER sort_code;
 
@@ -778,7 +779,7 @@ DROP TABLE IF EXISTS `base_face_identify_records`;
 CREATE TABLE `base_face_identify_records`  (
   `id` bigint NOT NULL COMMENT '主键',
   `mac_addr` varchar(100) COMMENT '设备唯一标识码',
-  `verify_time` datetime COMMENT '比对时间 yyyy -MM - dd HH:mm:ss',
+  `verify_time` datetime COMMENT '比对时间 yyyy-MM-dd HH:mm:ss',
   `device_name` varchar(100) COMMENT '设备名称',
   `location` varchar(100) COMMENT '安装位置',
   `inout_direction` tinyint(4) unsigned COMMENT '出入 0=出口 1=入口',
@@ -793,6 +794,21 @@ CREATE TABLE `base_face_identify_records`  (
   unique index index_no(face_identify_sync_id)
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '人脸识别记录' ROW_FORMAT = Dynamic;
 
+-- ----------------------------
+-- 短信验证码
+-- ----------------------------
+DROP TABLE IF EXISTS sms_send_record;
+create table sms_send_record
+(
+    id int not null auto_increment comment '主键编号' ,
+    mobile_number varchar(64) not null comment '手机号码',
+    sms varchar(512) not null default '' comment '短信内容',
+    `status` tinyint(4) unsigned default 1 not null comment '状态 1=已发送 2=发送失败',
+    `error_msg` varchar(200) not null default '' COMMENT '验证失败说明',
+    `create_date` date null default null COMMENT '创建时间',
+    `modify_date` date null default null COMMENT '修改时间',
+    primary key (`id`)
+) engine=innodb default charset=utf8mb4 COLLATE = utf8mb4_0900_ai_ci comment '短信发送记录';
 
 
 SET FOREIGN_KEY_CHECKS = 1;

+ 38 - 0
src/test/java/com/xjrsoft/xjrsoftboot/SmsTest.java

@@ -0,0 +1,38 @@
+package com.xjrsoft.xjrsoftboot;
+
+import cn.dev33.satoken.secure.SaSecureUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import org.junit.jupiter.api.Test;
+import cn.hutool.core.convert.Convert;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SmsTest {
+
+    @Test
+    public void sendTest() {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("appKey", "105649");
+        params.put("timestamp", System.currentTimeMillis());
+        params.put("mobile", "17362027614");
+        params.put("content", String.format("【重庆市铜梁职业教育中心】验证码为%d,有效时间为%d分钟,请勿将验证码泄露给其他人。", 123123, 2));
+
+        String str = params.get("appKey").toString()
+                + params.get("timestamp").toString()
+                + params.get("mobile").toString()
+                + params.get("content").toString()
+                + "c3868470891526d9";
+        params.put("sign", SaSecureUtil.md5(str));
+
+//        JSONUtil.toJsonStr(params);
+
+        String result = HttpUtil.post("http://182.92.7.106:7892/api/sms/air/send", params);
+
+        System.out.println(result);
+
+
+    }
+}