diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java index a9be28b76f..04bcbf787b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java @@ -80,6 +80,12 @@ public class AlertMessageController { return success(BeanUtils.toBean(pageResult, AlertMessageRespVO.class)); } + @GetMapping("/statistics") + @Operation(summary = "统计预警信息") + public CommonResult getAlertMessageStatistics(@Valid AlertMessageStatisticsReqVO statisticsReqVO) { + return success(alertMessageService.getAlertMessageStatistics(statisticsReqVO)); + } + @GetMapping("/export-excel") @Operation(summary = "导出预警信息 Excel") @ApiAccessLog(operateType = EXPORT) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsReqVO.java new file mode 100644 index 0000000000..c194af9da9 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.controller.admin.alertmessage.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 预警信息统计 Request VO") +@Data +public class AlertMessageStatisticsReqVO { + + @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "机构ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "30089") + @NotNull(message = "机构ID不能为空") + private Integer orgid; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsRespVO.java new file mode 100644 index 0000000000..0997d083ea --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertMessageStatisticsRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.system.controller.admin.alertmessage.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import java.util.List; +import java.time.LocalDate; + +@Schema(description = "管理后台 - 预警信息统计 Response VO") +@Data +public class AlertMessageStatisticsRespVO { + + @Schema(description = "总数量", example = "100") + private Long totalCount; + + @Schema(description = "已读数量", example = "80") + private Long readCount; + + @Schema(description = "未读数量", example = "20") + private Long unreadCount; + + @Schema(description = "按日期分组的预警信息数据") + private List dailyData; + + @Schema(description = "按日期分组的预警信息数据") + @Data + public static class DailyAlertData { + @Schema(description = "日期", example = "2024-01-01") + private LocalDate date; + + @Schema(description = "该日期的预警总数", example = "10") + private Long totalCount; + + @Schema(description = "该日期的已读数量", example = "8") + private Long readCount; + + @Schema(description = "该日期的未读数量", example = "2") + private Long unreadCount; + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/RecordController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/RecordController.java index 0056416088..752d985402 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/RecordController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/RecordController.java @@ -74,6 +74,12 @@ public class RecordController { return success(BeanUtils.toBean(pageResult, RecordRespVO.class)); } + @GetMapping("/statistics") + @Operation(summary = "统计会员回访记录") + public CommonResult getRecordStatistics(@Valid RecordStatisticsReqVO statisticsReqVO) { + return success(recordService.getRecordStatistics(statisticsReqVO)); + } + @GetMapping("/export-excel") @Operation(summary = "导出会员回访记录 Excel") @ApiAccessLog(operateType = EXPORT) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsReqVO.java new file mode 100644 index 0000000000..6b79adbb1a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.controller.admin.record.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 会员回访记录统计 Request VO") +@Data +public class RecordStatisticsReqVO { + + @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "开始时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime startTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "结束时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime endTime; + + @Schema(description = "机构ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12205") + @NotNull(message = "机构ID不能为空") + private Integer orgid; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsRespVO.java new file mode 100644 index 0000000000..ac08647436 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/record/vo/RecordStatisticsRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.system.controller.admin.record.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import java.util.List; +import java.time.LocalDate; + +@Schema(description = "管理后台 - 会员回访记录统计 Response VO") +@Data +public class RecordStatisticsRespVO { + + @Schema(description = "总数量", example = "100") + private Long totalCount; + + @Schema(description = "已回访数量", example = "80") + private Long visitedCount; + + @Schema(description = "未回访数量", example = "20") + private Long unvisitedCount; + + @Schema(description = "按日期分组的回访记录数据") + private List dailyData; + + @Schema(description = "按日期分组的回访记录数据") + @Data + public static class DailyRecordData { + @Schema(description = "日期", example = "2024-01-01") + private LocalDate date; + + @Schema(description = "该日期的回访总数", example = "10") + private Long totalCount; + + @Schema(description = "该日期的已回访数量", example = "8") + private Long visitedCount; + + @Schema(description = "该日期的未回访数量", example = "2") + private Long unvisitedCount; + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java index b1a863a56d..a55dde3b27 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java @@ -8,7 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.system.dal.dataobject.alertmessage.AlertMessageDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import cn.iocoder.yudao.module.system.controller.admin.alertmessage.vo.*; +import java.time.LocalDateTime; +import java.time.LocalDate; /** * 预警信息 Mapper @@ -35,4 +39,20 @@ public interface AlertMessageMapper extends BaseMapperX { .orderByDesc(AlertMessageDO::getId)); } + /** + * 按日期分组查询预警信息统计 + */ + @Select("SELECT DATE(createtime) as date, " + + "COUNT(*) as totalCount, " + + "SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) as readCount, " + + "SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) as unreadCount " + + "FROM tb_alert_message " + + "WHERE orgid = #{orgid} " + + "AND createtime BETWEEN #{startTime} AND #{endTime} " + + "GROUP BY DATE(createtime) " + + "ORDER BY date") + List> selectDailyStatistics(@Param("orgid") Integer orgid, + @Param("startTime") LocalDateTime startTime, + @Param("endTime") LocalDateTime endTime); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/record/RecordMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/record/RecordMapper.java index 33a91e71f2..ceea2cd570 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/record/RecordMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/record/RecordMapper.java @@ -8,7 +8,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.system.dal.dataobject.record.RecordDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import cn.iocoder.yudao.module.system.controller.admin.record.vo.*; +import java.time.LocalDateTime; +import java.time.LocalDate; /** * 会员回访记录 Mapper @@ -38,4 +42,20 @@ public interface RecordMapper extends BaseMapperX { .orderByDesc(RecordDO::getId)); } + /** + * 按日期分组查询会员回访记录统计 + */ + @Select("SELECT DATE(createtime) as date, " + + "COUNT(*) as totalCount, " + + "SUM(CASE WHEN visitstatus = 1 THEN 1 ELSE 0 END) as visitedCount, " + + "SUM(CASE WHEN visitstatus = 0 THEN 1 ELSE 0 END) as unvisitedCount " + + "FROM visit_record " + + "WHERE orgid = #{orgid} " + + "AND createtime BETWEEN #{startTime} AND #{endTime} " + + "GROUP BY DATE(createtime) " + + "ORDER BY date") + List> selectDailyStatistics(@Param("orgid") Integer orgid, + @Param("startTime") LocalDateTime startTime, + @Param("endTime") LocalDateTime endTime); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java index af798515ce..53f4ff9192 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java @@ -57,4 +57,12 @@ public interface AlertMessageService { */ PageResult getAlertMessagePage(AlertMessagePageReqVO pageReqVO); + /** + * 统计预警信息 + * + * @param statisticsReqVO 统计请求参数 + * @return 统计结果 + */ + AlertMessageStatisticsRespVO getAlertMessageStatistics(@Valid AlertMessageStatisticsReqVO statisticsReqVO); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java index 9a40b2a673..6ac582fc83 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java @@ -5,6 +5,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.*; +import java.time.LocalDate; import cn.iocoder.yudao.module.system.controller.admin.alertmessage.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.alertmessage.AlertMessageDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -81,4 +82,66 @@ public class AlertMessageServiceImpl implements AlertMessageService { return alertMessageMapper.selectPage(pageReqVO); } + @Override + public AlertMessageStatisticsRespVO getAlertMessageStatistics(AlertMessageStatisticsReqVO statisticsReqVO) { + // 创建查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + // 添加时间范围条件 + queryWrapper.between(AlertMessageDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()); + + // 添加机构ID条件 + queryWrapper.eq(AlertMessageDO::getOrgid, statisticsReqVO.getOrgid()); + + // 查询总数量 + Long totalCount = alertMessageMapper.selectCount(queryWrapper); + + // 查询已读数量 + LambdaQueryWrapper readQueryWrapper = new LambdaQueryWrapper<>(); + readQueryWrapper.between(AlertMessageDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()) + .eq(AlertMessageDO::getOrgid, statisticsReqVO.getOrgid()) + .eq(AlertMessageDO::getStatus, 1); // status = 1 表示已读 + Long readCount = alertMessageMapper.selectCount(readQueryWrapper); + + // 查询未读数量 + LambdaQueryWrapper unreadQueryWrapper = new LambdaQueryWrapper<>(); + unreadQueryWrapper.between(AlertMessageDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()) + .eq(AlertMessageDO::getOrgid, statisticsReqVO.getOrgid()) + .eq(AlertMessageDO::getStatus, 0); // status = 0 表示未读 + Long unreadCount = alertMessageMapper.selectCount(unreadQueryWrapper); + + // 查询按日期分组的数据 + List> dailyStatistics = alertMessageMapper.selectDailyStatistics( + statisticsReqVO.getOrgid(), + statisticsReqVO.getStartTime(), + statisticsReqVO.getEndTime() + ); + + // 转换按日期分组的数据 + List dailyData = new ArrayList<>(); + for (Map stat : dailyStatistics) { + AlertMessageStatisticsRespVO.DailyAlertData dailyAlertData = new AlertMessageStatisticsRespVO.DailyAlertData(); + // 处理日期类型转换 + Object dateObj = stat.get("date"); + if (dateObj instanceof java.sql.Date) { + dailyAlertData.setDate(((java.sql.Date) dateObj).toLocalDate()); + } else if (dateObj instanceof LocalDate) { + dailyAlertData.setDate((LocalDate) dateObj); + } + dailyAlertData.setTotalCount(((Number) stat.get("totalCount")).longValue()); + dailyAlertData.setReadCount(((Number) stat.get("readCount")).longValue()); + dailyAlertData.setUnreadCount(((Number) stat.get("unreadCount")).longValue()); + dailyData.add(dailyAlertData); + } + + // 构建返回结果 + AlertMessageStatisticsRespVO result = new AlertMessageStatisticsRespVO(); + result.setTotalCount(totalCount); + result.setReadCount(readCount); + result.setUnreadCount(unreadCount); + result.setDailyData(dailyData); + + return result; + } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordService.java index e82f2af0cf..270e78d586 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordService.java @@ -52,4 +52,12 @@ public interface RecordService { */ PageResult getRecordPage(RecordPageReqVO pageReqVO); + /** + * 统计会员回访记录 + * + * @param statisticsReqVO 统计请求参数 + * @return 统计结果 + */ + RecordStatisticsRespVO getRecordStatistics(@Valid RecordStatisticsReqVO statisticsReqVO); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordServiceImpl.java index 90121170ab..c0e4453e5e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/record/RecordServiceImpl.java @@ -7,6 +7,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.time.LocalDate; import cn.iocoder.yudao.module.system.controller.admin.record.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.record.RecordDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -17,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.record.RecordMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; /** * 会员回访记录 Service 实现类 @@ -72,4 +74,66 @@ public class RecordServiceImpl implements RecordService { return recordMapper.selectPage(pageReqVO); } + @Override + public RecordStatisticsRespVO getRecordStatistics(RecordStatisticsReqVO statisticsReqVO) { + // 创建查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + // 添加时间范围条件 + queryWrapper.between(RecordDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()); + + // 添加机构ID条件 + queryWrapper.eq(RecordDO::getOrgid, statisticsReqVO.getOrgid()); + + // 查询总数量 + Long totalCount = recordMapper.selectCount(queryWrapper); + + // 查询已回访数量 + LambdaQueryWrapper visitedQueryWrapper = new LambdaQueryWrapper<>(); + visitedQueryWrapper.between(RecordDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()) + .eq(RecordDO::getOrgid, statisticsReqVO.getOrgid()) + .eq(RecordDO::getVisitstatus, 1); // visitstatus = 1 表示已回访 + Long visitedCount = recordMapper.selectCount(visitedQueryWrapper); + + // 查询未回访数量 + LambdaQueryWrapper unvisitedQueryWrapper = new LambdaQueryWrapper<>(); + unvisitedQueryWrapper.between(RecordDO::getCreatetime, statisticsReqVO.getStartTime(), statisticsReqVO.getEndTime()) + .eq(RecordDO::getOrgid, statisticsReqVO.getOrgid()) + .eq(RecordDO::getVisitstatus, 0); // visitstatus = 0 表示未回访 + Long unvisitedCount = recordMapper.selectCount(unvisitedQueryWrapper); + + // 查询按日期分组的数据 + List> dailyStatistics = recordMapper.selectDailyStatistics( + statisticsReqVO.getOrgid(), + statisticsReqVO.getStartTime(), + statisticsReqVO.getEndTime() + ); + + // 转换按日期分组的数据 + List dailyData = new ArrayList<>(); + for (Map stat : dailyStatistics) { + RecordStatisticsRespVO.DailyRecordData dailyRecordData = new RecordStatisticsRespVO.DailyRecordData(); + // 处理日期类型转换 + Object dateObj = stat.get("date"); + if (dateObj instanceof java.sql.Date) { + dailyRecordData.setDate(((java.sql.Date) dateObj).toLocalDate()); + } else if (dateObj instanceof LocalDate) { + dailyRecordData.setDate((LocalDate) dateObj); + } + dailyRecordData.setTotalCount(((Number) stat.get("totalCount")).longValue()); + dailyRecordData.setVisitedCount(((Number) stat.get("visitedCount")).longValue()); + dailyRecordData.setUnvisitedCount(((Number) stat.get("unvisitedCount")).longValue()); + dailyData.add(dailyRecordData); + } + + // 构建返回结果 + RecordStatisticsRespVO result = new RecordStatisticsRespVO(); + result.setTotalCount(totalCount); + result.setVisitedCount(visitedCount); + result.setUnvisitedCount(unvisitedCount); + result.setDailyData(dailyData); + + return result; + } + } \ No newline at end of file