算法修改,导入excel修改
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user