Compare commits

..

5 Commits

@ -1,42 +0,0 @@
package com.mashibing.api.feignClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
@RequestMapping("cache")
public interface CacheClient {
@GetMapping("get/{key}")
String get(@PathVariable String key);
@GetMapping("set/{key}/{value}")
void set(@PathVariable String key, @PathVariable String value);
@GetMapping("hget/{key}")
Map hget(@PathVariable String key);
@GetMapping("/hget/{key}/{field}")
Object hget(@PathVariable(value = "key") String key, @PathVariable(value = "field") String field);
@GetMapping("/hgetString/{key}/{field}")
String hgetString(@PathVariable(value = "key") String key, @PathVariable(value = "field") String field);
@PostMapping("hset/{key}")
void hset(@PathVariable String key, @RequestBody Map hash);
@PostMapping("/sadd/{key}")
void sadd(@PathVariable(value = "key") String key, @RequestBody Map<String, Object>... maps);
@PostMapping("/smember/{key}")
Set<Map> smember(@PathVariable(value = "key") String key);
}

@ -0,0 +1,20 @@
package com.mashibing.api.feignclient;
import com.mashibing.common.clients.BeaconCacheClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
import java.util.Set;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
public interface CacheClient extends BeaconCacheClient {
}

@ -2,7 +2,7 @@ package com.mashibing.api.service.sendCheck.impl;
import com.alibaba.nacos.common.utils.MapUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.api.feignClient.CacheClient;
import com.mashibing.api.feignclient.CacheClient;
import com.mashibing.api.service.sendCheck.SendCheckService;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.entity.ClientBusiness;

@ -1,7 +1,6 @@
package com.mashibing.api.service.sendCheck.impl;
import com.mashibing.api.feignClient.CacheClient;
import com.mashibing.api.pojo.SingleSendRequest;
import com.mashibing.api.feignclient.CacheClient;
import com.mashibing.api.service.sendCheck.SendCheckService;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.constant.SMSConstant;

@ -1,6 +1,6 @@
package com.mashibing.api.service.sendCheck.impl;
import com.mashibing.api.feignClient.CacheClient;
import com.mashibing.api.feignclient.CacheClient;
import com.mashibing.api.service.sendCheck.SendCheckService;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.enums.ExceptionEnums;

@ -1,7 +1,6 @@
package com.mashibing.api.service.sendCheck.impl;
import com.mashibing.api.feignClient.CacheClient;
import com.mashibing.api.pojo.SingleSendRequest;
import com.mashibing.api.feignclient.CacheClient;
import com.mashibing.api.service.sendCheck.SendCheckService;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.constant.SMSConstant;

@ -1,7 +1,6 @@
package com.mashibing.api.service.sendCheck.impl;
import com.mashibing.api.feignClient.CacheClient;
import com.mashibing.api.pojo.SingleSendRequest;
import com.mashibing.api.feignclient.CacheClient;
import com.mashibing.api.service.sendCheck.SendCheckService;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.constant.SMSConstant;

@ -70,6 +70,12 @@ public class CacheController {
redisClient.sAdd(key, value);
}
@PostMapping("/saddstr/{key}")
public void saddStr(@PathVariable(value = "key") String key, @RequestBody String... value) {
log.info("【缓存模块】saddStr: key = {}\nvalue = {}", key, value);
redisClient.sAdd(key, value);
}
@PostMapping("/smember/{key}")
public Set smember(@PathVariable(value = "key") String key) {
log.info("【缓存模块】smember: key = {}", key);
@ -78,4 +84,22 @@ public class CacheController {
return value;
}
/**
* String
*
* @param map keykeyvaluevalue
*/
@PostMapping("/pipeline/string")
public void pipelineString(@RequestBody Map<String, String> map) {
log.info("【缓存模块】pipelineString: 数量 = {}", map.size());
long start = System.currentTimeMillis();
redisClient.pipelined(consumer -> {
for (Map.Entry<String, String> entry : map.entrySet()) {
consumer.opsForValue().set(entry.getKey(), entry.getValue());
}
});
long end = System.currentTimeMillis();
log.info("【缓存模块】pipelineString: 耗时 = {}", end - start);
}
}

