diff --git a/bocai.db b/bocai.db index 2fc98b4..2a8f087 100644 Binary files a/bocai.db and b/bocai.db differ diff --git a/frontend/src/components/index.vue b/frontend/src/components/index.vue index 1c1f770..c914c72 100644 --- a/frontend/src/components/index.vue +++ b/frontend/src/components/index.vue @@ -83,7 +83,7 @@ function updateChart1() { const option = { title: { - text: '今日盈亏数据', + text: '折线图1', left: 'center' }, tooltip: { @@ -106,7 +106,7 @@ function updateChart1() { data: chartLabels.value, axisLabel: { rotate: 45, - interval: chartLabels.value.length > 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);