Explorar el Código

ADS 聚合各项应用

marxjaw hace 2 meses
padre
commit
6e946835b1

+ 9 - 4
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java

@@ -78,7 +78,9 @@ public class YtAppUserServiceImpl implements YtAppUserService {
         JSONObject object = JSON.parseObject(string);
         List<YtAppUserListView> views = JSONArray.parseArray(object.getString("data"), YtAppUserListView.class);
         PageMeta pageMeta = JSON.parseObject(object.getString("pageMeta"), PageMeta.class);
-        setUserExtInfo(views,ytApp);
+        if(CollUtil.isNotEmpty(views)){
+            setUserExtInfo(views,ytApp);
+        }
         return new ResultTable(StatusCode.OK,RepMessage.QUERY_SUCCESS,views,pageMeta);
     }
 
@@ -95,9 +97,12 @@ public class YtAppUserServiceImpl implements YtAppUserService {
             datum.setVersionCode(ytApp.getVersionCode());
             datum.setDitchId(ytApp.getDitchId());
             datum.setDitchName(ytApp.getDitchName());
-            datum.setDeviceRepeatCount((int) recordList.stream().map(YtDyzLoginRecord::getDeviceModel).distinct().count());
-            datum.setIpRepeatCount((int)recordList.stream().map(YtDyzLoginRecord::getIpAddr).distinct().count());
-            datum.setCommunicationOperator(recordList.get(0).getOperator());
+            if(CollUtil.isNotEmpty(recordList)){
+                datum.setDeviceRepeatCount((int) recordList.stream().map(YtDyzLoginRecord::getDeviceModel).distinct().count());
+                datum.setIpRepeatCount((int)recordList.stream().map(YtDyzLoginRecord::getIpAddr).distinct().count());
+                datum.setCommunicationOperator(recordList.get(0).getOperator());
+            }
+
         }
     }
 

+ 120 - 0
yt-middle/middle-platform/pom.xml

@@ -43,6 +43,126 @@
             <artifactId>app-feign</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>advertise-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>algebraic-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>answer-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>arithmetic-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>calculator-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>countstep-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>diary-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>dtw-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>emoticons-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>idiom-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>irun-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>lemon-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>lime-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>nofeeds-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>raisepig-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>summary-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>walk-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>carp-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>vitality-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>mileage-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>picking-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>funarith-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>allusion-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.ytpm</groupId>
+            <artifactId>adage-feign</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
yt-middle/middle-platform/src/main/java/com/ytpm/middle/MiddleApplication.java

@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
 @SpringBootApplication
 @EnableDiscoveryClient
 @MapperScan(basePackages = "com.ytpm.middle.dao")
