refactor: 重构访问统计接口

This commit is contained in:
Ray.Hao
2024-12-08 16:36:24 +08:00
parent c17077aba8
commit 919d2883e4
7 changed files with 78 additions and 74 deletions

View File

@@ -53,11 +53,11 @@ public class LogController {
return Result.success(data); return Result.success(data);
} }
@Operation(summary = "获取统计数据") @Operation(summary = "获取访问统计")
@GetMapping("/visit-stats") @GetMapping("/visit-stats")
public Result<List<VisitStatsVO>> getVisitStats() { public Result<VisitStatsVO> getVisitStats() {
List<VisitStatsVO> list = logService.getVisitStats(); VisitStatsVO result = logService.getVisitStats();
return Result.success(list); return Result.success(result);
} }
} }

View File

@@ -2,6 +2,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.bo.VisitCount; import com.youlai.boot.system.model.bo.VisitCount;
import com.youlai.boot.system.model.bo.VisitStatsBO;
import com.youlai.boot.system.model.entity.Log; import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery; import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
@@ -13,7 +14,7 @@ import java.util.List;
/** /**
* 系统日志 数据访问层 * 系统日志数据访问层
* *
* @author Ray * @author Ray
* @since 2.10.0 * @since 2.10.0
@@ -23,10 +24,6 @@ public interface LogMapper extends BaseMapper<Log> {
/** /**
* 获取日志分页列表 * 获取日志分页列表
*
* @param page
* @param queryParams
* @return
*/ */
Page<LogPageVO> getLogPage(Page<LogPageVO> page, LogPageQuery queryParams); Page<LogPageVO> getLogPage(Page<LogPageVO> page, LogPageQuery queryParams);
@@ -35,7 +32,6 @@ public interface LogMapper extends BaseMapper<Log> {
* *
* @param startDate 开始日期 yyyy-MM-dd * @param startDate 开始日期 yyyy-MM-dd
* @param endDate 结束日期 yyyy-MM-dd * @param endDate 结束日期 yyyy-MM-dd
* @return
*/ */
List<VisitCount> getPvCounts(String startDate, String endDate); List<VisitCount> getPvCounts(String startDate, String endDate);
@@ -44,23 +40,18 @@ public interface LogMapper extends BaseMapper<Log> {
* *
* @param startDate 开始日期 yyyy-MM-dd * @param startDate 开始日期 yyyy-MM-dd
* @param endDate 结束日期 yyyy-MM-dd * @param endDate 结束日期 yyyy-MM-dd
* @return
*/ */
List<VisitCount> getIpCounts(String startDate, String endDate); List<VisitCount> getIpCounts(String startDate, String endDate);
/** /**
* 获取浏览量(PV)统计数据 * 获取浏览量(PV)统计
*
* @return
*/ */
VisitStatsVO getPvStats(); VisitStatsBO getPvStats();
/** /**
* 获取IP统计数据 * 获取访问IP统计
*
* @return
*/ */
VisitStatsVO getIpStats(); VisitStatsBO getUvStats();
} }

View File

@@ -0,0 +1,28 @@
package com.youlai.boot.system.model.bo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* 访问量统计业务对象
*
* @author Ray.Hao
* @since 2024/7/2
*/
@Getter
@Setter
public class VisitStatsBO {
@Schema(description = "今日访问量 (PV)")
private Integer todayCount;
@Schema(description = "累计访问量 ")
private Integer totalCount;
@Schema(description = "页面访问量增长率")
private BigDecimal growthRate;
}

View File

@@ -7,32 +7,32 @@ import lombok.Setter;
import java.math.BigDecimal; import java.math.BigDecimal;
/** /**
* 访问量统计VO * 访问量统计视图对象
* *
* @author Ray * @author Ray.Hao
* @since 2024/7/2 * @since 2024/7/2
*/ */
@Schema(description = "访问量统计VO") @Schema(description = "访问量统计视图对象")
@Getter @Getter
@Setter @Setter
public class VisitStatsVO { public class VisitStatsVO {
@Schema(description = "统计类型") @Schema(description = "今日独立访客数 (UV)")
private String type; private Integer todayUvCount;
@Schema(description = "标题") @Schema(description = "累计独立访客数 (UV)")
private String title; private Integer totalUvCount;
@Schema(description = "今日访问量") @Schema(description = "独立访客增长率")
private Integer todayCount; private BigDecimal uvGrowthRate;
@Schema(description = "总访问量") @Schema(description = "今日页面浏览量 (PV)")
private Integer totalCount; private Integer todayPvCount;
@Schema(description = "增长率") @Schema(description = "累计页面浏览量 (PV)")
private BigDecimal growthRate; private Integer totalPvCount;
@Schema(description = "统计粒度标签") @Schema(description = "页面浏览量增长率")
private String granularityLabel; private BigDecimal pvGrowthRate;
} }

View File

