算法修改,导入excel修改

This commit is contained in:
lihanqi
2025-08-04 18:16:17 +08:00
parent 93c8ace8e7
commit ef8bcb14a3
2 changed files with 453 additions and 357 deletions

View File

@@ -1047,9 +1047,9 @@ public class BallAnalysisService {
allNumbers.addAll(lastTwoOfFirstThree);
log.info("前3个红球的后两个{}", lastTwoOfFirstThree);
// 第五步用上期蓝球从T5表获取12个蓝球号码
log.info("第五步:用上期蓝球{}从T5表获取12个蓝球号码", blueBall);
List<Integer> blueNumbers = getTop12FromT5(blueBall);
// 第五步用上期蓝球从T4表获取17个蓝球号码
log.info("第五步:用上期蓝球{}从T4表获取17个蓝球号码", blueBall);
List<Integer> blueNumbers = getTop17FromT4(blueBall);
allNumbers.addAll(blueNumbers);
log.info("蓝球{}获取到{}个数字:{}", blueBall, blueNumbers.size(), blueNumbers);
@@ -2012,9 +2012,9 @@ public class BallAnalysisService {
log.info("第四步添加预测的2个蓝球号码{}", predictedBlueBalls);
allNumbers.addAll(predictedBlueBalls);
// 第五步用上期蓝球从T5表获取5个蓝球号码
log.info("第五步:用上期蓝球{}从T5表获取5个蓝球号码使用{}级别算法", lastBlueBall, level);
List<Integer> t5Numbers = getSimpleTop5FromT5ByLevel(lastBlueBall, level);
// 第五步用上期蓝球从T5表获取最大值向下12个蓝球号码
log.info("第五步:用上期蓝球{}从T5表获取最大值向下12个蓝球号码", lastBlueBall);
List<Integer> t5Numbers = getTop12FromT5(lastBlueBall);
allNumbers.addAll(t5Numbers);
log.info("上期蓝球{}从T5表获取到{}个蓝球号码:{}", lastBlueBall, t5Numbers.size(), t5Numbers);
@@ -3151,4 +3151,66 @@ public class BallAnalysisService {
log.debug("T5表主球{}最终选择的{}个从球:{}", masterBallNumber, result.size(), result);
return result;
}
/**
* 从T4表获取指定主球的17个从球号取线系数最大值向下17个数字
* @param masterBallNumber 主球号
*/
private List<Integer> getTop17FromT4(Integer masterBallNumber) {
log.debug("从T4表查询主球{}的线系数数据取前17个", masterBallNumber);
// 查询指定主球的所有数据,按线系数降序排列
QueryWrapper<T4> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("masterBallNumber", masterBallNumber)
.orderByDesc("lineCoefficient")
.orderByAsc("slaveBallNumber"); // 线系数相同时按从球号升序
List<T4> t4List = t4Mapper.selectList(queryWrapper);
if (t4List.isEmpty()) {
log.warn("T4表中主球{}没有数据", masterBallNumber);
return new ArrayList<>();
}
if (t4List.size() < 17) {
log.warn("T4表数据不足17条实际{}条", t4List.size());
return t4List.stream().map(T4::getSlaveBallNumber).collect(Collectors.toList());
}
// 获取前16个
List<Integer> result = new ArrayList<>();
for (int i = 0; i < 16; i++) {
result.add(t4List.get(i).getSlaveBallNumber());
}
// 处理第17个位置检查是否有相同的线系数
Double targetCoefficient = t4List.get(16).getLineCoefficient();
List<T4> candidatesFor17th = new ArrayList<>();
// 找出所有线系数等于第17个位置线系数的记录
for (int i = 16; i < t4List.size(); i++) {
if (t4List.get(i).getLineCoefficient().equals(targetCoefficient)) {
candidatesFor17th.add(t4List.get(i));
} else {
break; // 线系数不同,停止查找
}
}
if (candidatesFor17th.size() == 1) {
// 只有一个候选,直接添加
result.add(candidatesFor17th.get(0).getSlaveBallNumber());
} else {
// 有多个候选通过history_top_100表的点系数排序
log.debug("第17位有{}个相同线系数的候选:{}", candidatesFor17th.size(),
candidatesFor17th.stream().map(T4::getSlaveBallNumber).collect(Collectors.toList()));
Integer bestBall = selectBestBallFromHistoryTop100(
candidatesFor17th.stream().map(T4::getSlaveBallNumber).collect(Collectors.toList())
);
result.add(bestBall);
}
log.debug("T4表主球{}最终选择的17个从球{}", masterBallNumber, result);
return result;
}
}