实现黑名单校验功能+实现携号转网检验功能

main
heqijun 3 months ago
parent 6f0de2a319
commit f3c92a0c0f

@ -41,4 +41,9 @@ public class CacheConstant {
@Description("黑名单前缀")
public static final String BLACK = "black:";
@Description("冒号")
public static final String COLON = ":";
@Description("携号转网前缀")
public static final String TRANSFER = "transfer:";
}

@ -21,11 +21,13 @@ public enum ExceptionEnums {
SNOWFLAKE_OUT_OF_RANGE(-11, "机器id超过最大范围!"),
SNOWFLAKE_TIME_BACK(-12, "雪花算法出现时间回拨!!!"),
HAVE_DIRTY_WORD(-13, "短信中包含敏感词信息!!"),
BLACK_GLOBAL(-14, "手机号是全局黑名单!!"),
BLACK_CLIENT(-15, "手机号是客户黑名单!!"),
;
private int code;
private final int code;
private String msg;
private final String msg;
ExceptionEnums(int code, String msg) {
this.code = code;

@ -0,0 +1,25 @@
package com.mashibing.common.enums;
/**
* @author heqijun
* @ClassName: OperatorEnums
* @Description: id
* @date 2025/6/10 18:25
*/
public enum OperatorEnums {
MOBILE(1, "移动"),
UNICOM(2, "联通"),
TELECOM(3, "电信"),
;
public final int operatorId;
public final String operatorName;
OperatorEnums(int operatorId, String operatorName) {
this.operatorId = operatorId;
this.operatorName = operatorName;
}
}

@ -80,4 +80,7 @@ public class StandardSubmit implements Serializable {
@Description("state短信类型 0-验证码短信 1-通知类短信 2-营销类短信")
private Integer state;
@Description("是否携号转网")
private Boolean isTransfer;
}

@ -14,6 +14,6 @@ public interface StrategyFilter {
/**
*
*/
void strategy(StandardSubmit standardSubmit);
void strategy(StandardSubmit submit);
}

@ -29,8 +29,8 @@ public class StrategyFilterContext {
private final String CLIENT_FILTERS = "clientFilters";
public void strategy(StandardSubmit standardSubmit) {
String s = cacheClient.hgetString(CacheConstant.CLIENT_BUSINESS + standardSubmit.getApikey(), CLIENT_FILTERS);
public void strategy(StandardSubmit submit) {
String s = cacheClient.hgetString(CacheConstant.CLIENT_BUSINESS + submit.getApikey(), CLIENT_FILTERS);
if (StringUtils.isBlank(s)) {
log.info("【策略模块-策略为空】没有校验。。。");
return;
@ -39,7 +39,7 @@ public class StrategyFilterContext {
for (String strategyFilter : strategyFilterArr) {
StrategyFilter check = strategyFilters.get(strategyFilter);
if (check != null) {
check.strategy(standardSubmit);
check.strategy(submit);
}
}
}

@ -0,0 +1,49 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.exception.StrategyException;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import com.mashibing.strategy.utils.StrategyCheckFailedUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: BlackClientStrategyFilter
* @Description: TODO()
* @date 2025/6/10 17:29
*/
@Slf4j
@Service(value = "blackClient")
public class BlackClientStrategyFilter implements StrategyFilter {
@Autowired
CacheClient cacheClient;
@Autowired
StrategyCheckFailedUtil strategyCheckFailedUtil;
private static final String STRATEGY_NAME = "客户黑名单";
private static final String IN_BLACK = "1";
@Override
public void strategy(StandardSubmit submit) {
log.info("【策略模块-客户黑名单校验】开始=====================================");
String mobile = submit.getMobile();
Long clientId = submit.getClientId();
String value = cacheClient.get(CacheConstant.BLACK + clientId + CacheConstant.COLON + mobile);
if (IN_BLACK.equals(value)) {
log.info("【策略模块-客户黑名单校验】当前手机号:{}是客户黑名单!", mobile);
strategyCheckFailedUtil.smsSendLog(submit, STRATEGY_NAME);
strategyCheckFailedUtil.smsPushReport(submit, STRATEGY_NAME);
throw new StrategyException(ExceptionEnums.BLACK_CLIENT);
}
log.info("【策略模块-客户黑名单校验】当前手机号:{}客户黑名单校验通过!!!", mobile);
}
}

@ -0,0 +1,49 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.exception.StrategyException;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import com.mashibing.strategy.utils.StrategyCheckFailedUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: BlackStrategyFilter
* @Description:
* @date 2025/6/7 20:26
*/
@Slf4j
@Service(value = "blackGlobal")
public class BlackGlobalStrategyFilter implements StrategyFilter {
@Autowired
CacheClient cacheClient;
@Autowired
StrategyCheckFailedUtil strategyCheckFailedUtil;
private static final String STRATEGY_NAME = "全局黑名单";
private static final String IN_BLACK = "1";
@Override
public void strategy(StandardSubmit submit) {
log.info("【策略模块-全局黑名单校验】开始=====================================");
String mobile = submit.getMobile();
String value = cacheClient.get(CacheConstant.BLACK + mobile);
if (IN_BLACK.equals(value)) {
log.info("【策略模块-全局黑名单校验】当前手机号:{}是全局黑名单!", mobile);
strategyCheckFailedUtil.smsSendLog(submit, STRATEGY_NAME);
strategyCheckFailedUtil.smsPushReport(submit, STRATEGY_NAME);
throw new StrategyException(ExceptionEnums.BLACK_GLOBAL);
}
log.info("【策略模块-全局黑名单校验】当前手机号:{}全局黑名单校验通过!!!", mobile);
}
}

@ -1,23 +0,0 @@
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,28 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: LimitMinuteStrategyFilter
* @Description:
* @date 2025/6/10 20:41
*/
@Slf4j
@Service(value = "limitMinute")
public class LimitMinuteStrategyFilter implements StrategyFilter {
@Autowired
CacheClient cacheClient;
@Override
public void strategy(StandardSubmit submit) {
}
}

@ -17,7 +17,7 @@ import org.springframework.stereotype.Service;
public class RouteStrategyFilter implements StrategyFilter {
@Override
public void strategy(StandardSubmit standardSubmit) {
public void strategy(StandardSubmit submit) {
log.info("【策略模块-路由校验】。。。");
}
}

@ -0,0 +1,39 @@
package com.mashibing.strategy.service.strategyfilter.impl;
import com.mashibing.common.constant.CacheConstant;
import com.mashibing.common.pojo.StandardSubmit;
import com.mashibing.strategy.feignclient.CacheClient;
import com.mashibing.strategy.service.strategyfilter.StrategyFilter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author heqijun
* @ClassName: TransferStrategyFilter
* @Description:
* @date 2025/6/10 18:36
*/
@Slf4j
@Service(value = "transfer")
public class TransferStrategyFilter implements StrategyFilter {
@Autowired
CacheClient cacheClient;
@Override
public void strategy(StandardSubmit submit) {
log.info("【策略模块-携号转网判断】开始=====================================");
String mobile = submit.getMobile();
String value = cacheClient.get(CacheConstant.TRANSFER + mobile);
if (!StringUtils.isBlank(value)) {
submit.setOperatorId(Integer.valueOf(value));
submit.setIsTransfer(Boolean.TRUE);
log.info("【策略模块-携号转网判断】携号转网!!!手机号:{}", mobile);
}
log.info("【策略模块-携号转网判断】结束=====================================");
}
}

@ -0,0 +1,157 @@
package com.mashibing.test.entity;
public class MobileTransfer {
private long id;
private String transferNumber;
private String areaCode;
private long initIsp;
private long nowIsp;
private long isTransfer;
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 getTransferNumber() {
return transferNumber;
}
public void setTransferNumber(String transferNumber) {
this.transferNumber = transferNumber;
}
public String getAreaCode() {
return areaCode;
}
public void setAreaCode(String areaCode) {
this.areaCode = areaCode;
}
public long getInitIsp() {
return initIsp;
}
public void setInitIsp(long initIsp) {
this.initIsp = initIsp;
}
public long getNowIsp() {
return nowIsp;
}
public void setNowIsp(long nowIsp) {
this.nowIsp = nowIsp;
}
public long getIsTransfer() {
return isTransfer;
}
public void setIsTransfer(long isTransfer) {
this.isTransfer = isTransfer;
}
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;
}
}

@ -0,0 +1,18 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileTransfer;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @author heqijun
* @ClassName: MobileTransferMapper
* @Description: TODO()
* @date 2025/6/10 18:14
*/
public interface MobileTransferMapper {
@Select("select transfer_number,now_isp from mobile_transfer where is_transfer = 1 and is_delete = 0")
List<MobileTransfer> findAll1();
}

@ -0,0 +1,33 @@
package com.mashibing.test.mapper;
import com.mashibing.test.entity.MobileTransfer;
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.List;
import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@RunWith(SpringRunner.class)
class MobileTransferMapperTest {
@Autowired
CacheClient cacheClient;
@Autowired
MobileTransferMapper mapper;
@Test
void findAll1() {
List<MobileTransfer> mobileTransfers = mapper.findAll1();
for (MobileTransfer mobileTransfer : mobileTransfers) {
cacheClient.set("transfer:" + mobileTransfer.getTransferNumber(), String.valueOf(mobileTransfer.getNowIsp()));
}
}
}
Loading…
Cancel
Save