From 2ff8fec4b09711a899831aa46ddb0de039ae2374 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Fri, 23 Jan 2026 15:34:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BC=80=E5=A7=8B=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bocai.db | Bin 122880 -> 122880 bytes frontend/src/components/index.vue | 15 +--- .../tem/bocai/controller/ChartController.java | 74 ++---------------- .../com/tem/bocai/entity/CompletedToday.java | 3 +- .../repository/CompletedTodayRepository.java | 6 ++ .../com/tem/bocai/schedules/BetSchedule.java | 8 +- .../bocai/service/CompletedTodayService.java | 2 + .../impl/CompletedTodayServiceImpl.java | 21 +++++ .../tem/bocai/util/CompletedTodayCrawler.java | 25 +++++- .../java/com/tem/bocai/util/SQLiteUtil.java | 2 +- 10 files changed, 73 insertions(+), 83 deletions(-) diff --git a/bocai.db b/bocai.db index 2fc98b443b4cae459bcc5f41ca3733227022a30c..2a8f08710d395a955cedbcbb9e6121312d8b0be8 100644 GIT binary patch literal 122880 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 J_z5-ee*r);h1viB literal 122880 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 sHe*+U31I2V21R_v`N7aPF640x 12 ? Math.floor(chartLabels.value.length / 12) : 0, // 根据标签数量动态调整间隔,确保至少显示一些标签 + interval: 11, // 每12个标签显示一个,避免重叠 fontSize: 10 } }, @@ -163,15 +163,8 @@ async function fetchChartData() { console.log('获取折线图数据'); const response = await axios.get('http://localhost:8080/api/charts/line1'); console.log('折线图数据响应:', response.data); - if (response.data) { - // 更新数据 - if (response.data.data) { - chartData1.value = response.data.data; - } - // 更新标签 - if (response.data.labels) { - chartLabels.value = response.data.labels; - } + if (response.data && response.data.data) { + chartData1.value = response.data.data; // 确保数据长度与标签长度一致 if (chartData1.value.length !== chartLabels.value.length) { console.warn('数据长度与标签长度不一致,使用默认数据'); diff --git a/src/main/java/com/tem/bocai/controller/ChartController.java b/src/main/java/com/tem/bocai/controller/ChartController.java index c908ff4..476818c 100644 --- a/src/main/java/com/tem/bocai/controller/ChartController.java +++ b/src/main/java/com/tem/bocai/controller/ChartController.java @@ -1,8 +1,6 @@ package com.tem.bocai.controller; -import com.tem.bocai.entity.CompletedToday; import com.tem.bocai.entity.LotteryResult; -import com.tem.bocai.repository.CompletedTodayRepository; import com.tem.bocai.repository.LotteryResultRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -17,76 +15,18 @@ public class ChartController { @Autowired private LotteryResultRepository lotteryResultRepository; - @Autowired - private CompletedTodayRepository completedTodayRepository; - // 获取折线图1数据 @GetMapping("/charts/line1") public Map getLineChartData1() { Map response = new HashMap<>(); - try { - // 获取今日日期的字符串表示(格式:yyyy-MM-dd) - String today = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date()); - System.out.println("今日日期: " + today); - - // 从数据库获取今日的CompletedToday数据 - List completedTodays = completedTodayRepository.findAll(); - System.out.println("获取到" + completedTodays.size() + "条CompletedToday数据"); - - // 过滤出今日的数据 - List todayData = new ArrayList<>(); - for (CompletedToday item : completedTodays) { - if (item.getTime() != null && item.getTime().contains(today)) { - todayData.add(item); - } - } - System.out.println("过滤后获取到" + todayData.size() + "条今日数据"); - - // 按时间排序 - todayData.sort(Comparator.comparing(CompletedToday::getTime)); - - // 提取数据 - List data = new ArrayList<>(); - List labels = new ArrayList<>(); - - for (CompletedToday item : todayData) { - // 使用resultAmount作为折线图数据 - data.add(item.getResultAmount()); - // 使用时间作为标签(只保留时分部分) - String time = item.getTime(); - if (time != null && time.length() >= 16) { - labels.add(time.substring(11, 16)); // 提取时分部分 - } else { - labels.add(time); - } - } - - // 如果没有今日数据,使用默认数据 - if (data.isEmpty()) { - data = Arrays.asList(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); - labels = Arrays.asList("00:00", "04:00", "08:00", "12:00", "16:00", "20:00", "23:59"); - } - - response.put("data", data); - response.put("labels", labels); - response.put("title", "今日盈亏数据"); - System.out.println("返回的数据长度: " + data.size()); - System.out.println("返回的标签长度: " + labels.size()); - System.out.println("返回的标签: " + labels); - - } catch (Exception e) { - System.err.println("获取折线图1数据失败: " + e.getMessage()); - e.printStackTrace(); - - // 异常时使用默认数据 - List data = Arrays.asList(65, 59, 80, 81, 56, 55, 40); - List labels = Arrays.asList("1月", "2月", "3月", "4月", "5月", "6月", "7月"); - - response.put("data", data); - response.put("labels", labels); - response.put("title", "折线图1数据"); - } + // 模拟数据 - 实际项目中应该从数据库获取 + List data = Arrays.asList(65, 59, 80, 81, 56, 55, 40); + List labels = Arrays.asList("1月", "2月", "3月", "4月", "5月", "6月", "7月"); + + response.put("data", data); + response.put("labels", labels); + response.put("title", "折线图1数据"); return response; } diff --git a/src/main/java/com/tem/bocai/entity/CompletedToday.java b/src/main/java/com/tem/bocai/entity/CompletedToday.java index 42295a0..8e5dc29 100644 --- a/src/main/java/com/tem/bocai/entity/CompletedToday.java +++ b/src/main/java/com/tem/bocai/entity/CompletedToday.java @@ -18,7 +18,8 @@ public class CompletedToday { private String betId; // @Column(name = "time", nullable = false) - private String time; // + @Temporal(TemporalType.TIMESTAMP) + private Date time; // 改为Date类型 //下注金额 @Column(name = "bet_amount", nullable = false) diff --git a/src/main/java/com/tem/bocai/repository/CompletedTodayRepository.java b/src/main/java/com/tem/bocai/repository/CompletedTodayRepository.java index 3ded760..256fb28 100644 --- a/src/main/java/com/tem/bocai/repository/CompletedTodayRepository.java +++ b/src/main/java/com/tem/bocai/repository/CompletedTodayRepository.java @@ -4,11 +4,17 @@ package com.tem.bocai.repository; import com.tem.bocai.entity.CompletedToday; import com.tem.bocai.entity.LoginInfoResult; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.Date; import java.util.Optional; @Repository public interface CompletedTodayRepository extends JpaRepository { + @Query("SELECT SUM(c.resultAmount) FROM CompletedToday c WHERE c.time >= :createTime") + Optional sumResultAmountByCreateTimeAfter(@Param("createTime") Date createTime); + } diff --git a/src/main/java/com/tem/bocai/schedules/BetSchedule.java b/src/main/java/com/tem/bocai/schedules/BetSchedule.java index 4d95831..8de6978 100644 --- a/src/main/java/com/tem/bocai/schedules/BetSchedule.java +++ b/src/main/java/com/tem/bocai/schedules/BetSchedule.java @@ -1,5 +1,7 @@ package com.tem.bocai.schedules; +import com.tem.bocai.service.CompletedTodayService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @@ -7,14 +9,16 @@ import java.time.format.DateTimeFormatter; @Component public class BetSchedule { - + @Autowired + CompletedTodayService completedTodayService; // 从6:15分开始每隔5分钟投注一次(6:15, 6:20, 6:25...23:25) // @Scheduled(cron = "0 15/5 6-23 * * ?") + @Scheduled(cron = "*/9 * * * * ?") public void placeBet() { LocalDateTime now = LocalDateTime.now(); int hour = now.getHour(); int minute = now.getMinute(); - + completedTodayService.sumResultAmount(); // 检查是否在6:15到23:25之间 if ((hour < 6) || (hour == 6 && minute < 15) || (hour > 23) || (hour == 23 && minute > 25)) { diff --git a/src/main/java/com/tem/bocai/service/CompletedTodayService.java b/src/main/java/com/tem/bocai/service/CompletedTodayService.java index d90d234..d67a796 100644 --- a/src/main/java/com/tem/bocai/service/CompletedTodayService.java +++ b/src/main/java/com/tem/bocai/service/CompletedTodayService.java @@ -8,4 +8,6 @@ import java.util.List; public interface CompletedTodayService { void saveCompletedToday(List list); + + public void sumResultAmount(); } diff --git a/src/main/java/com/tem/bocai/service/impl/CompletedTodayServiceImpl.java b/src/main/java/com/tem/bocai/service/impl/CompletedTodayServiceImpl.java index bd6317d..66de4eb 100644 --- a/src/main/java/com/tem/bocai/service/impl/CompletedTodayServiceImpl.java +++ b/src/main/java/com/tem/bocai/service/impl/CompletedTodayServiceImpl.java @@ -16,16 +16,37 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Optional; @Service public class CompletedTodayServiceImpl implements CompletedTodayService { @Autowired private CompletedTodayRepository completedTodayRepository; + @Autowired + private LoginInfoRepository loginInfoRepository; @Override public void saveCompletedToday(List list) { completedTodayRepository.saveAll(list); } + + @Override + public void sumResultAmount() { + LoginInfoResult firstByOrderByCreateTimeDesc = loginInfoRepository.findFirstByOrderByCreateTimeDesc() + .orElse(null); + System.out.println("开始时间"+firstByOrderByCreateTimeDesc.getCreateTime()); + // 使用Optional版本 + Optional optionalTotal = completedTodayRepository.sumResultAmountByCreateTimeAfter(firstByOrderByCreateTimeDesc.getCreateTime()); + if (optionalTotal.isPresent()) { + Double total = optionalTotal.get(); + System.out.println("处理结果"+total); + // 处理结果 + } else { + System.out.println("没有符合条件的记录"); + // + } + } + } diff --git a/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java b/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java index 7dd8ae2..ea632a6 100644 --- a/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java +++ b/src/main/java/com/tem/bocai/util/CompletedTodayCrawler.java @@ -19,6 +19,9 @@ import us.codecraft.webmagic.selector.Html; import java.io.File; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -289,14 +292,34 @@ public class CompletedTodayCrawler implements PageProcessor { /** * 转换数据结构以适应数据库 */ + /** + * 转换数据结构以适应数据库(使用Java 8日期时间API) + */ private List convertForDatabase(List> betList) { List completedTodayList = new ArrayList<>(); + // 根据你实际的日期字符串格式调整 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + for (Map bet : betList) { CompletedToday completedToday = new CompletedToday(); completedToday.setBetId((String) bet.get("bet_id")); - completedToday.setTime((String) bet.get("time")); + + // 转换String时间到Date + try { + String timeStr = (String) bet.get("time"); + // 将LocalDateTime转换为Date + LocalDateTime localDateTime = LocalDateTime.parse(timeStr, formatter); + Date timeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); + completedToday.setTime(timeDate); + } catch (Exception e) { + // 处理日期解析异常,这里设置为当前时间作为默认值 + completedToday.setTime(new Date()); + // 也可以记录日志 + System.err.println("日期解析失败: " + bet.get("time")); + } + completedToday.setBetAmount((Double)bet.get("bet_amount")); completedToday.setResultAmount((Double) bet.get("result_amount")); completedToday.setResult((String) bet.get("result")); diff --git a/src/main/java/com/tem/bocai/util/SQLiteUtil.java b/src/main/java/com/tem/bocai/util/SQLiteUtil.java index c2bc6f9..88fe3b5 100644 --- a/src/main/java/com/tem/bocai/util/SQLiteUtil.java +++ b/src/main/java/com/tem/bocai/util/SQLiteUtil.java @@ -209,7 +209,7 @@ public class SQLiteUtil { if (data == null || data.getBetId() == null) continue; pstmt.setString(1, data.getBetId()); - pstmt.setString(2, data.getTime()); + pstmt.setDate(2, data.getTime()); pstmt.setDouble(3, data.getBetAmount() != null ? data.getBetAmount() : 0.0); pstmt.setString(4, data.getResult() != null ? data.getResult() : "未知"); pstmt.setDouble(5, data.getResultAmount() != null ? data.getResultAmount() : 0.0);