Commit 8e9addf8 by zhangxingmin

push

parent 897ed66a
......@@ -45,8 +45,18 @@ public class MemberGradeConfigServiceImpl extends ServiceImpl<MemberGradeConfigM
return Collections.emptyMap();
}
// 按 minValue 升序排序,确保后续匹配的稳定性
allGrades.sort(Comparator.comparing(MemberGradeConfig::getMinValue));
// 打印 min_value 为空的数据告警(业务上 min_value 应有值)
allGrades.stream()
.filter(g -> g.getMinValue() == null)
.forEach(g -> log.error("等级配置 {} 的 min_value 为空,请检查数据!", g.getId()));
// 按 min_value 升序,max_value 为 null 的排在最后(null 视为无穷大)
allGrades.sort(
Comparator.comparing(MemberGradeConfig::getMinValue,
Comparator.nullsFirst(BigDecimal::compareTo))
.thenComparing(MemberGradeConfig::getMaxValue,
Comparator.nullsLast(BigDecimal::compareTo))
);
// 构建结果 Map
Map<String, MemberGradeConfig> resultMap = new HashMap<>();
......@@ -59,10 +69,10 @@ public class MemberGradeConfigServiceImpl extends ServiceImpl<MemberGradeConfigM
continue;
}
// 在内存中匹配等级(左闭右开区间)
// 在内存中匹配等级(左闭右开区间,null 表示无限制
MemberGradeConfig matched = allGrades.stream()
.filter(g -> g.getMinValue().compareTo(promotionValue) <= 0
&& g.getMaxValue().compareTo(promotionValue) > 0)
.filter(g -> (g.getMinValue() == null || g.getMinValue().compareTo(promotionValue) <= 0)
&& (g.getMaxValue() == null || g.getMaxValue().compareTo(promotionValue) > 0))
.findFirst()
.orElse(null);
......@@ -80,14 +90,17 @@ public class MemberGradeConfigServiceImpl extends ServiceImpl<MemberGradeConfigM
}
/**
* 检查等级区间是否有重叠(用于运维告警)
* 检查等级区间是否有重叠
*/
private void checkGradeOverlap(List<MemberGradeConfig> allGrades, List<GradeQueryParam> paramList) {
// 简单检查:遍历参数,统计每个积分值匹配到的配置数量,超过1则告警
// 遍历参数,统计每个积分值匹配到的配置数量,超过1则告警
for (GradeQueryParam param : paramList) {
if (param.getPromotionValue() == null) {
continue;
}
long count = allGrades.stream()
.filter(g -> g.getMinValue().compareTo(param.getPromotionValue()) <= 0
&& g.getMaxValue().compareTo(param.getPromotionValue()) > 0)
.filter(g -> (g.getMinValue() == null || g.getMinValue().compareTo(param.getPromotionValue()) <= 0)
&& (g.getMaxValue() == null || g.getMaxValue().compareTo(param.getPromotionValue()) > 0))
.count();
if (count > 1) {
log.error("配置错误:业务员 {} 的积分 {} 匹配到 {} 个等级配置,请检查区间重叠!",
......@@ -95,4 +108,4 @@ public class MemberGradeConfigServiceImpl extends ServiceImpl<MemberGradeConfigM
}
}
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment