/**
* 分类数据总量
* @return
*/
@Override
public DataDateStatistics sortDataCount(String year) {
//按年或者按月统计
if (StringUtils.isBlank(year)){
//统计前十年数据
Calendar cal = Calendar.getInstance();
int finishYear = cal.get(Calendar.YEAR);
int beginYear = finishYear - 9;
List<Integer> xAxis = new ArrayList<>();
while(beginYear < finishYear + 1){
xAxis.add(beginYear);
beginYear += 1;
}
//todo 按名称排序
List<SortDataCount> sortDataCounts = dataStatisticsMapper.sortDataCountYear();
return dataConvert(sortDataCounts,xAxis);
}else {
//获取月份
List<Integer> xAxis = new ArrayList<>();
int month = 1;
while(xAxis.size() < 12){
xAxis.add(month);
month += 1;
}
List<SortDataCount> sortDataCounts = dataStatisticsMapper.sortDataCountMonth(year);
return dataConvert(sortDataCounts, xAxis);
}
}
/**
* 数据转化、返回
* @param sortDataCounts
* @param xAxis
* @return
*/
public static DataDateStatistics dataConvert(List<SortDataCount> sortDataCounts, List<Integer> xAxis){
DataDateStatistics dataDateStatistics = new DataDateStatistics();
List<DataInfo> dataInfos = new ArrayList<>();
for (SortDataCount sortDataCount : sortDataCounts) {
if (CollectionUtil.isEmpty(dataInfos) ||
!sortDataCount.getName().equals(dataInfos.get(dataInfos.size()-1).getTitle())){
DataInfo dataInfo = new DataInfo();
//初始化y轴数据
List<Integer> yAxis = new ArrayList<>();
while (yAxis.size() < xAxis.size()) {
yAxis.add(0);
}
dataInfo.setYAxis(yAxis);
dataInfo.setTitle(sortDataCount.getName());
int index = xAxis.indexOf(sortDataCount.getDate());
dataInfo.getYAxis().set(index, sortDataCount.getValue());
dataInfos.add(dataInfo);
}else {
DataInfo dataInfo = dataInfos.get(dataInfos.size() - 1);
int index = xAxis.indexOf(sortDataCount.getDate());
dataInfo.getYAxis().set(index, sortDataCount.getValue());
}
}
dataDateStatistics.setXAxis(xAxis);
dataDateStatistics.setDataInfos(dataInfos);
return dataDateStatistics;
}
sql语句
//按月
select count(*) as '数量',date_format(publish_time,'%Y-%m') as month from document
where publish_time BETWEEN '2021-01-01' and '2022-01-01'
group by month;
//按年
select count(*) as '数量',date_format(publish_time,'%Y') as month from document
where publish_time BETWEEN '2011-01-01' and '2022-01-01'
group by month;