-@EnableFeignClients(basePackages = {"com.ytpm.feign"})
+@EnableFeignClients(basePackages = {"com.ytpm.feign", "com.ytpm.*.feign"})
 public class MiddleApplication
 {
     public static void main( String[] args )

+ 2 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/dao/ApkMapper.java

@@ -48,4 +48,6 @@ public interface ApkMapper {
     List<AgentAppView> queryBySuperiorId(@Param("superiorId") String superiorId);
 
     List<FeignServeAppView> queryServeAndApp();
+
+    AgentAppView queryByAppId(@Param("appId") String appId);
 }

+ 24 - 5
yt-middle/middle-platform/src/main/java/com/ytpm/middle/monitor/RedisKeyExpirationListener.java

@@ -1,17 +1,24 @@
 package com.ytpm.middle.monitor;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.ytpm.agent.view.AgentAppView;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.middle.dao.ApkMapper;
+import com.ytpm.middle.util.FeignClientInvoker;
 import com.ytpm.middle.util.RedisUtil;
+
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.ytpm.middle.view.AppRankingListVO;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.UserRankingListVO;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.data.redis.connection.Message;
@@ -34,8 +41,8 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
     RedisUtil redisUtil ;
     @Resource
     ApkMapper apkMapper;
-    @Resource
-    AppFeign appFeign;
+    @Autowired
+    private FeignClientInvoker feignInvoker;
     @Value("${ranking.expire}")
     private long rankingExpire;
     @Value("${ranking.limit}")
@@ -73,14 +80,26 @@ public class RedisKeyExpirationListener extends KeyExpirationEventMessageListene
      * 查询排行榜并缓存
      */
     private void getRankingAnCache(Integer sortBy) {
-        DashboardRankingListVO rankingVO = appFeign.queryRankingList(sortBy,rankingLimit);
-        List<AppRankingListVO> appRankingList = rankingVO.getAppRankingList();
         List<AgentAppView> views = apkMapper.queryAll();
+        List<String> serveList = views.stream().map(AgentAppView::getServiceName).distinct().collect(Collectors.toList());
+        DashboardRankingListVO rankingVO = new DashboardRankingListVO();
+        List<AppRankingListVO> appRankingList = new ArrayList<>();
+        List<UserRankingListVO> userRankingList = new ArrayList<>();
+        for (String serve : serveList) {
+            Object o = feignInvoker.invoke(serve,"queryRankingList",sortBy,rankingLimit);
+            DashboardRankingListVO vo = JSONObject.parseObject(JSON.toJSONString(o), DashboardRankingListVO.class);
+            appRankingList.addAll(vo.getAppRankingList());
+            userRankingList.addAll(vo.getUserRankingList());
+        }
+        //设置应用名称
         Map<String, String> collect = views.stream().collect(Collectors.toMap(AgentAppView::getAppId, AgentAppView::getAppName));
         for (AppRankingListVO vo : appRankingList) {
             vo.setAppName(collect.get(vo.getAppId()));
         }
-        rankingVO.setAppRankingList(appRankingList);
+        rankingVO.setUserRankingList(userRankingList.stream().sorted(Comparator.comparing(UserRankingListVO::getTotalIncome)
+                .reversed()).limit(5).collect(Collectors.toList()));
+        rankingVO.setAppRankingList(appRankingList.stream().sorted(Comparator.comparing(AppRankingListVO::getTotalRevenue)
+                .reversed()).limit(5).collect(Collectors.toList()));
         redisUtil.setTimeOutMinutesStr(RANKING_KEY+sortBy, JSON.toJSONString(rankingVO),rankingExpire);
     }
 }

+ 38 - 9
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/CountServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ytpm.agent.model.YtPlatformUserApp;
 import com.ytpm.agent.view.AgentAppView;
 import com.ytpm.agent.view.FeignServeAppView;
-import com.ytpm.feign.AppFeign;
+import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.middle.dao.ApkMapper;
+import com.ytpm.middle.dao.AppMapper;
 import com.ytpm.middle.dao.EnterpriseMapper;
 import com.ytpm.middle.dao.RiskMapper;
 import com.ytpm.middle.service.CountService;
@@ -21,6 +23,7 @@ import com.ytpm.middle.view.DashboardRankingListVO;
 import com.ytpm.middle.view.DashboardRevenueVO;
 import com.ytpm.middle.view.DashboardRiskVO;
 import com.ytpm.middle.view.DashboardTopCountVo;