@@ -14,16 +14,13 @@ import java.util.List;
/** /**
* 系统日志 服务接口 * 系统日志 服务接口
* *
* @author Ray * @author Ray.Hao
* @since 2.10.0 * @since 2.10.0
*/ */
public interface LogService extends IService<Log> { public interface LogService extends IService<Log> {
/** /**
* 获取日志分页列表 * 获取日志分页列表
*
* @param queryParams 查询参数
* @return
*/ */
Page<LogPageVO> getLogPage(LogPageQuery queryParams); Page<LogPageVO> getLogPage(LogPageQuery queryParams);
@@ -33,15 +30,12 @@ public interface LogService extends IService<Log> {
* *
* @param startDate 开始时间 * @param startDate 开始时间
* @param endDate 结束时间 * @param endDate 结束时间
* @return
*/ */
VisitTrendVO getVisitTrend(LocalDate startDate, LocalDate endDate); VisitTrendVO getVisitTrend(LocalDate startDate, LocalDate endDate);
/** /**
* 获取访问统计 * 获取访问统计
*
* @return
*/ */
List<VisitStatsVO> getVisitStats(); VisitStatsVO getVisitStats();
} }

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.youlai.boot.system.mapper.LogMapper; import com.youlai.boot.system.mapper.LogMapper;
import com.youlai.boot.system.model.bo.VisitCount; import com.youlai.boot.system.model.bo.VisitCount;
import com.youlai.boot.system.model.bo.VisitStatsBO;
import com.youlai.boot.system.model.entity.Log; import com.youlai.boot.system.model.entity.Log;
import com.youlai.boot.system.model.query.LogPageQuery; import com.youlai.boot.system.model.query.LogPageQuery;
import com.youlai.boot.system.model.vo.LogPageVO; import com.youlai.boot.system.model.vo.LogPageVO;
@@ -22,7 +23,7 @@ import java.util.stream.Collectors;
/** /**
* 系统日志 服务实现类 * 系统日志 服务实现类
* *
* @author Ray * @author Ray.Hao
* @since 2.10.0 * @since 2.10.0
*/ */
@Service @Service
@@ -33,7 +34,7 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log>
* 获取日志分页列表 * 获取日志分页列表
* *
* @param queryParams 查询参数 * @param queryParams 查询参数
* @return * @return 日志分页列表
*/ */
@Override @Override
public Page<LogPageVO> getLogPage(LogPageQuery queryParams) { public Page<LogPageVO> getLogPage(LogPageQuery queryParams) {
@@ -84,39 +85,29 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log>
} }
/** /**
* 获取访问统计 * 访问统计
*
* @return
*/ */
@Override @Override
public List<VisitStatsVO> getVisitStats() { public VisitStatsVO getVisitStats() {
List<VisitStatsVO> list = new ArrayList<>(); VisitStatsVO result = new VisitStatsVO();
// 访问量 // 访客数统计(UV)
VisitStatsVO pvStats = this.baseMapper.getPvStats(); VisitStatsBO uvStats = this.baseMapper.getUvStats();
pvStats.setTitle("浏览量"); if(uvStats!=null){
pvStats.setType("pv"); result.setTodayUvCount(uvStats.getTodayCount());
pvStats.setGranularityLabel(""); result.setTotalUvCount(uvStats.getTotalCount());
list.add(pvStats); result.setUvGrowthRate(uvStats.getGrowthRate());
}
// 访客数 // 浏览量统计(PV)
VisitStatsVO uvStats = new VisitStatsVO(); VisitStatsBO pvStats = this.baseMapper.getPvStats();
uvStats.setTitle("访客数"); if(pvStats!=null){
uvStats.setType("uv"); result.setTodayPvCount(pvStats.getTodayCount());
uvStats.setTodayCount(100); result.setTotalPvCount(pvStats.getTotalCount());
uvStats.setTotalCount(2000); result.setPvGrowthRate(pvStats.getGrowthRate());
uvStats.setGrowthRate(BigDecimal.ZERO); }
uvStats.setGranularityLabel("");
list.add(uvStats);
// IP数 return result;
VisitStatsVO ipStats = this.baseMapper.getIpStats();
ipStats.setTitle("IP数");
ipStats.setType("ip");
ipStats.setGranularityLabel("");
list.add(ipStats);
return list;
} }
} }

View File

@@ -74,7 +74,7 @@
</select> </select>
<!-- 获取访问量(PV)统计数据 --> <!-- 获取访问量(PV)统计数据 -->
<select id="getPvStats" resultType="com.youlai.boot.system.model.vo.VisitStatsVO"> <select id="getPvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO">
SELECT SELECT
COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayCount, COUNT(CASE WHEN DATE(create_time) = CURDATE() THEN 1 END) AS todayCount,
COUNT(*) AS totalCount, COUNT(*) AS totalCount,
@@ -94,7 +94,7 @@
</select> </select>
<!-- 获取IP统计数据 --> <!-- 获取IP统计数据 -->
<select id="getIpStats" resultType="com.youlai.boot.system.model.vo.VisitStatsVO"> <select id="getUvStats" resultType="com.youlai.boot.system.model.bo.VisitStatsBO">
SELECT SELECT
COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount, COUNT(DISTINCT CASE WHEN DATE(create_time) = CURDATE() THEN ip END) AS todayCount,
COUNT(DISTINCT ip) AS totalCount, COUNT(DISTINCT ip) AS totalCount,