初始化项目

This commit is contained in:
2026-04-21 16:12:04 +08:00
parent 4541af2c63
commit f9d96473da
443 changed files with 36365 additions and 19 deletions

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
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>org.xujun</groupId>
<artifactId>xtools-app-sys</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>xtools-app-sys-risk</artifactId>
<!-- 依赖 -->
<dependencies>
<!-- xtools begin -->
<!-- xtools-boot-cache-redis -->
<dependency>
<groupId>org.xujun</groupId>
<artifactId>xtools-boot-cache-redis</artifactId>
</dependency>
<!-- xtools end -->
<!-- 项目模块 begin -->
<dependency>
<groupId>org.xujun</groupId>
<artifactId>xtools-app-common-cache</artifactId>
</dependency>
<dependency>
<groupId>org.xujun</groupId>
<artifactId>xtools-app-sys-api</artifactId>
</dependency>
<!-- 项目模块 end -->
</dependencies>
</project>

View File

@@ -0,0 +1,86 @@
package xtools.app.sys.risk;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import xtools.app.sys.api.SysRiskApi;
import xtools.app.sys.enums.SysRiskType;
import xtools.app.sys.model.dto.resp.SysRiskResp;
import xtools.app.sys.risk.utils.IpRiskUtils;
import xtools.base.config.BaseParams;
import xtools.boot.cache.redis.base.RedisService;
import xtools.core.CollectionUtils;
import java.util.List;
/**
* <p>Title : IpRisk</p>
* <p>Description : IpRisk</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : Windows11</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/4/6 17:22
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class IpRisk implements BaseParams {
private final SysRiskApi sysRiskApi;
@Resource
private RedisService redisService;
/**
* 初始化
*/
public void init() {
List<SysRiskResp> dataList = sysRiskApi.getByType(SysRiskType.IP).data();
if (CollectionUtils.isEmpty(dataList)) {
log.info("无IP风控数据");
return;
}
for (SysRiskResp item : dataList) {
IpRiskUtils.addAll(item.getSysType(), item.getData());
log.info("初始化[{}]IP风控成功", item.getSysType());
}
}
/**
* 添加IP风控
*
* @param sysType 系统类型
* @param ip IP
*/
public void add(String sysType, String ip) {
redisService.hashPut(IpRiskUtils.getKey(sysType), ip, CP_NUM0);
sysRiskApi.addIp(sysType, ip);
}
/**
* 删除IP风控
*
* @param sysType 系统类型
* @param ip IP
*/
public void remove(String sysType, String ip) {
redisService.hashDelete(IpRiskUtils.getKey(sysType), ip);
sysRiskApi.removeIp(sysType, ip);
}
/**
* 判断IP是否风控
*
* @param sysType 系统类型
* @param ip IP
* @return 是否风控
*/
public boolean risk(String sysType, String ip) {
return redisService.hashExists(IpRiskUtils.getKey(sysType), ip);
}
}

View File

@@ -0,0 +1,77 @@
package xtools.app.sys.risk;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import xtools.app.sys.api.SysRiskApi;
import xtools.app.sys.enums.SysRiskType;
import xtools.app.sys.model.dto.resp.SysRiskResp;
import xtools.app.sys.risk.utils.UriRiskUtils;
import xtools.base.config.BaseParams;
import xtools.boot.cache.redis.base.RedisService;
import xtools.core.CollectionUtils;
import xtools.core.StringUtils;
import java.util.List;
/**
* <p>Title : UriRisk</p>
* <p>Description : UriRisk</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : Windows11</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/4/6 17:22
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class UriRisk implements BaseParams {
private final SysRiskApi sysRiskApi;
@Resource
private RedisService redisService;
/**
* 初始化
*/
public void init() {
List<SysRiskResp> dataList = sysRiskApi.getByType(SysRiskType.URI).data();
if (CollectionUtils.isEmpty(dataList)) {
log.info("无URI风控数据");
return;
}
for (SysRiskResp item : dataList) {
UriRiskUtils.save(item.getSysType(), item.getData());
log.info("初始化[{}]URI风控成功", item.getSysType());
}
}
/**
* 判断URI是否风控
*
* @param sysType 系统类型
* @param uri uri
* @return 是否风控
*
*/
public boolean risk(String sysType, String uri) {
String cache = redisService.get(UriRiskUtils.getKey(sysType), String.class);
if (StringUtils.isBlank(cache)) {
return false;
}
String[] arr = cache.split(CP_COMMA);
// 匹配uri
for (String str : arr) {
if (uri.contains(str)) {
return true;
}
}
return false;
}
}

View File

