更新开始时间
This commit is contained in:
@@ -83,7 +83,7 @@ function updateChart1() {
|
|||||||
|
|
||||||
const option = {
|
const option = {
|
||||||
title: {
|
title: {
|
||||||
text: '今日盈亏数据',
|
text: '折线图1',
|
||||||
left: 'center'
|
left: 'center'
|
||||||
},
|
},
|
||||||
tooltip: {
|
tooltip: {
|
||||||
@@ -106,7 +106,7 @@ function updateChart1() {
|
|||||||
data: chartLabels.value,
|
data: chartLabels.value,
|
||||||
axisLabel: {
|
axisLabel: {
|
||||||
rotate: 45,
|
rotate: 45,
|
||||||
interval: chartLabels.value.length > 12 ? Math.floor(chartLabels.value.length / 12) : 0, // 根据标签数量动态调整间隔,确保至少显示一些标签
|
interval: 11, // 每12个标签显示一个,避免重叠
|
||||||
fontSize: 10
|
fontSize: 10
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -163,15 +163,8 @@ async function fetchChartData() {
|
|||||||
console.log('获取折线图数据');
|
console.log('获取折线图数据');
|
||||||
const response = await axios.get('http://localhost:8080/api/charts/line1');
|
const response = await axios.get('http://localhost:8080/api/charts/line1');
|
||||||
console.log('折线图数据响应:', response.data);
|
console.log('折线图数据响应:', response.data);
|
||||||
if (response.data) {
|
if (response.data && response.data.data) {
|
||||||
// 更新数据
|
|
||||||
if (response.data.data) {
|
|
||||||
chartData1.value = response.data.data;
|
chartData1.value = response.data.data;
|
||||||
}
|
|
||||||
// 更新标签
|
|
||||||
if (response.data.labels) {
|
|
||||||
chartLabels.value = response.data.labels;
|
|
||||||
}
|
|
||||||
// 确保数据长度与标签长度一致
|
// 确保数据长度与标签长度一致
|
||||||
if (chartData1.value.length !== chartLabels.value.length) {
|
if (chartData1.value.length !== chartLabels.value.length) {
|
||||||
console.warn('数据长度与标签长度不一致,使用默认数据');
|
console.warn('数据长度与标签长度不一致,使用默认数据');
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package com.tem.bocai.controller;
|
package com.tem.bocai.controller;
|
||||||
|
|
||||||
import com.tem.bocai.entity.CompletedToday;
|
|
||||||
import com.tem.bocai.entity.LotteryResult;
|
import com.tem.bocai.entity.LotteryResult;
|
||||||
import com.tem.bocai.repository.CompletedTodayRepository;
|
|
||||||
import com.tem.bocai.repository.LotteryResultRepository;
|
import com.tem.bocai.repository.LotteryResultRepository;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -17,76 +15,18 @@ public class ChartController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private LotteryResultRepository lotteryResultRepository;
|
private LotteryResultRepository lotteryResultRepository;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private CompletedTodayRepository completedTodayRepository;
|
|
||||||
|
|
||||||
// 获取折线图1数据
|
// 获取折线图1数据
|
||||||
@GetMapping("/charts/line1")
|
@GetMapping("/charts/line1")
|
||||||
public Map<String, Object> getLineChartData1() {
|
public Map<String, Object> getLineChartData1() {
|
||||||
Map<String, Object> response = new HashMap<>();
|
Map<String, Object> 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<CompletedToday> completedTodays = completedTodayRepository.findAll();
|
|
||||||
System.out.println("获取到" + completedTodays.size() + "条CompletedToday数据");
|
|
||||||
|
|
||||||
// 过滤出今日的数据
|
|
||||||
List<CompletedToday> 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<Double> data = new ArrayList<>();
|
|
||||||
List<String> 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<Integer> data = Arrays.asList(65, 59, 80, 81, 56, 55, 40);
|
List<Integer> data = Arrays.asList(65, 59, 80, 81, 56, 55, 40);
|
||||||
List<String> labels = Arrays.asList("1月", "2月", "3月", "4月", "5月", "6月", "7月");
|
List<String> labels = Arrays.asList("1月", "2月", "3月", "4月", "5月", "6月", "7月");
|
||||||
|
|
||||||
response.put("data", data);
|
response.put("data", data);
|
||||||
response.put("labels", labels);
|
response.put("labels", labels);
|
||||||
response.put("title", "折线图1数据");
|
response.put("title", "折线图1数据");
|
||||||
}
|
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ public class CompletedToday {
|
|||||||
private String betId; //
|
private String betId; //
|
||||||
|
|
||||||
@Column(name = "time", nullable = false)
|
@Column(name = "time", nullable = false)
|
||||||
private String time; //
|
@Temporal(TemporalType.TIMESTAMP)
|
||||||
|
private Date time; // 改为Date类型
|
||||||
|
|
||||||
//下注金额
|
//下注金额
|
||||||
@Column(name = "bet_amount", nullable = false)
|
@Column(name = "bet_amount", nullable = false)
|
||||||
|
|||||||
@@ -4,11 +4,17 @@ package com.tem.bocai.repository;
|
|||||||
import com.tem.bocai.entity.CompletedToday;
|
import com.tem.bocai.entity.CompletedToday;
|
||||||
import com.tem.bocai.entity.LoginInfoResult;
|
import com.tem.bocai.entity.LoginInfoResult;
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
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 org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface CompletedTodayRepository extends JpaRepository<CompletedToday, Long> {
|
public interface CompletedTodayRepository extends JpaRepository<CompletedToday, Long> {
|
||||||
|
|
||||||
|
@Query("SELECT SUM(c.resultAmount) FROM CompletedToday c WHERE c.time >= :createTime")
|
||||||
|
Optional<Double> sumResultAmountByCreateTimeAfter(@Param("createTime") Date createTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.tem.bocai.schedules;
|
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.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -7,14 +9,16 @@ import java.time.format.DateTimeFormatter;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class BetSchedule {
|
public class BetSchedule {
|
||||||
|
@Autowired
|
||||||
|
CompletedTodayService completedTodayService;
|
||||||
// 从6:15分开始每隔5分钟投注一次(6:15, 6:20, 6:25...23:25)
|
// 从6:15分开始每隔5分钟投注一次(6:15, 6:20, 6:25...23:25)
|
||||||
// @Scheduled(cron = "0 15/5 6-23 * * ?")
|
// @Scheduled(cron = "0 15/5 6-23 * * ?")
|
||||||
|
@Scheduled(cron = "*/9 * * * * ?")
|
||||||
public void placeBet() {
|
public void placeBet() {
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
int hour = now.getHour();
|
int hour = now.getHour();
|
||||||
int minute = now.getMinute();
|
int minute = now.getMinute();
|
||||||
|
completedTodayService.sumResultAmount();
|
||||||
// 检查是否在6:15到23:25之间
|
// 检查是否在6:15到23:25之间
|
||||||
if ((hour < 6) || (hour == 6 && minute < 15) ||
|
if ((hour < 6) || (hour == 6 && minute < 15) ||
|
||||||
(hour > 23) || (hour == 23 && minute > 25)) {
|
(hour > 23) || (hour == 23 && minute > 25)) {
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ import java.util.List;
|
|||||||
public interface CompletedTodayService {
|
public interface CompletedTodayService {
|
||||||
|
|
||||||
void saveCompletedToday(List<CompletedToday> list);
|
void saveCompletedToday(List<CompletedToday> list);
|
||||||
|
|
||||||
|
public void sumResultAmount();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,37 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class CompletedTodayServiceImpl implements CompletedTodayService {
|
public class CompletedTodayServiceImpl implements CompletedTodayService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private CompletedTodayRepository completedTodayRepository;
|
private CompletedTodayRepository completedTodayRepository;
|
||||||
|
@Autowired
|
||||||
|
private LoginInfoRepository loginInfoRepository;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveCompletedToday(List<CompletedToday> list) {
|
public void saveCompletedToday(List<CompletedToday> list) {
|
||||||
completedTodayRepository.saveAll(list);
|
completedTodayRepository.saveAll(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sumResultAmount() {
|
||||||
|
LoginInfoResult firstByOrderByCreateTimeDesc = loginInfoRepository.findFirstByOrderByCreateTimeDesc()
|
||||||
|
.orElse(null);
|
||||||
|
System.out.println("开始时间"+firstByOrderByCreateTimeDesc.getCreateTime());
|
||||||
|
// 使用Optional版本
|
||||||
|
Optional<Double> optionalTotal = completedTodayRepository.sumResultAmountByCreateTimeAfter(firstByOrderByCreateTimeDesc.getCreateTime());
|
||||||
|
if (optionalTotal.isPresent()) {
|
||||||
|
Double total = optionalTotal.get();
|
||||||
|
System.out.println("处理结果"+total);
|
||||||
|
// 处理结果
|
||||||
|
} else {
|
||||||
|
System.out.println("没有符合条件的记录");
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ import us.codecraft.webmagic.selector.Html;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
@@ -289,14 +292,34 @@ public class CompletedTodayCrawler implements PageProcessor {
|
|||||||
/**
|
/**
|
||||||
* 转换数据结构以适应数据库
|
* 转换数据结构以适应数据库
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* 转换数据结构以适应数据库(使用Java 8日期时间API)
|
||||||
|
*/
|
||||||
private List<CompletedToday> convertForDatabase(List<Map<String, Object>> betList) {
|
private List<CompletedToday> convertForDatabase(List<Map<String, Object>> betList) {
|
||||||
List<CompletedToday> completedTodayList = new ArrayList<>();
|
List<CompletedToday> completedTodayList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 根据你实际的日期字符串格式调整
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
for (Map<String, Object> bet : betList) {
|
for (Map<String, Object> bet : betList) {
|
||||||
CompletedToday completedToday = new CompletedToday();
|
CompletedToday completedToday = new CompletedToday();
|
||||||
|
|
||||||
completedToday.setBetId((String) bet.get("bet_id"));
|
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.setBetAmount((Double)bet.get("bet_amount"));
|
||||||
completedToday.setResultAmount((Double) bet.get("result_amount"));
|
completedToday.setResultAmount((Double) bet.get("result_amount"));
|
||||||
completedToday.setResult((String) bet.get("result"));
|
completedToday.setResult((String) bet.get("result"));
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ public class SQLiteUtil {
|
|||||||
if (data == null || data.getBetId() == null) continue;
|
if (data == null || data.getBetId() == null) continue;
|
||||||
|
|
||||||
pstmt.setString(1, data.getBetId());
|
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.setDouble(3, data.getBetAmount() != null ? data.getBetAmount() : 0.0);
|
||||||
pstmt.setString(4, data.getResult() != null ? data.getResult() : "未知");
|
pstmt.setString(4, data.getResult() != null ? data.getResult() : "未知");
|
||||||
pstmt.setDouble(5, data.getResultAmount() != null ? data.getResultAmount() : 0.0);
|
pstmt.setDouble(5, data.getResultAmount() != null ? data.getResultAmount() : 0.0);
|
||||||
|
|||||||
Reference in New Issue
Block a user