Sfoglia il codice sorgente

fix: 时间范围限制

lwh 3 settimane fa
parent
commit
fab05f4c63

+ 111 - 0
pig-statistics/pig-statistics-biz/src/main/java/com/pig4cloud/pig/statistics/service/impl/UserAnalyseServiceImpl.java

@@ -64,6 +64,8 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		// 1. 生成时间轴
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
 		result.setDates(dates);
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
 
 		// 2. 处理版本列表(为空时按null处理)
 		List<String> versions = reqDto.getVersion();
@@ -84,6 +86,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 							.map(date -> {
 								LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 								LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+								// 如果startTime早于fromDate
+								if (startTime.isBefore(fromDate)) {
+									startTime = fromDate;
+								}
+
+								// 如果endTime晚于toDate
+								if (endTime.isAfter(toDate)) {
+									endTime = toDate;
+								}
 								return statNewUserCount(startTime, endTime, reqDto.getAppId(), version, reqDto.getChannel());
 							})
 							.collect(Collectors.toList());
@@ -144,6 +155,8 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		if (dates.isEmpty()) {
 			return page; // 无数据直接返回
 		}
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
 
 		// 获取渠道和版本
 		List<String> channel = reqDto.getChannel();
@@ -158,6 +171,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 			// 获取时间范围
 			LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 			LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 查询新增用户数
 			BigDecimal newUser = BigDecimal.valueOf(statNewUserCount(startTime, endTime, reqDto.getAppId(), version, channel));
 			// 查询活跃用户数
@@ -477,6 +499,10 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
 		result.setDates(dates);
 
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
+
 		// 2. 处理版本列表(为空时按null处理)
 		List<String> versions = reqDto.getVersion();
 		List<String> processVersions = (versions == null || versions.isEmpty())
@@ -496,6 +522,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 							.map(date -> {
 								LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 								LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+								// 如果startTime早于fromDate
+								if (startTime.isBefore(fromDate)) {
+									startTime = fromDate;
+								}
+
+								// 如果endTime晚于toDate
+								if (endTime.isAfter(toDate)) {
+									endTime = toDate;
+								}
 								return statActiveUserCount(startTime, endTime, reqDto.getAppId(), version, reqDto.getChannel());
 							})
 							.collect(Collectors.toList());
@@ -549,6 +584,9 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 	public GetActiveUserBaseVO getActiveCompose(UserAnalyseQueryBaseDTO reqDto) {
 		// 1. 获取时间坐标轴
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
 		// 获取版本信息
 		String version = null;
 		if (reqDto.getVersion() != null && !reqDto.getVersion().isEmpty()){
@@ -561,6 +599,16 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		for (String date : dates) {
 			LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 			LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 活跃用户数
 			BigDecimal activeCount = BigDecimal.valueOf(statActiveUserCount(startTime, endTime, reqDto.getAppId(), version, reqDto.getChannel()));
 			activeCounts.add( activeCount);
@@ -710,6 +758,9 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		}
 		// 1. 生成时间轴
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
 		// 2. 定义存储列表
 		List<BigDecimal> activeList = new ArrayList<>();
 		List<BigDecimal> userList = new ArrayList<>();
@@ -718,6 +769,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		for (String date : dates) {
 			LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 			LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 4. 查询、计算累计用户数
 			BigDecimal totalUser = BigDecimal.valueOf(statNewUserCount(null, endTime, reqDto.getAppId(), null, null));
 			userList.add(totalUser);
@@ -823,6 +883,9 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 
 		// 1. 生成时间轴
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
 		// 2. 定义存储列表
 		List<BigDecimal> activeList = new ArrayList<>();
 		List<BigDecimal> userList = new ArrayList<>();
@@ -831,6 +894,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		for (String date : dates) {
 			LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 			LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 4. 查询、计算累计用户数
 			BigDecimal totalUser = BigDecimal.valueOf(statNewUserCount(null, endTime, reqDto.getAppId(), null, null));
 			userList.add(totalUser);
@@ -941,6 +1013,9 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		if (dates.isEmpty()) {
 			return page; // 无数据直接返回
 		}
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
 		// 获取渠道和版本
 		List<String> channel = reqDto.getChannel();
 		String version = null;
@@ -953,6 +1028,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 			// 获取时间范围
 			LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 			LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 查询活跃用户数量
 			BigDecimal activeCount = BigDecimal.valueOf(statActiveUserCount(startTime, endTime, reqDto.getAppId(), version, channel));
 			// 查询活跃用户中的新增用户数
@@ -1180,6 +1264,9 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 		// 1. 生成时间轴
 		List<String> dates = generateTimeAxis(reqDto.getFromDate(), reqDto.getToDate(), reqDto.getTimeUnit());
 		result.setDates(dates);
+		LocalDateTime fromDate = getStartTime(reqDto.getFromDate().toString(), "day");
+		LocalDateTime toDate = getEndTime(reqDto.getToDate().toString(), "day");
+
 		// 2. 处理版本列表(为空时按null处理)
 		List<String> versions = reqDto.getVersion();
 		List<String> processVersions = (versions == null || versions.isEmpty())
@@ -1199,6 +1286,15 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 							.map(date -> {
 								LocalDateTime startTime = getStartTime(date, reqDto.getTimeUnit());
 								LocalDateTime endTime = getEndTime(date, reqDto.getTimeUnit());
+								// 如果startTime早于fromDate
+								if (startTime.isBefore(fromDate)) {
+									startTime = fromDate;
+								}
+
+								// 如果endTime晚于toDate
+								if (endTime.isAfter(toDate)) {
+									endTime = toDate;
+								}
 								return statLaunchCount(startTime, endTime, reqDto.getAppId(), version, reqDto.getChannel());
 							})
 							.collect(Collectors.toList());
@@ -1281,6 +1377,21 @@ public class UserAnalyseServiceImpl implements UserAnalyseService {
 			// 获取时间范围
 			LocalDateTime startTime = getStartTime(date, timeUnit);
 			LocalDateTime endTime = getEndTime(date, timeUnit);
+
+			// 判断时间范围是否在查询范围内
+			if(startTime == null || endTime == null){
+				throw new BusinessException("时间范围错误");
+			}
+
+			// 如果startTime早于fromDate
+			if (startTime.isBefore(fromDate)) {
+				startTime = fromDate;
+			}
+
+			// 如果endTime晚于toDate
+			if (endTime.isAfter(toDate)) {
+				endTime = toDate;
+			}
 			// 查询启动次数
 			BigDecimal launch = BigDecimal.valueOf(statLaunchCount(startTime, endTime, reqDto.getAppId(), version, channel));
 			// 计算启动占比