+import com.ytpm.middle.view.UserRankingListVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.context.config.annotation.RefreshScope;
@@ -28,6 +31,8 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -44,8 +49,6 @@ public class CountServiceImpl implements CountService {
     @Autowired
     private FeignClientInvoker feignInvoker;
     @Resource
-    private AppFeign appFeign;
-    @Resource
     private RiskMapper riskMapper;
     @Resource
     private RedisUtil redisUtil;
@@ -54,6 +57,9 @@ public class CountServiceImpl implements CountService {
     @Value("${ranking.limit}")
     private int rankingLimit;
     private static final String RANKING_KEY = "yt_ranking";
+    @Resource
+    private AppMapper appMapper;
+
     /**
      * 获取顶部数据统计
      */
@@ -63,7 +69,8 @@ public class CountServiceImpl implements CountService {
         vo.setAgentCount(enterpriseMapper.countEnterprise());
         vo.setApkCount(apkMapper.countApk());
         List<FeignServeAppView> appViews = apkMapper.queryServeAndApp();
-        Map<String, String> serveMap = appViews.stream().collect(Collectors.toMap(FeignServeAppView::getServiceName, FeignServeAppView::getAppIds));
+        Map<String, String> serveMap = appViews.stream().filter(s->StrUtil.isNotBlank(s.getAppIds()))
+                .collect(Collectors.toMap(FeignServeAppView::getServiceName, FeignServeAppView::getAppIds));
         BigDecimal resultAdCount = new BigDecimal(0);
         BigDecimal resultRevenue = new BigDecimal(0);
         for (Map.Entry<String, String> entry : serveMap.entrySet()) {
@@ -98,14 +105,27 @@ public class CountServiceImpl implements CountService {
      * 查询排行榜并缓存
      */
     private DashboardRankingListVO getRankingAnCache(Integer sortBy) {
-        DashboardRankingListVO rankingVO = appFeign.queryRankingList(sortBy,rankingLimit);
-        List<AppRankingListVO> appRankingList = rankingVO.getAppRankingList();
+
         List<AgentAppView> views = apkMapper.queryAll();
+        List<String> serveList = views.stream().map(AgentAppView::getServiceName).distinct().collect(Collectors.toList());
+        DashboardRankingListVO rankingVO = new DashboardRankingListVO();
+        List<AppRankingListVO> appRankingList = new ArrayList<>();
+        List<UserRankingListVO> userRankingList = new ArrayList<>();
+        for (String serve : serveList) {
+            Object o = feignInvoker.invoke(serve,"queryRankingList",sortBy,rankingLimit);
+            DashboardRankingListVO vo = JSONObject.parseObject(JSON.toJSONString(o), DashboardRankingListVO.class);
+            appRankingList.addAll(vo.getAppRankingList());
+            userRankingList.addAll(vo.getUserRankingList());
+        }
+        //设置应用名称
         Map<String, String> collect = views.stream().collect(Collectors.toMap(AgentAppView::getAppId, AgentAppView::getAppName));
         for (AppRankingListVO vo : appRankingList) {
             vo.setAppName(collect.get(vo.getAppId()));
         }
-        rankingVO.setAppRankingList(appRankingList);
+        rankingVO.setUserRankingList(userRankingList.stream().sorted(Comparator.comparing(UserRankingListVO::getTotalIncome)
+                .reversed()).limit(5).collect(Collectors.toList()));
+        rankingVO.setAppRankingList(appRankingList.stream().sorted(Comparator.comparing(AppRankingListVO::getTotalRevenue)
+                .reversed()).limit(5).collect(Collectors.toList()));
         redisUtil.setTimeOutMinutesStr(RANKING_KEY+sortBy, JSON.toJSONString(rankingVO),rankingExpire);
         return rankingVO;
     }
@@ -117,7 +137,9 @@ public class CountServiceImpl implements CountService {
     public Result<DashboardRevenueVO> getRevenueStatics(String appId) {
         List<AgentAppView> apkList =  apkMapper.queryBySuperiorId(appId);
         String apkIds = apkList.stream().map(AgentAppView::getAppId).collect(Collectors.joining(","));
-        DashboardRevenueVO vo =  appFeign.revenueStatics(apkIds);
+        YtPlatformUserApp appInfo = appMapper.getByPrimary(appId);
+        Object o = feignInvoker.invoke(appInfo.getServiceName(),"revenueStatics",apkIds);
+        DashboardRevenueVO vo = JSONObject.parseObject(JSON.toJSONString(o), DashboardRevenueVO.class);
         Map<String, String> appNameMap = apkList.stream().collect(Collectors.toMap(AgentAppView::getAppId, AgentAppView::getAppName));
         List<DashboardAppRevenueVO> appRevenueList = vo.getAppRevenueList();
         for (DashboardAppRevenueVO revenueVO : appRevenueList) {
@@ -132,7 +154,14 @@ public class CountServiceImpl implements CountService {
      */
     @Override
     public Result<DashboardRiskVO> getUserStatics(String appId) {
-        DashboardRiskVO vo = appFeign.userStatics(appId);
+        AgentAppView view = apkMapper.queryByAppId(appId);
+        if(Objects.isNull(view)){
+            return Result.resultErr(RepMessage.OBJECT_NOT_EXIST);
+        }
+        YtPlatformUserApp appInfo = appMapper.getByPrimary(view.getSuperiorId());
+        Object o = feignInvoker.invoke(appInfo.getServiceName(), "userStatics", appId);
+        DashboardRiskVO vo = JSONObject.parseObject(JSON.toJSONString(o), DashboardRiskVO.class);
+
         vo.setTodayBannedCount(riskMapper.countBanned(appId,1));
         vo.setYesterdayBannedCount(riskMapper.countBanned(appId,2));
         vo.setMonthBannedCount(riskMapper.countBanned(appId,3));

+ 34 - 3
yt-middle/middle-platform/src/main/resources/mapper/ApkMapper.xml

@@ -66,9 +66,34 @@
     </select>
     <select id="queryAll" resultType="com.ytpm.agent.view.AgentAppView">
         select
-            app_id, app_key, app_name, user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled, store_on_sale, store_type, store_url, package_name, domain, category, sub_category, coppa, screen_orientation, ccpa, feign_path, ditch_id, ditch_name, superior_id
-        from yt_app
-        where enabled = 1
+            a.app_id,
+            a.app_key,
+            a.app_name,
+            a.user_id,
+            a.app_type,
+            a.apk_url,
+            a.qr_code,
+            a.version_code,
+            a.update_tips,
+            a.enabled,
+            a.store_on_sale,
+            a.store_type,
+            a.store_url,
+            a.package_name,
+            a.domain,
+            a.category,
+            a.sub_category,
+            a.coppa,
+            a.screen_orientation,
+            a.ccpa,
+            a.feign_path,
+            a.ditch_id,
+            a.ditch_name,
+            a.superior_id,
+            pua.service_name
+        from yt_app a
+        left join yt_platform_user_app pua on a.superior_id = pua.app_id
+        where a.enabled = 1
     </select>
     <select id="queryBySuperiorId" resultType="com.ytpm.agent.view.AgentAppView">
         select
@@ -85,6 +110,12 @@
         where pua.service_name is not null and pua.user_id is not null
         group by pua.service_name
     </select>
+    <select id="queryByAppId" resultType="com.ytpm.agent.view.AgentAppView">
+        select
+            app_id, app_key, app_name, user_id, app_type, apk_url, qr_code, version_code, update_tips, enabled, store_on_sale, store_type, store_url, package_name, domain, category, sub_category, coppa, screen_orientation, ccpa, feign_path, ditch_id, ditch_name, superior_id
+        from yt_app
+        where app_id = #{appId}
+    </select>
 
     <insert id="insertOne">
         insert into yt_app

+ 1 - 1
yt-middle/middle-platform/src/main/resources/mapper/AppMapper.xml

@@ -161,7 +161,7 @@
     </select>
     <select id="getByPrimary" resultType="com.ytpm.agent.model.YtPlatformUserApp">
         select
-            app_id, app_name, user_id,sale_price,grant_type, app_type, detail_url, package_name, domain, issued_time, wx_app_id,wx_secret
+            app_id, app_name, user_id,sale_price,grant_type, app_type,service_name, detail_url, package_name, domain, issued_time, wx_app_id,wx_secret
         from yt_platform_user_app
         where app_id = #{appId}
     </select>