From e4d5bb5ae12cdea3b6574adfef185d2c79c2ca81 Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 3 Nov 2022 16:23:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91030~034=EF=BC=88=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=E6=9E=84=E5=BB=BA=E7=BC=93=E5=AD=98=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beacon-api/pom.xml | 6 ++ .../api/controller/SmsController.java | 3 + .../com/mashibing/api/filter/CheckFilter.java | 6 +- .../api/filter/CheckFilterContext.java | 27 +++-- .../api/filter/impl/ApiKeyCheckFilter.java | 3 +- .../api/filter/impl/FeeCheckFilter.java | 3 +- .../api/filter/impl/IPCheckFilter.java | 3 +- .../api/filter/impl/MobileCheckFilter.java | 3 +- .../api/filter/impl/SignCheckFilter.java | 3 +- .../api/filter/impl/TemplateCheckFilter.java | 3 +- .../mashibing/api/form/SingleSendForm.java | 13 ++- .../java/com/mashibing/api/form/SmsForm.java | 25 ----- beacon-cache/pom.xml | 37 +++++++ .../com/mashibing/cache/CacheStarterApp.java | 19 ++++ .../mashibing/cache/config/RedisConfig.java | 78 +++++++++++++++ beacon-cache/src/main/resources/bootstrap.yml | 17 ++++ beacon-common/pom.xml | 21 ++++ .../common/model/StandardSubmit.java | 98 +++++++++++++++++++ pom.xml | 5 +- 19 files changed, 315 insertions(+), 58 deletions(-) delete mode 100644 beacon-api/src/main/java/com/mashibing/api/form/SmsForm.java create mode 100644 beacon-cache/pom.xml create mode 100644 beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java create mode 100644 beacon-cache/src/main/java/com/mashibing/cache/config/RedisConfig.java create mode 100644 beacon-cache/src/main/resources/bootstrap.yml create mode 100644 beacon-common/pom.xml create mode 100644 beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java diff --git a/beacon-api/pom.xml b/beacon-api/pom.xml index b694304..115408d 100644 --- a/beacon-api/pom.xml +++ b/beacon-api/pom.xml @@ -53,6 +53,12 @@ org.springframework.boot spring-boot-starter-validation + + + com.mashibing + beacon-common + 1.0-SNAPSHOT + \ No newline at end of file diff --git a/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java b/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java index 6b33843..7110097 100644 --- a/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java +++ b/beacon-api/src/main/java/com/mashibing/api/controller/SmsController.java @@ -30,6 +30,9 @@ public class SmsController { log.info("【接口模块-单条短信Controller】 参数不合法 msg = {}",msg); return R.error(SmsCodeEnum.PARAMETER_ERROR.getCode(),msg); } + //=========================构建StandardSubmit,各种封装校验========================================= + + //=========================发送到MQ,交给策略模块处理========================================= return R.ok(); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java index 4779baa..4da5f07 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilter.java @@ -1,7 +1,5 @@ package com.mashibing.api.filter; -import com.mashibing.api.form.SmsForm; - /** * * @author zjw @@ -11,7 +9,7 @@ public interface CheckFilter { /** * 校验!!!! - * @param smsForm + * @param object */ - void check(SmsForm smsForm); + void check(Object object); } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java index d4c76ce..f7c353e 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/CheckFilterContext.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter; import com.mashibing.api.form.SingleSendForm; -import com.mashibing.api.form.SmsForm; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -11,7 +10,7 @@ import java.util.Map; /** * @author zjw - * @description 策略模式的上下文对象 + * @description 策略模式的上下文对象 */ @Component @RefreshScope @@ -20,25 +19,23 @@ public class CheckFilterContext { // Spring的IOC会将对象全部都放到Map集合中 // 基于4.x中Spring提供的反省注解,基于Map只拿到需要的类型对象即可 @Autowired - private Map checkFiltersMap; + private Map checkFiltersMap; // 基于Nacos获取到执行的顺序和需要执行的校验对象 - @Value("${singleSendFilters:apikey,ip,sign,template}") - private String singleSendFilters; + @Value("${filters:apikey,ip,sign,template}") + private String filters; /** * 当前check方法用于管理校验链的顺序 */ - public void check(SmsForm smsForm){ - if (smsForm instanceof SingleSendForm) { - // 单挑短信发送的策略 - //1. 将获取到filters基于,做切分 - String[] filterArray = singleSendFilters.split(","); - //2. 遍历数组即可 - for (String filter : filterArray) { - CheckFilter checkFilter = checkFiltersMap.get(filter); - checkFilter.check(smsForm); - } + public void check(Object object) { + // 单挑短信发送的策略 + //1. 将获取到filters基于,做切分 + String[] filterArray = filters.split(","); + //2. 遍历数组即可 + for (String filter : filterArray) { + CheckFilter checkFilter = checkFiltersMap.get(filter); + checkFilter.check(object); } } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java index b03c4f1..fc71031 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/ApiKeyCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class ApiKeyCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验apikey】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java index 8e4a0a0..29c7d84 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/FeeCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class FeeCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验客户余额】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java index 130a973..eb3a503 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/IPCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class IPCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验ip】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java index 6956069..99e6f75 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/MobileCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class MobileCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验手机号】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java index 2a1810a..5eaefb1 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/SignCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class SignCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验签名】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java b/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java index 518f9ef..f03fae0 100644 --- a/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java +++ b/beacon-api/src/main/java/com/mashibing/api/filter/impl/TemplateCheckFilter.java @@ -1,7 +1,6 @@ package com.mashibing.api.filter.impl; import com.mashibing.api.filter.CheckFilter; -import com.mashibing.api.form.SmsForm; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -15,7 +14,7 @@ public class TemplateCheckFilter implements CheckFilter { @Override - public void check(SmsForm smsForm) { + public void check(Object object) { log.info("【接口模块-校验模板】 校验ing…………"); } } diff --git a/beacon-api/src/main/java/com/mashibing/api/form/SingleSendForm.java b/beacon-api/src/main/java/com/mashibing/api/form/SingleSendForm.java index 1ca5a9c..a6daff7 100644 --- a/beacon-api/src/main/java/com/mashibing/api/form/SingleSendForm.java +++ b/beacon-api/src/main/java/com/mashibing/api/form/SingleSendForm.java @@ -11,13 +11,24 @@ import javax.validation.constraints.NotNull; * @description */ @Data -public class SingleSendForm extends SmsForm { +public class SingleSendForm { + + /** 客户的apikey */ + @NotBlank(message = "apikey不允许为空!") + private String apikey; + + /** 手机号 */ + @NotBlank(message = "手机号不能为空!") + private String mobile; /** 短信内容 */ @NotBlank(message = "短信内容不能为空!") private String text; + /** 客户业务内的uid */ + private String uid; + /** 0-验证码短信 1-通知类短信 2-营销类短信 */ @Range(min = 0,max = 2,message = "短信类型只能是0~2的整数!") @NotNull(message = "短信类型不允许非空!") diff --git a/beacon-api/src/main/java/com/mashibing/api/form/SmsForm.java b/beacon-api/src/main/java/com/mashibing/api/form/SmsForm.java deleted file mode 100644 index a2f6aa6..0000000 --- a/beacon-api/src/main/java/com/mashibing/api/form/SmsForm.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mashibing.api.form; - -import lombok.Data; - -import javax.validation.constraints.NotBlank; - -/** - * 发送短信必备的参数 - * @author zjw - * @description - */ -@Data -public class SmsForm { - - /** 客户的apikey */ - @NotBlank(message = "apikey不允许为空!") - private String apikey; - - /** 手机号 */ - @NotBlank(message = "手机号不能为空!") - private String mobile; - - /** 客户业务内的uid */ - private String uid; -} diff --git a/beacon-cache/pom.xml b/beacon-cache/pom.xml new file mode 100644 index 0000000..87c4f92 --- /dev/null +++ b/beacon-cache/pom.xml @@ -0,0 +1,37 @@ + + + + beacon-cloud + com.mashibing + 1.0-SNAPSHOT + + 4.0.0 + + beacon-cache + + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + \ No newline at end of file diff --git a/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java b/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java new file mode 100644 index 0000000..13a7602 --- /dev/null +++ b/beacon-cache/src/main/java/com/mashibing/cache/CacheStarterApp.java @@ -0,0 +1,19 @@ +package com.mashibing.cache; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * @author zjw + * @description + */ +@SpringBootApplication +@EnableDiscoveryClient +public class CacheStarterApp { + + public static void main(String[] args) { + SpringApplication.run(CacheStarterApp.class,args); + } + +} diff --git a/beacon-cache/src/main/java/com/mashibing/cache/config/RedisConfig.java b/beacon-cache/src/main/java/com/mashibing/cache/config/RedisConfig.java new file mode 100644 index 0000000..b025590 --- /dev/null +++ b/beacon-cache/src/main/java/com/mashibing/cache/config/RedisConfig.java @@ -0,0 +1,78 @@ +package com.mashibing.cache.config; + +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * 设置RedisTemplate的序列化方式 + * @author zjw + * @description + */ +@Configuration +public class RedisConfig { + + @Bean + public RedisTemplate redisTemplate(RedisConnectionFactory factory,RedisSerializer redisSerializer){ + //1. 构建RedisTemplate对象 + RedisTemplate redisTemplate = new RedisTemplate<>(); + + //2. 设置RedisConnectionFactory到RedisTemplate + redisTemplate.setConnectionFactory(factory); + + //3. 设置Redis的key的序列化方式 + redisTemplate.setKeySerializer(RedisSerializer.string()); + redisTemplate.setHashKeySerializer(RedisSerializer.string()); + + //4. 设置Redis的value的序列化方式 Date + redisTemplate.setValueSerializer(redisSerializer); + redisTemplate.setHashValueSerializer(redisSerializer); + + //5. 保证生效 + redisTemplate.afterPropertiesSet(); + + //6. 返回RedisTemplate + return redisTemplate; + } + + @Bean + public RedisSerializer redisSerializer(){ + //1. 构建Jackson的ObjectMapper + ObjectMapper objectMapper = new ObjectMapper(); + + //2. 设置JDK8日期格式的支持 + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + Module timeModule = new JavaTimeModule() + .addDeserializer(LocalDate.class,new LocalDateDeserializer(dateFormatter)) + .addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(dateTimeFormatter)) + .addSerializer(LocalDate.class,new LocalDateSerializer(dateFormatter)) + .addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(dateTimeFormatter)); + objectMapper.registerModule(timeModule); + + //3. 构建Jackson2JsonRedisSerializer + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + + //4. 设置好对JDK8日期的支持 + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + + //5. 返回设置好的Jackson2JsonRedisSerializer + return jackson2JsonRedisSerializer; + } + + +} diff --git a/beacon-cache/src/main/resources/bootstrap.yml b/beacon-cache/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..4fa7f69 --- /dev/null +++ b/beacon-cache/src/main/resources/bootstrap.yml @@ -0,0 +1,17 @@ +# 服务名称 +spring: + application: + name: beacon-cache + # 多环境 + profiles: + active: dev + # nacos注册中心地址 + cloud: + nacos: + discovery: + server-addr: 114.116.226.76:8848 + # nacos配置中心地址: + config: + server-addr: 114.116.226.76:8848 + file-extension: yml + # beacon-cache-dev.yml diff --git a/beacon-common/pom.xml b/beacon-common/pom.xml new file mode 100644 index 0000000..72bc9cd --- /dev/null +++ b/beacon-common/pom.xml @@ -0,0 +1,21 @@ + + + + beacon-cloud + com.mashibing + 1.0-SNAPSHOT + + 4.0.0 + + beacon-common + + + + org.projectlombok + lombok + + + + \ No newline at end of file diff --git a/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java new file mode 100644 index 0000000..1c005a5 --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java @@ -0,0 +1,98 @@ +package com.mashibing.common.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * 在接口模块-策略模块-短信网关模块需要做校验和封装的POJO类对象 + * + * @author zjw + * @description + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class StandardSubmit { + + /** + * 针对当前短信的唯一标识,雪花算法 + */ + private Long sequenceId; + + /** + * 客户端ID,基于apikey查询缓存模块得到客户的ID + */ + private Long clientId; + + /** + * 客户端的ip白名单,查询缓存 + */ + private String ip; + + /** + * 客户业务内的uid,客户请求传递的 + */ + private String uid; + + /** + * 目标手机号,客户请求传递的 + */ + private String mobile; + + /** + * 短信内容的签名,客户请求传递的,只需要在短信内容中基于【】获取出来 + */ + private String sign; + + /** + * 短信内容,客户请求传递的 + */ + private String text; + + /** + * 短信的发送时间,当前系统时间 + */ + private LocalDateTime sendTime; + + /** + * 当前短信的费用,计算短信内容的文字,70个字一条,超过部分,67个字一条 + */ + private Long fee; + + /** + * 目标手机号的运营商(策略模块) + */ + private Integer operatorId; + + + /** + * 目标手机号的归属地区号 0451 0455 (策略模块) + */ + private Integer areaCode; + + /** + * 目标手机号的归属地 哈尔滨, 绥化~ (策略模块) + */ + private String area; + + /** + * 通道下发的源号码 106934985673485645 (策略模块) + */ + private String srcNumber; + + /** + * 通道的id信息 (策略模块) + */ + private Long channelId; + + /** + * 短信的发送状态, 0-等待/发送ing,1-成功,2-失败 ,默认情况就是0 + */ + private int reportState; + + // 后续再做封装~~~~ + +} diff --git a/pom.xml b/pom.xml index 720d28c..341c42d 100644 --- a/pom.xml +++ b/pom.xml @@ -5,13 +5,16 @@ 4.0.0 beacon-api + beacon-common + beacon-cache org.springframework.boot spring-boot-starter-parent 2.3.12.RELEASE - + + com.mashibing beacon-cloud 1.0-SNAPSHOT