|
|
@@ -0,0 +1,79 @@
|
|
|
+package com.ytpm.middle.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.ytpm.agent.view.AgentAppView;
|
|
|
+import com.ytpm.feign.AppFeign;
|
|
|
+import com.ytpm.general.Result;
|
|
|
+import com.ytpm.middle.dao.ApkMapper;
|
|
|
+import com.ytpm.middle.dao.EnterpriseMapper;
|
|
|
+import com.ytpm.middle.service.CountService;
|
|
|
+import com.ytpm.middle.util.RedisUtil;
|
|
|
+import com.ytpm.middle.view.AppRankingListVO;
|
|
|
+import com.ytpm.middle.view.DashboardRankingListVO;
|
|
|
+import com.ytpm.middle.view.DashboardTopCountVo;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class CountServiceImpl implements CountService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EnterpriseMapper enterpriseMapper;
|
|
|
+ @Resource
|
|
|
+ private ApkMapper apkMapper;
|
|
|
+ @Resource
|
|
|
+ private AppFeign appFeign;
|
|
|
+ @Resource
|
|
|
+ private RedisUtil redisUtil;
|
|
|
+ @Value("${ranking.expire}")
|
|
|
+ private int rankingExpire;
|
|
|
+ @Value("${ranking.limit}")
|
|
|
+ private int rankingLimit;
|
|
|
+ private static final String RANKING_KEY = "yt_ranking";
|
|
|
+ /**
|
|
|
+ * 获取顶部数据统计
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Result<DashboardTopCountVo> getTopCount() {
|
|
|
+ DashboardTopCountVo vo = new DashboardTopCountVo();
|
|
|
+ vo.setAgentCount(enterpriseMapper.countEnterprise());
|
|
|
+ vo.setApkCount(apkMapper.countApk());
|
|
|
+ Map<String, BigDecimal> map = appFeign.getAdCount(apkMapper.getAppIds());
|
|
|
+ if(!map.isEmpty()){
|
|
|
+ BigDecimal adCount = map.get("adCount");
|
|
|
+ BigDecimal revenue = map.get("expectRevenue");
|
|
|
+ vo.setAdCount(Objects.isNull(adCount) ? 0 : adCount.intValue());
|
|
|
+ vo.setExpectRevenue(Objects.isNull(revenue) ? BigDecimal.ZERO : revenue);
|
|
|
+ }
|
|
|
+ return Result.resultObjOk(vo);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按照排行榜类型、排序规则统计排行榜信息
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Result<DashboardRankingListVO> getRankingList(Integer sortBy) {
|
|
|
+ //判断redis中是否存在排行榜信息 不存在则查询数据进行更新,存在则直接取出
|
|
|
+ if(Boolean.TRUE.equals(redisUtil.hasKey(RANKING_KEY))){
|
|
|
+ String ranking = redisUtil.getStr(RANKING_KEY);
|
|
|
+ return Result.resultObjOk(JSON.parseObject(ranking, DashboardRankingListVO.class));
|
|
|
+ }
|
|
|
+ DashboardRankingListVO rankingVO = appFeign.queryRankingList(sortBy,rankingLimit);
|
|
|
+ List<AppRankingListVO> appRankingList = rankingVO.getAppRankingList();
|
|
|
+ List<AgentAppView> views = apkMapper.queryAll();
|
|
|
+ Map<String, String> collect = views.stream().collect(Collectors.toMap(s -> s.getAppId(), o -> o.getAppName()));
|
|
|
+ for (AppRankingListVO vo : appRankingList) {
|
|
|
+ vo.setAppName(collect.get(vo.getAppId()));
|
|
|
+ }
|
|
|
+ rankingVO.setAppRankingList(appRankingList);
|
|
|
+ redisUtil.setTimeOutMinutesStr(RANKING_KEY, JSON.toJSONString(rankingVO),rankingExpire);
|
|
|
+ return Result.resultObjOk(rankingVO);
|
|
|
+ }
|
|
|
+}
|