You've already forked FrameTour-BE
首页统计
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package com.ycwl.basic.controller.pc;
|
||||
|
||||
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||
import com.ycwl.basic.service.pc.StatisticsService;
|
||||
import com.ycwl.basic.utils.ApiResponse;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:longbinbin
|
||||
* @Date:2024/12/12 14:30
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/statistics/v1")
|
||||
public class StatisticsController {
|
||||
|
||||
@Autowired
|
||||
private StatisticsService statisticsService;
|
||||
|
||||
/**
|
||||
* 智能获取扫码访问人数统计数据(自动选择粒度)
|
||||
* @param query 查询参数(包含景区ID、开始时间、结束时间)
|
||||
* @return 统计数据(超过7天返回日期级别,否则返回小时级别)
|
||||
*/
|
||||
@PostMapping("/scanCodeMemberChart")
|
||||
public ApiResponse<List<HashMap<String, String>>> getScanCodeMemberChart(@RequestBody CommonQueryReq query) {
|
||||
return ApiResponse.success(statisticsService.getScanCodeMemberChartAuto(query));
|
||||
}
|
||||
}
|
@@ -102,4 +102,8 @@ public interface StatisticsMapper {
|
||||
List<HashMap<String, String>> orderChartByDate(CommonQueryReq query);
|
||||
|
||||
List<HashMap<String, String>> orderChartByHour(CommonQueryReq query);
|
||||
|
||||
List<HashMap<String, String>> scanCodeMemberChartByHour(CommonQueryReq query);
|
||||
|
||||
List<HashMap<String, String>> scanCodeMemberChartByDate(CommonQueryReq query);
|
||||
}
|
||||
|
@@ -0,0 +1,20 @@
|
||||
package com.ycwl.basic.service.pc;
|
||||
|
||||
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:longbinbin
|
||||
* @Date:2024/12/12 14:32
|
||||
*/
|
||||
public interface StatisticsService {
|
||||
|
||||
/**
|
||||
* 智能获取扫码访问人数统计数据(自动选择小时级别或日期级别)
|
||||
* @param query 查询参数(包含景区ID、开始时间、结束时间)
|
||||
* @return 统计数据(超过7天返回日期级别,否则返回小时级别)
|
||||
*/
|
||||
List<HashMap<String, String>> getScanCodeMemberChartAuto(CommonQueryReq query);
|
||||
}
|
@@ -0,0 +1,77 @@
|
||||
package com.ycwl.basic.service.pc.impl;
|
||||
|
||||
import com.ycwl.basic.mapper.StatisticsMapper;
|
||||
import com.ycwl.basic.model.mobile.statistic.req.CommonQueryReq;
|
||||
import com.ycwl.basic.service.pc.StatisticsService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:longbinbin
|
||||
* @Date:2024/12/12 14:34
|
||||
*/
|
||||
@Service
|
||||
public class StatisticsServiceImpl implements StatisticsService {
|
||||
|
||||
@Autowired
|
||||
private StatisticsMapper statisticsMapper;
|
||||
|
||||
List<HashMap<String, String>> getScanCodeMemberChartByHour(CommonQueryReq query) {
|
||||
return statisticsMapper.scanCodeMemberChartByHour(query);
|
||||
}
|
||||
|
||||
List<HashMap<String, String>> getScanCodeMemberChartByDate(CommonQueryReq query) {
|
||||
return statisticsMapper.scanCodeMemberChartByDate(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<HashMap<String, String>> getScanCodeMemberChartAuto(CommonQueryReq query) {
|
||||
// 检查时间范围
|
||||
if (query.getStartTime() == null || query.getEndTime() == null) {
|
||||
// 根据需求处理时间范围:
|
||||
// 如果开始和结束时间均为空,则默认为当天0点到23时59分59秒
|
||||
// 如果只有一个为空,则往前或往后推24小时
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
if (query.getStartTime() == null && query.getEndTime() == null) {
|
||||
// 都为空,设置为当天0点到23:59:59
|
||||
LocalDateTime startOfDay = now.withHour(0).withMinute(0).withSecond(0).withNano(0);
|
||||
LocalDateTime endOfDay = now.withHour(23).withMinute(59).withSecond(59).withNano(0);
|
||||
|
||||
query.setStartTime(Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant()));
|
||||
query.setEndTime(Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant()));
|
||||
} else if (query.getStartTime() == null) {
|
||||
// 开始时间为空,结束时间不为空,往前推24小时
|
||||
LocalDateTime endDateTime = query.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
LocalDateTime startDateTime = endDateTime.minusHours(24);
|
||||
|
||||
query.setStartTime(Date.from(startDateTime.atZone(ZoneId.systemDefault()).toInstant()));
|
||||
} else {
|
||||
// 结束时间为空,开始时间不为空,往后推24小时
|
||||
LocalDateTime startDateTime = query.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
LocalDateTime endDateTime = startDateTime.plusHours(24);
|
||||
|
||||
query.setEndTime(Date.from(endDateTime.atZone(ZoneId.systemDefault()).toInstant()));
|
||||
}
|
||||
}
|
||||
|
||||
// 计算时间差(天数)
|
||||
LocalDateTime startDateTime = query.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
LocalDateTime endDateTime = query.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
||||
long daysBetween = ChronoUnit.DAYS.between(startDateTime, endDateTime);
|
||||
|
||||
// 超过7天使用日期级别,否则使用小时级别
|
||||
if (daysBetween > 7) {
|
||||
return getScanCodeMemberChartByDate(query);
|
||||
} else {
|
||||
return getScanCodeMemberChartByHour(query);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user