@ -0,0 +1,56 @@
package com.mashibing.common.clients;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
import java.util.Set;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description:
* @date 2025/6/8 16:08
*/
public interface BeaconCacheClient {
@GetMapping("cache/get/{key}")
String get(@PathVariable String key);
@GetMapping("cache/set/{key}/{value}")
void set(@PathVariable String key, @PathVariable String value);
@GetMapping("cache/hget/{key}")
Map hget(@PathVariable String key);
@GetMapping("cache/hget/{key}/{field}")
Object hget(@PathVariable(value = "key") String key, @PathVariable(value = "field") String field);
@GetMapping("cache/hgetString/{key}/{field}")
String hgetString(@PathVariable(value = "key") String key, @PathVariable(value = "field") String field);
@PostMapping("cache/hset/{key}")
void hset(@PathVariable String key, @RequestBody Map hash);
@PostMapping("cache/sadd/{key}")
void sadd(@PathVariable(value = "key") String key, @RequestBody Map<String, Object>... value);
@PostMapping("cache/saddstr/{key}")
void saddStr(@PathVariable(value = "key") String key, @RequestBody String... value);
@PostMapping("cache/smember/{key}")
Set smember(@PathVariable(value = "key") String key);
/**
* String
*
* @param map keykeyvaluevalue
*/
@PostMapping("cache/pipeline/string")
void pipelineString(@RequestBody Map<String, String> map);
}

@ -25,4 +25,10 @@ public class CacheConstant {
@Description("客户信息ip白名单ipAddress")
public static final String CLIENT_BUSINESS_IPADDRESS = "ipAddress";
@Description("号段前缀")
public static final String PHASE = "phase:";
@Description("敏感词key")
public static final String DIRTY_WORD = "dirty_word";
}

@ -12,4 +12,9 @@ public interface RabbitMQConstant {
*
*/
String SMS_PRE_SEND = "sms_pre_send_topic";
/**
*
*/
String MOBILE_AREA_OPERATOR = "mobile_area_operator_topic";
}

@ -0,0 +1,58 @@
<?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.mashibing</groupId>
<artifactId>beacon-cloud</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>beacon-strategy</artifactId>
<dependencies>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- AMQP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- common公共组件 -->
<dependency>
<groupId>com.mashibing</groupId>
<artifactId>beacon-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,22 @@
package com.mashibing.strategy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author heqijun
* @ClassName: StragyApplication
* @Description: TODO()
* @date 2025/6/7 19:03
*/
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class StragyApplication {
public static void main(String[] args) {
SpringApplication.run(StragyApplication.class, args);
}
}

@ -0,0 +1,26 @@
package com.mashibing.strategy.config;
import com.mashibing.common.constant.RabbitMQConstant;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author heqijun
* @ClassName: RabbitMQConfig
* @Description: RabbitMQConfig
* @date 2025/6/8 17:46
*/
@Configuration
public class RabbitMQConfig {
/**
*
*/
@Bean
public Queue preSendQueue() {
return QueueBuilder.durable(RabbitMQConstant.MOBILE_AREA_OPERATOR).build();
}
}

@ -0,0 +1,43 @@
package com.mashibing.strategy.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author heqijun
* @ClassName: RabbitMQTemplateConfig
* @Description: RabbitMQTemplateconfirmreturn
* @date 2025/6/8 17:52
*/
@Configuration
@Slf4j
public class RabbitMQTemplateConfig {
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
//设置connectionFactory
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
//配置confirm机制回调
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
//消息妹有发送到交换机
if (!ack) {
log.error("【策略模块-发送消息】消息没有发送到交换机。。。" +
"\n correlationData={},ack={},cause:{} ", correlationData, ack, cause);
}
});
//配置return机制回调
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> log.error("【策略模块-发送消息】消息没有路由到指定的队列。。。" +
"\nmessage={},exchange={},routingKey={}", new String(message.getBody()), exchange, routingKey));
return rabbitTemplate;
}
}

@ -0,0 +1,21 @@
package com.mashibing.strategy.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @author heqijun
* @ClassName: RestTemplateConfig
* @Description: TODO()
* @date 2025/6/8 16:33
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

@ -0,0 +1,23 @@
package com.mashibing.strategy.feignclient;
import com.mashibing.common.clients.BeaconCacheClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
import java.util.Set;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/7 20:16
*/
@FeignClient("beacon-cache")
public interface CacheClient extends BeaconCacheClient {
}

