Przeglądaj źródła

提供获取短信验证码dubbo接口

15902849627 2 lat temu
rodzic
commit
7cbbb39bd9
22 zmienionych plików z 217 dodań i 39 usunięć
  1. 0 2
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java
  2. 0 4
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwSms.java
  3. 1 0
      sckw-modules-api/pom.xml
  4. 33 0
      sckw-modules-api/sckw-message-api/pom.xml
  5. 12 0
      sckw-modules-api/sckw-message-api/src/main/java/com/sckw/message/api/dubbo/SmsInfoService.java
  6. 6 0
      sckw-modules/sckw-example/pom.xml
  7. 28 0
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java
  8. 5 1
      sckw-modules/sckw-message/pom.xml
  9. 4 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/constant/RedisConstant.java
  10. 8 4
      sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java
  11. 0 5
      sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/SmsController.java
  12. 20 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/dubbo/SmsInfoServiceImpl.java
  13. 0 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/DeleteMessagesReqVO.java
  14. 0 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/FindMessagesReqVO.java
  15. 21 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/MessagesStatisticsReqVO.java
  16. 0 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java
  17. 0 2
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SelectMessagesReqVO.java
  18. 0 4
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java
  19. 50 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/MessagesStatisticsResVO.java
  20. 14 0
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java
  21. 8 3
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java
  22. 7 6
      sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

+ 0 - 2
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java

@@ -228,8 +228,6 @@ public class RedissonUtils {
         } catch (InterruptedException e) {
             log.info("tryLock lockKey:{} waitTime:{} leaseTime:{}", lockKey, waitTime, leaseTime);
             return false;
-        } finally {
-            lock.unlock();
         }
     }
 

+ 0 - 4
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/model/SckwSms.java

@@ -41,9 +41,5 @@ public class SckwSms {
      */
     private String signName;
 
-    /**
-     * 有效时间
-     */
-    private Long effectiveTime;
 }
 

+ 1 - 0
sckw-modules-api/pom.xml

@@ -18,6 +18,7 @@
     <modules>
         <module>sckw-system-api</module>
         <module>sckw-file-api</module>
+        <module>sckw-message-api</module>
     </modules>
 
     <properties>

+ 33 - 0
sckw-modules-api/sckw-message-api/pom.xml

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sckw</groupId>
+        <artifactId>sckw-modules-api</artifactId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>sckw-message-api</artifactId>
+    <version>1.0.0</version>
+    <description>系统基础服务接口</description>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-openfeign-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-core</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+    </dependencies>
+</project>

+ 12 - 0
sckw-modules-api/sckw-message-api/src/main/java/com/sckw/message/api/dubbo/SmsInfoService.java

@@ -0,0 +1,12 @@
+package com.sckw.message.api.dubbo;
+
+/**
+ * @desc: 短信信息服務
+ * @author: yzc
+ * @date: 2023-06-13 14:06
+ */
+public interface SmsInfoService {
+
+    String getVerifyCode(String phone);
+
+}

+ 6 - 0
sckw-modules/sckw-example/pom.xml

@@ -94,6 +94,12 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-bootstrap</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-message-api</artifactId>
+            <version>1.0.0</version>
+            <scope>compile</scope>
+        </dependency>
 
 
     </dependencies>

+ 28 - 0
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/MessageApiController.java

@@ -0,0 +1,28 @@
+package com.sckw.example.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.message.api.dubbo.SmsInfoService;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @desc: TODO
+ * @author: yzc
+ * @date: 2023-06-13 14:20
+ */
+@RestController
+@RequestMapping(value = "/messageApi")
+@RequiredArgsConstructor
+public class MessageApiController {
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    private SmsInfoService smsInfoService;
+
+    @GetMapping("/getVerifyCode")
+    public HttpResult getVerifyCode() {
+        String verifyCode = smsInfoService.getVerifyCode("17780832879");
+        return HttpResult.ok("获取验证码成功", verifyCode);
+    }
+}

+ 5 - 1
sckw-modules/sckw-message/pom.xml

@@ -50,7 +50,11 @@
             <artifactId>sckw-system-api</artifactId>
             <version>1.0.0</version>
         </dependency>
-
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-message-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-stream</artifactId>

+ 4 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/constant/RedisConstant.java

@@ -11,4 +11,8 @@ public class RedisConstant {
      * 短信验证码key
      */
     public static final String MESSAGE_SMS_VERIFY_CODE_KEY = "sckw:message:sms:verifyCode:%s";
+    /**
+     * 短信验证码有效时间(秒)
+     */
+    public static final Long SMS_VERIFY_CODE_VALID_TIME = 180L;
 }

