📈 完善数据分析功能
This commit is contained in:
parent
302620425d
commit
558c989254
@ -0,0 +1,15 @@
|
||||
package com.rymcu.vertical.dto.admin;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
*/
|
||||
@Data
|
||||
public class DashboardData {
|
||||
|
||||
private String label;
|
||||
|
||||
private Integer value;
|
||||
|
||||
}
|
@ -1,7 +1,10 @@
|
||||
package com.rymcu.vertical.mapper;
|
||||
|
||||
import com.rymcu.vertical.dto.admin.DashboardData;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
*/
|
||||
@ -41,4 +44,38 @@ public interface DashboardMapper {
|
||||
* @return
|
||||
*/
|
||||
Integer selectTodayViewNum();
|
||||
|
||||
/**
|
||||
* 获取最近 30 天文章数据
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectLastThirtyDaysArticleData();
|
||||
|
||||
/**
|
||||
* 获取最近 30 天文章数据
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectLastThirtyDaysUserData();
|
||||
|
||||
/**
|
||||
* 获取最近 30 天文章数据
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectLastThirtyDaysVisitData();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectHistoryArticleData();
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectHistoryUserData();
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
List<DashboardData> selectHistoryVisitData();
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ package com.rymcu.vertical.service;
|
||||
|
||||
import com.rymcu.vertical.dto.admin.Dashboard;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
*/
|
||||
@ -12,4 +14,16 @@ public interface DashboardService {
|
||||
* @return
|
||||
* */
|
||||
Dashboard dashboard();
|
||||
|
||||
/**
|
||||
* 统计最近三十天数据
|
||||
* @return
|
||||
*/
|
||||
Map lastThirtyDaysData();
|
||||
|
||||
/**
|
||||
* 获取历史数据
|
||||
* @return
|
||||
*/
|
||||
Map history();
|
||||
}
|
||||
|
@ -1,11 +1,14 @@
|
||||
package com.rymcu.vertical.service.impl;
|
||||
|
||||
import com.rymcu.vertical.dto.admin.Dashboard;
|
||||
import com.rymcu.vertical.dto.admin.DashboardData;
|
||||
import com.rymcu.vertical.mapper.DashboardMapper;
|
||||
import com.rymcu.vertical.service.DashboardService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
@ -27,4 +30,151 @@ public class DashboardServiceImpl implements DashboardService {
|
||||
dashboard.setTodayViewNum(dashboardMapper.selectTodayViewNum());
|
||||
return dashboard;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map lastThirtyDaysData() {
|
||||
Map map = new HashMap(4);
|
||||
ArrayList<String> dates = new ArrayList(30);
|
||||
ArrayList<Integer> articleData = new ArrayList(30);
|
||||
ArrayList<Integer> userData = new ArrayList(30);
|
||||
ArrayList<Integer> visitData = new ArrayList(30);
|
||||
List<DashboardData> articles = dashboardMapper.selectLastThirtyDaysArticleData();
|
||||
List<DashboardData> users = dashboardMapper.selectLastThirtyDaysUserData();
|
||||
List<DashboardData> visits = dashboardMapper.selectLastThirtyDaysVisitData();
|
||||
LocalDate now = LocalDate.now().plusDays(1);
|
||||
LocalDate localDate = LocalDate.now().plusDays(-29);
|
||||
while (now.isAfter(localDate)) {
|
||||
String date = localDate.toString();
|
||||
dates.add(date);
|
||||
|
||||
articles.forEach(article->{
|
||||
if (date.equals(article.getLabel())) {
|
||||
articleData.add(article.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (articleData.size() < dates.size()) {
|
||||
articleData.add(0);
|
||||
}
|
||||
|
||||
users.forEach(user->{
|
||||
if (date.equals(user.getLabel())) {
|
||||
userData.add(user.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (userData.size() < dates.size()) {
|
||||
userData.add(0);
|
||||
}
|
||||
|
||||
visits.forEach(visit->{
|
||||
if (date.equals(visit.getLabel())) {
|
||||
visitData.add(visit.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (visitData.size() < dates.size()) {
|
||||
visitData.add(0);
|
||||
}
|
||||
|
||||
localDate = localDate.plusDays(1);
|
||||
}
|
||||
map.put("dates", dates);
|
||||
map.put("articles", articleData);
|
||||
map.put("users", userData);
|
||||
map.put("visits", visitData);
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map history() {
|
||||
Map map = new HashMap(4);
|
||||
ArrayList<String> dates = new ArrayList(30);
|
||||
ArrayList<Integer> articleData = new ArrayList(30);
|
||||
ArrayList<Integer> userData = new ArrayList(30);
|
||||
ArrayList<Integer> visitData = new ArrayList(30);
|
||||
List<DashboardData> articles = dashboardMapper.selectHistoryArticleData();
|
||||
List<DashboardData> users = dashboardMapper.selectHistoryUserData();
|
||||
List<DashboardData> visits = dashboardMapper.selectHistoryVisitData();
|
||||
LocalDate now = LocalDate.now().plusMonths(1);
|
||||
LocalDate localDate = LocalDate.now().plusYears(-1).plusMonths(1);
|
||||
while (now.getYear() >= localDate.getYear()) {
|
||||
if (now.getYear() == localDate.getYear()) {
|
||||
if (now.getMonthValue() > localDate.getMonthValue()){
|
||||
String date = localDate.getYear() + "-" + (localDate.getMonthValue() < 10 ? "0" + localDate.getMonthValue() : localDate.getMonthValue());
|
||||
dates.add(date);
|
||||
|
||||
articles.forEach(article->{
|
||||
if (date.equals(article.getLabel())) {
|
||||
articleData.add(article.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (articleData.size() < dates.size()) {
|
||||
articleData.add(0);
|
||||
}
|
||||
|
||||
users.forEach(user->{
|
||||
if (date.equals(user.getLabel())) {
|
||||
userData.add(user.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (userData.size() < dates.size()) {
|
||||
userData.add(0);
|
||||
}
|
||||
|
||||
visits.forEach(visit->{
|
||||
if (date.equals(visit.getLabel())) {
|
||||
visitData.add(visit.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (visitData.size() < dates.size()) {
|
||||
visitData.add(0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
String date = localDate.getYear() + "-" + (localDate.getMonthValue() < 10 ? "0" + localDate.getMonthValue() : localDate.getMonthValue());
|
||||
dates.add(date);
|
||||
|
||||
articles.forEach(article->{
|
||||
if (date.equals(article.getLabel())) {
|
||||
articleData.add(article.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (articleData.size() < dates.size()) {
|
||||
articleData.add(0);
|
||||
}
|
||||
|
||||
users.forEach(user->{
|
||||
if (date.equals(user.getLabel())) {
|
||||
userData.add(user.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (userData.size() < dates.size()) {
|
||||
userData.add(0);
|
||||
}
|
||||
|
||||
visits.forEach(visit->{
|
||||
if (date.equals(visit.getLabel())) {
|
||||
visitData.add(visit.getValue());
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (visitData.size() < dates.size()) {
|
||||
visitData.add(0);
|
||||
}
|
||||
}
|
||||
|
||||
localDate = localDate.plusMonths(1);
|
||||
}
|
||||
map.put("dates", dates);
|
||||
map.put("articles", articleData);
|
||||
map.put("users", userData);
|
||||
map.put("visits", visitData);
|
||||
return map;
|
||||
}
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ronger
|
||||
@ -21,8 +22,20 @@ public class DashboardController {
|
||||
private DashboardService dashboardService;
|
||||
|
||||
@GetMapping
|
||||
public GlobalResult dashboard(){
|
||||
public GlobalResult dashboard() {
|
||||
Dashboard dashboard = dashboardService.dashboard();
|
||||
return GlobalResultGenerator.genSuccessResult(dashboard);
|
||||
}
|
||||
|
||||
@GetMapping("/last-thirty-days")
|
||||
public GlobalResult LastThirtyDaysData() {
|
||||
Map map = dashboardService.lastThirtyDaysData();
|
||||
return GlobalResultGenerator.genSuccessResult(map);
|
||||
}
|
||||
|
||||
@GetMapping("/history")
|
||||
public GlobalResult history() {
|
||||
Map map = dashboardService.history();
|
||||
return GlobalResultGenerator.genSuccessResult(map);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.rymcu.vertical.mapper.DashboardMapper">
|
||||
<resultMap id="DashboardDataResultMap" type="com.rymcu.vertical.dto.admin.DashboardData">
|
||||
<result column="label" property="label"></result>
|
||||
<result column="value" property="value"></result>
|
||||
</resultMap>
|
||||
<select id="selectUserCount" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_user
|
||||
</select>
|
||||
@ -19,7 +23,31 @@
|
||||
select count(*) from vertical_visit
|
||||
</select>
|
||||
<select id="selectTodayViewNum" resultType="java.lang.Integer">
|
||||
select count(*) from vertical_visit where created_time between date_sub(sysdate(),interval 1 day)
|
||||
and date_sub(sysdate(),interval - 1 day)
|
||||
select count(*) from vertical_visit where created_time between str_to_date(date_format(sysdate(),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
and str_to_date(date_format(date_sub(sysdate(),interval - 1 day),'%Y-%m-%d'),'%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectLastThirtyDaysArticleData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m-%d') as label from vertical_article
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 30 day),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectLastThirtyDaysUserData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m-%d') as label from vertical_user
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 30 day),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectLastThirtyDaysVisitData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m-%d') as label from vertical_visit
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 30 day),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m-%d')
|
||||
</select>
|
||||
<select id="selectHistoryArticleData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m') as label from vertical_article
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 1 year),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m')
|
||||
</select>
|
||||
<select id="selectHistoryUserData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m') as label from vertical_user
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 1 year),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m')
|
||||
</select>
|
||||
<select id="selectHistoryVisitData" resultMap="DashboardDataResultMap">
|
||||
select COUNT(*) as value, date_format(created_time, '%Y-%m') as label from vertical_visit
|
||||
where created_time > str_to_date(date_format(date_sub(sysdate(),interval + 1 year),'%Y-%m-%d'),'%Y-%m-%d') GROUP BY date_format(created_time, '%Y-%m')
|
||||
</select>
|
||||
</mapper>
|
Loading…
Reference in New Issue
Block a user