@ -0,0 +1,42 @@
package com.mashibing.strategy.mq;
import com.mashibing.common.constant.RabbitMQConstant;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.service.strategyfilter.StrategyFilterContext;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
/**
* @author heqijun
* @ClassName: PreSendListener
* @Description: TODO()
* @date 2025/6/7 19:36
*/
@Slf4j
@Component
public class PreSendListener {
@Autowired
StrategyFilterContext strategyFilterContext;
@RabbitListener(queues = {RabbitMQConstant.SMS_PRE_SEND})
public void listen(StandardSubmit standardSubmit, Message message, Channel channel) throws Exception {
log.info("【策略模块-接收消息】接收到接口模块发送的消息:{}", standardSubmit);
try {
strategyFilterContext.strategy(standardSubmit);
log.info("【策略模块-接收消息】消息消费完毕手动ack");
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (IOException e) {
log.info("【策略模块-接收消息】消息消费失败!!!!!!!");
e.printStackTrace();
}
}
}

@ -0,0 +1,31 @@
package com.mashibing.strategy.pojo;
import com.mashibing.common.annotation.Description;
import lombok.Data;
/**
* @author heqijun
* @ClassName: PhasePOJO
* @Description: TODO()
* @date 2025/6/8 16:39
*/
@Data
public class PhasePojo {
@Description("目标手机号的运营商id")
private Integer operatorId;
@Description("目标手机号的运营商na")
private String operatorNa;
@Description("目标手机号的归属地 哈尔滨, 绥化~")
private String area;
public PhasePojo unknown() {
this.operatorId = 0;
this.operatorNa = "未知";
this.area = "未知 未知";
return this;
}
}

@ -0,0 +1,19 @@
package com.mashibing.strategy.service.strategyfilter;
import com.mashibing.common.pojo.StandardSubmit;
/**
* @author heqijun
* @ClassName: StrategyFilter
* @Description:
* @date 2025/6/7 20:24
*/
public interface StrategyFilter {
/**
*
*/
void strategy(StandardSubmit standardSubmit);
}

@ -0,0 +1,47 @@
package com.mashibing.strategy.service.strategyfilter;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @author heqijun
* @ClassName: StrategyFilterContext
* @Description:
* @date 2025/6/7 20:32
*/
@Slf4j
@Service
public class StrategyFilterContext {
@Autowired
private Map<String, StrategyFilter> strategyFilters;
@Autowired
CacheClient cacheClient;
private final String CLIENT_FILTERS = "clientFilters";
public void strategy(StandardSubmit standardSubmit) {
String s = cacheClient.hgetString(CacheConstant.CLIENT_BUSINESS + standardSubmit.getApikey(), CLIENT_FILTERS);
if (StringUtils.isBlank(s)) {
log.info("【策略模块-策略为空】没有校验。。。");
return;
}
String[] strategyFilterArr = s.split(",");
for (String strategyFilter : strategyFilterArr) {
StrategyFilter check = strategyFilters.get(strategyFilter);
if (check != null) {
check.strategy(standardSubmit);
}
}
}
}

@ -0,0 +1,23 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: BlackStrategyFilter
* @Description:
* @date 2025/6/7 20:26
*/
@Slf4j
@Service(value = "black")
public class BlackStrategyFilter implements StrategyFilter {
@Override
public void strategy(StandardSubmit standardSubmit) {
log.info("【策略模块-黑名单校验】。。。");
}
}

@ -0,0 +1,23 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: DirtyWordStrategyFilter
* @Description:
* @date 2025/6/7 20:26
*/
@Slf4j
@Service(value = "dirtyword")
public class DirtyWordStrategyFilter implements StrategyFilter {
@Override
public void strategy(StandardSubmit standardSubmit) {
log.info("【策略模块-敏感词校验】。。。");
}
}

@ -0,0 +1,61 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.constant.RabbitMQConstant;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.pojo.PhasePojo;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import com.mashibing.strategy.utils.PhaseUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* @author heqijun
* @ClassName: PhaseStrategyFilter
* @Description:
* @date 2025/6/7 20:26
*/
@Slf4j
@Service(value = "phase")
public class PhaseStrategyFilter implements StrategyFilter {
@Autowired
private CacheClient cacheClient;
@Autowired
private RestTemplate restTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
@Override
public void strategy(StandardSubmit submit) {
log.info("【策略模块-号段补全】开始===============================");
String mobile7 = submit.getMobile().substring(0, 7);
//缓存中查询号段。如果查询不到,则在三方接口中查询
String s = cacheClient.get(CacheConstant.PHASE + mobile7);
PhasePojo phasePojo = new PhasePojo();
if (StringUtils.isBlank(s)) {
log.info("【策略模块-号段补全】缓存中未查询到信息,需要三方查询。。。");
phasePojo = PhaseUtil.phaseMobile360(restTemplate, mobile7);
log.info("【策略模块-号段补全】三方查询结果:{}", phasePojo);
//三方查到之后,发送消息到后台管理模块
rabbitTemplate.convertAndSend(RabbitMQConstant.MOBILE_AREA_OPERATOR, submit.getMobile());
} else {
log.info("【策略模块-号段补全】缓存中查询到信息:{}", s);
String[] split = s.split(",");
phasePojo.setArea(split[0]);
phasePojo.setOperatorNa(split[1]);
}
//查询到号段之后补全standardSubmit中运营商信息
submit.setArea(phasePojo.getArea());
submit.setOperatorId(PhaseUtil.getOperatorId(phasePojo.getOperatorNa()));
log.info("【策略模块-号段补全】结束===============================");
}
}

@ -0,0 +1,23 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: RouteStrategyFilter
* @Description:
* @date 2025/6/7 20:26
*/
@Slf4j
@Service(value = "route")
public class RouteStrategyFilter implements StrategyFilter {
@Override
public void strategy(StandardSubmit standardSubmit) {
log.info("【策略模块-路由校验】。。。");
}
}

@ -0,0 +1,101 @@
package com.mashibing.strategy.utils;
import com.alibaba.nacos.common.utils.MapUtils;
import com.alibaba.nacos.common.utils.StringUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.common.annotation.Description;
import com.mashibing.strategy.pojo.PhasePojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
/**
* @author heqijun
* @ClassName: PhaseUtil
* @Description:
* @date 2025/6/8 16:24
*/
@Slf4j
public class PhaseUtil {
private final static String URL1 = "https://cx.shouji.360.cn/phonearea.php?number=";
public static PhasePojo phaseMobile360(RestTemplate restTemplate, String mobile7) {
Map map;
//调360的接口获取结果
//坑爹接口返回的居然是text不是json
String s = restTemplate.getForObject(URL1 + mobile7, String.class);
//String转map
ObjectMapper objectMapper = new ObjectMapper();
try {
map = objectMapper.readValue(s, Map.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
if (MapUtils.isEmpty(map)) {
return new PhasePojo().unknown();
}
Phase360 phase360 = objectMapper.convertValue(map.get("data"), Phase360.class);
if (phase360 == null||StringUtils.isBlank(phase360.getProvince())) {
return new PhasePojo().unknown();
}
// 处理直辖市
if (StringUtils.isBlank(phase360.getCity())) {
phase360.setCity(phase360.getProvince());
}
PhasePojo phasePojo = new PhasePojo();
phasePojo.setArea(phase360.getProvince() + " " + phase360.getCity());
phasePojo.setOperatorNa(phase360.getSp());
return phasePojo;
}
public static Integer getOperatorId(String operatorNa) {
if ("移动".equals(operatorNa)) {
return 1;
}
if ("联通".equals(operatorNa)) {
return 2;
}
if ("电信".equals(operatorNa)) {
return 3;
}
return 0;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Phase360 {
@Description("运营商id")
private int operatorId;
@Description("运营商名称")
private String sp;
@Description("号码归属地省")
private String province;
@Description("号码归属地市")
private String city;
public Phase360 unknuwn() {
this.operatorId = 0;
this.sp = "未知";
this.province = "未知";
this.city = "未知";
return this;
}
}
}

@ -0,0 +1,17 @@
# 服务名称
spring:
application:
name: beacon-strategy
# 多环境
profiles:
active: dev
# nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 192.168.1.13:8848
# nacos配置中心地址:
config:
server-addr: 192.168.1.13:8848
file-extension: yml
# beacon-strategy-dev.yml

@ -0,0 +1,165 @@
package com.mashibing.test.entity;
public class MobileArea {
private long id;
private String mobileNumber;
private String mobileArea;
private String mobileType;
private String areaCode;
private String postCode;
private String provinceCode;
private java.sql.Timestamp created;
private long createId;
private java.sql.Timestamp updated;
private long updateId;
private long isDelete;
private String extend1;
private String extend2;
private String extend3;
private String extend4;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMobileNumber() {
return mobileNumber;
}
public void setMobileNumber(String mobileNumber) {
this.mobileNumber = mobileNumber;
}
public String getMobileArea() {
return mobileArea;
}
public void setMobileArea(String mobileArea) {
this.mobileArea = mobileArea;
}
public String getMobileType() {
return mobileType;
}
public void setMobileType(String mobileType) {
this.mobileType = mobileType;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public String getPostCode() {
return postCode;
}
public void setPostCode(String postCode) {
this.postCode = postCode;
}
public String getProvinceCode() {
return provinceCode;
}
public void setProvinceCode(String provinceCode) {
this.provinceCode = provinceCode;
}
public java.sql.Timestamp getCreated() {
return created;
}
public void setCreated(java.sql.Timestamp created) {
this.created = created;
}
public long getCreateId() {
return createId;
}
public void setCreateId(long createId) {
this.createId = createId;
}
public java.sql.Timestamp getUpdated() {
return updated;
}
public void setUpdated(java.sql.Timestamp updated) {
this.updated = updated;
}
public long getUpdateId() {
return updateId;
}
public void setUpdateId(long updateId) {
this.updateId = updateId;
}
public long getIsDelete() {
return isDelete;
}
public void setIsDelete(long isDelete) {
this.isDelete = isDelete;
}
public String getExtend1() {
return extend1;
}
public void setExtend1(String extend1) {
this.extend1 = extend1;
}
public String getExtend2() {
return extend2;
}
public void setExtend2(String extend2) {
this.extend2 = extend2;
}
public String getExtend3() {
return extend3;
}
public void setExtend3(String extend3) {
this.extend3 = extend3;
}
public String getExtend4() {
return extend4;
}
public void setExtend4(String extend4) {
this.extend4 = extend4;
}
}

@ -1,34 +0,0 @@
package com.mashibing.test.feignClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
@RequestMapping("cache")
public interface BeaconCacheClient {
@GetMapping("get/{key}")
public String get(@PathVariable String key);
@GetMapping("set/{key}/{value}")
public void set(@PathVariable String key, @PathVariable String value);
@GetMapping("hget/{key}")
public Map hget(@PathVariable String key);
@PostMapping("hset/{key}")
public void hset(@PathVariable String key, @RequestBody Map hash);
@PostMapping("/sadd/{key}")
public void sadd(@PathVariable(value = "key") String key, @RequestBody Map<String, Object>... maps);
}

@ -0,0 +1,19 @@
package com.mashibing.test.feignClient;
import com.mashibing.common.clients.BeaconCacheClient;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author heqijun
* @ClassName: BeaconCacheClient
* @Description: openFeignClient
* @date 2025/6/5 20:13
*/
@FeignClient("beacon-cache")
public interface CacheClient extends BeaconCacheClient {
}

@ -0,0 +1,20 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileArea;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author heqijun
* @ClassName: MobileAreaMapper
* @Description: TODO()
* @date 2025/6/8 14:47
*/
public interface MobileAreaMapper {
@Select("select mobile_number,mobile_area,mobile_type from mobile_area ")
List<MobileArea> findAllMobileArea();
}

@ -0,0 +1,19 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileArea;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author heqijun
* @ClassName: MobileAreaMapper
* @Description: TODO()
* @date 2025/6/8 14:47
*/
public interface MobileDirtywordMapper {
@Select("select dirtyword from mobile_dirtyword")
List<String> findAllDirtyword();
}

@ -13,6 +13,13 @@ spring:
url: jdbc:mysql://192.168.1.13:3306/beacon_cloud?characterEncoding=utf-8&useSSL=false
username: root
password: root
feign:
client:
config:
default:
connectTimeout: 5000 # 连接超时时间(毫秒)
readTimeout: 30000 # 读取超时时间(毫秒)
# 端口号
server:
port: 20000

@ -3,7 +3,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientBalance;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -12,14 +12,12 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientBalanceMapperTest {
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Autowired
ClientBalanceMapper clientBalanceMapper;
@ -30,6 +28,6 @@ class ClientBalanceMapperTest {
System.out.println("balance = " + balance);
ObjectMapper objectMapper = new ObjectMapper();
Map map = objectMapper.readValue(objectMapper.writeValueAsString(balance), Map.class);
beaconCacheClient.hset("client_balance:1", map);
cacheClient.hset("client_balance:1", map);
}
}

@ -3,7 +3,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientBusiness;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -20,15 +20,15 @@ class ClientBusinessMapperTest {
private ClientBusinessMapper mapper;
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Test
public void findById() {
ClientBusiness cb = mapper.findById(1L);
cb.setIpAddress("192.168.1.5");
// System.out.println("\"22.220.124.110\".equals(cb.getIpAddress()) = " + "22.220.124.110".equals(cb.getIpAddress()));
cb.setClientFilters("phase," + cb.getClientFilters());
System.out.println(cb);
ObjectMapper mapper = new ObjectMapper();
beaconCacheClient.hset("client_business:" + cb.getApikey(), mapper.convertValue(cb, Map.class));
cacheClient.hset("client_business:" + cb.getApikey(), mapper.convertValue(cb, Map.class));
}
}

@ -2,20 +2,17 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientSign;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientSignMapperTest {
@ -24,7 +21,7 @@ class ClientSignMapperTest {
private ClientSignMapper mapper;
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Test
void findAllByClientId() {
@ -36,6 +33,6 @@ class ClientSignMapperTest {
.map(clientSign -> mapper.convertValue(clientSign, Map.class))
.collect(Collectors.toList());
beaconCacheClient.sadd("client_sign:1", maps.toArray(new Map[]{}));
cacheClient.sadd("client_sign:1", maps.toArray(new Map[]{}));
}
}

@ -2,7 +2,7 @@ package com.mashibing.test.mapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mashibing.test.entity.ClientTemplate;
import com.mashibing.test.feignClient.BeaconCacheClient;
import com.mashibing.test.feignClient.CacheClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@ -13,14 +13,12 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class ClientTemplateMapperTest {
@Autowired
BeaconCacheClient beaconCacheClient;
CacheClient cacheClient;
@Autowired
ClientTemplateMapper clientTemplateMapper;
@ -36,6 +34,6 @@ class ClientTemplateMapperTest {
.stream()
.map(clientTemplate -> mapper.convertValue(clientTemplate, Map.class))
.collect(Collectors.toList());
beaconCacheClient.sadd("client_template:15", maps.toArray(new Map[]{}));
cacheClient.sadd("client_template:15", maps.toArray(new Map[]{}));
}
}

@ -0,0 +1,45 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileArea;
import com.mashibing.test.feignClient.CacheClient;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
class MobileAreaMapperTest {
@Autowired
CacheClient cacheClient;
@Autowired
MobileAreaMapper mapper;
@Test
void findAllMobileArea() {
long startTime = System.currentTimeMillis();
List<MobileArea> allMobileArea = mapper.findAllMobileArea();
long endTime = System.currentTimeMillis();
log.info("【数据库查询耗时】: {} ms", endTime - startTime);
Map<String, String> map = new HashMap<>(allMobileArea.size());
startTime = System.currentTimeMillis();
allMobileArea.forEach(mobileArea -> {
map.put("phase:" + mobileArea.getMobileNumber(),
mobileArea.getMobileArea() + "," + mobileArea.getMobileType());
});
endTime = System.currentTimeMillis();
log.info("【List转Map耗时】: {} ms", endTime - startTime);
startTime = System.currentTimeMillis();
cacheClient.pipelineString(map);
endTime = System.currentTimeMillis();
log.info("【写入Redis耗时】: {} ms", endTime - startTime);
}
}

@ -0,0 +1,34 @@
package com.mashibing.test.mapper;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.test.feignClient.CacheClient;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
class MobileDirtywordMapperTest {
@Autowired
CacheClient cacheClient;
@Autowired
MobileDirtywordMapper mapper;
@Test
void findAllDirtyword() {
List<String> dirtywords = mapper.findAllDirtyword();
cacheClient.saddStr(CacheConstant.DIRTY_WORD, dirtywords.toArray(new String[]{}));
}
}

@ -13,6 +13,7 @@
<module>beacon-common</module>
<module>beacon-cache</module>
<module>beacon-test</module>
<module>beacon-strategy</module>
</modules>

Loading…
Cancel
Save