+ 8 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/MessageController.java

@@ -6,10 +6,8 @@ import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.message.model.KwmMessage;
-import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
-import com.sckw.message.model.vo.req.FindMessagesReqVO;
-import com.sckw.message.model.vo.req.ReadMessagesReqVO;
-import com.sckw.message.model.vo.req.SelectMessagesReqVO;
+import com.sckw.message.model.vo.req.*;
+import com.sckw.message.model.vo.res.MessagesStatisticsResVO;
 import com.sckw.message.service.MessageService;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
@@ -88,4 +86,10 @@ public class MessageController {
         return HttpResult.ok(result);
     }
 
+    @PostMapping(value = "/statistics", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult statistics(@RequestBody MessagesStatisticsReqVO params) {
+        MessagesStatisticsResVO result = messageService.statistics(params.getCategory());
+        return HttpResult.ok(result);
+    }
+
 }

+ 0 - 5
sckw-modules/sckw-message/src/main/java/com/sckw/message/controller/SmsController.java

@@ -27,9 +27,4 @@ public class SmsController {
         return HttpResult.ok();
     }
 
-    @GetMapping(value = "/getVerifyCode")
-    public HttpResult getVerifyCode(@RequestParam String phone) {
-        return HttpResult.ok("获取验证码成功", smsService.getVerifyCode(phone));
-    }
-
 }

+ 20 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/dubbo/SmsInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.sckw.message.dubbo;
+
+import com.sckw.message.api.dubbo.SmsInfoService;
+import com.sckw.message.constant.RedisConstant;
+import com.sckw.redis.utils.RedissonUtils;
+import org.apache.dubbo.config.annotation.DubboService;
+
+/**
+ * @desc: 短信信息相关
+ * @author: yzc
+ * @date: 2023-06-13 14:10
+ */
+@DubboService(group = "design", version = "2.0.0")
+public class SmsInfoServiceImpl implements SmsInfoService {
+    @Override
+    public String getVerifyCode(String phone) {
+        String key = String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_KEY, phone);
+        return RedissonUtils.getString(key);
+    }
+}

+ 0 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/DeleteMessagesReqVO.java

@@ -3,7 +3,6 @@ package com.sckw.message.model.vo.req;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
 
 import java.util.List;
 
@@ -20,13 +19,11 @@ public class DeleteMessagesReqVO {
     /**
      * 消息分类
      */
-    @NotBlank(message = "消息分类不能为空")
     private String category;
 
     /**
      * 消息类型
      */
-    @NotBlank(message = "消息类型不能为空")
     private String type;
 
     /**

+ 0 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/FindMessagesReqVO.java

@@ -3,7 +3,6 @@ package com.sckw.message.model.vo.req;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
 
 /**
  * @desc: 查找消息列表请求参数
@@ -18,7 +17,6 @@ public class FindMessagesReqVO {
     /**
      * 消息分类
      */
-    @NotBlank(message = "消息分类不能为空")
     private String category;
 
     /**

+ 21 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/MessagesStatisticsReqVO.java

@@ -0,0 +1,21 @@
+package com.sckw.message.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 消息统计請求参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+public class MessagesStatisticsReqVO {
+    /**
+     * 消息分类
+     */
+    private String category;
+
+}

+ 0 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/ReadMessagesReqVO.java

@@ -3,7 +3,6 @@ package com.sckw.message.model.vo.req;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
 
 import java.util.List;
 
