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);
});
希望這些修改能滿足你的需求。如果有任何其他問題或需要進一步的幫助,請隨時提問。