From 80e298d8fab0d6334713946a7b85d03866ae673f Mon Sep 17 00:00:00 2001 From: XiaoHH <1431984546@qq.com> Date: Wed, 31 May 2023 15:19:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E7=9A=84openfeign=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api-passenger/pom.xml | 18 ++++++ .../passenger/ApiPassengerApplication.java | 6 +- .../PassengerVerificationController.java | 16 +++++- .../vo/PassengerVerificationCodeVO.java | 26 --------- .../service/PassengerVerificationService.java | 2 +- .../PassengerVerificationServiceImpl.java | 36 +++++++----- common/common-annotation/pom.xml | 30 ++++++++++ .../springboot/EnableTaxiFeignClients.java | 25 +++++++++ .../springboot/TaxiSpringBootApplication.java | 25 +++++++++ .../com/greateme/contant/PackageContent.java | 25 +++++++++ .../com/greateme/contant/http/HttpStatus.java | 32 ++++++++--- .../contant/http/ServiceNameConstant.java | 30 ++++++++++ .../entity/respose/ResponseEntity.java | 56 ++++++++++++++++++- .../java/com/greateme/util/StringUtil.java | 7 +-- common/pom.xml | 1 + feign-client/pom.xml | 19 +++++++ feign-client/verification-code-client/pom.xml | 36 ++++++++++++ .../dto/PassengerVerificationCodeDTO.java | 2 +- .../PassengerVerificationCodeRedisDTO.java | 2 +- .../vo/PassengerVerificationCodeVO.java | 49 ++++++++++++++++ .../feign/VerificationCodeRemote.java | 35 ++++++++++++ .../fallback/VerificationCodeFallback.java | 48 ++++++++++++++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + pom.xml | 15 +++++ service/service-verification-code/pom.xml | 20 +++++-- .../VerificationCodeApplication.java | 4 +- .../VerificationCodeController.java | 38 +++++++++++++ .../service/VerificationCodeService.java | 26 +++++++++ .../impl/VerificationCodeServiceImpl.java | 50 +++++++++++++++++ 29 files changed, 611 insertions(+), 69 deletions(-) delete mode 100644 api/api-passenger/src/main/java/com/greateme/passenger/entity/vo/PassengerVerificationCodeVO.java create mode 100644 common/common-annotation/pom.xml create mode 100644 common/common-annotation/src/main/java/com/greateme/springboot/EnableTaxiFeignClients.java create mode 100644 common/common-annotation/src/main/java/com/greateme/springboot/TaxiSpringBootApplication.java create mode 100644 common/common-contant/src/main/java/com/greateme/contant/PackageContent.java create mode 100644 common/common-contant/src/main/java/com/greateme/contant/http/ServiceNameConstant.java create mode 100644 feign-client/pom.xml create mode 100644 feign-client/verification-code-client/pom.xml rename {api/api-passenger/src/main/java/com/greateme/passenger => feign-client/verification-code-client/src/main/java/com/greateme/verification}/entity/dto/PassengerVerificationCodeDTO.java (93%) rename {api/api-passenger/src/main/java/com/greateme/passenger => feign-client/verification-code-client/src/main/java/com/greateme/verification}/entity/dto/PassengerVerificationCodeRedisDTO.java (96%) create mode 100644 feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/vo/PassengerVerificationCodeVO.java create mode 100644 feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/VerificationCodeRemote.java create mode 100644 feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/fallback/VerificationCodeFallback.java create mode 100644 feign-client/verification-code-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports create mode 100644 service/service-verification-code/src/main/java/com/greateme/verification/controller/VerificationCodeController.java create mode 100644 service/service-verification-code/src/main/java/com/greateme/verification/service/VerificationCodeService.java create mode 100644 service/service-verification-code/src/main/java/com/greateme/verification/service/impl/VerificationCodeServiceImpl.java diff --git a/api/api-passenger/pom.xml b/api/api-passenger/pom.xml index 0c70ab5..ab8205d 100644 --- a/api/api-passenger/pom.xml +++ b/api/api-passenger/pom.xml @@ -48,6 +48,24 @@ com.greateme common-entity + + + + com.greateme + verification-code-client + + + + + com.greateme + common-annotation + + + + + com.greateme + verification-code-client + diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/ApiPassengerApplication.java b/api/api-passenger/src/main/java/com/greateme/passenger/ApiPassengerApplication.java index 5a04d0b..4fcd16e 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/ApiPassengerApplication.java +++ b/api/api-passenger/src/main/java/com/greateme/passenger/ApiPassengerApplication.java @@ -1,7 +1,8 @@ package com.greateme.passenger; +import com.greateme.springboot.EnableTaxiFeignClients; +import com.greateme.springboot.TaxiSpringBootApplication; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** @@ -14,8 +15,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; * @date 2023-05-30 星期二 18:17:31 * @file ApiPassengerApplication.java */ +@EnableTaxiFeignClients @EnableDiscoveryClient -@SpringBootApplication +@TaxiSpringBootApplication public class ApiPassengerApplication { public static void main(String[] args) { diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/controller/PassengerVerificationController.java b/api/api-passenger/src/main/java/com/greateme/passenger/controller/PassengerVerificationController.java index cb32e50..8d273fd 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/controller/PassengerVerificationController.java +++ b/api/api-passenger/src/main/java/com/greateme/passenger/controller/PassengerVerificationController.java @@ -1,9 +1,10 @@ package com.greateme.passenger.controller; import com.greateme.entity.respose.ResponseEntity; -import com.greateme.passenger.entity.dto.PassengerVerificationCodeDTO; import com.greateme.passenger.service.PassengerVerificationService; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -26,8 +27,19 @@ public class PassengerVerificationController { @Autowired private PassengerVerificationService verificationService; + /** + * 生成手机验证码 + * + * @param verificationCode 手机验证码内容 + * @return 手机验证码后续的验证token + */ @PostMapping("/code") public ResponseEntity verificationCode(@RequestBody PassengerVerificationCodeDTO verificationCode) { - return ResponseEntity.success(this.verificationService.generationPhoneVerificationCode(verificationCode)); + String token = this.verificationService.generationPhoneVerificationCode(verificationCode); + if (StringUtils.hasLength(token)) { + return ResponseEntity.success(token); + } else { + return ResponseEntity.error("生成短信验证码失败"); + } } } diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/entity/vo/PassengerVerificationCodeVO.java b/api/api-passenger/src/main/java/com/greateme/passenger/entity/vo/PassengerVerificationCodeVO.java deleted file mode 100644 index d759e2f..0000000 --- a/api/api-passenger/src/main/java/com/greateme/passenger/entity/vo/PassengerVerificationCodeVO.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.greateme.passenger.entity.vo; - -import java.io.Serializable; - -/** - *

- * 乘客验证码的视图对象 - *

- * - * @author XiaoHH - * @version 1.0.0 - * @date 2023-05-30 星期二 19:40:35 - * @file PassengerVerificationCodeVO.java - */ -public class PassengerVerificationCodeVO implements Serializable { - - /** - * 手机验证码 - */ - private String verificationCode; - - /** - * - */ - private String verificationToken; -} diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/service/PassengerVerificationService.java b/api/api-passenger/src/main/java/com/greateme/passenger/service/PassengerVerificationService.java index 702158f..2ba42a5 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/service/PassengerVerificationService.java +++ b/api/api-passenger/src/main/java/com/greateme/passenger/service/PassengerVerificationService.java @@ -1,6 +1,6 @@ package com.greateme.passenger.service; -import com.greateme.passenger.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; /** *

diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/service/impl/PassengerVerificationServiceImpl.java b/api/api-passenger/src/main/java/com/greateme/passenger/service/impl/PassengerVerificationServiceImpl.java index ee294ac..ff02b17 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/service/impl/PassengerVerificationServiceImpl.java +++ b/api/api-passenger/src/main/java/com/greateme/passenger/service/impl/PassengerVerificationServiceImpl.java @@ -1,11 +1,16 @@ package com.greateme.passenger.service.impl; -import com.greateme.passenger.entity.dto.PassengerVerificationCodeDTO; -import com.greateme.passenger.entity.dto.PassengerVerificationCodeRedisDTO; +import com.greateme.contant.http.HttpStatus; +import com.greateme.entity.respose.ResponseEntity; import com.greateme.passenger.service.PassengerVerificationService; import com.greateme.util.StringUtil; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.dto.PassengerVerificationCodeRedisDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; +import com.greateme.verification.feign.VerificationCodeRemote; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.UUID; @@ -28,6 +33,12 @@ public class PassengerVerificationServiceImpl implements PassengerVerificationSe */ private static final Logger log = LoggerFactory.getLogger(PassengerVerificationServiceImpl.class); + /** + * 验证码的远程调用 + */ + @Autowired + private VerificationCodeRemote verificationCodeRemote; + /** * 生成手机验证码 * @@ -36,16 +47,15 @@ public class PassengerVerificationServiceImpl implements PassengerVerificationSe */ @Override public String generationPhoneVerificationCode(PassengerVerificationCodeDTO verificationCode) { - // 生成6位的手机验证码 - String code = StringUtil.generationVerificationCode(6); - // 生成对应手机验证码的token - String token = UUID.randomUUID().toString(); - // 初始化存入redis当中的对象 - PassengerVerificationCodeRedisDTO verificationCodeRedis = new PassengerVerificationCodeRedisDTO(); - verificationCodeRedis.setVerificationCode(code); - verificationCodeRedis.setPassengerPhone(verificationCode.getPassengerPhone()); - verificationCodeRedis.setToken(token); - log.info("成功生成短信验证码{},手机号码:{},token:{},即将将验证码传入redis存储", verificationCodeRedis.getVerificationCode(), verificationCodeRedis.getPassengerPhone(), verificationCodeRedis.getToken()); - return token; + ResponseEntity passengerVerificationCodeEntity = verificationCodeRemote.passengerPhone(verificationCode, 6); + if (HttpStatus.SUCCESS.getCode() == passengerVerificationCodeEntity.getCode()) { + PassengerVerificationCodeVO passengerVerificationCode = passengerVerificationCodeEntity.getDate(); + if (null != passengerVerificationCode) { + log.info("成功生成验证码:{},验证码的token为:{}", passengerVerificationCode.getVerificationCode(), passengerVerificationCode.getVerificationToken()); + return passengerVerificationCode.getVerificationToken(); + } + } + log.error("获取验证码的时候发生了错误,错误码:{},错误信息:{}", passengerVerificationCodeEntity.getCode(), passengerVerificationCodeEntity.getMessage()); + return null; } } diff --git a/common/common-annotation/pom.xml b/common/common-annotation/pom.xml new file mode 100644 index 0000000..3cc2566 --- /dev/null +++ b/common/common-annotation/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + com.greateme + common + 1.0-SNAPSHOT + + jar + 公共的注解模块 + + common-annotation + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + com.greateme + common-contant + + + + \ No newline at end of file diff --git a/common/common-annotation/src/main/java/com/greateme/springboot/EnableTaxiFeignClients.java b/common/common-annotation/src/main/java/com/greateme/springboot/EnableTaxiFeignClients.java new file mode 100644 index 0000000..37efc5c --- /dev/null +++ b/common/common-annotation/src/main/java/com/greateme/springboot/EnableTaxiFeignClients.java @@ -0,0 +1,25 @@ +package com.greateme.springboot; + +import com.greateme.contant.PackageContent; +import org.springframework.cloud.openfeign.EnableFeignClients; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * 自定义启用feign的注解 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 14:54:30 + * @file EnableTaxiFeignClients.java + */ +@EnableFeignClients(basePackages = PackageContent.SPRING_BOOT_SCAN_PACKAGE) +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface EnableTaxiFeignClients { +} diff --git a/common/common-annotation/src/main/java/com/greateme/springboot/TaxiSpringBootApplication.java b/common/common-annotation/src/main/java/com/greateme/springboot/TaxiSpringBootApplication.java new file mode 100644 index 0000000..d97003a --- /dev/null +++ b/common/common-annotation/src/main/java/com/greateme/springboot/TaxiSpringBootApplication.java @@ -0,0 +1,25 @@ +package com.greateme.springboot; + +import com.greateme.contant.PackageContent; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + *

+ * 自定义的SpringBoot启动类注解 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 14:18:59 + * @file TaxiSpringBootApplication.java + */ +@SpringBootApplication(scanBasePackages = PackageContent.SPRING_BOOT_SCAN_PACKAGE) +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface TaxiSpringBootApplication { +} diff --git a/common/common-contant/src/main/java/com/greateme/contant/PackageContent.java b/common/common-contant/src/main/java/com/greateme/contant/PackageContent.java new file mode 100644 index 0000000..2aa5983 --- /dev/null +++ b/common/common-contant/src/main/java/com/greateme/contant/PackageContent.java @@ -0,0 +1,25 @@ +package com.greateme.contant; + +/** + *

+ * 包名相关的常量类 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 14:16:08 + * @file PackageContent.java + */ +public class PackageContent { + + /** + * 此类不允许实例化 + */ + private PackageContent() { + } + + /** + * SpringBoot扫描的包路径 + */ + public static final String SPRING_BOOT_SCAN_PACKAGE = "com.greateme"; +} diff --git a/common/common-contant/src/main/java/com/greateme/contant/http/HttpStatus.java b/common/common-contant/src/main/java/com/greateme/contant/http/HttpStatus.java index dee894e..03d3511 100644 --- a/common/common-contant/src/main/java/com/greateme/contant/http/HttpStatus.java +++ b/common/common-contant/src/main/java/com/greateme/contant/http/HttpStatus.java @@ -2,7 +2,7 @@ package com.greateme.contant.http; /** *

- * http状态的常量类 + * http状态的枚举类 *

* * @author XiaoHH @@ -10,21 +10,37 @@ package com.greateme.contant.http; * @date 2023-05-30 星期二 20:19:15 * @file HttpStatus.java */ -public class HttpStatus { +public enum HttpStatus { + /** + * 成功的状态 + */ + SUCCESS(200, "Success"), /** - * 此实例不允许被实例化 + * 失败的状态 */ - private HttpStatus() { + ERROR(500, "Error"); + + HttpStatus(int code, String message) { + this.code = code; + this.message = message; } /** - * 成功的常量状态码 + * http状态码 */ - public static final int SUCCESS = 200; + private final int code; /** - * 成功的常量状态信息 + * http返回的消息 */ - public static final String SUCCESS_MESSAGE = "Success"; + private final String message; + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } } diff --git a/common/common-contant/src/main/java/com/greateme/contant/http/ServiceNameConstant.java b/common/common-contant/src/main/java/com/greateme/contant/http/ServiceNameConstant.java new file mode 100644 index 0000000..4a981a7 --- /dev/null +++ b/common/common-contant/src/main/java/com/greateme/contant/http/ServiceNameConstant.java @@ -0,0 +1,30 @@ +package com.greateme.contant.http; + +/** + *

+ * 服务名称的常量类 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023_05_31 星期三 14:28:04 + * @file ServiceNameConstant.java + */ +public class ServiceNameConstant { + + /** + * 此类不允许实例化 + */ + private ServiceNameConstant() { + } + + /** + * api_passenger 的服务名称 + */ + public static final String API_PASSENGER = "api-passenger"; + + /** + * service-verification-code 的服务名称 + */ + public static final String SERVICE_VERIFICATION_CODE = "service-verification-code"; +} diff --git a/common/common-entity/src/main/java/com/greateme/entity/respose/ResponseEntity.java b/common/common-entity/src/main/java/com/greateme/entity/respose/ResponseEntity.java index b8820f5..af95cb2 100644 --- a/common/common-entity/src/main/java/com/greateme/entity/respose/ResponseEntity.java +++ b/common/common-entity/src/main/java/com/greateme/entity/respose/ResponseEntity.java @@ -33,6 +33,39 @@ public class ResponseEntity implements Serializable { this.message = message; } + /** + * 带HttpStatus和数据的构造函数 + * + * @param httpStatus http状态枚举 + * @param date 返回的数据内容 + */ + public ResponseEntity(HttpStatus httpStatus, T date) { + this.code = httpStatus.getCode(); + this.message = httpStatus.getMessage(); + this.date = date; + } + + /** + * 带状态码和消息的构造函数 + * + * @param code 状态码 + * @param message 处理的消息信息 + */ + public ResponseEntity(int code, String message) { + this.code = code; + this.message = message; + } + + /** + * 带HttpStatus的构造函数 + * + * @param httpStatus http状态枚举 + */ + public ResponseEntity(HttpStatus httpStatus) { + this.code = httpStatus.getCode(); + this.message = httpStatus.getMessage(); + } + /** * 返回的状态码 * 200 => 成功 @@ -58,7 +91,28 @@ public class ResponseEntity implements Serializable { * @return 返回的实体 */ public static ResponseEntity success(T data) { - return new ResponseEntity<>(HttpStatus.SUCCESS, data, HttpStatus.SUCCESS_MESSAGE); + return new ResponseEntity<>(HttpStatus.SUCCESS, data); + } + + /** + * 处理失败的返回方法 + * + * @param 数据内容的类型 + * @return 返回的实体 + */ + public static ResponseEntity error() { + return new ResponseEntity<>(HttpStatus.ERROR); + } + + /** + * 处理失败的返回方法 + * + * @param message 返回消息的内容 + * @param 数据内容的类型 + * @return 返回的实体 + */ + public static ResponseEntity error(String message) { + return new ResponseEntity<>(HttpStatus.ERROR.getCode(), message); } public int getCode() { diff --git a/common/common-util/src/main/java/com/greateme/util/StringUtil.java b/common/common-util/src/main/java/com/greateme/util/StringUtil.java index 8bf2987..7305021 100644 --- a/common/common-util/src/main/java/com/greateme/util/StringUtil.java +++ b/common/common-util/src/main/java/com/greateme/util/StringUtil.java @@ -25,11 +25,6 @@ public class StringUtil { * @return 生成的随机字符串 */ public static String generationVerificationCode(int length) { - StringBuilder result = new StringBuilder(length); - for (int i = 0; i < length; i++) { - int num = (int) (Math.random() * 10) + 1; - result.append(num % 10); - } - return result.toString(); + return String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, length -1))); } } diff --git a/common/pom.xml b/common/pom.xml index 4ccacb4..e18a9a9 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -15,6 +15,7 @@ common-entity common-util common-contant + common-annotation common diff --git a/feign-client/pom.xml b/feign-client/pom.xml new file mode 100644 index 0000000..d4445f7 --- /dev/null +++ b/feign-client/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + com.greateme + online-taxi-public + 1.0-SNAPSHOT + + 远程调用模块聚合项目 + + feign-client + pom + + verification-code-client + + + \ No newline at end of file diff --git a/feign-client/verification-code-client/pom.xml b/feign-client/verification-code-client/pom.xml new file mode 100644 index 0000000..5a517af --- /dev/null +++ b/feign-client/verification-code-client/pom.xml @@ -0,0 +1,36 @@ + + + 4.0.0 + + com.greateme + feign-client + 1.0-SNAPSHOT + + jar + 验证码模块的远程调用 + + verification-code-client + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + + + com.greateme + common-entity + + + + \ No newline at end of file diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeDTO.java b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeDTO.java similarity index 93% rename from api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeDTO.java rename to feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeDTO.java index 5761d6e..cde07bc 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeDTO.java +++ b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeDTO.java @@ -1,4 +1,4 @@ -package com.greateme.passenger.entity.dto; +package com.greateme.verification.entity.dto; import com.greateme.util.JsonUtil; diff --git a/api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeRedisDTO.java b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeRedisDTO.java similarity index 96% rename from api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeRedisDTO.java rename to feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeRedisDTO.java index 20e0bd8..a343588 100644 --- a/api/api-passenger/src/main/java/com/greateme/passenger/entity/dto/PassengerVerificationCodeRedisDTO.java +++ b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/dto/PassengerVerificationCodeRedisDTO.java @@ -1,4 +1,4 @@ -package com.greateme.passenger.entity.dto; +package com.greateme.verification.entity.dto; import com.greateme.util.JsonUtil; diff --git a/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/vo/PassengerVerificationCodeVO.java b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/vo/PassengerVerificationCodeVO.java new file mode 100644 index 0000000..a55e706 --- /dev/null +++ b/feign-client/verification-code-client/src/main/java/com/greateme/verification/entity/vo/PassengerVerificationCodeVO.java @@ -0,0 +1,49 @@ +package com.greateme.verification.entity.vo; + +import com.greateme.util.JsonUtil; + +import java.io.Serializable; + +/** + *

+ * 乘客验证码的视图对象 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-30 星期二 19:40:35 + * @file PassengerVerificationCodeVO.java + */ +public class PassengerVerificationCodeVO implements Serializable { + + /** + * 手机验证码 + */ + private String verificationCode; + + /** + * 手机验证码的token + */ + private String verificationToken; + + public String getVerificationCode() { + return verificationCode; + } + + public void setVerificationCode(String verificationCode) { + this.verificationCode = verificationCode; + } + + public String getVerificationToken() { + return verificationToken; + } + + public void setVerificationToken(String verificationToken) { + this.verificationToken = verificationToken; + } + + @Override + public String toString() { + return JsonUtil.toJson(this); + } +} diff --git a/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/VerificationCodeRemote.java b/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/VerificationCodeRemote.java new file mode 100644 index 0000000..692dcc7 --- /dev/null +++ b/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/VerificationCodeRemote.java @@ -0,0 +1,35 @@ +package com.greateme.verification.feign; + +import com.greateme.contant.http.ServiceNameConstant; +import com.greateme.entity.respose.ResponseEntity; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; +import com.greateme.verification.feign.fallback.VerificationCodeFallback; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + *

+ * 验证码的远程调用器 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 14:32:59 + * @file VerificationCodeRemote.java + */ +@FeignClient(contextId = "verificationCodeRemote", value = ServiceNameConstant.SERVICE_VERIFICATION_CODE, fallback = VerificationCodeFallback.class) +public interface VerificationCodeRemote { + + /** + * 生成一个乘客的短信验证码 + * + * @param verificationCode 生成乘客验证码的参数 + * @param length 生成验证码的长度 + * @return 生成后的详细数据 + */ + @PostMapping("/verificationCode/passengerPhone/{length}") + ResponseEntity passengerPhone(@RequestBody PassengerVerificationCodeDTO verificationCode, @PathVariable("length") int length); +} diff --git a/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/fallback/VerificationCodeFallback.java b/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/fallback/VerificationCodeFallback.java new file mode 100644 index 0000000..015199c --- /dev/null +++ b/feign-client/verification-code-client/src/main/java/com/greateme/verification/feign/fallback/VerificationCodeFallback.java @@ -0,0 +1,48 @@ +package com.greateme.verification.feign.fallback; + +import com.greateme.entity.respose.ResponseEntity; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; +import com.greateme.verification.feign.VerificationCodeRemote; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +/** + *

+ * 验证码的远程调用器的回调类 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 14:43:10 + * @file VerificationCodeFallback.java + */ +@Component +public class VerificationCodeFallback implements FallbackFactory { + + /** + * 记录日志的实体 + */ + private static final Logger log = LoggerFactory.getLogger(VerificationCodeFallback.class); + + @Override + public VerificationCodeRemote create(Throwable cause) { + return new VerificationCodeRemote() { + + /** + * 生成一个乘客的短信验证码发生了错误 + * + * @param verificationCode 生成乘客验证码的参数 + * @param length 生成验证码的长度 + * @return 生成后的详细数据 + */ + @Override + public ResponseEntity passengerPhone(PassengerVerificationCodeDTO verificationCode, int length) { + log.error("调用远程发送验证码的接口发生了错误,手机号码:{},验证码长度:{}", verificationCode.getPassengerPhone(), length); + return ResponseEntity.error(); + } + }; + } +} diff --git a/feign-client/verification-code-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/feign-client/verification-code-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..34da060 --- /dev/null +++ b/feign-client/verification-code-client/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.greateme.verification.feign.fallback.VerificationCodeFallback \ No newline at end of file diff --git a/pom.xml b/pom.xml index faa77a4..2c8a4d4 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ api common service + feign-client 马士兵的滴约打车项目 @@ -83,6 +84,20 @@ common-util ${online-taxi-public.version} + + + + com.greateme + verification-code-client + ${online-taxi-public.version} + + + + + com.greateme + common-annotation + ${online-taxi-public.version} + \ No newline at end of file diff --git a/service/service-verification-code/pom.xml b/service/service-verification-code/pom.xml index 7b31ff0..64d2a45 100644 --- a/service/service-verification-code/pom.xml +++ b/service/service-verification-code/pom.xml @@ -8,15 +8,11 @@ service 1.0-SNAPSHOT + jar + 验证码服务模块 service-verification-code - - 11 - 11 - UTF-8 - - @@ -52,6 +48,18 @@ com.greateme common-entity + + + + com.greateme + verification-code-client + + + + + com.greateme + common-annotation + diff --git a/service/service-verification-code/src/main/java/com/greateme/verification/VerificationCodeApplication.java b/service/service-verification-code/src/main/java/com/greateme/verification/VerificationCodeApplication.java index 09116cf..6453ed5 100644 --- a/service/service-verification-code/src/main/java/com/greateme/verification/VerificationCodeApplication.java +++ b/service/service-verification-code/src/main/java/com/greateme/verification/VerificationCodeApplication.java @@ -1,7 +1,7 @@ package com.greateme.verification; +import com.greateme.springboot.TaxiSpringBootApplication; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** @@ -15,7 +15,7 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; * @file VerificationCodeApplication.java */ @EnableDiscoveryClient -@SpringBootApplication +@TaxiSpringBootApplication public class VerificationCodeApplication { public static void main(String[] args) { SpringApplication.run(VerificationCodeApplication.class, args); diff --git a/service/service-verification-code/src/main/java/com/greateme/verification/controller/VerificationCodeController.java b/service/service-verification-code/src/main/java/com/greateme/verification/controller/VerificationCodeController.java new file mode 100644 index 0000000..0e8757d --- /dev/null +++ b/service/service-verification-code/src/main/java/com/greateme/verification/controller/VerificationCodeController.java @@ -0,0 +1,38 @@ +package com.greateme.verification.controller; + +import com.greateme.entity.respose.ResponseEntity; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; +import com.greateme.verification.service.VerificationCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * 验证码的控制器 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 11:49:00 + * @file VerificationCodeController.java + */ +@RequestMapping("/verificationCode") +@RestController +public class VerificationCodeController { + + @Autowired + private VerificationCodeService verificationCodeService; + + /** + * 生成一个乘客的短信验证码 + * + * @param verificationCode 生成乘客验证码的参数 + * @param length 生成验证码的长度 + * @return 生成后的详细数据 + */ + @PostMapping("/passengerPhone/{length}") + public ResponseEntity passengerPhone(@RequestBody PassengerVerificationCodeDTO verificationCode, @PathVariable("length") int length) { + return ResponseEntity.success(this.verificationCodeService.generationPassengerPhone(verificationCode, length)); + } +} diff --git a/service/service-verification-code/src/main/java/com/greateme/verification/service/VerificationCodeService.java b/service/service-verification-code/src/main/java/com/greateme/verification/service/VerificationCodeService.java new file mode 100644 index 0000000..f80b47c --- /dev/null +++ b/service/service-verification-code/src/main/java/com/greateme/verification/service/VerificationCodeService.java @@ -0,0 +1,26 @@ +package com.greateme.verification.service; + +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; + +/** + *

+ * 验证码的业务处理接口 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 13:56:40 + * @file VerificationCodeServiceImpl.java + */ +public interface VerificationCodeService { + + /** + * 生成一个乘客的短信验证码 + * + * @param verificationCode 生成乘客验证码的参数 + * @param length 生成验证码的长度 + * @return 生成后的详细数据 + */ + PassengerVerificationCodeVO generationPassengerPhone(PassengerVerificationCodeDTO verificationCode, int length); +} diff --git a/service/service-verification-code/src/main/java/com/greateme/verification/service/impl/VerificationCodeServiceImpl.java b/service/service-verification-code/src/main/java/com/greateme/verification/service/impl/VerificationCodeServiceImpl.java new file mode 100644 index 0000000..b812501 --- /dev/null +++ b/service/service-verification-code/src/main/java/com/greateme/verification/service/impl/VerificationCodeServiceImpl.java @@ -0,0 +1,50 @@ +package com.greateme.verification.service.impl; + +import com.greateme.util.StringUtil; +import com.greateme.verification.entity.dto.PassengerVerificationCodeDTO; +import com.greateme.verification.entity.dto.PassengerVerificationCodeRedisDTO; +import com.greateme.verification.entity.vo.PassengerVerificationCodeVO; +import com.greateme.verification.service.VerificationCodeService; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +/** + *

+ * 验证码的业务处理实现 + *

+ * + * @author XiaoHH + * @version 1.0.0 + * @date 2023-05-31 星期三 13:58:24 + * @file VerificationCodeServiceImpl.java + */ +@Service +public class VerificationCodeServiceImpl implements VerificationCodeService { + + /** + * 生成一个乘客的短信验证码 + * + * @param verificationCode 生成乘客验证码的参数 + * @param length 生成验证码的长度 + * @return 生成后的详细数据 + */ + @Override + public PassengerVerificationCodeVO generationPassengerPhone(PassengerVerificationCodeDTO verificationCode, int length) { + // 生成6位的手机验证码 + String code = StringUtil.generationVerificationCode(length); + // 生成对应手机验证码的token + String token = UUID.randomUUID().toString(); + // 初始化存入redis当中的对象 + PassengerVerificationCodeRedisDTO verificationCodeRedis = new PassengerVerificationCodeRedisDTO(); + verificationCodeRedis.setVerificationCode(code); + verificationCodeRedis.setPassengerPhone(verificationCode.getPassengerPhone()); + verificationCodeRedis.setToken(token); + // TODO 将 verificationCodeRedis 存入redis + // 将token和code返回 + PassengerVerificationCodeVO result = new PassengerVerificationCodeVO(); + result.setVerificationCode(code); + result.setVerificationToken(token); + return result; + } +}