@@ -20,13 +19,11 @@ public class ReadMessagesReqVO {
     /**
      * 消息分类
      */
-    @NotBlank(message = "消息分类不能为空")
     private String category;
 
     /**
      * 消息类型
      */
-    @NotBlank(message = "消息类型不能为空")
     private String type;
 
     /**

+ 0 - 2
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SelectMessagesReqVO.java

@@ -4,7 +4,6 @@ import com.sckw.core.model.page.PageRequest;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
-import org.apache.logging.log4j.core.config.plugins.validation.constraints.NotBlank;
 
 /**
  * @desc: 查找消息列表请求参数
@@ -19,7 +18,6 @@ public class SelectMessagesReqVO extends PageRequest {
     /**
      * 消息分类
      */
-    @NotBlank(message = "消息分类不能为空")
     private String category;
 
     /**

+ 0 - 4
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/req/SendSmsVerifyCoderReqVO.java

@@ -1,7 +1,6 @@
 package com.sckw.message.model.vo.req;
 
 import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Pattern;
 import lombok.Getter;
 import lombok.Setter;
@@ -22,7 +21,4 @@ public class SendSmsVerifyCoderReqVO {
     @Pattern(regexp = "^1[0-9]{10}$", message = "非法的手机号")
     private String phone;
 
-
-    @NotNull(message = "有效时间不能为空!")
-    private Integer effectiveTime;
 }

+ 50 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/model/vo/res/MessagesStatisticsResVO.java

@@ -0,0 +1,50 @@
+package com.sckw.message.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.util.Date;
+
+/**
+ * @desc: 消息统计响应参数
+ * @author: yzc
+ * @date: 2023-06-09 11:34
+ */
+@Getter
+@Setter
+@ToString
+public class MessagesStatisticsResVO {
+
+    /**
+     * 消息分类
+     */
+    private String category;
+
+    /**
+     * 消息类型
+     */
+    private String type;
+
+    /**
+     * 未读数量
+     */
+    private Integer unReadNum;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+}

+ 14 - 0
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/MessageService.java

@@ -6,6 +6,7 @@ import com.sckw.message.model.vo.req.DeleteMessagesReqVO;
 import com.sckw.message.model.vo.req.FindMessagesReqVO;
 import com.sckw.message.model.vo.req.ReadMessagesReqVO;
 import com.sckw.message.model.vo.req.SelectMessagesReqVO;
+import com.sckw.message.model.vo.res.MessagesStatisticsResVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -115,4 +116,17 @@ public class MessageService {
         //TODO 当前线程获取用户id
         return kwmMessageService.findPage(1L, reqVO.getCategory(), reqVO.getType());
     }
+
+    /**
+     * @desc: 消息统计
+     * @author: yzc
+     * @date: 2023-06-13 10:19
+     * @param category
+     * @return com.sckw.message.model.vo.res.MessagesStatisticsResVO
+     */
+    public MessagesStatisticsResVO statistics(String category) {
+
+
+        return null;
+    }
 }

+ 8 - 3
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SckwSmsHandlerService.java

@@ -23,16 +23,21 @@ public class SckwSmsHandlerService {
 
     private final KwmSmsService kwmSmsService;
 
+    /**
+     * @desc: 短信处理
+     * @author: yzc
+     * @date: 2023-06-13 13:44
+     * @param sckwSms
+     * @return void
+     */
     public void handler(SckwSms sckwSms) {
         log.info("接收到发送短信消息:{},开始处理", JSON.toJSONString(sckwSms));
         String key = getMessageSmsVerifyCodeKey(sckwSms.getTelephone());
-        Long effectiveTime = sckwSms.getEffectiveTime();
-        if (Boolean.FALSE.equals(RedissonUtils.tryLock(key, 10L, effectiveTime))) {
+        if (Boolean.FALSE.equals(RedissonUtils.tryLock(key, 10L, RedisConstant.SMS_VERIFY_CODE_VALID_TIME))) {
             log.info("重复发送短信消息,不处理");
             return;
         }
         //发送短信
-        RedissonUtils.putString(key, String.valueOf(sckwSms.getParams().get("code")), sckwSms.getEffectiveTime());
         SmsUtil.sendSms(sckwSms.getTelephone(), sckwSms.getSignName(), sckwSms.getTemplateCode().getName(), JSON.toJSONString(sckwSms.getParams()));
         //数据入库
         SmsCodeEnum smsCodeEnum = sckwSms.getTemplateCode();

+ 7 - 6
sckw-modules/sckw-message/src/main/java/com/sckw/message/service/SmsService.java

@@ -28,6 +28,13 @@ public class SmsService {
 
     private final StreamBridge streamBridge;
 
+    /**
+     * @desc: 发送验证码
+     * @author: yzc
+     * @date: 2023-06-13 13:43
+     * @param param
+     * @return void
+     */
     public void sendVerifyCode(SendSmsVerifyCoderReqVO param) {
         String phone = param.getPhone();
         // 防重攻击
@@ -42,15 +49,9 @@ public class SmsService {
         Map<String, Object> params = new HashMap<>();
         params.put("code", NumberUtils.createRandomVcode());
         sckwSms.setParams(params);
-        sckwSms.setEffectiveTime(Long.valueOf(param.getEffectiveTime()));
         streamBridge.send("sckw-sms", JSON.toJSONString(sckwSms));
     }
 
-    public String getVerifyCode(String phone) {
-        String messageSmsVerifyCodeKey = getMessageSmsVerifyCodeKey(phone);
-        return RedissonUtils.getString(messageSmsVerifyCodeKey);
-    }
-
     private String getMessageSmsVerifyCodeKey(String phone) {
         return String.format(RedisConstant.MESSAGE_SMS_VERIFY_CODE_KEY, phone);
     }