Browse Source

查询各渠道收益分时统计 待完成

marxjaw 3 months ago
parent
commit
0ba1ba1c2d

+ 4 - 0
yt-app/app-feign/src/main/java/com/ytpm/feign/AppFeign.java

@@ -13,6 +13,7 @@ import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -65,4 +66,7 @@ public interface AppFeign {
 
     @GetMapping("/ad/getAppRankingList")
     DashboardRankingListVO queryRankingList(@RequestParam(name = "sortBy") Integer sortBy,@RequestParam(name = "limit") Integer limit);
+
+    @GetMapping("/ad/revenueStatics")
+    DashboardRevenueVO revenueStatics(@RequestParam(name = "apkIds") String apkIds);
 }

+ 17 - 0
yt-app/app-service/src/main/java/com/ytpm/controller/AdController.java

@@ -3,6 +3,7 @@ package com.ytpm.controller;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.general.Result;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 import com.ytpm.service.AdService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -37,12 +38,18 @@ public class AdController {
         return adService.saveRecord(param);
     }
 
+    /**
+     * 根据应用ID查询广告数
+     */
     @ApiOperation("根据应用ID查询广告数")
     @GetMapping("/getAdCount")
     public Map<String, BigDecimal> getAdCount(@RequestParam(name = "appIds")String appIds){
         return adService.getAdCount(appIds);
     }
 
