Compare commits
No commits in common. "b486880c7c2f9e6a668a826c40fa340e0c889673" and "a88903481f1e45cb669014624af13131e6e65db1" have entirely different histories.
b486880c7c
...
a88903481f
|
|
@ -74,9 +74,9 @@ public class MemberStatisticsServiceImpl implements IMemberStatisticsService {
|
||||||
for (DirectStatisticsTop30VO directStatisticsTop30VO : result) {
|
for (DirectStatisticsTop30VO directStatisticsTop30VO : result) {
|
||||||
if(param.getFaker()){
|
if(param.getFaker()){
|
||||||
directStatisticsTop30VO.setMemberCode(DataMaskingUtil.mask(directStatisticsTop30VO.getMemberCode(), 2, 2));
|
directStatisticsTop30VO.setMemberCode(DataMaskingUtil.mask(directStatisticsTop30VO.getMemberCode(), 2, 2));
|
||||||
directStatisticsTop30VO.setMemberName(DataMaskingUtil.maskFirstLast(directStatisticsTop30VO.getMemberName()));
|
directStatisticsTop30VO.setMemberName(DataMaskingUtil.mask(directStatisticsTop30VO.getMemberName(), 1, 0, 6));
|
||||||
}
|
}
|
||||||
// directStatisticsTop30VO.setNumberOfAmount(directStatisticsTop30VO.getNumberOfAmount().divide(new BigDecimal(10000)));
|
directStatisticsTop30VO.setNumberOfAmount(directStatisticsTop30VO.getNumberOfAmount().divide(new BigDecimal(10000)));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,78 +4,54 @@
|
||||||
|
|
||||||
<select id="getDirectStatisticsNumberOfPeople"
|
<select id="getDirectStatisticsNumberOfPeople"
|
||||||
resultType="com.hzs.common.domain.member.statis.DirectStatisticsTop30VO">
|
resultType="com.hzs.common.domain.member.statis.DirectStatisticsTop30VO">
|
||||||
SELECT
|
select
|
||||||
*
|
PK_ID memberId,
|
||||||
FROM
|
MEMBER_CODE memberCode,
|
||||||
(
|
member_name memberName,
|
||||||
SELECT
|
numberOfPeople,
|
||||||
PK_ID memberId,
|
numberOfAmount
|
||||||
MEMBER_CODE memberCode,
|
from (
|
||||||
member_name memberName,
|
select
|
||||||
numberOfPeople,
|
o.PK_REFERENCE,
|
||||||
numberOfAmount
|
count(DISTINCT o.PK_MEMBER) numberOfPeople,
|
||||||
FROM
|
sum(order_amount) numberOfAmount
|
||||||
(
|
from sa_order o
|
||||||
SELECT
|
right join cu_member m on m.PK_ID = o.pk_member and m.DEL_FLAG = 0 and m.CATEGORY = 0
|
||||||
o.PK_REFERENCE,
|
where
|
||||||
count( DISTINCT o.PK_MEMBER ) numberOfPeople,
|
o.del_flag = 0
|
||||||
sum( order_amount ) numberOfAmount
|
and order_status = 1
|
||||||
FROM
|
AND (order_type in (1,2) or (order_Type = 3 and ORDER_TYPE_EXTEND = 1))
|
||||||
sa_order o
|
and o.pay_time between #{param.startDate} and #{param.endDate}
|
||||||
RIGHT JOIN cu_member m ON m.PK_ID = o.pk_member
|
group by PK_REFERENCE
|
||||||
AND m.DEL_FLAG = 0
|
) r
|
||||||
AND m.CATEGORY = 0
|
left join cu_member cm on r.PK_REFERENCE = cm.pk_id
|
||||||
WHERE
|
|
||||||
o.del_flag = 0
|
|
||||||
AND order_status = 1
|
|
||||||
AND ( order_type IN ( 1, 2 ) OR ( order_Type = 3 AND ORDER_TYPE_EXTEND = 1 ) )
|
|
||||||
and o.pay_time between #{param.startDate} and #{param.endDate}
|
|
||||||
|
|
||||||
GROUP BY PK_REFERENCE
|
|
||||||
ORDER BY numberOfAmount DESC
|
|
||||||
) r
|
|
||||||
LEFT JOIN cu_member cm ON r.PK_REFERENCE = cm.pk_id
|
|
||||||
WHERE cm.PK_SETTLE_GRADE IN ( SELECT pk_id FROM BD_GRADE WHERE ( grade_value >= 30 ) )
|
|
||||||
ORDER BY numberOfPeople DESC
|
|
||||||
)
|
|
||||||
WHERE ROWNUM <![CDATA[ <=]]> 30
|
WHERE ROWNUM <![CDATA[ <=]]> 30
|
||||||
|
order by numberOfPeople desc
|
||||||
</select>
|
</select>
|
||||||
<select id="getDirectStatisticsNumberOfAmount"
|
<select id="getDirectStatisticsNumberOfAmount"
|
||||||
resultType="com.hzs.common.domain.member.statis.DirectStatisticsTop30VO">
|
resultType="com.hzs.common.domain.member.statis.DirectStatisticsTop30VO">
|
||||||
SELECT
|
select
|
||||||
*
|
PK_ID memberId,
|
||||||
FROM
|
MEMBER_CODE memberCode,
|
||||||
(
|
member_name memberName,
|
||||||
SELECT
|
numberOfPeople,
|
||||||
PK_ID memberId,
|
numberOfAmount
|
||||||
MEMBER_CODE memberCode,
|
from (
|
||||||
member_name memberName,
|
select
|
||||||
numberOfPeople,
|
o.PK_REFERENCE,
|
||||||
numberOfAmount
|
count(DISTINCT o.PK_MEMBER) numberOfPeople,
|
||||||
FROM
|
sum(order_amount) numberOfAmount
|
||||||
(
|
from sa_order o
|
||||||
SELECT
|
right join cu_member m on m.PK_ID = o.pk_member and m.DEL_FLAG = 0 and m.CATEGORY = 0
|
||||||
o.PK_REFERENCE,
|
where
|
||||||
count( DISTINCT o.PK_MEMBER ) numberOfPeople,
|
o.del_flag = 0
|
||||||
sum( order_amount ) numberOfAmount
|
and order_status = 1
|
||||||
FROM
|
AND (order_type in (1,2) or (order_Type = 3 and ORDER_TYPE_EXTEND = 1))
|
||||||
sa_order o
|
and o.pay_time between #{param.startDate} and #{param.endDate}
|
||||||
RIGHT JOIN cu_member m ON m.PK_ID = o.pk_member
|
group by PK_REFERENCE
|
||||||
AND m.DEL_FLAG = 0
|
) r
|
||||||
AND m.CATEGORY = 0
|
left join cu_member cm on r.PK_REFERENCE = cm.pk_id
|
||||||
WHERE
|
|
||||||
o.del_flag = 0
|
|
||||||
AND order_status = 1
|
|
||||||
AND ( order_type IN ( 1, 2 ) OR ( order_Type = 3 AND ORDER_TYPE_EXTEND = 1 ) )
|
|
||||||
and o.pay_time between #{param.startDate} and #{param.endDate}
|
|
||||||
|
|
||||||
GROUP BY PK_REFERENCE
|
|
||||||
ORDER BY numberOfAmount DESC
|
|
||||||
) r
|
|
||||||
LEFT JOIN cu_member cm ON r.PK_REFERENCE = cm.pk_id
|
|
||||||
WHERE cm.PK_SETTLE_GRADE IN ( SELECT pk_id FROM BD_GRADE WHERE ( grade_value >= 30 ) )
|
|
||||||
ORDER BY numberOfAmount DESC
|
|
||||||
)
|
|
||||||
WHERE ROWNUM <![CDATA[ <=]]> 30
|
WHERE ROWNUM <![CDATA[ <=]]> 30
|
||||||
|
order by numberOfAmount desc
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -5,90 +5,101 @@ package com.hzs.common.core.utils;
|
||||||
* 提供字符串脱敏功能,可指定保留前几位和后几位字符
|
* 提供字符串脱敏功能,可指定保留前几位和后几位字符
|
||||||
*/
|
*/
|
||||||
public class DataMaskingUtil {
|
public class DataMaskingUtil {
|
||||||
|
|
||||||
|
// 默认脱敏字符
|
||||||
|
private static final char DEFAULT_MASK_CHAR = '*';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据脱敏方法 - 前一后一格式
|
* 对字符串进行脱敏处理
|
||||||
* @param input 输入字符串
|
* @param input 原始字符串
|
||||||
* @param keepPrefix 保留前缀长度
|
* @param keepPrefix 保留的前缀位数
|
||||||
* @param keepSuffix 保留后缀长度
|
* @param keepSuffix 保留的后缀位数
|
||||||
* @return 脱敏后的字符串
|
* @return 脱敏后的字符串
|
||||||
*/
|
*/
|
||||||
public static String mask(String input, int keepPrefix, int keepSuffix) {
|
public static String mask(String input, int keepPrefix, int keepSuffix) {
|
||||||
// 处理空值或null情况
|
// 参数验证
|
||||||
if (input == null || input.isEmpty()) {
|
if (input == null) {
|
||||||
return input;
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理边界情况
|
||||||
|
if (keepPrefix < 0 || keepSuffix < 0) {
|
||||||
|
throw new IllegalArgumentException("保留位数不能为负数");
|
||||||
}
|
}
|
||||||
|
|
||||||
int length = input.length();
|
int length = input.length();
|
||||||
|
|
||||||
// 特殊情况:长度为2时,只保留第一位
|
// 如果字符串长度小于等于需要保留的位数之和,直接返回原字符串
|
||||||
if (length == 2) {
|
if (length <= keepPrefix + keepSuffix) {
|
||||||
return input.substring(0, 1) + "*";
|
|
||||||
}
|
|
||||||
|
|
||||||
// 特殊情况:长度小于等于1时,直接返回
|
|
||||||
if (length <= 1) {
|
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 调整保留长度,确保合理
|
// 构建StringBuilder用于高效拼接字符串
|
||||||
keepPrefix = Math.min(keepPrefix, length);
|
StringBuilder result = new StringBuilder(length);
|
||||||
keepSuffix = Math.min(keepSuffix, length - keepPrefix);
|
|
||||||
|
|
||||||
StringBuilder result = new StringBuilder();
|
// 添加前缀保留字符
|
||||||
|
result.append(input, 0, keepPrefix);
|
||||||
|
|
||||||
// 添加前缀
|
// 添加脱敏字符
|
||||||
result.append(input.substring(0, keepPrefix));
|
int maskCount = length - keepPrefix - keepSuffix;
|
||||||
|
for (int i = 0; i < maskCount; i++) {
|
||||||
// 添加脱敏部分(使用*代替)
|
result.append(DEFAULT_MASK_CHAR);
|
||||||
int maskLength = length - keepPrefix - keepSuffix;
|
|
||||||
for (int i = 0; i < maskLength; i++) {
|
|
||||||
result.append('*');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加后缀
|
// 添加后缀保留字符
|
||||||
if (keepSuffix > 0) {
|
result.append(input, length - keepSuffix, length);
|
||||||
result.append(input.substring(length - keepSuffix));
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 带最大长度限制的数据脱敏方法
|
|
||||||
* @param input 输入字符串
|
|
||||||
* @param keepPrefix 保留前缀长度
|
|
||||||
* @param keepSuffix 保留后缀长度
|
|
||||||
* @param maxLength 最大输出长度
|
|
||||||
* @return 脱敏后的字符串
|
|
||||||
*/
|
|
||||||
public static String mask(String input, int keepPrefix, int keepSuffix, int maxLength) {
|
public static String mask(String input, int keepPrefix, int keepSuffix, int maxLength) {
|
||||||
// 调用基础脱敏方法
|
|
||||||
String str = mask(input, keepPrefix, keepSuffix);
|
String str = mask(input, keepPrefix, keepSuffix);
|
||||||
|
if(str.length() > maxLength) {
|
||||||
// 限制最大长度
|
|
||||||
if (str.length() > maxLength) {
|
|
||||||
str = str.substring(0, maxLength);
|
str = str.substring(0, maxLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 前一后一格式的快捷脱敏方法
|
* 对字符串进行脱敏处理,可自定义脱敏字符
|
||||||
* @param input 输入字符串
|
* @param input 原始字符串
|
||||||
|
* @param keepPrefix 保留的前缀位数
|
||||||
|
* @param keepSuffix 保留的后缀位数
|
||||||
|
* @param maskChar 自定义脱敏字符
|
||||||
* @return 脱敏后的字符串
|
* @return 脱敏后的字符串
|
||||||
*/
|
*/
|
||||||
public static String maskFirstLast(String input) {
|
public static String mask(String input, int keepPrefix, int keepSuffix, char maskChar) {
|
||||||
return mask(input, 1, 1);
|
// 参数验证
|
||||||
}
|
if (input == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
// 处理边界情况
|
||||||
* 带最大长度限制的前一后一格式脱敏方法
|
if (keepPrefix < 0 || keepSuffix < 0) {
|
||||||
* @param input 输入字符串
|
throw new IllegalArgumentException("保留位数不能为负数");
|
||||||
* @param maxLength 最大输出长度
|
}
|
||||||
* @return 脱敏后的字符串
|
|
||||||
*/
|
int length = input.length();
|
||||||
public static String maskFirstLast(String input, int maxLength) {
|
|
||||||
return mask(input, 1, 1, maxLength);
|
// 如果字符串长度小于等于需要保留的位数之和,直接返回原字符串
|
||||||
|
if (length <= keepPrefix + keepSuffix) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建StringBuilder用于高效拼接字符串
|
||||||
|
StringBuilder result = new StringBuilder(length);
|
||||||
|
|
||||||
|
// 添加前缀保留字符
|
||||||
|
result.append(input, 0, keepPrefix);
|
||||||
|
|
||||||
|
// 添加脱敏字符
|
||||||
|
int maskCount = length - keepPrefix - keepSuffix;
|
||||||
|
for (int i = 0; i < maskCount; i++) {
|
||||||
|
result.append(maskChar);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加后缀保留字符
|
||||||
|
result.append(input, length - keepSuffix, length);
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,6 @@ public class DirectStatisticsTop30VO implements Serializable {
|
||||||
/**
|
/**
|
||||||
* 直推金额
|
* 直推金额
|
||||||
*/
|
*/
|
||||||
@BigDecimalFormat(value = "#0.00")
|
@BigDecimalFormat(value = "#0.0000")
|
||||||
private BigDecimal numberOfAmount;
|
private BigDecimal numberOfAmount;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue