|
@@ -19,8 +19,9 @@ import org.springframework.web.bind.annotation.*;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
import java.time.YearMonth;
|
|
import java.time.YearMonth;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.function.BinaryOperator;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.fs.statis.StatisticsRedisConstant.*;
|
|
import static com.fs.statis.StatisticsRedisConstant.*;
|
|
|
|
|
|
@@ -63,10 +64,10 @@ public class IndexStatisticsController {
|
|
if(userType == null) {
|
|
if(userType == null) {
|
|
userType = 0;
|
|
userType = 0;
|
|
}
|
|
}
|
|
- if(param.getCompanyId() != null){
|
|
|
|
- analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,param.getCompanyId()));
|
|
|
|
- }else if(param.getDeptId() == 1){
|
|
|
|
|
|
+ if(!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType));
|
|
analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType));
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,param.getCompanyId()));
|
|
}else{
|
|
}else{
|
|
Company company = new Company();
|
|
Company company = new Company();
|
|
company.setDeptId(param.getDeptId());
|
|
company.setDeptId(param.getDeptId());
|
|
@@ -74,11 +75,56 @@ public class IndexStatisticsController {
|
|
for(Long companyId : companyIds){
|
|
for(Long companyId : companyIds){
|
|
AnalysisPreviewDTO clildDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,companyId));
|
|
AnalysisPreviewDTO clildDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,companyId));
|
|
if (clildDTO != null) {
|
|
if (clildDTO != null) {
|
|
- long currentWatchUserCount = analysisPreviewDTO.getWatchUserCount();
|
|
|
|
- long childWatchUserCount = clildDTO.getWatchUserCount();
|
|
|
|
- analysisPreviewDTO.setWatchUserCount(currentWatchUserCount + childWatchUserCount);
|
|
|
|
|
|
+ //将除了completedRate、correctRate和watchRate之外的数据相加,并计算completedRate、correctRate和watchRate
|
|
|
|
+ analysisPreviewDTO.setWatchUserCount(
|
|
|
|
+ analysisPreviewDTO.getWatchUserCount() == 0 ? 0 : analysisPreviewDTO.getWatchUserCount()
|
|
|
|
+ +(clildDTO.getWatchUserCount() == 0 ? 0 : clildDTO.getWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setCompletedUserCount(
|
|
|
|
+ analysisPreviewDTO.getCompletedUserCount() == 0 ? 0 : analysisPreviewDTO.getCompletedUserCount()
|
|
|
|
+ +(clildDTO.getCompletedUserCount() == 0 ? 0 : clildDTO.getCompletedUserCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setCompletedCount(
|
|
|
|
+ analysisPreviewDTO.getCompletedCount() == 0 ? 0 : analysisPreviewDTO.getCompletedCount()
|
|
|
|
+ +(clildDTO.getCompletedCount() == 0 ? 0 : clildDTO.getCompletedCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setWatchCount(
|
|
|
|
+ analysisPreviewDTO.getWatchCount() == 0 ? 0 : analysisPreviewDTO.getWatchCount()
|
|
|
|
+ +(clildDTO.getWatchCount() == 0 ? 0 : clildDTO.getWatchCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setAnswerMemberCount(
|
|
|
|
+ analysisPreviewDTO.getAnswerMemberCount() == 0 ? 0 : analysisPreviewDTO.getAnswerMemberCount()
|
|
|
|
+ +(clildDTO.getAnswerMemberCount() == 0 ? 0 : clildDTO.getAnswerMemberCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setCorrectUserCount(
|
|
|
|
+ analysisPreviewDTO.getCorrectUserCount() == 0 ? 0 : analysisPreviewDTO.getCorrectUserCount()
|
|
|
|
+ +(clildDTO.getCorrectUserCount() == 0 ? 0 : clildDTO.getCorrectUserCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setRewardCount(
|
|
|
|
+ analysisPreviewDTO.getRewardCount() == 0 ? 0 : analysisPreviewDTO.getRewardCount()
|
|
|
|
+ +(clildDTO.getRewardCount() == 0 ? 0 : clildDTO.getRewardCount())
|
|
|
|
+ );
|
|
|
|
+ analysisPreviewDTO.setRewardMoney(
|
|
|
|
+ analysisPreviewDTO.getRewardMoney() == null ? BigDecimal.ZERO : analysisPreviewDTO.getRewardMoney()
|
|
|
|
+ .add(clildDTO.getRewardMoney() == null ? BigDecimal.ZERO : clildDTO.getRewardMoney())
|
|
|
|
+ );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ if(analysisPreviewDTO.getAnswerMemberCount() != 0){
|
|
|
|
+ analysisPreviewDTO.setCorrectRate(
|
|
|
|
+ analysisPreviewDTO.getCorrectUserCount() == 0 ? "0" : String.format("%.2f", analysisPreviewDTO.getCorrectUserCount() * 100.0 / analysisPreviewDTO.getAnswerMemberCount())
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ if(analysisPreviewDTO.getWatchUserCount() != 0){
|
|
|
|
+ analysisPreviewDTO.setCompletedRate(
|
|
|
|
+ analysisPreviewDTO.getCompletedUserCount() == 0 ? "0" : String.format("%.2f", analysisPreviewDTO.getCompletedUserCount() * 100.0 / analysisPreviewDTO.getWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ if(analysisPreviewDTO.getWatchCount() != 0){
|
|
|
|
+ analysisPreviewDTO.setWatchRate(
|
|
|
|
+ analysisPreviewDTO.getCompletedCount() == 0 ? "0" : String.format("%.2f", analysisPreviewDTO.getCompletedCount() * 100.0 / analysisPreviewDTO.getWatchCount())
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -92,13 +138,10 @@ public class IndexStatisticsController {
|
|
@GetMapping("/rechargeComsumption")
|
|
@GetMapping("/rechargeComsumption")
|
|
public R rechargeComsumption(StatisticsDeptCompanyParam param){
|
|
public R rechargeComsumption(StatisticsDeptCompanyParam param){
|
|
ConsumptionBalanceDataDTO consumptionBalanceDataDTO = new ConsumptionBalanceDataDTO();
|
|
ConsumptionBalanceDataDTO consumptionBalanceDataDTO = new ConsumptionBalanceDataDTO();
|
|
- if(!"1".equals(medicalMallConfig.getStatics())) {
|
|
|
|
|
|
+ if(!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
|
|
consumptionBalanceDataDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE);
|
|
consumptionBalanceDataDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE);
|
|
- }
|
|
|
|
- if(param.getCompanyId() != null){
|
|
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
consumptionBalanceDataDTO = redisCache.getCacheObject(String.format("%s:%d",DATA_OVERVIEW_DEALER_BALANCE,param.getCompanyId()));
|
|
consumptionBalanceDataDTO = redisCache.getCacheObject(String.format("%s:%d",DATA_OVERVIEW_DEALER_BALANCE,param.getCompanyId()));
|
|
- }else if(param.getDeptId() == 1) {
|
|
|
|
- consumptionBalanceDataDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE);
|
|
|
|
}else{
|
|
}else{
|
|
Company company = new Company();
|
|
Company company = new Company();
|
|
company.setDeptId(param.getDeptId());
|
|
company.setDeptId(param.getDeptId());
|
|
@@ -130,7 +173,7 @@ public class IndexStatisticsController {
|
|
@GetMapping("/trafficLog")
|
|
@GetMapping("/trafficLog")
|
|
public R getTrafficLog(StatisticsDeptCompanyParam param){
|
|
public R getTrafficLog(StatisticsDeptCompanyParam param){
|
|
TrafficLogDTO result = new TrafficLogDTO();
|
|
TrafficLogDTO result = new TrafficLogDTO();
|
|
- if(!"1".equals(medicalMallConfig.getStatics())) {
|
|
|
|
|
|
+ if(!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
|
|
result = redisCache.getCacheObject(DATA_OVERVIEW_TRAFFIC_LOG);
|
|
result = redisCache.getCacheObject(DATA_OVERVIEW_TRAFFIC_LOG);
|
|
SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
|
|
if(result == null || sysConfig == null) {
|
|
if(result == null || sysConfig == null) {
|
|
@@ -178,9 +221,73 @@ public class IndexStatisticsController {
|
|
if(userType == null){
|
|
if(userType == null){
|
|
userType = 0;
|
|
userType = 0;
|
|
}
|
|
}
|
|
- String key = String.format("%s:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType);
|
|
|
|
- List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = redisCache.getCacheObject(key);
|
|
|
|
- return R.ok().put("data", deaMemberTopTenDTOS);
|
|
|
|
|
|
+ List<WatchEndPlayTrendDTO> watchEndPlayTrendDTOS;
|
|
|
|
+ // 参考watchCourseTopTen方法的处理逻辑
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ String key = String.format("%s:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType);
|
|
|
|
+ watchEndPlayTrendDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType,param.getCompanyId());
|
|
|
|
+ watchEndPlayTrendDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<WatchEndPlayTrendDTO> tempDTOS = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType,companyId);
|
|
|
|
+ List<WatchEndPlayTrendDTO> companyData = redisCache.getCacheObject(key);
|
|
|
|
+ if (companyData != null) {
|
|
|
|
+ tempDTOS.addAll(companyData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 根据startDate 和 x 分组,合并watchUserCount和completedUserCount 限制最多返回10条记录
|
|
|
|
+ watchEndPlayTrendDTOS = tempDTOS.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
+ dto -> dto.getStartDate() + ":" + dto.getX(), // 根据startDate和x分组
|
|
|
|
+ Collectors.reducing(new WatchEndPlayTrendDTO(), (dto1, dto2) -> {
|
|
|
|
+ // 合并watchUserCount和completedUserCount
|
|
|
|
+ WatchEndPlayTrendDTO result = new WatchEndPlayTrendDTO();
|
|
|
|
+ // 复制分组标识字段
|
|
|
|
+ if (dto2 != null && dto2.getStartDate() != null) {
|
|
|
|
+ result.setStartDate(dto2.getStartDate());
|
|
|
|
+ } else if (dto1 != null) {
|
|
|
|
+ result.setStartDate(dto1.getStartDate());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (dto2 != null && dto2.getX() != null) {
|
|
|
|
+ result.setX(dto2.getX());
|
|
|
|
+ } else if (dto1 != null) {
|
|
|
|
+ result.setX(dto1.getX());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 合并数值字段
|
|
|
|
+ result.setWatchUserCount(
|
|
|
|
+ (dto1 == null || dto1.getWatchUserCount() == null ? 0 : dto1.getWatchUserCount()) +
|
|
|
|
+ (dto2 == null || dto2.getWatchUserCount() == null ? 0 : dto2.getWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ result.setCompletedUserCount(
|
|
|
|
+ (dto1 == null || dto1.getCompletedUserCount() == null ? 0 : dto1.getCompletedUserCount()) +
|
|
|
|
+ (dto2 == null || dto2.getCompletedUserCount() == null ? 0 : dto2.getCompletedUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ })
|
|
|
|
+ ))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .filter(Objects::nonNull) // 过滤掉null值
|
|
|
|
+ .limit(10)
|
|
|
|
+ .sorted(Comparator.comparing(WatchEndPlayTrendDTO::getX))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(watchEndPlayTrendDTOS == null){
|
|
|
|
+ watchEndPlayTrendDTOS = new ArrayList<>();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return R.ok().put("data", watchEndPlayTrendDTOS);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -198,8 +305,49 @@ public class IndexStatisticsController {
|
|
if(userType == null){
|
|
if(userType == null){
|
|
userType = 0;
|
|
userType = 0;
|
|
}
|
|
}
|
|
|
|
+ List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = new ArrayList<>();
|
|
|
|
+ // 参考deaMemberTopTen方法处理逻辑
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType);
|
|
|
|
+ deaMemberTopTenDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType,param.getCompanyId());
|
|
|
|
+ deaMemberTopTenDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<DeaMemberTopTenDTO> tempDTOS = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType,companyId);
|
|
|
|
+ List<DeaMemberTopTenDTO> companyData = redisCache.getCacheObject(key);
|
|
|
|
+ if (companyData != null) {
|
|
|
|
+ tempDTOS.addAll(companyData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // companyId 和 companyName 分组,合并watchUserCount 限制最多返回10条记录
|
|
|
|
+ deaMemberTopTenDTOS = tempDTOS.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
+ dto -> dto.getCompanyId() + ":" + dto.getCompanyName(), // 根据companyId和companyName分组
|
|
|
|
+ Collectors.reducing(new DeaMemberTopTenDTO(), (dto1, dto2) -> {
|
|
|
|
+ DeaMemberTopTenDTO result = new DeaMemberTopTenDTO();
|
|
|
|
+ result.setCompanyId(dto1.getCompanyId());
|
|
|
|
+ result.setCompanyName(dto1.getCompanyName());
|
|
|
|
+ result.setWatchUserCount(
|
|
|
|
+ (dto1.getWatchUserCount() == null ? 0 : dto1.getWatchUserCount()) +
|
|
|
|
+ (dto2 == null || dto2.getWatchUserCount() == null ? 0 : dto2.getWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+ return result;
|
|
|
|
+ })
|
|
|
|
+ ))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .filter(Objects::nonNull) // 过滤掉null值
|
|
|
|
+ .limit(10)
|
|
|
|
+ .sorted(Comparator.comparing(DeaMemberTopTenDTO::getWatchUserCount, Comparator.nullsLast(Comparator.reverseOrder())))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
|
|
- List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType));
|
|
|
|
if(deaMemberTopTenDTOS == null){
|
|
if(deaMemberTopTenDTOS == null){
|
|
deaMemberTopTenDTOS = new ArrayList<>();
|
|
deaMemberTopTenDTOS = new ArrayList<>();
|
|
}
|
|
}
|
|
@@ -214,8 +362,50 @@ public class IndexStatisticsController {
|
|
Integer type = param.getType();
|
|
Integer type = param.getType();
|
|
Integer dataType = param.getDataType();
|
|
Integer dataType = param.getDataType();
|
|
Integer userType = param.getUserType();
|
|
Integer userType = param.getUserType();
|
|
|
|
+ List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = new ArrayList<>();
|
|
|
|
+ // 参考rewardMoneyTopTen方法处理逻辑
|
|
|
|
+ if(!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType);
|
|
|
|
+ rewardMoneyTopTenDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType,param.getCompanyId());
|
|
|
|
+ rewardMoneyTopTenDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<RewardMoneyTopTenDTO> tempDTOS = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType,companyId);
|
|
|
|
+ List<RewardMoneyTopTenDTO> companyData = redisCache.getCacheObject(key);
|
|
|
|
+ if (companyData != null) {
|
|
|
|
+ tempDTOS.addAll(companyData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ rewardMoneyTopTenDTOS = tempDTOS.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
+ dto -> dto.getCompanyId() + ":" + dto.getCompanyName(), // 根据companyId和companyName分组
|
|
|
|
+ Collectors.reducing(new RewardMoneyTopTenDTO(), (dto1, dto2) -> {
|
|
|
|
+ RewardMoneyTopTenDTO result = new RewardMoneyTopTenDTO();
|
|
|
|
+ result.setCompanyId(dto1.getCompanyId());
|
|
|
|
+ result.setCompanyName(dto1.getCompanyName());
|
|
|
|
+ result.setRewardMoney(
|
|
|
|
+ (dto1.getRewardMoney() == null ? BigDecimal.ZERO : dto1.getRewardMoney())
|
|
|
|
+ .add(
|
|
|
|
+ (dto2 == null || dto2.getRewardMoney() == null ? BigDecimal.ZERO : dto2.getRewardMoney())
|
|
|
|
+ )
|
|
|
|
+ );
|
|
|
|
+ return result;
|
|
|
|
+ })
|
|
|
|
+ ))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .filter(Objects::nonNull) // 过滤掉null值
|
|
|
|
+ .limit(10)
|
|
|
|
+ .sorted(Comparator.comparing(RewardMoneyTopTenDTO::getRewardMoney, Comparator.nullsLast(Comparator.reverseOrder())))
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
|
|
- List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = redisCache.getCacheObject( String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType));
|
|
|
|
return R.ok().put("data", rewardMoneyTopTenDTOS);
|
|
return R.ok().put("data", rewardMoneyTopTenDTOS);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -226,7 +416,47 @@ public class IndexStatisticsController {
|
|
public R rewardMoneyTrend(@RequestBody AnalysisPreviewQueryDTO param){
|
|
public R rewardMoneyTrend(@RequestBody AnalysisPreviewQueryDTO param){
|
|
Integer type = param.getType();
|
|
Integer type = param.getType();
|
|
Integer userType = param.getUserType();
|
|
Integer userType = param.getUserType();
|
|
- List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = redisCache.getCacheObject( String.format("%s:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType));
|
|
|
|
|
|
+ List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = new ArrayList<>();
|
|
|
|
+ // 参考rewardMoneyTrend方法处理逻辑
|
|
|
|
+ if(!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ String key = String.format("%s:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType);
|
|
|
|
+ rewardMoneyTrendDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType,param.getCompanyId());
|
|
|
|
+ rewardMoneyTrendDTOS = redisCache.getCacheObject(key);
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<RewardMoneyTrendDTO> tempDTOS = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds){
|
|
|
|
+ String key = String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType,companyId);
|
|
|
|
+ List<RewardMoneyTrendDTO> companyData = redisCache.getCacheObject(key);
|
|
|
|
+ if (companyData != null) {
|
|
|
|
+ tempDTOS.addAll(companyData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //根据startDate和x分组,合并rewardMoney,根据x排序,限制10
|
|
|
|
+ rewardMoneyTrendDTOS = tempDTOS.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(dto -> dto.getStartDate() + ":" + dto.getX(),
|
|
|
|
+ Collectors.reducing(new RewardMoneyTrendDTO(), (dto1, dto2) -> {
|
|
|
|
+ RewardMoneyTrendDTO result = new RewardMoneyTrendDTO();
|
|
|
|
+ result.setStartDate(dto1.getStartDate());
|
|
|
|
+ result.setX(dto1.getX());
|
|
|
|
+ result.setRewardMoney(
|
|
|
|
+ (dto1.getRewardMoney() == null ? BigDecimal.ZERO : dto1.getRewardMoney())
|
|
|
|
+ .add(
|
|
|
|
+ (dto2 == null || dto2.getRewardMoney() == null ? BigDecimal.ZERO : dto2.getRewardMoney())
|
|
|
|
+ )
|
|
|
|
+ );
|
|
|
|
+ return result;
|
|
|
|
+ })))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .sorted(Comparator.comparing(RewardMoneyTrendDTO::getX))
|
|
|
|
+ .limit(10)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ }
|
|
return R.ok().put("data", rewardMoneyTrendDTOS);
|
|
return R.ok().put("data", rewardMoneyTrendDTOS);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -239,26 +469,128 @@ public class IndexStatisticsController {
|
|
String sort = param.getSort();
|
|
String sort = param.getSort();
|
|
Integer statisticalType = param.getStatisticalType();
|
|
Integer statisticalType = param.getStatisticalType();
|
|
Integer userType = param.getUserType();
|
|
Integer userType = param.getUserType();
|
|
|
|
+ List<CourseStatsDTO> courseStatsDTOS;
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ courseStatsDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort));
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ courseStatsDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s:%d", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort,param.getCompanyId()));
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<CourseStatsDTO> tempDTOS = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds){
|
|
|
|
+ List<CourseStatsDTO> companyDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s:%d", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort,companyId));
|
|
|
|
+ if (companyDTO != null) {
|
|
|
|
+ tempDTOS.addAll(companyDTO);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // courseId和courseName分组,合并watchUserCount、completedUserCount、answerUserCount、correctUserCount 限制最多返回10条记录
|
|
|
|
+ courseStatsDTOS = tempDTOS.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(dto -> dto.getCourseId() + ":" + dto.getCourseName()))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .map(group -> {
|
|
|
|
+ if (group.isEmpty()) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 取第一个作为基础对象
|
|
|
|
+ CourseStatsDTO result = new CourseStatsDTO();
|
|
|
|
+ CourseStatsDTO first = group.get(0);
|
|
|
|
+ result.setCourseId(first.getCourseId());
|
|
|
|
+ result.setCourseName(first.getCourseName());
|
|
|
|
+
|
|
|
|
+ // 合并所有数值字段
|
|
|
|
+ int watchUserCount = 0;
|
|
|
|
+ int completedUserCount = 0;
|
|
|
|
+ int answerUserCount = 0;
|
|
|
|
+ int correctUserCount = 0;
|
|
|
|
+
|
|
|
|
+ for (CourseStatsDTO dto : group) {
|
|
|
|
+ watchUserCount += (dto.getWatchUserCount() == null ? 0 : dto.getWatchUserCount());
|
|
|
|
+ completedUserCount += (dto.getCompletedUserCount() == null ? 0 : dto.getCompletedUserCount());
|
|
|
|
+ answerUserCount += (dto.getAnswerUserCount() == null ? 0 : dto.getAnswerUserCount());
|
|
|
|
+ correctUserCount += (dto.getCorrectUserCount() == null ? 0 : dto.getCorrectUserCount());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ result.setWatchUserCount(watchUserCount);
|
|
|
|
+ result.setCompletedUserCount(completedUserCount);
|
|
|
|
+ result.setAnswerUserCount(answerUserCount);
|
|
|
|
+ result.setCorrectUserCount(correctUserCount);
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+ })
|
|
|
|
+ .filter(Objects::nonNull)
|
|
|
|
+ .sorted(Comparator.comparing(CourseStatsDTO::getWatchUserCount, Comparator.nullsLast(Comparator.reverseOrder())))
|
|
|
|
+ .limit(10)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
- List<CourseStatsDTO> courseStatsDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort));
|
|
|
|
return R.ok().put("data", courseStatsDTOS);
|
|
return R.ok().put("data", courseStatsDTOS);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private List<CourseStatsDTO> groupAndSumCourseStatsWithStream(List<CourseStatsDTO> courseStatsList) {
|
|
|
|
+ // 定义合并逻辑
|
|
|
|
+ BinaryOperator<CourseStatsDTO> mergeFunction = (s1, s2) -> {
|
|
|
|
+ s1.setWatchUserCount(
|
|
|
|
+ (s1.getWatchUserCount() == null ? 0 : s1.getWatchUserCount()) +
|
|
|
|
+ (s2.getWatchUserCount() == null ? 0 : s2.getWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ s1.setCompletedUserCount(
|
|
|
|
+ (s1.getCompletedUserCount() == null ? 0 : s1.getCompletedUserCount()) +
|
|
|
|
+ (s2.getCompletedUserCount() == null ? 0 : s2.getCompletedUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ s1.setAnswerUserCount(
|
|
|
|
+ (s1.getAnswerUserCount() == null ? 0 : s1.getAnswerUserCount()) +
|
|
|
|
+ (s2.getAnswerUserCount() == null ? 0 : s2.getAnswerUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ s1.setCorrectUserCount(
|
|
|
|
+ (s1.getCorrectUserCount() == null ? 0 : s1.getCorrectUserCount()) +
|
|
|
|
+ (s2.getCorrectUserCount() == null ? 0 : s2.getCorrectUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ return s1;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ // 分组、合并并排序、限制10条
|
|
|
|
+ return courseStatsList.stream()
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
+ CourseStatsDTO::getCourseId,
|
|
|
|
+ dto -> {
|
|
|
|
+ CourseStatsDTO copy = new CourseStatsDTO();
|
|
|
|
+ copy.setCourseId(dto.getCourseId());
|
|
|
|
+ copy.setCourseName(dto.getCourseName());
|
|
|
|
+ copy.setWatchUserCount(dto.getWatchUserCount() == null ? 0 : dto.getWatchUserCount());
|
|
|
|
+ copy.setCompletedUserCount(dto.getCompletedUserCount() == null ? 0 : dto.getCompletedUserCount());
|
|
|
|
+ copy.setAnswerUserCount(dto.getAnswerUserCount() == null ? 0 : dto.getAnswerUserCount());
|
|
|
|
+ copy.setCorrectUserCount(dto.getCorrectUserCount() == null ? 0 : dto.getCorrectUserCount());
|
|
|
|
+ return copy;
|
|
|
|
+ },
|
|
|
|
+ mergeFunction,
|
|
|
|
+ LinkedHashMap::new
|
|
|
|
+ ))
|
|
|
|
+ .values()
|
|
|
|
+ .stream()
|
|
|
|
+ .sorted(Comparator.comparing(CourseStatsDTO::getWatchUserCount, Comparator.nullsLast(Comparator.reverseOrder())))
|
|
|
|
+ .limit(10)
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 数据概览
|
|
* 数据概览
|
|
*/
|
|
*/
|
|
@GetMapping("/dealerAggregated")
|
|
@GetMapping("/dealerAggregated")
|
|
public R dealerAggregated(StatisticsDeptCompanyParam param){
|
|
public R dealerAggregated(StatisticsDeptCompanyParam param){
|
|
DealerAggregatedDTO result = new DealerAggregatedDTO();
|
|
DealerAggregatedDTO result = new DealerAggregatedDTO();
|
|
- if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null)) {
|
|
|
|
- return R.ok().put("data",redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED));
|
|
|
|
- }
|
|
|
|
- //选中销售公司
|
|
|
|
- if (param.getCompanyId() != null) {
|
|
|
|
- result = redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_AGGREGATED, param.getCompanyId()));
|
|
|
|
- //没选中销售公司,选中部门为总公司
|
|
|
|
- }else if (param.getDeptId() == 1){
|
|
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
|
|
result = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED);
|
|
result = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED);
|
|
|
|
+ }else if (param.getCompanyId() != null) {
|
|
|
|
+ result = redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_AGGREGATED, param.getCompanyId()));
|
|
//没选中销售公司,部门不为总公司
|
|
//没选中销售公司,部门不为总公司
|
|
}else{
|
|
}else{
|
|
//Long padMaxNum = deptLimiteService.selectById(param.getDeptId()).getMaxPadNum();
|
|
//Long padMaxNum = deptLimiteService.selectById(param.getDeptId()).getMaxPadNum();
|
|
@@ -309,10 +641,24 @@ public class IndexStatisticsController {
|
|
* 短信余额
|
|
* 短信余额
|
|
*/
|
|
*/
|
|
@GetMapping("/smsBalance")
|
|
@GetMapping("/smsBalance")
|
|
- public R smsBalance(){
|
|
|
|
- Long smsBalance = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_SMS_BALANCE);
|
|
|
|
-
|
|
|
|
- return R.ok().put("data", smsBalance);
|
|
|
|
|
|
+ public R smsBalance(StatisticsDeptCompanyParam param){
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ return R.ok().put("data", redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_SMS_BALANCE));
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ return R.ok().put("data", redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_SMS_BALANCE, param.getCompanyId())));
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ long smsBalance = 0L;
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ for(Long companyId : companyIds) {
|
|
|
|
+ Long smsBalanceCompany = redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_SMS_BALANCE, companyId));
|
|
|
|
+ if (smsBalanceCompany != null) {
|
|
|
|
+ smsBalance += smsBalanceCompany;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return R.ok().put("data", smsBalance);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -320,7 +666,31 @@ public class IndexStatisticsController {
|
|
* 授权信息
|
|
* 授权信息
|
|
*/
|
|
*/
|
|
@GetMapping("/authorizationInfo")
|
|
@GetMapping("/authorizationInfo")
|
|
- public R authorizationInfo(){
|
|
|
|
|
|
+ public R authorizationInfo(StatisticsDeptCompanyParam param){
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ return R.ok().put("data", redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO));
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ return R.ok().put("data", redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO, param.getCompanyId())));
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ AuthorizationInfoDTO authorizationInfoDTO = new AuthorizationInfoDTO();
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ for(Long companyId : companyIds) {
|
|
|
|
+ AuthorizationInfoDTO companyDTO = redisCache.getCacheObject(String.format("%s:%d", DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO, companyId));
|
|
|
|
+ if (companyDTO != null) {
|
|
|
|
+ authorizationInfoDTO.setTodayWatchUserCount(
|
|
|
|
+ (authorizationInfoDTO.getTodayWatchUserCount() == null ? 0 : authorizationInfoDTO.getTodayWatchUserCount()) +
|
|
|
|
+ (companyDTO.getTodayWatchUserCount() == null ? 0 : companyDTO.getTodayWatchUserCount())
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ authorizationInfoDTO.setVersionLimit(
|
|
|
|
+ (authorizationInfoDTO.getVersionLimit() == null ? 0 : authorizationInfoDTO.getVersionLimit()) +
|
|
|
|
+ (companyDTO.getVersionLimit() == null ? 0 : companyDTO.getVersionLimit())
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
AuthorizationInfoDTO authorizationInfoDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO);
|
|
AuthorizationInfoDTO authorizationInfoDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO);
|
|
|
|
|
|
return R.ok().put("data", authorizationInfoDTO);
|
|
return R.ok().put("data", authorizationInfoDTO);
|
|
@@ -332,9 +702,29 @@ public class IndexStatisticsController {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@GetMapping("/thisMonthOrderCount")
|
|
@GetMapping("/thisMonthOrderCount")
|
|
- public R thisMonthOrderCount(){
|
|
|
|
- R result = redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_ORDER_COUNT);
|
|
|
|
- return result;
|
|
|
|
|
|
+ public R thisMonthOrderCount(StatisticsDeptCompanyParam param){
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ return redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_ORDER_COUNT);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ return redisCache.getCacheObject(String.format("%s:%d", THIS_MONTH_ORDER_COUNT, param.getCompanyId()));
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<String> datesList = new ArrayList<>();
|
|
|
|
+ List<Integer> orderCountList = new ArrayList<>();
|
|
|
|
+ List<Integer> payPriceList = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds) {
|
|
|
|
+ R result = redisCache.getCacheObject(String.format("%s:%d", THIS_MONTH_ORDER_COUNT, companyId));
|
|
|
|
+ Object datas = result.get("datas");
|
|
|
|
+ Object orderCount = result.get("orderCount");
|
|
|
|
+ Object payPrice = result.get("payPrice");
|
|
|
|
+ if(datas != null){
|
|
|
|
+ mergeDataListsForInteger(datesList, orderCountList, payPriceList, (List<String>)datas, (List<Integer>)orderCount, (List<Integer>)payPrice);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return R.ok().put("dates", datesList).put("orderCount", orderCountList).put("payPrice", payPriceList);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -343,8 +733,97 @@ public class IndexStatisticsController {
|
|
*/
|
|
*/
|
|
|
|
|
|
@GetMapping("/thisMonthRecvCount")
|
|
@GetMapping("/thisMonthRecvCount")
|
|
- public R thisMonthRecvCount(){
|
|
|
|
- R result = redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_RECV_COUNT);
|
|
|
|
- return result;
|
|
|
|
|
|
+ public R thisMonthRecvCount(StatisticsDeptCompanyParam param){
|
|
|
|
+ if (!"1".equals(medicalMallConfig.getStatics()) || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
|
|
|
|
+ return redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_RECV_COUNT);
|
|
|
|
+ }else if(param.getCompanyId() != null){
|
|
|
|
+ return redisCache.getCacheObject(String.format("%s:%d", THIS_MONTH_RECV_COUNT, param.getCompanyId()));
|
|
|
|
+ }else{
|
|
|
|
+ Company company = new Company();
|
|
|
|
+ company.setDeptId(param.getDeptId());
|
|
|
|
+ Long[] companyIds = companyService.selectCompanyList(company).stream().map(Company::getCompanyId).toArray(Long[]::new);
|
|
|
|
+ List<String> datesList = new ArrayList<>();
|
|
|
|
+ List<Integer> orderCountList = new ArrayList<>();
|
|
|
|
+ List<Float> payMoneyList = new ArrayList<>();
|
|
|
|
+ for(Long companyId : companyIds) {
|
|
|
|
+ R result = redisCache.getCacheObject(String.format("%s:%d", THIS_MONTH_RECV_COUNT, companyId));
|
|
|
|
+ Object datas = result.get("datas");
|
|
|
|
+ Object orderCount = result.get("orderCount");
|
|
|
|
+ Object payMoney = result.get("payMoney");
|
|
|
|
+ if(datas != null){
|
|
|
|
+ mergeDataLists(datesList, orderCountList, payMoneyList, (List<String>)datas, (List<Integer>)orderCount, (List<Float>)payMoney);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return R.ok().put("dates", datesList).put("orderCount", orderCountList).put("payMoney", payMoneyList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void mergeDataLists(List<String> datasList, List<Integer> orderCountList, List<Float> payMoneyList,
|
|
|
|
+ List<String> datas, List<Integer> orderCount, List<Float> payMoney) {
|
|
|
|
+
|
|
|
|
+ // 遍历新数据
|
|
|
|
+ for (int i = 0; i < datas.size(); i++) {
|
|
|
|
+ String newData = datas.get(i);
|
|
|
|
+ Integer newOrderCount = orderCount.get(i);
|
|
|
|
+ Float newPayMoney = payMoney.get(i);
|
|
|
|
+
|
|
|
|
+ // 查找在现有列表中的位置
|
|
|
|
+ int existingIndex = datasList.indexOf(newData);
|
|
|
|
+
|
|
|
|
+ if (existingIndex != -1) {
|
|
|
|
+ // 如果存在,将orderCount和payMoney相加
|
|
|
|
+ Integer existingOrderCount = orderCountList.get(existingIndex);
|
|
|
|
+ Float existingPayMoney = payMoneyList.get(existingIndex);
|
|
|
|
+
|
|
|
|
+ // 累加orderCount
|
|
|
|
+ orderCountList.set(existingIndex,
|
|
|
|
+ (existingOrderCount == null ? 0 : existingOrderCount) +
|
|
|
|
+ (newOrderCount == null ? 0 : newOrderCount));
|
|
|
|
+
|
|
|
|
+ // 累加payMoney
|
|
|
|
+ payMoneyList.set(existingIndex,
|
|
|
|
+ (existingPayMoney == null ? 0.0f : existingPayMoney) +
|
|
|
|
+ (newPayMoney == null ? 0.0f : newPayMoney));
|
|
|
|
+ } else {
|
|
|
|
+ // 如果不存在,直接添加新项
|
|
|
|
+ datasList.add(newData);
|
|
|
|
+ orderCountList.add(newOrderCount);
|
|
|
|
+ payMoneyList.add(newPayMoney);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void mergeDataListsForInteger(List<String> datasList, List<Integer> orderCountList, List<Integer> payMoneyList,
|
|
|
|
+ List<String> datas, List<Integer> orderCount, List<Integer> payMoney) {
|
|
|
|
+ // 遍历新数据
|
|
|
|
+ for (int i = 0; i < datas.size(); i++) {
|
|
|
|
+ String newData = datas.get(i);
|
|
|
|
+ Integer newOrderCount = orderCount.get(i);
|
|
|
|
+ Integer newPayMoney = payMoney.get(i);
|
|
|
|
+
|
|
|
|
+ // 查找在现有列表中的位置
|
|
|
|
+ int existingIndex = datasList.indexOf(newData);
|
|
|
|
+
|
|
|
|
+ if (existingIndex != -1) {
|
|
|
|
+ // 如果存在,将orderCount和payMoney相加
|
|
|
|
+ Integer existingOrderCount = orderCountList.get(existingIndex);
|
|
|
|
+ Integer existingPayMoney = payMoneyList.get(existingIndex);
|
|
|
|
+
|
|
|
|
+ // 累加orderCount
|
|
|
|
+ orderCountList.set(existingIndex,
|
|
|
|
+ (existingOrderCount == null ? 0 : existingOrderCount) +
|
|
|
|
+ (newOrderCount == null ? 0 : newOrderCount));
|
|
|
|
+
|
|
|
|
+ // 累加payMoney
|
|
|
|
+ payMoneyList.set(existingIndex,
|
|
|
|
+ (existingPayMoney == null ? 0 : existingPayMoney) +
|
|
|
|
+ (newPayMoney == null ? 0 : newPayMoney));
|
|
|
|
+ } else {
|
|
|
|
+ // 如果不存在,直接添加新项
|
|
|
|
+ datasList.add(newData);
|
|
|
|
+ orderCountList.add(newOrderCount);
|
|
|
|
+ payMoneyList.add(newPayMoney);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|