|  | @@ -186,7 +186,9 @@ public class DataDashboardService {
 | 
											
												
													
														|  |                          Pair.of("O", "0.00%"),
 |  |                          Pair.of("O", "0.00%"),
 | 
											
												
													
														|  |                          Pair.of("P", "0.00%"),
 |  |                          Pair.of("P", "0.00%"),
 | 
											
												
													
														|  |                          Pair.of("Q", "0.00%"),
 |  |                          Pair.of("Q", "0.00%"),
 | 
											
												
													
														|  | -                        Pair.of("R", "0.00%")
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        Pair.of("R", "0.00%"),
 | 
											
												
													
														|  | 
 |  | +                        Pair.of("S", "0.00%"),
 | 
											
												
													
														|  | 
 |  | +                        Pair.of("T", "0.00%")
 | 
											
												
													
														|  |                  );
 |  |                  );
 | 
											
												
													
														|  |          doSendFeishuSheet(dateStrList, sheetToken, sheetId, rowNum, rows, 2, styles, delDateStrList, null);
 |  |          doSendFeishuSheet(dateStrList, sheetToken, sheetId, rowNum, rows, 2, styles, delDateStrList, null);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -624,49 +626,85 @@ public class DataDashboardService {
 | 
											
												
													
														|  |              Date secondDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(minDate)).min(Date::compareTo).orElse(new Date());
 |  |              Date secondDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(minDate)).min(Date::compareTo).orElse(new Date());
 | 
											
												
													
														|  |              Date thirdDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(secondDate)).min(Date::compareTo).orElse(new Date());
 |  |              Date thirdDate = articleDetailInfos.stream().map(ArticleDetailInfo::getRecallDt).filter(o -> o.after(secondDate)).min(Date::compareTo).orElse(new Date());
 | 
											
												
													
														|  |              int sumFirstLevel = 0;
 |  |              int sumFirstLevel = 0;
 | 
											
												
													
														|  | -            int sumFission0 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumFission1 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumFission2 = 0;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            int sumFission0 = 0, sumFission0Head = 0, sumFission0Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumFission1 = 0, sumFission1Head = 0, sumFission1Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumFission2 = 0, sumFission2Head = 0, sumFission2Recommend = 0;
 | 
											
												
													
														|  |              int sumSecondFirstLevel = 0;
 |  |              int sumSecondFirstLevel = 0;
 | 
											
												
													
														|  | -            int sumSecondFission0 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumSecondFission1 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumSecondFission2 = 0;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            int sumSecondFission0 = 0, sumSecondFission0Head = 0, sumSecondFission0Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumSecondFission1 = 0, sumSecondFission1Head = 0, sumSecondFission1Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumSecondFission2 = 0, sumSecondFission2Head = 0, sumSecondFission2Recommend = 0;
 | 
											
												
													
														|  |              int sumThirdFirstLevel = 0;
 |  |              int sumThirdFirstLevel = 0;
 | 
											
												
													
														|  | -            int sumThirdFission0 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumThirdFission1 = 0;
 |  | 
 | 
											
												
													
														|  | -            int sumThirdFission2 = 0;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            int sumThirdFission0 = 0, sumThirdFission0Head = 0, sumThirdFission0Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumThirdFission1 = 0, sumThirdFission1Head = 0, sumThirdFission1Recommend = 0;
 | 
											
												
													
														|  | 
 |  | +            int sumThirdFission2 = 0, sumThirdFission2Head = 0, sumThirdFission2Recommend = 0;
 | 
											
												
													
														|  |              for (ArticleDetailInfo articleDetailInfo : articleDetailInfos) {
 |  |              for (ArticleDetailInfo articleDetailInfo : articleDetailInfos) {
 | 
											
												
													
														|  |                  if (articleDetailInfo.getRecallDt().equals(minDate)) {
 |  |                  if (articleDetailInfo.getRecallDt().equals(minDate)) {
 | 
											
												
													
														|  |                      sumFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 |  |                      sumFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 | 
											
												
													
														|  |                      sumFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 |  |                      sumFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission0Head += Optional.ofNullable(articleDetailInfo.getFission0Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission0Recommend += Optional.ofNullable(articleDetailInfo.getFission0Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 |  |                      sumFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission1Head += Optional.ofNullable(articleDetailInfo.getFission1Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission1Recommend += Optional.ofNullable(articleDetailInfo.getFission1Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 |  |                      sumFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission2Head += Optional.ofNullable(articleDetailInfo.getFission2Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumFission2Recommend += Optional.ofNullable(articleDetailInfo.getFission2Recommend()).orElse(0);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |                  if (articleDetailInfo.getRecallDt().equals(secondDate)) {
 |  |                  if (articleDetailInfo.getRecallDt().equals(secondDate)) {
 | 
											
												
													
														|  |                      sumSecondFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 |  |                      sumSecondFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 | 
											
												
													
														|  |                      sumSecondFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 |  |                      sumSecondFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission0Head += Optional.ofNullable(articleDetailInfo.getFission0Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission0Recommend += Optional.ofNullable(articleDetailInfo.getFission0Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumSecondFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 |  |                      sumSecondFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission1Head += Optional.ofNullable(articleDetailInfo.getFission1Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission1Recommend += Optional.ofNullable(articleDetailInfo.getFission1Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumSecondFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 |  |                      sumSecondFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission2Head += Optional.ofNullable(articleDetailInfo.getFission2Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumSecondFission2Recommend += Optional.ofNullable(articleDetailInfo.getFission2Recommend()).orElse(0);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |                  if (articleDetailInfo.getRecallDt().equals(thirdDate)) {
 |  |                  if (articleDetailInfo.getRecallDt().equals(thirdDate)) {
 | 
											
												
													
														|  |                      sumThirdFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 |  |                      sumThirdFirstLevel += Optional.ofNullable(articleDetailInfo.getFirstLevel()).orElse(0);
 | 
											
												
													
														|  |                      sumThirdFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 |  |                      sumThirdFission0 += Optional.ofNullable(articleDetailInfo.getFission0()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission0Head += Optional.ofNullable(articleDetailInfo.getFission0Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission0Recommend += Optional.ofNullable(articleDetailInfo.getFission0Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumThirdFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 |  |                      sumThirdFission1 += Optional.ofNullable(articleDetailInfo.getFission1()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission1Head += Optional.ofNullable(articleDetailInfo.getFission1Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission1Recommend += Optional.ofNullable(articleDetailInfo.getFission1Recommend()).orElse(0);
 | 
											
												
													
														|  |                      sumThirdFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 |  |                      sumThirdFission2 += Optional.ofNullable(articleDetailInfo.getFission2()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission2Head += Optional.ofNullable(articleDetailInfo.getFission2Head()).orElse(0);
 | 
											
												
													
														|  | 
 |  | +                    sumThirdFission2Recommend += Optional.ofNullable(articleDetailInfo.getFission2Recommend()).orElse(0);
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              obj.setFirstLevel(sumFirstLevel);
 |  |              obj.setFirstLevel(sumFirstLevel);
 | 
											
												
													
														|  |              obj.setFission0(sumFission0);
 |  |              obj.setFission0(sumFission0);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission0Head(sumFission0Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission0Recommend(sumFission0Recommend);
 | 
											
												
													
														|  |              obj.setFission1(sumFission1);
 |  |              obj.setFission1(sumFission1);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission1Head(sumFission1Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission1Recommend(sumFission1Recommend);
 | 
											
												
													
														|  |              obj.setFission2(sumFission2);
 |  |              obj.setFission2(sumFission2);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission2Head(sumFission2Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setFission2Recommend(sumFission2Recommend);
 | 
											
												
													
														|  |              obj.setSecondFirstLevel(sumSecondFirstLevel);
 |  |              obj.setSecondFirstLevel(sumSecondFirstLevel);
 | 
											
												
													
														|  |              obj.setSecondFission0(sumSecondFission0);
 |  |              obj.setSecondFission0(sumSecondFission0);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission0Head(sumSecondFission0Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission0Recommend(sumSecondFission0Recommend);
 | 
											
												
													
														|  |              obj.setSecondFission1(sumSecondFission1);
 |  |              obj.setSecondFission1(sumSecondFission1);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission1Head(sumSecondFission1Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission1Recommend(sumSecondFission1Recommend);
 | 
											
												
													
														|  |              obj.setSecondFission2(sumSecondFission2);
 |  |              obj.setSecondFission2(sumSecondFission2);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission2Head(sumSecondFission2Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setSecondFission2Recommend(sumSecondFission2Recommend);
 | 
											
												
													
														|  |              obj.setThirdFirstLevel(sumThirdFirstLevel);
 |  |              obj.setThirdFirstLevel(sumThirdFirstLevel);
 | 
											
												
													
														|  |              obj.setThirdFission0(sumThirdFission0);
 |  |              obj.setThirdFission0(sumThirdFission0);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission0Head(sumThirdFission0Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission0Recommend(sumThirdFission0Recommend);
 | 
											
												
													
														|  |              obj.setThirdFission1(sumThirdFission1);
 |  |              obj.setThirdFission1(sumThirdFission1);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission1Head(sumThirdFission1Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission1Recommend(sumThirdFission1Recommend);
 | 
											
												
													
														|  |              obj.setThirdFission2(sumThirdFission2);
 |  |              obj.setThirdFission2(sumThirdFission2);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission2Head(sumThirdFission2Head);
 | 
											
												
													
														|  | 
 |  | +            obj.setThirdFission2Recommend(sumThirdFission2Recommend);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -702,8 +740,16 @@ public class DataDashboardService {
 | 
											
												
													
														|  |                  obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
 |  |                  obj.setReadFansRate((article.getShowViewCount() * 1.0) / avgInfo.getFans());
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        if (Objects.nonNull(obj.getFirstLevel()) && obj.getFirstLevel() > 0 && Objects.nonNull(obj.getFission0())) {
 |  | 
 | 
											
												
													
														|  | -            obj.setFission0FirstRate((obj.getFission0() * 1.0) / obj.getFirstLevel());
 |  | 
 | 
											
												
													
														|  | 
 |  | +        if (Objects.nonNull(obj.getFirstLevel()) && obj.getFirstLevel() > 0) {
 | 
											
												
													
														|  | 
 |  | +            if (Objects.nonNull(obj.getFission0())) {
 | 
											
												
													
														|  | 
 |  | +                obj.setFission0FirstRate((obj.getFission0() * 1.0) / obj.getFirstLevel());
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            if (Objects.nonNull(obj.getFission0Head())) {
 | 
											
												
													
														|  | 
 |  | +                obj.setFission0HeadFirstRate((obj.getFission0Head() * 1.0) / obj.getFirstLevel());
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  | 
 |  | +            if (Objects.nonNull(obj.getFission0Recommend())) {
 | 
											
												
													
														|  | 
 |  | +                obj.setFission0RecommendFirstRate((obj.getFission0Recommend() * 1.0) / obj.getFirstLevel());
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          if (article.getShowViewCount() > 0 && Objects.nonNull(obj.getFirstLevel())) {
 |  |          if (article.getShowViewCount() > 0 && Objects.nonNull(obj.getFirstLevel())) {
 | 
											
												
													
														|  |              obj.setFirstReadRate((obj.getFirstLevel() * 1.0) / article.getShowViewCount());
 |  |              obj.setFirstReadRate((obj.getFirstLevel() * 1.0) / article.getShowViewCount());
 |