|
@@ -60,6 +60,8 @@ import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -3890,9 +3892,13 @@ public class DataDashboardService {
|
|
|
.asList(
|
|
|
Pair.of("G", "0%"),
|
|
|
Pair.of("I", "0%"),
|
|
|
- Pair.of("J", "0.00%"),
|
|
|
+ Pair.of("J", "0%"),
|
|
|
Pair.of("K", "0%"),
|
|
|
- Pair.of("L", "0%")
|
|
|
+ Pair.of("L", "0%"),
|
|
|
+ Pair.of("M", "0%"),
|
|
|
+ Pair.of("N", "0%"),
|
|
|
+ Pair.of("O", "0%"),
|
|
|
+ Pair.of("P", "0%")
|
|
|
);
|
|
|
doSendFeishuSheet(dateStrList, dailyDetailSheetToken, "0Lwz8A", rowNum, rows,
|
|
|
2, styles, null, null);
|
|
@@ -3911,7 +3917,7 @@ public class DataDashboardService {
|
|
|
for (CategoryGroupFunnelExport item : matchCategoryList) {
|
|
|
item.setDateStr(dateStr);
|
|
|
if (Objects.nonNull(item.getMatchCount()) && item.getMatchCount() > 0) {
|
|
|
- item.setMatchSuccessRate((double) item.getMatchSuccessCount() / item.getMatchCount());
|
|
|
+ item.setMatchSuccessRate(round((double) item.getMatchSuccessCount() / item.getMatchCount(), 2));
|
|
|
}
|
|
|
result.add(item);
|
|
|
}
|
|
@@ -3929,25 +3935,76 @@ public class DataDashboardService {
|
|
|
export.setVideoAuditCount(item.getVideoAuditCount());
|
|
|
if (Objects.nonNull(export.getMatchSuccessCount()) && export.getMatchSuccessCount() > 0
|
|
|
&& Objects.nonNull(export.getVideoAuditCount())) {
|
|
|
- export.setAuditRate((double) export.getVideoAuditCount() / export.getMatchSuccessCount());
|
|
|
+ export.setAuditRate(round((double) export.getVideoAuditCount() / export.getMatchSuccessCount(), 2));
|
|
|
}
|
|
|
if (Objects.nonNull(export.getVideoAuditCount()) && export.getVideoAuditCount() > 0) {
|
|
|
- export.setVideoAuditPassRate((double) export.getVideoAuditPassCount() / export.getVideoAuditCount());
|
|
|
+ export.setVideoAuditPassRate(round((double) export.getVideoAuditPassCount() / export.getVideoAuditCount(), 2));
|
|
|
}
|
|
|
}
|
|
|
List<CategoryGroupDataExport> dataList = buildCategoryGroupDataExport(dateStr);
|
|
|
Map<String, CategoryGroupDataExport> categoryDataMap = dataList.stream().filter(o -> o.getPosition().equals("头条"))
|
|
|
.collect(Collectors.toMap(CategoryGroupDataExport::getCategory, Function.identity()));
|
|
|
+ long auditPassTotal = result.stream().filter(o -> Objects.nonNull(o.getVideoAuditPassCount()))
|
|
|
+ .mapToLong(CategoryGroupFunnelExport::getVideoAuditPassCount).sum();
|
|
|
+ int viewCountTotal = dataList.stream().filter(o -> o.getPosition().equals("头条"))
|
|
|
+ .filter(o -> Objects.nonNull(o.getViewCount()))
|
|
|
+ .mapToInt(CategoryGroupDataExport::getViewCount).sum();
|
|
|
+
|
|
|
+ List<String> dateStrList = DateUtils.getBeforeDays(null, dateStr, 7);
|
|
|
+ List<CategoryGroupDataExport> dataSevenDaysList = new ArrayList<>();
|
|
|
+ for (String dt : dateStrList) {
|
|
|
+ dataSevenDaysList.addAll(buildCategoryGroupDataExport(dt));
|
|
|
+ }
|
|
|
+ int sevenSumViewCount = dataSevenDaysList.stream().filter(o -> o.getPosition().equals("头条"))
|
|
|
+ .filter(o -> Objects.nonNull(o.getViewCount()))
|
|
|
+ .mapToInt(CategoryGroupDataExport::getViewCount).sum();
|
|
|
+ Map<String, List<CategoryGroupDataExport>> categoryDataSevenDaysMap = dataSevenDaysList.stream().filter(o -> o.getPosition().equals("头条"))
|
|
|
+ .collect(Collectors.groupingBy(CategoryGroupDataExport::getCategory));
|
|
|
for (CategoryGroupFunnelExport export : result) {
|
|
|
CategoryGroupDataExport data = categoryDataMap.get(export.getCategory());
|
|
|
if (Objects.nonNull(data)) {
|
|
|
export.setReadRate(data.getReadRate());
|
|
|
export.setOpenRate(data.getOpenRate());
|
|
|
export.setFissionRate(data.getFissionRate());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // sum
|
|
|
+ if (viewCountTotal > 0 && Objects.nonNull(data.getViewCount())) {
|
|
|
+ export.setViewCountProportion(round((double) data.getViewCount() / viewCountTotal, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<CategoryGroupDataExport> sevenDaysCategoryDataList = categoryDataSevenDaysMap.get(export.getCategory());
|
|
|
+ if (CollectionUtil.isNotEmpty(sevenDaysCategoryDataList)) {
|
|
|
+ int sevenDaysViewCount = sevenDaysCategoryDataList.stream().filter(o -> Objects.nonNull(o.getViewCount()))
|
|
|
+ .mapToInt(CategoryGroupDataExport::getViewCount).sum();
|
|
|
+ if (sevenSumViewCount > 0) {
|
|
|
+ export.setSupplyDemandProportion(round((double) sevenDaysViewCount / sevenSumViewCount, 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(export.getVideoAuditPassCount()) && auditPassTotal > 0) {
|
|
|
+ export.setAuditPassTotalProportion(round((double) export.getVideoAuditPassCount() / auditPassTotal, 2));
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(export.getSupplyDemandProportion())
|
|
|
+ && export.getSupplyDemandProportion() > 0
|
|
|
+ && Objects.nonNull(export.getAuditPassTotalProportion())) {
|
|
|
+ export.setAuditPassSupplyDemandRate(round(export.getAuditPassTotalProportion() / export.getSupplyDemandProportion(), 2));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> categorySort = Arrays.asList("历史人物","国家大事","社会法治","奇闻趣事","现代人物","情感故事","家长里短","怀旧时光","社会现象","名人八卦","知识科普","军事历史","健康养生","政治新闻","财经科技");
|
|
|
+ // 创建自定义排序比较器
|
|
|
+ Comparator<CategoryGroupFunnelExport> comparator = (o1, o2) -> {
|
|
|
+ int index1 = categorySort.indexOf(o1.getCategory());
|
|
|
+ int index2 = categorySort.indexOf(o2.getCategory());
|
|
|
+ // 处理未出现在排序列表中的分类(放到最后)
|
|
|
+ if (index1 == -1) index1 = Integer.MAX_VALUE;
|
|
|
+ if (index2 == -1) index2 = Integer.MAX_VALUE;
|
|
|
+ return Integer.compare(index1, index2);
|
|
|
+ };
|
|
|
+ // 使用自定义排序器进行排序
|
|
|
+ result.sort(comparator);
|
|
|
return result;
|
|
|
}
|
|
|
+
|
|
|
+ private double round(double value, int places) {
|
|
|
+ BigDecimal bd = BigDecimal.valueOf(value);
|
|
|
+ bd = bd.setScale(places, RoundingMode.HALF_UP);
|
|
|
+ return bd.doubleValue();
|
|
|
+ }
|
|
|
}
|