## Opt - 奖金活动

This commit is contained in:
sangelxiu1 2025-10-17 10:50:56 +08:00
parent 7b339259d6
commit 8a80b0aca7
5 changed files with 128 additions and 115 deletions

View File

@ -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.mask(directStatisticsTop30VO.getMemberName(), 1, 0, 6)); directStatisticsTop30VO.setMemberName(DataMaskingUtil.maskFirstLast(directStatisticsTop30VO.getMemberName()));
} }
directStatisticsTop30VO.setNumberOfAmount(directStatisticsTop30VO.getNumberOfAmount().divide(new BigDecimal(10000))); // directStatisticsTop30VO.setNumberOfAmount(directStatisticsTop30VO.getNumberOfAmount().divide(new BigDecimal(10000)));
} }
return result; return result;
} }

View File

@ -4,54 +4,78 @@
<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, *
MEMBER_CODE memberCode, FROM
member_name memberName, (
numberOfPeople, SELECT
numberOfAmount PK_ID memberId,
from ( MEMBER_CODE memberCode,
select member_name memberName,
o.PK_REFERENCE, numberOfPeople,
count(DISTINCT o.PK_MEMBER) numberOfPeople, numberOfAmount
sum(order_amount) numberOfAmount FROM
from sa_order o (
right join cu_member m on m.PK_ID = o.pk_member and m.DEL_FLAG = 0 and m.CATEGORY = 0 SELECT
where o.PK_REFERENCE,
o.del_flag = 0 count( DISTINCT o.PK_MEMBER ) numberOfPeople,
and order_status = 1 sum( order_amount ) numberOfAmount
AND (order_type in (1,2) or (order_Type = 3 and ORDER_TYPE_EXTEND = 1)) FROM
and o.pay_time between #{param.startDate} and #{param.endDate} sa_order o
group by PK_REFERENCE RIGHT JOIN cu_member m ON m.PK_ID = o.pk_member
) r AND m.DEL_FLAG = 0
left join cu_member cm on r.PK_REFERENCE = cm.pk_id AND m.CATEGORY = 0
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, *
MEMBER_CODE memberCode, FROM
member_name memberName, (
numberOfPeople, SELECT
numberOfAmount PK_ID memberId,
from ( MEMBER_CODE memberCode,
select member_name memberName,
o.PK_REFERENCE, numberOfPeople,
count(DISTINCT o.PK_MEMBER) numberOfPeople, numberOfAmount
sum(order_amount) numberOfAmount FROM
from sa_order o (
right join cu_member m on m.PK_ID = o.pk_member and m.DEL_FLAG = 0 and m.CATEGORY = 0 SELECT
where o.PK_REFERENCE,
o.del_flag = 0 count( DISTINCT o.PK_MEMBER ) numberOfPeople,
and order_status = 1 sum( order_amount ) numberOfAmount
AND (order_type in (1,2) or (order_Type = 3 and ORDER_TYPE_EXTEND = 1)) FROM
and o.pay_time between #{param.startDate} and #{param.endDate} sa_order o
group by PK_REFERENCE RIGHT JOIN cu_member m ON m.PK_ID = o.pk_member
) r AND m.DEL_FLAG = 0
left join cu_member cm on r.PK_REFERENCE = cm.pk_id AND m.CATEGORY = 0
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>

View File

@ -46,7 +46,7 @@ class RedisComponent {
public void initConfig() { public void initConfig() {
// 商品信息 // 商品信息
initWaresConfig(); // initWaresConfig();
// 邮费 // 邮费
initPostageTemp(); initPostageTemp();
} }

View File

@ -5,101 +5,90 @@ 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) { if (input == null || input.isEmpty()) {
return null; return input;
}
// 处理边界情况
if (keepPrefix < 0 || keepSuffix < 0) {
throw new IllegalArgumentException("保留位数不能为负数");
} }
int length = input.length(); int length = input.length();
// 如果字符串长度小于等于需要保留的位数之和直接返回原字符串 // 特殊情况长度为2时只保留第一位
if (length <= keepPrefix + keepSuffix) { if (length == 2) {
return input.substring(0, 1) + "*";
}
// 特殊情况长度小于等于1时直接返回
if (length <= 1) {
return input; return input;
} }
// 构建StringBuilder用于高效拼接字符串 // 调整保留长度确保合理
StringBuilder result = new StringBuilder(length); keepPrefix = Math.min(keepPrefix, length);
keepSuffix = Math.min(keepSuffix, length - keepPrefix);
// 添加前缀保留字符 StringBuilder result = new StringBuilder();
result.append(input, 0, keepPrefix);
// 添加脱敏字符 // 添加前缀
int maskCount = length - keepPrefix - keepSuffix; result.append(input.substring(0, keepPrefix));
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('*');
} }
// 添加后缀保留字符 // 添加后缀
result.append(input, length - keepSuffix, length); if (keepSuffix > 0) {
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 mask(String input, int keepPrefix, int keepSuffix, char maskChar) { public static String maskFirstLast(String input) {
// 参数验证 return mask(input, 1, 1);
if (input == null) { }
return null;
}
// 处理边界情况 /**
if (keepPrefix < 0 || keepSuffix < 0) { * 带最大长度限制的前一后一格式脱敏方法
throw new IllegalArgumentException("保留位数不能为负数"); * @param input 输入字符串
} * @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();
} }
} }

View File

@ -37,6 +37,6 @@ public class DirectStatisticsTop30VO implements Serializable {
/** /**
* 直推金额 * 直推金额
*/ */
@BigDecimalFormat(value = "#0.0000") @BigDecimalFormat(value = "#0.00")
private BigDecimal numberOfAmount; private BigDecimal numberOfAmount;
} }