登入失败禁止登入3

This commit is contained in:
xuelijun
2026-01-31 18:16:48 +08:00
parent f852676c83
commit 6920855953
2 changed files with 151 additions and 51 deletions

View File

@@ -39,11 +39,11 @@ public class CrawlerSchedule {
// 每天凌晨2点执行爬取开奖结果
//@Scheduled(cron = "0 0 2 * * ?")
// 每7秒执行一次爬取开奖结果
@Scheduled(cron = "*/9 * * * * ?")
//@Scheduled(cron = "*/9 * * * * ?")
/*@Scheduled(cron = "0 6-59/5 7-23 * * ?")
@Scheduled(cron = "0 0-55/5 0-6 * * ?")*/
// 从7:00分30秒起每5分钟执行一次
//@Scheduled(cron = "30 0/5 * * * ?")
@Scheduled(cron = "30 0/5 * * * ?")
public void executeLotteryDraw() {
log.info("开始爬取开奖结果");
int retryCount = 0;
@@ -110,27 +110,46 @@ public class CrawlerSchedule {
}
//@Scheduled(cron = "50 0/5 * * * ?")
@Scheduled(cron = "55 0/5 * * * ?")
//@Scheduled(cron = "*/9 * * * * ?")
public void executePksHistory() {
log.info("开始获取历史开奖结果");
// 获取API数据
// 获取数据库最新记录
LotteryResult lotteryResult = lotteryResultRepository.findTopByOrderByTimeDesc()
.orElse(null);
// 如果数据库为空,直接获取并保存所有历史数据
if (lotteryResult == null) {
log.info("数据库为空,获取全部历史数据");
List<Map<String, Object>> historyList = HttpClientExample.getPksHistoryList();
HttpClientExample.getPksHistory(historyList, pypath);
return;
}
String lastTime = lotteryResult.getTime();
List<Map<String, Object>> historyList = HttpClientExample.getPksHistoryList();
// 获取数据库最新时间
Optional<String> latestTimeOpt = lotteryResultRepository.findTopByOrderByTimeDesc()
.map(LotteryResult::getTime);
// 判断是否需要更新
boolean needUpdate = latestTimeOpt
.map(latestTime -> historyList.stream()
.noneMatch(item -> latestTime.equals(item.get("time"))))
.orElse(true); // 数据库为空时需要更新
// 检查API数据中是否有比数据库最新时间更晚的数据
boolean hasNewerData = false;
for (Map<String, Object> item : historyList) {
String itemTime = (String) item.get("time");
if (needUpdate) {
log.info("需要更新数据,最新时间:{}",
latestTimeOpt.orElse("数据库为空"));
// 假设时间格式是 "yyyy-MM-dd HH:mm:ss" 或其他可比较的格式
// 比较时间字符串(前提是格式一致且可按字典序比较)
if (itemTime.compareTo(lastTime) > 0) {
hasNewerData = true;
log.info("发现新数据:{} > {}", itemTime, lastTime);
break;
}
}
// 如果有比数据库时间更新的数据,执行获取操作
if (hasNewerData) {
log.info("发现比数据库时间 {} 更新的数据,执行获取", lastTime);
HttpClientExample.getPksHistory(historyList, pypath);
} else {
log.info("数据已是最新,无需更新");
log.info("未发现比数据库时间 {} 更新的数据,无需处理", lastTime);
}
}

View File

@@ -96,27 +96,27 @@ public class HttpClientExample {
String preDrawCode = item.get("preDrawCode").asText();
String[] codeArray = preDrawCode.split(",");
// 转换为整数数组
int[] result = new int[codeArray.length];
for (int i = 0; i < codeArray.length; i++) {
result[i] = Integer.parseInt(codeArray[i].trim());
// 转换为List<Integer>
List<Integer> resultNumbers = new ArrayList<>();
for (String code : codeArray) {
resultNumbers.add(Integer.parseInt(code.trim()));
}
// 计算sum1和sum2
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < 5; i++) {
sum1 += result[i];
sum1 += resultNumbers.get(i);
}
for (int i = 5; i < 10; i++) {
sum2 += result[i];
sum2 += resultNumbers.get(i);
}
// 计算winner前五个号码的和
int winner = sum1;
// 计算冠亚和(前两个号码的和)
int championSum = result[0] + result[1];
int championSum = resultNumbers.get(0) + resultNumbers.get(1);
// 判断冠亚单双
String GD2 = (championSum % 2 == 0) ? "冠亚双" : "冠亚单";
@@ -130,15 +130,15 @@ public class HttpClientExample {
// 计算龙虎1-5位对比
List<String> GLH_result = new ArrayList<>();
for (int i = 0; i < 5; i++) {
if (result[i] > result[9 - i]) {
if (resultNumbers.get(i) > resultNumbers.get(9 - i)) {
GLH_result.add("");
} else {
GLH_result.add("");
}
}
// 构建转换后的map
map.put("result", result);
// 构建转换后的map使用List<Integer>作为result
map.put("result", resultNumbers);
map.put("sum1", sum1);
map.put("sum2", sum2);
map.put("winner", winner);
@@ -152,31 +152,6 @@ public class HttpClientExample {
}
}
}
// 打印转换后的结果列表
System.out.println("Total records: " + resultList.size());
// 使用ObjectMapper将结果列表转换为JSON格式输出
ObjectMapper outputMapper = new ObjectMapper();
String jsonOutput = outputMapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultList);
System.out.println(jsonOutput);
// 或者以自定义格式输出(可选)
System.out.println("\n=== 转换后的数据格式 ===");
for (Map<String, Object> map : resultList) {
System.out.println("{");
System.out.println(" \"result\" : " + Arrays.toString((int[]) map.get("result")) + ",");
System.out.println(" \"sum1\" : " + map.get("sum1") + ",");
System.out.println(" \"sum2\" : " + map.get("sum2") + ",");
System.out.println(" \"winner\" : " + map.get("winner") + ",");
System.out.println(" \"GD2\" : \"" + map.get("GD2") + "\",");
System.out.println(" \"GD1\" : \"" + map.get("GD1") + "\",");
System.out.println(" \"GLH_result\" : " + map.get("GLH_result") + ",");
System.out.println(" \"id\" : \"" + map.get("id") + "\",");
System.out.println(" \"time\" : \"" + map.get("time") + "\"");
System.out.println("},");
}
} catch (Exception e) {
e.printStackTrace();
}
@@ -184,6 +159,112 @@ public class HttpClientExample {
}
/*public static List<Map<String, Object>> getPksHistoryList(){
List<Map<String, Object>> resultList = new ArrayList<>();
String todayDate = DateUtils.getTodayDate();
try {
String url = "https://api.api168168.com/pks/getPksHistoryList.do?lotCode=10058&"+todayDate;
// 移除代理设置,直接创建连接
HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Origin", "https://xy678kjw.com");
conn.setRequestProperty("Referer", "https://xy678kjw.com/");
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36");
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// 使用Jackson解析JSON
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(response.toString());
// 检查是否成功
int errorCode = rootNode.get("errorCode").asInt();
if (errorCode == 0) {
// 获取data数组
JsonNode dataArray = rootNode
.get("result")
.get("data");
if (dataArray.isArray()) {
for (JsonNode item : dataArray) {
Map<String, Object> map = new HashMap<>();
// 解析原始数据
String preDrawCode = item.get("preDrawCode").asText();
String[] codeArray = preDrawCode.split(",");
// 转换为List<Integer>
List<Integer> resultNumbers = new ArrayList<>();
for (String code : codeArray) {
resultNumbers.add(Integer.parseInt(code.trim()));
}
// 计算sum1和sum2
int sum1 = 0;
int sum2 = 0;
for (int i = 0; i < 5; i++) {
sum1 += resultNumbers.get(i);
}
for (int i = 5; i < 10; i++) {
sum2 += resultNumbers.get(i);
}
// 计算winner前五个号码的和
int winner = sum1;
// 计算冠亚和(前两个号码的和)
int championSum = resultNumbers.get(0) + resultNumbers.get(1);
// 判断冠亚单双
String GD2 = (championSum % 2 == 0) ? "冠亚双" : "冠亚单";
// 判断冠亚大小冠亚和11为大11为小
String GD1 = (championSum > 11) ? "冠亚大" : "冠亚小";
if (championSum == 11) {
GD1 = "冠亚小"; // 特殊处理和值为11算小
}
// 计算龙虎1-5位对比
List<String> GLH_result = new ArrayList<>();
for (int i = 0; i < 5; i++) {
if (resultNumbers.get(i) > resultNumbers.get(9 - i)) {
GLH_result.add("龙");
} else {
GLH_result.add("虎");
}
}
// 构建转换后的map使用List<Integer>作为result
map.put("result", resultNumbers);
map.put("sum1", sum1);
map.put("sum2", sum2);
map.put("winner", winner);
map.put("GD2", GD2);
map.put("GD1", GD1);
map.put("GLH_result", GLH_result);
map.put("id", String.valueOf(item.get("preDrawIssue").asLong()));
map.put("time", item.get("preDrawTime").asText());
resultList.add(map);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return resultList;
}*/
public static void writeToJsonFile(List<Map<String, Object>> resultList,String pypath) {
try {
// 创建 ObjectMapper 实例