+    /**
+     * 查询应用排行榜信息
+     */
     @ApiImplicitParams({
             @ApiImplicitParam(name = "sortBy", value = "排行榜排序规则",required = true),
             @ApiImplicitParam(name = "limit", value = "排行榜显示数量",required = true),
@@ -52,4 +59,14 @@ public class AdController {
     public DashboardRankingListVO queryRankingList(@RequestParam(name = "sortBy")Integer sortBy,@RequestParam(name = "limit")Integer limit){
         return adService.queryRankingList(sortBy,limit);
     }
+
+    /**
+     * 查询各渠道应用收益分时统计
+     */
+    @ApiImplicitParam(name = "apkIds", value = "渠道应用ID(,拼接)",required = true)
+    @ApiOperation("查询各渠道应用收益分时统计")
+    @GetMapping("/revenueStatics")
+    public DashboardRevenueVO revenueStatics(@RequestParam(name = "apkIds")String apkIds){
+        return adService.revenueStatics(apkIds);
+    }
 }

+ 5 - 0
yt-app/app-service/src/main/java/com/ytpm/service/AdService.java

@@ -3,6 +3,7 @@ package com.ytpm.service;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.general.Result;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 
 import java.math.BigDecimal;
 import java.util.Map;
@@ -22,4 +23,8 @@ public interface AdService {
      * 查询排行榜信息
      */
     DashboardRankingListVO queryRankingList(Integer sortBy,Integer limit);
+    /**
+     * 查询各渠道应用收益分时统计
+     */
+    DashboardRevenueVO revenueStatics(String apkIds);
 }

+ 16 - 0
yt-app/app-service/src/main/java/com/ytpm/service/impl/AdServiceImpl.java

@@ -16,6 +16,7 @@ import com.ytpm.general.StatusCode;
 import com.ytpm.handle.CustomerException;
 import com.ytpm.middle.view.AppRankingListVO;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 import com.ytpm.middle.view.UserRankingListVO;
 import com.ytpm.service.AdService;
 import org.springframework.beans.BeanUtils;
@@ -26,10 +27,12 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.CountDownLatch;
 
 @Service
 public class AdServiceImpl implements AdService {
@@ -82,6 +85,7 @@ public class AdServiceImpl implements AdService {
 
     /**
      * 查询排行榜信息
+     * TODO 查询效率过低 需要分库分表处理
      */
     @Override
     public DashboardRankingListVO queryRankingList(Integer sortBy,Integer limit) {
@@ -92,6 +96,18 @@ public class AdServiceImpl implements AdService {
         return new DashboardRankingListVO(appRankingList,userRankingList);
     }
 
+    /**
+     *  TODO 查询各渠道应用收益分时统计
+     */
+    @Override
+    public DashboardRevenueVO revenueStatics(String apkIds) {
+        //查询出各应用的用户及收益数据
+        List<String> appIdList = Arrays.asList(apkIds.split(","));
+        // 由于子表数据庞大导致range查询低于const
+        CountDownLatch countDownLatch = new CountDownLatch(appIdList.size());
+        return null;
+    }
+
     /**
      * 保存记录
      *  始终创建新的事务以保障子方法的独立事务

+ 29 - 0
yt-common/src/main/java/com/ytpm/middle/view/DashboardRevenueVO.java

@@ -0,0 +1,29 @@
+package com.ytpm.middle.view;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel("收益统计返回数据")
+public class DashboardRevenueVO {
+    @ApiModelProperty("应用ID")
+    private String appId;
+    @ApiModelProperty("应用ID")
+    private String appName;
+    @ApiModelProperty("今日收益")
+    private BigDecimal todayRevenue;
+    @ApiModelProperty("昨日收益")
+    private BigDecimal yesterdayRevenue;
+    @ApiModelProperty("当月收益")
+    private BigDecimal monthRevenue;
+    @ApiModelProperty("分小时收益集合")
+    private Map<String,Integer> hourRevenueMap;
+}

+ 11 - 2
yt-middle/middle-platform/src/main/java/com/ytpm/middle/controller/HomeController.java

@@ -3,13 +3,14 @@ package com.ytpm.middle.controller;
 import com.ytpm.general.Result;
 import com.ytpm.middle.service.CountService;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 import com.ytpm.middle.view.DashboardTopCountVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
@@ -27,10 +28,18 @@ public class HomeController {
     public Result<DashboardTopCountVo> getTopCount() {
         return countService.getTopCount();
     }
+
     @ApiImplicitParam(name = "sortBy", value = "排序规则 1-当日 2-每周")
     @ApiOperation("排行榜信息")
     @GetMapping("/rankingList")
-    public Result<DashboardRankingListVO> getRankingList(@Param("sortBy")Integer sortBy) {
+    public Result<DashboardRankingListVO> getRankingList(@RequestParam(name = "sortBy")Integer sortBy) {
         return countService.getRankingList(sortBy);
     }
+
+    @ApiImplicitParam(name="appId", value = "所属应用ID")
+    @ApiOperation(value = "根据应用ID获取各渠道收益统计数据")
+    @GetMapping("/revenueStatics")
+    public Result<DashboardRevenueVO> getRevenueStatics(@RequestParam(name = "appId")String appId) {
+        return countService.getRevenueStatics(appId);
+    }
 }

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

@@ -3,6 +3,7 @@ package com.ytpm.middle.dao;
 import com.ytpm.agent.model.YtApp;
 import com.ytpm.agent.param.AppListParam;
 import com.ytpm.agent.view.AgentAppView;
+import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 
 import java.util.List;
@@ -39,4 +40,9 @@ public interface ApkMapper {
      * 查询所有应用
      */
     List<AgentAppView> queryAll();
+
+    /**
+     * 根据母包ID查询子包
+     */
+    List<AgentAppView> queryBySuperiorId(@Param("superiorId") String superiorId);
 }

+ 6 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/CountService.java

@@ -2,6 +2,7 @@ package com.ytpm.middle.service;
 
 import com.ytpm.general.Result;
 import com.ytpm.middle.view.DashboardRankingListVO;
+import com.ytpm.middle.view.DashboardRevenueVO;
 import com.ytpm.middle.view.DashboardTopCountVo;
 
 public interface CountService {
@@ -14,4 +15,9 @@ public interface CountService {
      * 按照排行榜类型、排序规则统计排行榜信息
      */
     Result<DashboardRankingListVO> getRankingList(Integer sortBy);
+
+    /**
+     * 根据应用查询各渠道包分时收益
+     */
+    Result<DashboardRevenueVO> getRevenueStatics(String appId);
 }

+ 12 - 0
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/CountServiceImpl.java

@@ -10,6 +10,7 @@ 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.DashboardRevenueVO;
 import com.ytpm.middle.view.DashboardTopCountVo;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -76,4 +77,15 @@ public class CountServiceImpl implements CountService {
         redisUtil.setTimeOutMinutesStr(RANKING_KEY+sortBy, JSON.toJSONString(rankingVO),rankingExpire);
         return Result.resultObjOk(rankingVO);
     }
+
+    /**
+     * 根据应用查询各渠道包分时收益
+     */
+    @Override
+    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);
+        return Result.resultObjOk(vo);
+    }
 }

+ 7 - 0
yt-middle/middle-platform/src/main/resources/mapper/ApkMapper.xml

@@ -60,6 +60,13 @@
         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
+    </select>
+    <select id="queryBySuperiorId" 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 and superior_id = #{superiorId}
     </select>
 
     <insert id="insertOne">