@@ -0,0 +1,32 @@
package xtools.app.sys.risk.enums;
import xtools.app.sys.enums.SysRiskType;
import xtools.boot.api.enums.BaseEnum;
/**
* <p>Title : SysRiskBaseEnum</p>
* <p>Description : SysRiskBaseEnum</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/4/8 09:37
*/
public interface SysRiskBaseEnum extends BaseEnum {
/**
* 风控类型
*
* @return 风控类型
*/
SysRiskType type();
/**
* 系统类型
*
* @return 系统类型
*/
String sysType();
}

View File

@@ -0,0 +1,106 @@
package xtools.app.sys.risk.enums;
import xtools.app.sys.enums.SysRiskType;
import xtools.boot.api.enums.BaseEnum;
/**
* <p>Title : SysRiskEnum</p>
* <p>Description : SysRiskEnum</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/2/4 16:27
*/
public enum SysRiskEnum implements SysRiskBaseEnum {
// 系统IP风控
IP(1, "系统IP风控", SysRiskType.IP, "sys-ip");
/**
* 编码
*/
private final int code;
/**
* 说明
*/
private final String desc;
/**
* 风控类型
*/
private final SysRiskType type;
/**
* 系统类型
*/
private final String sysType;
/**
* 构造函数
*
* @param code 编码
* @param desc 说明
* @param type 风控类型
* @param sysType 系统类型
*/
SysRiskEnum(int code, String desc, SysRiskType type, String sysType) {
this.code = code;
this.desc = desc;
this.type = type;
this.sysType = sysType;
}
/**
* 获取所有枚举
*
* @return 所有枚举
*/
@Override
public BaseEnum[] all() {
return values();
}
/**
* 获取枚举编码
*
* @return 枚举编码
*/
@Override
public int code() {
return code;
}
/**
* 获取枚举说明
*
* @return 枚举说明
*/
@Override
public String desc() {
return desc;
}
/**
* 获取风控类型
*
* @return 风控类型
*/
@Override
public SysRiskType type() {
return type;
}
/**
* 获取系统类型
*
* @return 系统类型
*/
@Override
public String sysType() {
return sysType;
}
}

View File

@@ -0,0 +1,61 @@
package xtools.app.sys.risk.utils;
import xtools.app.common.cache.enums.AppCache;
import xtools.base.config.BaseParams;
import xtools.boot.cache.redis.base.RedisService;
import xtools.boot.cache.redis.utils.RedisUtils;
import xtools.core.ArrUtils;
import xtools.core.StringUtils;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>Title : IpRiskUtils</p>
* <p>Description : IpRiskUtils</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/4/8 16:29
*/
public class IpRiskUtils implements BaseParams {
/**
* IP风控缓存
*/
private final static AppCache IP_RISK = AppCache.RISK_IP;
/**
* 获取缓存kEY
*
* @param sysType 系统类型
* @return 缓存kEY
*/
public static String getKey(String sysType) {
return IP_RISK.key() + sysType;
}
/**
* 添加IP风控
*
* @param sysType 系统类型
* @param data IP
*/
public static void addAll(String sysType, String data) {
RedisService redisService = RedisUtils.get();
String key = getKey(sysType);
if (StringUtils.isBlank(data)) {
redisService.del(key);
} else {
List<String> ipList = ArrUtils.toStringList(data);
Map<Object, String> map = ipList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toMap(ip -> ip, ip -> String.valueOf(CP_NUM0)));
redisService.del(key);
redisService.hashPutAll(key, map);
}
}
}

View File

@@ -0,0 +1,53 @@
package xtools.app.sys.risk.utils;
import xtools.app.common.cache.enums.AppCache;
import xtools.base.config.BaseParams;
import xtools.boot.cache.redis.base.RedisService;
import xtools.boot.cache.redis.utils.RedisUtils;
import xtools.core.StringUtils;
/**
* <p>Title : UriRiskUtils</p>
* <p>Description : UriRiskUtils</p>
* <p>DevelopTools : Idea_x64_v2026.1</p>
* <p>DevelopSystem : macOS Sequoia 15.7.5</p>
* <p>Company : org.xujun</p>
*
* @author : XuJun
* @version : 1.0.0
* @date : 2026/4/8 16:32
*/
public class UriRiskUtils implements BaseParams {
/**
* URI风控缓存
*/
private final static AppCache URI_RISK = AppCache.RISK_URI;
/**
* 获取缓存kEY
*
* @param sysType 系统类型
* @return 缓存kEY
*/
public static String getKey(String sysType) {
return URI_RISK.key() + sysType;
}
/**
* 保存Uri风控
*
* @param sysType 系统类型
* @param data 风控数据
*/
public static void save(String sysType, String data) {
String key = getKey(sysType);
RedisService redisService = RedisUtils.get();
if (StringUtils.isBlank(data)) {
redisService.del(key);
} else {
redisService.set(key, data);
}
}
}