前15天查询次数曲线
public int getAuditCount() {
int num = 0;
try {
Example example = new Example(AuditInfo.class);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date today = df.parse(df.format(new Date()));
Date yesterday = df.parse(df.format(new Date().getTime() - 1000 * 60 * 60 * 24));
example.createCriteria().andBetween("queryTime", yesterday, today);
num = auditInfoMapper.selectCountByExample(example);
} catch (Exception e) {
log.error("查询异常", e);
return num;
}
return num;
}这是我的代码,相关的东西我全有了。现在我想获得自今天起前15天每天的查询数据,并返回前端,以便让前端绘制折线图。我怎么修改代码
要获取自今天起前15天每天的查询数据,并返回给前端以绘制折线图,你需要进行以下步骤:
- 计算日期范围:从今天开始,向前计算15天的日期。
- 构造查询条件:为每一天构造查询条件,并获取当天的记录数。
- 存储结果:将每天的查询结果存储在一个列表中,以便返回给前端。
以下是修改后的代码示例:
修改后的代码
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AuditService {
private static final Logger log = LoggerFactory.getLogger(AuditService.class);
private AuditInfoMapper auditInfoMapper;
public AuditService(AuditInfoMapper auditInfoMapper) {
this.auditInfoMapper = auditInfoMapper;
}
public List<Integer> getAuditCountsForLast15Days() {
List<Integer> counts = new ArrayList<>();
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
for (int i = 0; i < 15; i++) {
// 计算当天的日期
Date today = calendar.getTime();
Date yesterday = (Date) today.clone();
calendar.add(Calendar.DAY_OF_YEAR, -1);
// 格式化日期
String todayStr = df.format(today);
String yesterdayStr = df.format(yesterday);
// 解析日期
Date parsedToday = df.parse(todayStr);
Date parsedYesterday = df.parse(yesterdayStr);
// 构造查询条件
Example example = new Example(AuditInfo.class);
example.createCriteria().andBetween("queryTime", parsedYesterday, parsedToday);
// 查询记录数
int count = auditInfoMapper.selectCountByExample(example);
counts.add(count);
}
} catch (ParseException e) {
log.error("日期解析异常", e);
} catch (Exception e) {
log.error("查询异常", e);
}
return counts;
}
}
详细说明
-
计算日期范围:
- 使用
Calendar
类来计算从今天开始前15天的日期。 - 每次循环中,计算当天的日期和前一天的日期。
- 使用
-
构造查询条件:
- 使用
SimpleDateFormat
格式化日期。 - 解析格式化后的日期字符串。
- 构造
Example
对象,并设置查询条件为queryTime
在前一天和当天之间。
- 使用
-
存储结果:
- 将每天的查询结果(记录数)存储在
counts
列表中。
- 将每天的查询结果(记录数)存储在
-
返回结果:
- 最终返回
counts
列表,包含过去15天每天的记录数。
- 最终返回
前端处理
前端可以接收这个列表,并将其用于绘制折线图。假设你使用的是 Vue.js 和 ECharts,以下是一个简单的示例:
前端代码示例
<template>
<div>
<div id="chart" style="width: 600px; height: 400px;"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
import axios from 'axios';
export default {
data() {
return {
auditCounts: []
};
},
mounted() {
this.fetchAuditCounts();
},
methods: {
async fetchAuditCounts() {
try {
const response = await axios.get('/api/getAuditCountsForLast15Days');
this.auditCounts = response.data;
this.initChart();
} catch (error) {
console.error('Error fetching audit counts:', error);
}
},
initChart() {
const chartDom = document.getElementById('chart');
const myChart = echarts.init(chartDom);
const option = {
title: {
text: '过去15天的审核记录数'
},
tooltip: {
trigger: 'axis'
},
xAxis: {
type: 'category',
data: this.getPast15Days()
},
yAxis: {
type: 'value'
},
series: [
{
data: this.auditCounts,
type: 'line'
}
]
};
myChart.setOption(option);
},
getPast15Days() {
const dates = [];
const today = new Date();
for (let i = 0; i < 15; i++) {
const date = new Date(today);
date.setDate(today.getDate() - i);
dates.push(date.toLocaleDateString());
}
return dates.reverse();
}
}
};
</script>
说明
-
获取数据:
- 使用
axios
发送请求,获取过去15天的审核记录数。 - 将获取到的数据存储在
auditCounts
中。
- 使用
-
初始化图表:
- 使用 ECharts 初始化图表,并设置数据和配置项。
xAxis
的数据是过去15天的日期,series
的数据是对应的记录数。
-
生成日期标签:
getPast15Days
方法生成过去15天的日期标签,用于图表的 x 轴。
通过这些步骤,你可以获取过去15天每天的查询数据,并在前端绘制折线图。如果有任何具体问题或需要进一步的帮助,请随时提问。
好的,我将在你提供的代码基础上进行修改,以实现获取自今天起前15天每天的查询数据。以下是修改后的后端代码:
public List<Integer> getAuditCountsForLast15Days() {
List<Integer> counts = new ArrayList<>();
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
for (int i = 0; i < 15; i++) {
// 计算当天的日期
Date today = calendar.getTime();
Date yesterday = (Date) today.clone();
calendar.add(Calendar.DAY_OF_YEAR, -1);
// 格式化日期
String todayStr = df.format(today);
String yesterdayStr = df.format(yesterday);
// 解析日期
Date parsedToday = df.parse(todayStr);
Date parsedYesterday = df.parse(yesterdayStr);
// 构造查询条件
Example example = new Example(AuditInfo.class);
example.createCriteria().andBetween("queryTime", parsedYesterday, parsedToday);
// 查询记录数
int count = auditInfoMapper.selectCountByExample(example);
counts.add(count);
}
} catch (ParseException e) {
log.error("日期解析异常", e);
} catch (Exception e) {
log.error("查询异常", e);
}
return counts;
}
详细说明
-
计算日期范围:
- 使用
Calendar
类来计算从今天开始前15天的日期。 - 每次循环中,计算当天的日期和前一天的日期。
- 使用
-
构造查询条件:
- 使用
SimpleDateFormat
格式化日期。 - 解析格式化后的日期字符串。
- 构造
Example
对象,并设置查询条件为queryTime
在前一天和当天之间。
- 使用
-
存储结果:
- 将每天的查询结果(记录数)存储在
counts
列表中。
- 将每天的查询结果(记录数)存储在
-
返回结果:
- 最终返回
counts
列表,包含过去15天每天的记录数。
- 最终返回
方法签名
- 返回类型:
List<Integer>
,包含过去15天每天的记录数。 - 方法名:
getAuditCountsForLast15Days
,用于获取过去15天每天的记录数。
使用示例
假设你在控制器中调用这个方法并返回给前端:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class AuditController {
private final AuditService auditService;
public AuditController(AuditService auditService) {
this.auditService = auditService;
}
@GetMapping("/api/getAuditCountsForLast15Days")
public List<Integer> getAuditCountsForLast15Days() {
return auditService.getAuditCountsForLast15Days();
}
}
前端调用示例
前端可以通过发送 HTTP GET 请求来获取这些数据:
axios.get('/api/getAuditCountsForLast15Days')
.then(response => {
const auditCounts = response.data;
// 处理数据并绘制图表
})
.catch(error => {
console.error('Error fetching audit counts:', error);
});
希望这些修改能满足你的需求。如果有任何其他问题或需要进一步的帮助,请随时提问。