11111
parent
e982e31572
commit
b64875c107
|
@ -0,0 +1,271 @@
|
||||||
|
package com.muyu.rule.common.utils;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.muyu.common.core.utils.StringUtils;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 敏感数据脱敏工具类
|
||||||
|
*/
|
||||||
|
public class Desensitization {
|
||||||
|
/**
|
||||||
|
* 身份证号脱敏
|
||||||
|
*
|
||||||
|
* @param idCard
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String idCardDesensitization(String idCard) {
|
||||||
|
if (StringUtils.isNotEmpty(idCard)) {
|
||||||
|
// 身份证号脱敏规则一:保留前六后三
|
||||||
|
if (idCard.length() == 15) {
|
||||||
|
idCard = idCard.replaceAll("(\\w{6})\\w*(\\w{3})", "$1******$2");
|
||||||
|
} else if (idCard.length() == 18) {
|
||||||
|
idCard = idCard.replaceAll("(\\w{6})\\w*(\\w{3})", "$1*********$2");
|
||||||
|
}
|
||||||
|
// 身份证号脱敏规则二:保留前三后四
|
||||||
|
// idCard = idCard.replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*");
|
||||||
|
}
|
||||||
|
return idCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 手机号码脱敏
|
||||||
|
* @param mobilePhone
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String mobilePhoneDesensitization(String mobilePhone) {
|
||||||
|
// 手机号码保留前三后四
|
||||||
|
if (StringUtils.isNotEmpty(mobilePhone)) {
|
||||||
|
mobilePhone = mobilePhone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
|
||||||
|
}
|
||||||
|
return mobilePhone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电子邮箱脱敏
|
||||||
|
*
|
||||||
|
* @param email
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String emailDesensitization(String email) {
|
||||||
|
// 电子邮箱隐藏@前面的3个字符
|
||||||
|
if (StringUtils.isEmpty(email)) {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
String encrypt = email.replaceAll("(\\w+)\\w{3}@(\\w+)", "$1***@$2");
|
||||||
|
if (email.equalsIgnoreCase(encrypt)) {
|
||||||
|
encrypt = email.replaceAll("(\\w*)\\w{1}@(\\w+)", "$1*@$2");
|
||||||
|
}
|
||||||
|
return encrypt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 银行账号脱敏
|
||||||
|
*
|
||||||
|
* @param acctNo
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String acctNoDesensitization(String acctNo) {
|
||||||
|
// 银行账号保留前六后四
|
||||||
|
if (StringUtils.isNotEmpty(acctNo)) {
|
||||||
|
String regex = "(\\w{6})(.*)(\\w{4})";
|
||||||
|
Matcher m = Pattern.compile(regex).matcher(acctNo);
|
||||||
|
if (m.find()) {
|
||||||
|
String rep = m.group(2);
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < rep.length(); i++) {
|
||||||
|
sb.append("*");
|
||||||
|
}
|
||||||
|
acctNo = acctNo.replaceAll(rep, sb.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return acctNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 客户名称脱敏
|
||||||
|
*
|
||||||
|
* @param custName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String custNameDesensitization(String custName) {
|
||||||
|
// 规则说明:
|
||||||
|
// 姓名:字符长度小于5位;企业名称:字符长度大于等于5位。
|
||||||
|
// 姓名规则
|
||||||
|
// 规则一:1个字则不脱敏,如"张"-->"张"
|
||||||
|
// 规则二:2个字则脱敏第二个字,如"张三"-->"张*"
|
||||||
|
// 规则三:3个字则脱敏第二个字,如"张三丰"-->"张*丰"
|
||||||
|
// 规则四:4个字则脱敏中间两个字,如"易烊千玺"-->"易**玺"
|
||||||
|
// 企业名称规则:
|
||||||
|
// 从第4位开始隐藏,最多隐藏6位。
|
||||||
|
|
||||||
|
if (StringUtils.isNotEmpty(custName)) {
|
||||||
|
char[] chars = custName.toCharArray();
|
||||||
|
if (chars.length < 5) {// 表示姓名
|
||||||
|
if (chars.length > 1) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
for (int i = 0; i < chars.length - 2; i++) {
|
||||||
|
sb.append("*");
|
||||||
|
}
|
||||||
|
custName = custName.replaceAll(custName.substring(1, chars.length - 1), sb.toString());
|
||||||
|
}
|
||||||
|
} else {// 企业名称
|
||||||
|
int start = 4;
|
||||||
|
// 第一部分
|
||||||
|
String str1 = custName.substring(0, start);
|
||||||
|
// 第二部分
|
||||||
|
String str2 = "";
|
||||||
|
if (chars.length == 5) {
|
||||||
|
str2 = "*";
|
||||||
|
} else if (chars.length == 6) {
|
||||||
|
str2 = "**";
|
||||||
|
} else if (chars.length == 7) {
|
||||||
|
str2 = "***";
|
||||||
|
} else if (chars.length == 8) {
|
||||||
|
str2 = "****";
|
||||||
|
} else if (chars.length == 9) {
|
||||||
|
str2 = "*****";
|
||||||
|
} else {
|
||||||
|
str2 = "******";
|
||||||
|
}
|
||||||
|
// 通过计算得到第三部分需要从第几个字符截取
|
||||||
|
int subIndex = start + str2.length();
|
||||||
|
// 第三部分
|
||||||
|
String str3 = custName.substring(subIndex);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append(str1);
|
||||||
|
sb.append(str2);
|
||||||
|
sb.append(str3);
|
||||||
|
custName = sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return custName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 家庭地址脱敏
|
||||||
|
*
|
||||||
|
* @param address
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String addressDesensitization(String address) {
|
||||||
|
// 规则说明:从第4位开始隐藏,隐藏8位。
|
||||||
|
if (StringUtils.isNotEmpty(address)) {
|
||||||
|
char[] chars = address.toCharArray();
|
||||||
|
if (chars.length > 11) {// 由于需要从第4位开始,隐藏8位,因此数据长度必须大于11位
|
||||||
|
// 获取第一部分内容
|
||||||
|
String str1 = address.substring(0, 4);
|
||||||
|
// 获取第二部分
|
||||||
|
String str2 = "********";
|
||||||
|
// 获取第三部分
|
||||||
|
String str3 = address.substring(12);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append(str1);
|
||||||
|
sb.append(str2);
|
||||||
|
sb.append(str3);
|
||||||
|
address = sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
//下面代码是从别人博客看到的。
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 定义所有常量
|
||||||
|
*/
|
||||||
|
public static final int ONE = 1;
|
||||||
|
public static final int TWO = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 姓名脱敏
|
||||||
|
*
|
||||||
|
* @param realName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String desensitizedName(String realName) {
|
||||||
|
if (realName == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (realName.length() == ONE) {
|
||||||
|
return realName;
|
||||||
|
} else if (realName.length() == TWO) {
|
||||||
|
return realName.substring(0, 1) +"*";
|
||||||
|
} else {
|
||||||
|
Integer length = realName.length();
|
||||||
|
StringBuffer middle = new StringBuffer();
|
||||||
|
for (int i = 0; i < realName.substring(1, length - 1).length(); i++) {
|
||||||
|
middle.append("*");
|
||||||
|
}
|
||||||
|
return realName.substring(0, 1) + middle + realName.substring(length - 1, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 详细地址脱敏
|
||||||
|
*
|
||||||
|
* @param address
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String desensitizedAddress(String address){
|
||||||
|
//江西省宜春市丰城市剑南街道人才教育小区41号丰城住总运营有限公司-->江西省宜春市丰城市剑南街道人才教育小区*************
|
||||||
|
if (StringUtils.isNotEmpty(address)) {
|
||||||
|
int length = address.length();
|
||||||
|
int indes = address.indexOf("区");
|
||||||
|
if (indes == -1) {
|
||||||
|
indes = address.indexOf("市");
|
||||||
|
}
|
||||||
|
address = address.substring(0, indes + 1);
|
||||||
|
StringBuffer middle = new StringBuffer();
|
||||||
|
for (int i = 0; i < length - indes; i++) {
|
||||||
|
middle.append("*");
|
||||||
|
}
|
||||||
|
return address + middle;
|
||||||
|
}
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对字符串进行脱敏操作
|
||||||
|
*
|
||||||
|
* @param origin 原始字符串
|
||||||
|
* @param prefixNoMaskLen 左侧需要保留几位明文字段
|
||||||
|
* @param suffixNoMaskLen 右侧需要保留几位明文字段
|
||||||
|
* @param maskStr 用于遮罩的字符串, 如'*'
|
||||||
|
* @return 脱敏后结果
|
||||||
|
*/
|
||||||
|
public static String desValue(String origin, int prefixNoMaskLen, int suffixNoMaskLen, String maskStr) {
|
||||||
|
if (origin == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0, n = origin.length(); i < n; i++) {
|
||||||
|
if (i < prefixNoMaskLen) {
|
||||||
|
sb.append(origin.charAt(i));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (i > (n - suffixNoMaskLen - 1)) {
|
||||||
|
sb.append(origin.charAt(i));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sb.append(maskStr);
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 中文姓名,只显示最后一个汉字,其他隐藏为星号,比如:**梦
|
||||||
|
*
|
||||||
|
* @param fullName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String chineseName(String fullName) {
|
||||||
|
if (fullName == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return desValue(fullName, 0, 1, "*");
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,8 @@ public class SourceCodeComplier extends ClassLoader {
|
||||||
* @param path 文件夹路径
|
* @param path 文件夹路径
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static void javaCompilerPath(String path){
|
public static void
|
||||||
|
javaCompilerPath(String path){
|
||||||
File[] files = JavaCodeScan.javaSourceScanByPath(path);
|
File[] files = JavaCodeScan.javaSourceScanByPath(path);
|
||||||
|
|
||||||
javaCampiler(files);
|
javaCampiler(files);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.muyu.rule.server.controller;
|
package com.muyu.rule.server.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.muyu.common.core.domain.Result;
|
import com.muyu.common.core.domain.Result;
|
||||||
|
|
||||||
import com.muyu.rule.common.domain.RuleEngine;
|
import com.muyu.rule.common.domain.RuleEngine;
|
||||||
|
@ -104,6 +105,7 @@ public class EtlRuleController {
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/findAllRuleRegion")
|
@PostMapping("/findAllRuleRegion")
|
||||||
|
@Operation(summary = "规则作用域列表", description = "查询所有作用域的信息")
|
||||||
public Result<List<RuleRegion>> findAllRuleRegion(){
|
public Result<List<RuleRegion>> findAllRuleRegion(){
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,6 +121,7 @@ public class EtlRuleController {
|
||||||
|
|
||||||
|
|
||||||
@PostMapping("/selectRuleAndVersionById/{id}")
|
@PostMapping("/selectRuleAndVersionById/{id}")
|
||||||
|
@Operation(summary = "规则引擎的维护", description = "通过Id查询规则引擎和规则引擎的版本")
|
||||||
public Result<EtlRuleResp> selectRuleAndVersionById(@PathVariable("id") Long id){
|
public Result<EtlRuleResp> selectRuleAndVersionById(@PathVariable("id") Long id){
|
||||||
|
|
||||||
EtlRuleResp etlRuleResp = etlRuleService.selectRuleAndVersionById(id);
|
EtlRuleResp etlRuleResp = etlRuleService.selectRuleAndVersionById(id);
|
||||||
|
@ -126,8 +129,63 @@ public class EtlRuleController {
|
||||||
return Result.success(etlRuleResp);
|
return Result.success(etlRuleResp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启引擎请求
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/openEngine/{id}")
|
||||||
|
@Operation(summary = "规则引擎的开启", description = "通过Id开启规则引擎")
|
||||||
|
public Result openEngine(@PathVariable("id") Long id){
|
||||||
|
|
||||||
|
etlRuleService.openEngine(id);
|
||||||
|
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭引擎请求
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/closeEngine/{id}")
|
||||||
|
@Operation(summary = "规则引擎的关闭", description = "通过Id关闭规则引擎")
|
||||||
|
public Result closeEngine(@PathVariable("id") Long id){
|
||||||
|
|
||||||
|
etlRuleService.closeEngine(id);
|
||||||
|
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 激活引擎请求
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@PostMapping("/activate/{id}")
|
||||||
|
@Operation(summary = "规则引擎的激活", description = "通过Id激活规则引擎")
|
||||||
|
public Result activate(@PathVariable("id") Long id){
|
||||||
|
|
||||||
|
etlRuleService.activate(id);
|
||||||
|
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取消引擎请求
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/disable/{id}")
|
||||||
|
@Operation(summary = "规则引擎的取消", description = "通过Id取消规则引擎")
|
||||||
|
public Result disable(@PathVariable("id") Long id){
|
||||||
|
|
||||||
|
etlRuleService.disable(id);
|
||||||
|
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -58,4 +58,20 @@ public interface EtlRuleService extends IService<RuleEngine> {
|
||||||
|
|
||||||
EtlRuleResp selectRuleAndVersionById(Long id);
|
EtlRuleResp selectRuleAndVersionById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开启状态接口
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
|
||||||
|
void openEngine(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭状态的接口
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
void closeEngine(Long id);
|
||||||
|
|
||||||
|
void activate(Long id);
|
||||||
|
|
||||||
|
void disable(Long id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.muyu.rule.server.service.impl;
|
package com.muyu.rule.server.service.impl;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import com.muyu.common.core.enums.SystemYesNo;
|
||||||
import com.muyu.common.core.utils.StringUtils;
|
import com.muyu.common.core.utils.StringUtils;
|
||||||
|
import com.muyu.common.system.domain.SysDept;
|
||||||
import com.muyu.rule.common.domain.RuleEngine;
|
import com.muyu.rule.common.domain.RuleEngine;
|
||||||
import com.muyu.rule.common.domain.RuleRegion;
|
import com.muyu.rule.common.domain.RuleRegion;
|
||||||
import com.muyu.rule.common.domain.req.EtlRuleListReq;
|
import com.muyu.rule.common.domain.req.EtlRuleListReq;
|
||||||
|
@ -106,5 +109,62 @@ public class EtlRuleServiceImpl extends ServiceImpl<EtlRuleMapper, RuleEngine>
|
||||||
return etlRuleResp;
|
return etlRuleResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void openEngine(Long id) {
|
||||||
|
|
||||||
|
this.updateStatus(id,"0");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void closeEngine(Long id) {
|
||||||
|
|
||||||
|
this.updateStatus(id,"1");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void activate(Long id) {
|
||||||
|
|
||||||
|
this.updateOpen(id,SystemYesNo.YES.getCode());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disable(Long id) {
|
||||||
|
this.updateOpen(id,SystemYesNo.NO.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改状态
|
||||||
|
* @param id
|
||||||
|
* @param status
|
||||||
|
*/
|
||||||
|
|
||||||
|
public void updateStatus(Long id, String status){
|
||||||
|
|
||||||
|
|
||||||
|
UpdateWrapper<RuleEngine> updateWrapper = new UpdateWrapper<>();
|
||||||
|
|
||||||
|
updateWrapper.eq("id",id).set("status",status);
|
||||||
|
|
||||||
|
this.update(updateWrapper);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改激活
|
||||||
|
* @param id
|
||||||
|
* @param open
|
||||||
|
*/
|
||||||
|
public void updateOpen(Long id, String open){
|
||||||
|
|
||||||
|
|
||||||
|
UpdateWrapper<RuleEngine> updateWrapper = new UpdateWrapper<>();
|
||||||
|
|
||||||
|
updateWrapper.eq("id",id).set("open",open);
|
||||||
|
|
||||||
|
this.update(updateWrapper);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue