Browse Source

用户列表增加查看ecpm接口 查询用户的广告播放记录和广告ecpm价值

marxjaw 4 months ago
parent
commit
851d48e577
25 changed files with 315 additions and 76 deletions
  1. 4 0
      yt-advertise/advertise-feign/src/main/java/com/ytpm/feign/AdvertiseFeign.java
  2. 11 0
      yt-advertise/advertise-service/src/main/java/com/ytpm/controller/AdvertiseController.java
  3. 1 0
      yt-advertise/advertise-service/src/main/java/com/ytpm/service/TakuApiService.java
  4. 1 0
      yt-advertise/advertise-service/src/main/java/com/ytpm/service/impl/TakuApiServiceImpl.java
  5. 3 2
      yt-advertise/advertise-service/src/main/java/com/ytpm/util/TakuRequestUtil.java
  6. 11 0
      yt-agent/agent-service/src/main/java/com/ytpm/controller/YtAppUserController.java
  7. 6 0
      yt-agent/agent-service/src/main/java/com/ytpm/service/YtAppUserService.java
  8. 3 14
      yt-agent/agent-service/src/main/java/com/ytpm/service/impl/AgentAppServiceImpl.java
  9. 71 0
      yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java
  10. 3 0
      yt-app/app-feign/src/main/java/com/ytpm/feign/AppFeign.java
  11. 1 1
      yt-app/app-service/src/main/java/com/ytpm/controller/AdController.java
  12. 12 0
      yt-app/app-service/src/main/java/com/ytpm/controller/UserController.java
  13. 45 21
      yt-app/app-service/src/main/java/com/ytpm/controller/WxController.java
  14. 7 0
      yt-app/app-service/src/main/java/com/ytpm/dao/AdRecordMapper.java
  15. 6 0
      yt-app/app-service/src/main/resources/mapper/AdRecordMapper.xml
  16. 1 1
      yt-app/app-service/src/main/resources/mapper/LoginRecordMapper.xml
  17. 18 0
      yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveAdSourceReport.java
  18. 7 19
      yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveAppReport.java
  19. 27 0
      yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveCommonView.java
  20. 0 10
      yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveReportView.java
  21. 1 1
      yt-common/src/main/java/com/ytpm/advertise/view/ReportAdSourceView.java
  22. 9 2
      yt-common/src/main/java/com/ytpm/app/model/YtDyzAdRecord.java
  23. 3 5
      yt-common/src/main/java/com/ytpm/app/param/DyzAdRecordParam.java
  24. 45 0
      yt-common/src/main/java/com/ytpm/app/view/YtUserEcpmListView.java
  25. 19 0
      yt-common/src/main/java/com/ytpm/util/DateUtil.java

+ 4 - 0
yt-advertise/advertise-feign/src/main/java/com/ytpm/feign/AdvertiseFeign.java

@@ -7,6 +7,8 @@ import com.ytpm.advertise.param.RelativeChannelParam;
 import com.ytpm.advertise.view.AddAppResponse;
 import com.ytpm.advertise.view.AddAppResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
+import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.general.Result;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
@@ -32,4 +34,6 @@ public interface AdvertiseFeign {
     Result<?> delPlacement(@RequestParam("placementId")String placementId);
     Result<?> delPlacement(@RequestParam("placementId")String placementId);
     @PostMapping("/advertise/getAppReport")
     @PostMapping("/advertise/getAppReport")
     List<ComprehensiveAppReport> getAppReport(@RequestBody ComprehensiveReportParam param);
     List<ComprehensiveAppReport> getAppReport(@RequestBody ComprehensiveReportParam param);
+    @PostMapping("/advertise/comprehensive")
+    Result<ComprehensiveReportView> comprehensive(@RequestBody ComprehensiveReportParam param);
 }
 }

+ 11 - 0
yt-advertise/advertise-service/src/main/java/com/ytpm/controller/AdvertiseController.java

@@ -9,6 +9,8 @@ import com.ytpm.advertise.view.AddAppResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
+import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.agent.param.ChannelParam;
 import com.ytpm.agent.param.ChannelParam;
 import com.ytpm.general.Result;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
@@ -96,4 +98,13 @@ public class AdvertiseController {
     public List<ComprehensiveAppReport> getAppReport(@RequestBody ComprehensiveReportParam param){
     public List<ComprehensiveAppReport> getAppReport(@RequestBody ComprehensiveReportParam param){
         return takuApiService.getAppReport(param);
         return takuApiService.getAppReport(param);
     }
     }
+
+    /**
+     * 根据应用分组查询数据报表
+     */
+    @ApiOperation("根据应用分组查询数据报表")
+    @PostMapping("/comprehensive")
+    public Result<ComprehensiveReportView> comprehensive(@RequestBody ComprehensiveReportParam param){
+        return takuApiService.comprehensiveReport(param);
+    }
 }
 }

+ 1 - 0
yt-advertise/advertise-service/src/main/java/com/ytpm/service/TakuApiService.java

@@ -12,6 +12,7 @@ import com.ytpm.advertise.view.AddAppResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
 import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.advertise.view.HourReportView;
 import com.ytpm.advertise.view.HourReportView;
 import com.ytpm.advertise.view.ReportRoiView;
 import com.ytpm.advertise.view.ReportRoiView;

+ 1 - 0
yt-advertise/advertise-service/src/main/java/com/ytpm/service/impl/TakuApiServiceImpl.java

@@ -20,6 +20,7 @@ import com.ytpm.advertise.view.AddAppResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AddPlacementResponse;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.AppV1View;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
 import com.ytpm.advertise.view.ComprehensiveAppReport;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
 import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.advertise.view.ComprehensiveReportView;
 import com.ytpm.advertise.view.HourReportView;
 import com.ytpm.advertise.view.HourReportView;
 import com.ytpm.advertise.view.ReportRoiView;
 import com.ytpm.advertise.view.ReportRoiView;

+ 3 - 2
yt-advertise/advertise-service/src/main/java/com/ytpm/util/TakuRequestUtil.java

@@ -36,14 +36,15 @@ public class TakuRequestUtil {
     public static void main(String[] args){
     public static void main(String[] args){
         ComprehensiveReportParam param = new ComprehensiveReportParam();
         ComprehensiveReportParam param = new ComprehensiveReportParam();
         param.setStartdate(20250615);
         param.setStartdate(20250615);
-        param.setEnddate(20250618);
+        param.setEnddate(20250620);
         param.setTime_zone("UTC-8");
         param.setTime_zone("UTC-8");
+//        param.setAdsource_id_list(Collections.singletonList(9272062));
+//        param.setGroup_by(Collections.singletonList("adsource"));
         param.setApp_id_list(Arrays.asList("a685138d49cd2d","a684009039113d"));
         param.setApp_id_list(Arrays.asList("a685138d49cd2d","a684009039113d"));
         param.setGroup_by(Collections.singletonList("app"));
         param.setGroup_by(Collections.singletonList("app"));
         String result = TakuRequestUtil.doRequest(HttpPost.METHOD_NAME, "/v2/fullreport", JSON.toJSONString(param));
         String result = TakuRequestUtil.doRequest(HttpPost.METHOD_NAME, "/v2/fullreport", JSON.toJSONString(param));
         ComprehensiveAppReport report = JSONObject.parseObject(result, ComprehensiveAppReport.class);
         ComprehensiveAppReport report = JSONObject.parseObject(result, ComprehensiveAppReport.class);
         System.err.println(result);
         System.err.println(result);
-        System.err.println(JSON.toJSONString(report));
     }
     }
 
 
     public static String doRequest(String httpMethod, String reqUrl, String reqBody) {
     public static String doRequest(String httpMethod, String reqUrl, String reqBody) {

+ 11 - 0
yt-agent/agent-service/src/main/java/com/ytpm/controller/YtAppUserController.java

@@ -5,6 +5,7 @@ import com.ytpm.agent.view.AgentUserInfo;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.app.view.YtAppUserListView;
+import com.ytpm.app.view.YtUserEcpmListView;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
 import com.ytpm.service.YtAppUserService;
 import com.ytpm.service.YtAppUserService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -45,4 +47,13 @@ public class YtAppUserController {
     public ResultTable<AppUserStaticsView> staticList(){
     public ResultTable<AppUserStaticsView> staticList(){
         return appUserService.staticList();
         return appUserService.staticList();
     }
     }
+
+    /**
+     * 查询用户的ecpm
+     */
+    @GetMapping("/ecpm")
+    @ApiOperation(value = "查询用户ecpm数据")
+    public ResultTable<YtUserEcpmListView> ecpmList(@RequestParam("userId")String userId){
+        return appUserService.ecpmList(userId);
+    }
 }
 }

+ 6 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/YtAppUserService.java

@@ -4,6 +4,7 @@ import com.ytpm.agent.view.AgentUserInfo;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.app.view.YtAppUserListView;
+import com.ytpm.app.view.YtUserEcpmListView;
 import com.ytpm.general.Result;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
 
 
@@ -20,4 +21,9 @@ public interface YtAppUserService {
      * 查询用户广告数据统计列表
      * 查询用户广告数据统计列表
      */
      */
     ResultTable<AppUserStaticsView> staticList();
     ResultTable<AppUserStaticsView> staticList();
+
+    /**
+     * 查询用户的ecpm列表
+     */
+    ResultTable<YtUserEcpmListView> ecpmList(String userId);
 }
 }

+ 3 - 14
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/AgentAppServiceImpl.java

@@ -23,6 +23,7 @@ import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
 import com.ytpm.service.AgentAppService;
 import com.ytpm.service.AgentAppService;
+import com.ytpm.util.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -70,8 +71,8 @@ public class AgentAppServiceImpl implements AgentAppService {
         }
         }
         List<String> appIds = views.stream().map(AgentAppView::getAppId).collect(Collectors.toList());
         List<String> appIds = views.stream().map(AgentAppView::getAppId).collect(Collectors.toList());
         ComprehensiveReportParam param = new ComprehensiveReportParam();
         ComprehensiveReportParam param = new ComprehensiveReportParam();
-        param.setStartdate(getDateNum(LocalDate.now().minusDays(7)));
-        param.setEnddate(getDateNum(LocalDate.now()));
+        param.setStartdate(DateUtil.getDateNum(LocalDate.now().minusDays(7)));
+        param.setEnddate(DateUtil.getDateNum(LocalDate.now()));
         param.setTime_zone("UTC-8");
         param.setTime_zone("UTC-8");
         param.setApp_id_list(appIds);
         param.setApp_id_list(appIds);
         List<ComprehensiveAppReport> appReport = advertiseFeign.getAppReport(param);
         List<ComprehensiveAppReport> appReport = advertiseFeign.getAppReport(param);
@@ -87,18 +88,6 @@ public class AgentAppServiceImpl implements AgentAppService {
         return ResultTable.resultTableOk(new PageInfo<>(views));
         return ResultTable.resultTableOk(new PageInfo<>(views));
     }
     }
 
 
-    /**
-     * 获取日期数字
-     */
-    private int getDateNum(LocalDate currentDate) {
-        // 定义日期格式化器,格式为YYYYMMDD
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-        // 将当前日期格式化为字符串
-        String formattedDate = currentDate.format(formatter);
-        // 将字符串转换为整数
-        return Integer.parseInt(formattedDate);
-    }
-
     /**
     /**
      * 新增应用
      * 新增应用
      */
      */

+ 71 - 0
yt-agent/agent-service/src/main/java/com/ytpm/service/impl/YtAppUserServiceImpl.java

@@ -4,30 +4,45 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.ytpm.advertise.param.ComprehensiveReportParam;
+import com.ytpm.advertise.view.ComprehensiveAdSourceReport;
+import com.ytpm.advertise.view.ComprehensiveAppReport;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
+import com.ytpm.advertise.view.ComprehensiveReportView;
+import com.ytpm.advertise.view.ReportAdSourceView;
 import com.ytpm.agent.model.YtApp;
 import com.ytpm.agent.model.YtApp;
 import com.ytpm.agent.view.AgentUserInfo;
 import com.ytpm.agent.view.AgentUserInfo;
 import com.ytpm.app.model.YtAppUserLoginRecord;
 import com.ytpm.app.model.YtAppUserLoginRecord;
+import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.AppUserStaticsView;
 import com.ytpm.app.view.YtAppUserListView;
 import com.ytpm.app.view.YtAppUserListView;
+import com.ytpm.app.view.YtUserEcpmListView;
 import com.ytpm.dao.AgentStaticsMapper;
 import com.ytpm.dao.AgentStaticsMapper;
 import com.ytpm.dao.AppMapper;
 import com.ytpm.dao.AppMapper;
 import com.ytpm.dao.AppUserLoginMapper;
 import com.ytpm.dao.AppUserLoginMapper;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.dao.AppVideoWatchMapper;
 import com.ytpm.dao.AppVideoWatchMapper;
 import com.ytpm.dao.AppWithdrawMapper;
 import com.ytpm.dao.AppWithdrawMapper;
+import com.ytpm.feign.AdvertiseFeign;
 import com.ytpm.feign.AppFeign;
 import com.ytpm.feign.AppFeign;
+import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
 import com.ytpm.service.YtAppUserService;
 import com.ytpm.service.YtAppUserService;
+import com.ytpm.util.DateUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * App用户业务逻辑
  * App用户业务逻辑
@@ -49,6 +64,8 @@ public class YtAppUserServiceImpl implements YtAppUserService {
     private AgentStaticsMapper staticsMapper;
     private AgentStaticsMapper staticsMapper;
     @Resource
     @Resource
     private AppFeign appFeign;
     private AppFeign appFeign;
+    @Resource
+    private AdvertiseFeign advertiseFeign;
 
 
 
 
     /**
     /**
@@ -114,6 +131,60 @@ public class YtAppUserServiceImpl implements YtAppUserService {
         return ResultTable.resultTableOk(new PageInfo<>(list));
         return ResultTable.resultTableOk(new PageInfo<>(list));
     }
     }
 
 
+    /**
+     * 查询用户的ecpm
+     */
+    @Override
+    public ResultTable<YtUserEcpmListView> ecpmList(String userId) {
+        ResultTable<YtDyzAdRecord> table = appFeign.adRecords(userId);
+        List<YtDyzAdRecord> data = table.getData();
+        if(CollUtil.isNotEmpty(data)){
+            return ResultTable.resultTableOk(new PageInfo<>(data));
+        }
+        //远程调用获取广告报告
+        ComprehensiveReportView<ComprehensiveAdSourceReport> resultData =  getComprehensiveReport(data);
+        List<ComprehensiveAdSourceReport> records = resultData.getRecords();
+        //组装数据返回前端
+        combineEcpmData(records,data);
+        return ResultTable.resultTableOk(new PageInfo<>(data));
+    }
+
+    /**
+     * 组装ECPM数据返回
+     */
+    private void combineEcpmData(List<ComprehensiveAdSourceReport> records, List<YtDyzAdRecord> data) {
+        Map<Integer,ComprehensiveAdSourceReport> adSourceReportMap = records.stream().collect(
+                Collectors.toMap(s->s.getAdSource().getAdsource_id(), O->O));
+        for (YtDyzAdRecord datum : data) {
+            if(!adSourceReportMap.containsKey(datum.getAdSourceId()))continue;
+            ComprehensiveAdSourceReport report = adSourceReportMap.get(datum.getAdSourceId());
+            datum.setRequest(report.getRequest());
+            datum.setFillrate(report.getFillrate());
+            datum.setImpression(report.getImpression());
+            datum.setClick(report.getClick());
+            datum.setEcpm(report.getEcpm());
+            datum.setRevenue(report.getRevenue());
+            datum.setImpression_api(report.getImpression_api());
+            datum.setClick_api(report.getClick_api());
+            datum.setEcpm_api(report.getEcpm_api());
+        }
+    }
+
+    /**
+     * 远程调用广告API获取报告
+     */
+    private ComprehensiveReportView<ComprehensiveAdSourceReport> getComprehensiveReport(List<YtDyzAdRecord> data) {
+        List<Integer> collect = data.stream().map(YtDyzAdRecord::getAdSourceId).collect(Collectors.toList());
+        ComprehensiveReportParam param = new ComprehensiveReportParam();
+        param.setStartdate(DateUtil.getDateNum(LocalDate.now().minusDays(7)));
+        param.setEnddate(DateUtil.getDateNum(LocalDate.now()));
+        param.setTime_zone("UTC-8");
+        param.setAdsource_id_list(collect);
+        param.setGroup_by(Collections.singletonList("adsource"));
+        Result<ComprehensiveReportView> result = advertiseFeign.comprehensive(param);
+        return result.getData();
+    }
+
     /**
     /**
      * 查询用户当日播放视频总数
      * 查询用户当日播放视频总数
      */
      */

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

@@ -1,5 +1,6 @@
 package com.ytpm.feign;
 package com.ytpm.feign;
 
 
+import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.general.Result;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
 import com.ytpm.general.ResultTable;
@@ -19,4 +20,6 @@ public interface AppFeign {
     ResultTable<YtDyzUser> getUserList(@RequestParam("userIds") String userIds);
     ResultTable<YtDyzUser> getUserList(@RequestParam("userIds") String userIds);
     @PostMapping("/user/updateUserInfo")
     @PostMapping("/user/updateUserInfo")
     Result<?> updateUserInfo(@RequestBody YtDyzUser dyzUser);
     Result<?> updateUserInfo(@RequestBody YtDyzUser dyzUser);
+    @GetMapping("/user/adRecords")
+    ResultTable<YtDyzAdRecord> adRecords(@RequestParam("userId") String userId);
 }
 }

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

@@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 
 
 
 
-@Api(tags = "题目管理模块")
+@Api(tags = "用户浏览广告记录")
 @RestController
 @RestController
 @RequestMapping("/ad")
 @RequestMapping("/ad")
 public class AdController {
 public class AdController {

+ 12 - 0
yt-app/app-service/src/main/java/com/ytpm/controller/UserController.java

@@ -1,7 +1,9 @@
 package com.ytpm.controller;
 package com.ytpm.controller;
 
 
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.dao.AdRecordMapper;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.dao.AppUserMapper;
 import com.ytpm.dao.LoginRecordMapper;
 import com.ytpm.dao.LoginRecordMapper;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.RepMessage;
@@ -25,6 +27,8 @@ public class UserController {
     private AppUserMapper appUserMapper;
     private AppUserMapper appUserMapper;
     @Autowired
     @Autowired
     private LoginRecordMapper loginRecordMapper;
     private LoginRecordMapper loginRecordMapper;
+    @Autowired
+    AdRecordMapper adRecordMapper;
 
 
     /**
     /**
      * 查询app 所有玩家
      * 查询app 所有玩家
@@ -67,4 +71,12 @@ public class UserController {
         appUserMapper.updateUser(dyzUser);
         appUserMapper.updateUser(dyzUser);
         return Result.resultOk(RepMessage.MODIFY_SUCCESS);
         return Result.resultOk(RepMessage.MODIFY_SUCCESS);
     }
     }
+
+    /**
+     * 查询用户的广告记录
+     */
+    @GetMapping("/adRecords")
+    public ResultTable<YtDyzAdRecord> adRecords(@RequestParam("userId") String userId){
+        return ResultTable.resultTableOk(new PageInfo<YtDyzAdRecord>(adRecordMapper.getByUserId(userId)));
+    }
 }
 }

+ 45 - 21
yt-app/app-service/src/main/java/com/ytpm/controller/WxController.java

@@ -81,21 +81,29 @@ public class WxController {
     @ApiOperation("微信登录")
     @ApiOperation("微信登录")
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public Result<YtDyzUser> wxLogin(@RequestBody WxLoginParam param) {
     public Result<YtDyzUser> wxLogin(@RequestBody WxLoginParam param) {
-        //拿到授权码 请求微信登录返回access_token
-        String wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+APP_ID+"&secret="+SECRET+"&code="+param.getWxCode()+"&grant_type="+GRANT_TYPE;
-        String result = HttpUtil.get(wxLoginUrl);
-        WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
-        log.error("授权码获取的登录结果:{}",loginResult);
-        // 根据token和openid 获取用户信息
-        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+loginResult.getAccess_token()+"&openid="+loginResult.getOpenid()+"&lang=zh_CN";
-        String curUser = HttpUtil.get(userInfoUrl);
-        WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
-        log.error("获取的用户信息:{}",wxUserInfo);
+        WxLoginResult loginResult = getWechatLoginInfo(param.getWxCode());
+        String openid = loginResult.getOpenid();
+        WxUserInfo wxUserInfo = getWechatUserInfo(loginResult.getAccess_token(),loginResult.getOpenid());
         if(Objects.isNull(wxUserInfo)) {
         if(Objects.isNull(wxUserInfo)) {
             throw new CustomerException("微信用户登录失败");
             throw new CustomerException("微信用户登录失败");
         }
         }
-        //查询用户表是否存在该用户,不存在则注册保存用户信息
+        //处理用户注册或登录更新信息
         YtDyzUser old = appUserMapper.getYtAppUser(loginResult.getOpenid());
         YtDyzUser old = appUserMapper.getYtAppUser(loginResult.getOpenid());
+        deadWithUserCrud(old,wxUserInfo,param,loginResult);
+        // 添加用户登录记录
+        addLoginRecord(param,openid);
+        //TODO 返回数据前校验当前应用的风控规则
+//        Result<RiskTemplateView> riskCondition = riskFeign.getRiskCondition(PLATFORM_APP_ID, PLATFORM_ACCESS_SECRET);
+//        checkCondition(old,riskCondition.getData());
+        //设置最后一次答题问题ID、今日答题数、历史答题数
+        setExtInfo(old,wxUserInfo.getHeadimgurl());
+        return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
+    }
+
+    /**
+     * 处理用户数据
+     */
+    private void deadWithUserCrud(YtDyzUser old, WxUserInfo wxUserInfo, WxLoginParam param,WxLoginResult loginResult) {
         if(Objects.nonNull(old)){
         if(Objects.nonNull(old)){
             //处于风控状态的用户不允许登录
             //处于风控状态的用户不允许登录
             if(!old.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())){
             if(!old.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())){
@@ -113,14 +121,30 @@ public class WxController {
             old = new YtDyzUser();
             old = new YtDyzUser();
             registryUser(param,wxUserInfo,loginResult, old);
             registryUser(param,wxUserInfo,loginResult, old);
         }
         }
-        // 添加用户登录记录
-        addLoginRecord(wxUserInfo,param);
-        //TODO 返回数据前校验当前应用的风控规则
-//        Result<RiskTemplateView> riskCondition = riskFeign.getRiskCondition(PLATFORM_APP_ID, PLATFORM_ACCESS_SECRET);
-//        checkCondition(old,riskCondition.getData());
-        //设置最后一次答题问题ID、今日答题数、历史答题数
-        setExtInfo(old,wxUserInfo.getHeadimgurl());
-        return Result.resultOk(RepMessage.LOGIN_SUCCESS, old);
+    }
+
+    /**
+     * 获取微信用户信息
+     */
+    private WxUserInfo getWechatUserInfo(String accessToken, String openid) {
+        // 根据token和openid 获取用户信息
+        String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openid+"&lang=zh_CN";
+        String curUser = HttpUtil.get(userInfoUrl);
+        WxUserInfo wxUserInfo = JSON.parseObject(curUser, WxUserInfo.class);
+        log.error("获取的用户信息:{}",wxUserInfo);
+        return wxUserInfo;
+    }
+
+    /**
+     * 微信登录
+     */
+    private WxLoginResult getWechatLoginInfo(String wxCode) {
+        //拿到授权码 请求微信登录返回access_token
+        String wxLoginUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+APP_ID+"&secret="+SECRET+"&code="+wxCode+"&grant_type="+GRANT_TYPE;
+        String result = HttpUtil.get(wxLoginUrl);
+        WxLoginResult loginResult = JSON.parseObject(result, WxLoginResult.class);
+        log.error("授权码获取的登录结果:{}",loginResult);
+        return loginResult;
     }
     }
 
 
     /**
     /**
@@ -234,10 +258,10 @@ public class WxController {
     /**
     /**
      * 增加用户登录记录
      * 增加用户登录记录
      */
      */
-    private void addLoginRecord(WxUserInfo wxUserInfo, WxLoginParam param) {
+    private void addLoginRecord(WxLoginParam param,String openid) {
         YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
         YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
         loginRecord.setRecordId(IdUtil.fastSimpleUUID());
         loginRecord.setRecordId(IdUtil.fastSimpleUUID());
-        loginRecord.setUserId(wxUserInfo.getOpenid());
+        loginRecord.setUserId(openid);
         loginRecord.setLoginTime(new Date());
         loginRecord.setLoginTime(new Date());
         loginRecord.setDeviceBrand(param.getBrand());
         loginRecord.setDeviceBrand(param.getBrand());
         loginRecord.setDeviceModel(param.getModel());
         loginRecord.setDeviceModel(param.getModel());

+ 7 - 0
yt-app/app-service/src/main/java/com/ytpm/dao/AdRecordMapper.java

@@ -1,12 +1,19 @@
 package com.ytpm.dao;
 package com.ytpm.dao;
 
 
 import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzAdRecord;
+import org.apache.ibatis.annotations.Param;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapper;
 
 
+import java.util.List;
+
 @Mapper
 @Mapper
 public interface AdRecordMapper {
 public interface AdRecordMapper {
     /**
     /**
      * 新增广告记录
      * 新增广告记录
      */
      */
     void addOne(YtDyzAdRecord adRecord);
     void addOne(YtDyzAdRecord adRecord);
+    /**
+     * 查询用户的广告记录
+     */
+    List<YtDyzAdRecord> getByUserId(@Param("userId") String userId);
 }
 }

+ 6 - 0
yt-app/app-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -32,4 +32,10 @@
          #{finishTime}
          #{finishTime}
         )
         )
     </insert>
     </insert>
+    <select id="getByUserId" resultType="com.ytpm.app.model.YtDyzAdRecord">
+        select
+            record_id, user_id, nick_name, placement_id, ad_source_id, revenue, network_form_id, network_name, network_placement_id, finish_time, begin_time
+        from yt_dyz_ad_record
+        where user_id = #{userId}
+    </select>
 </mapper>
 </mapper>

+ 1 - 1
yt-app/app-service/src/main/resources/mapper/LoginRecordMapper.xml

@@ -2,7 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ytpm.dao.LoginRecordMapper">
 <mapper namespace="com.ytpm.dao.LoginRecordMapper">
 
 
-    <insert id="insertOne">
+    <insert id="insertOne" parameterType="com.ytpm.app.model.YtDyzLoginRecord">
         insert into yt_dyz_login_record
         insert into yt_dyz_login_record
         (
         (
          record_id,
          record_id,

+ 18 - 0
yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveAdSourceReport.java

@@ -0,0 +1,18 @@
+package com.ytpm.advertise.view;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 综合报表广告源分组报表
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ComprehensiveAdSourceReport extends ComprehensiveCommonView{
+    /** 广告源信息,group_by有选adsource维度时才返回 */
+    ReportAdSourceView adSource;
+}

+ 7 - 19
yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveAppReport.java

@@ -1,30 +1,18 @@
 package com.ytpm.advertise.view;
 package com.ytpm.advertise.view;
 
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 
 /**
 /**
  * 综合报表APP分组报表
  * 综合报表APP分组报表
  */
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Data
-public class ComprehensiveAppReport{
+@NoArgsConstructor
+@AllArgsConstructor
+public class ComprehensiveAppReport extends ComprehensiveCommonView{
     /** 应用信息 */
     /** 应用信息 */
     private ReportAppView app;
     private ReportAppView app;
-    /** 广告源请求数 */
-    private String request;
-    /** 广告源填充率 */
-    private String fillrate;
-    /** 展示数 */
-    private String impression;
-    /** 点击数 */
-    private String click;
-    /** ECPM */
-    private String ecpm;
-    /** 收益 */
-    private String revenue;
-    /** 三方广告平台的展示数 */
-    private String impression_api;
-    /** 三方广告平台的点击数 */
-    private String click_api;
-    /** 三方广告平台的ECPM */
-    private String ecpm_api;
 }
 }

+ 27 - 0
yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveCommonView.java

@@ -0,0 +1,27 @@
+package com.ytpm.advertise.view;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ComprehensiveCommonView {
+    /** 广告源请求数 */
+    private String request;
+    /** 广告源填充率 */
+    private String fillrate;
+    /** 展示数 */
+    private String impression;
+    /** 点击数 */
+    private String click;
+    /** ECPM */
+    private String ecpm;
+    /** 收益 */
+    private BigDecimal revenue;
+    /** 三方广告平台的展示数 */
+    private String impression_api;
+    /** 三方广告平台的点击数 */
+    private String click_api;
+    /** 三方广告平台的ECPM */
+    private String ecpm_api;
+}

+ 0 - 10
yt-common/src/main/java/com/ytpm/advertise/view/ComprehensiveReportView.java

@@ -10,10 +10,6 @@ public class ComprehensiveReportView<T> {
     private Integer count;
     private Integer count;
     /** 日期  group_by有选 */
     /** 日期  group_by有选 */
     private String date;
     private String date;
-    /** 应用信息  group_by有选app维度时才返回 */
-    private ReportAppView app;
-    /** 广告位信息,group_by有选placement维度时才返回 */
-    private ReportPlacementView placement;
     /** 广告样式,group_by有选adformat维度时才有返回 */
     /** 广告样式,group_by有选adformat维度时才有返回 */
     private String adformat;
     private String adformat;
     /** 国家码。group_by有选area维度时才有返回 */
     /** 国家码。group_by有选area维度时才有返回 */
@@ -24,12 +20,6 @@ public class ComprehensiveReportView<T> {
     private String network_firm;
     private String network_firm;
     /** 广告平台账号ID,group_by有选network维度才有返回 */
     /** 广告平台账号ID,group_by有选network维度才有返回 */
     private String network;
     private String network;
-    /** 广告源信息,group_by有选adsource维度时才返回 */
-    private ReportAdSourceView adSource;
-    /** 广告场景信息,group_by有选scenario维度时才返回 */
-    private ReportScenarioView scenario;
-    /** 流量分组信息,group_by有选traffic_group维度时才返回 */
-    private ReportTrafficGroupView traffic_group;
     /** 渠道名称,group_by有选channel维度才有返回 */
     /** 渠道名称,group_by有选channel维度才有返回 */
     private String channel;
     private String channel;
     /** SDK版本,group_by有选sdk_version维度才有返回 */
     /** SDK版本,group_by有选sdk_version维度才有返回 */

+ 1 - 1
yt-common/src/main/java/com/ytpm/advertise/view/ReportAdSourceView.java

@@ -11,7 +11,7 @@ public class ReportAdSourceView {
     /** 第三方广告平台ID */
     /** 第三方广告平台ID */
     private String slot_id;
     private String slot_id;
     /** 广告源id */
     /** 广告源id */
-    private String adsource_id;
+    private Integer adsource_id;
     /** 广告源名称 */
     /** 广告源名称 */
     private String adsource_name;
     private String adsource_name;
 }
 }

+ 9 - 2
yt-common/src/main/java/com/ytpm/app/model/YtDyzAdRecord.java

@@ -1,16 +1,23 @@
 package com.ytpm.app.model;
 package com.ytpm.app.model;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ytpm.advertise.view.ComprehensiveCommonView;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.Date;
 
 
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Data
 @ApiModel("用户观看广告记录")
 @ApiModel("用户观看广告记录")
-public class YtDyzAdRecord {
+public class YtDyzAdRecord extends ComprehensiveCommonView {
     @ApiModelProperty("广告记录ID")
     @ApiModelProperty("广告记录ID")
     private String recordId;
     private String recordId;
     @ApiModelProperty("用户ID")
     @ApiModelProperty("用户ID")
@@ -20,7 +27,7 @@ public class YtDyzAdRecord {
     @ApiModelProperty("广告位ID")
     @ApiModelProperty("广告位ID")
     private String placementId;
     private String placementId;
     @ApiModelProperty("广告源ID")
     @ApiModelProperty("广告源ID")
-    private String adSourceId;
+    private Integer adSourceId;
     @ApiModelProperty("广告收益")
     @ApiModelProperty("广告收益")
     private BigDecimal revenue;
     private BigDecimal revenue;
     @ApiModelProperty("广告平台ID")
     @ApiModelProperty("广告平台ID")

+ 3 - 5
yt-common/src/main/java/com/ytpm/app/param/DyzAdRecordParam.java

@@ -20,7 +20,7 @@ public class DyzAdRecordParam {
     @ApiModelProperty("广告位ID")
     @ApiModelProperty("广告位ID")
     private String placementId;
     private String placementId;
     @ApiModelProperty("广告源ID")
     @ApiModelProperty("广告源ID")
-    private String adSourceId;
+    private Integer adSourceId;
     @ApiModelProperty("广告收益")
     @ApiModelProperty("广告收益")
     private BigDecimal revenue;
     private BigDecimal revenue;
     @ApiModelProperty("广告平台ID")
     @ApiModelProperty("广告平台ID")
@@ -29,10 +29,8 @@ public class DyzAdRecordParam {
     private String networkName;
     private String networkName;
     @ApiModelProperty("广告平台广告位ID")
     @ApiModelProperty("广告平台广告位ID")
     private String networkPlacementId;
     private String networkPlacementId;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @ApiModelProperty("开始时间")
     @ApiModelProperty("开始时间")
-    private Date beginTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private String beginTime;
     @ApiModelProperty("完成时间")
     @ApiModelProperty("完成时间")
-    private Date finishTime;
+    private String finishTime;
 }
 }

+ 45 - 0
yt-common/src/main/java/com/ytpm/app/view/YtUserEcpmListView.java

@@ -0,0 +1,45 @@
+package com.ytpm.app.view;
+
+import com.ytpm.app.model.YtDyzAdRecord;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ApiModel("用户的ECPM列表")
+public class YtUserEcpmListView extends YtDyzAdRecord {
+    @ApiModelProperty("广告源请求数")
+    private String request;
+    /** 广告源填充率 */
+    @ApiModelProperty("广告源填充率")
+    private String fillrate;
+    /** 展示数 */
+    @ApiModelProperty("展示数")
+    private String impression;
+    /** 点击数 */
+    @ApiModelProperty("点击数")
+    private String click;
+    /** ECPM */
+    @ApiModelProperty("ECPM")
+    private String ecpm;
+    /** 收益 */
+    @ApiModelProperty("收益")
+    private BigDecimal revenue;
+    /** 三方广告平台的展示数 */
+    @ApiModelProperty("三方广告平台的展示数")
+    private String impression_api;
+    /** 三方广告平台的点击数 */
+    @ApiModelProperty("三方广告平台的点击数")
+    private String click_api;
+    /** 三方广告平台的ECPM */
+    @ApiModelProperty("三方广告平台的ECPM")
+    private String ecpm_api;
+}

+ 19 - 0
yt-common/src/main/java/com/ytpm/util/DateUtil.java

@@ -0,0 +1,19 @@
+package com.ytpm.util;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+public class DateUtil {
+
+    /**
+     * 获取日期数字
+     */
+    public static int getDateNum(LocalDate currentDate) {
+        // 定义日期格式化器,格式为YYYYMMDD
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        // 将当前日期格式化为字符串
+        String formattedDate = currentDate.format(formatter);
+        // 将字符串转换为整数
+        return Integer.parseInt(formattedDate);
+    }
+}