浏览代码

Merge branch 'package' of GameCenter/game-center into dev

zhimo 1 年之前
父节点
当前提交
19347c554e
共有 46 个文件被更改,包括 1900 次插入271 次删除
  1. 1 1
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java
  2. 18 18
      game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java
  3. 0 2
      game-data/game-data-serve/pom.xml
  4. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/GameDataApplication.java
  5. 2 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AccountAgentDayController.java
  6. 9 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java
  7. 2 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RankingController.java
  8. 48 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataWaterDTO.java
  9. 5 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayDTO.java
  10. 6 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteTotalDTO.java
  11. 12 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAccountAgentDay.java
  12. 6 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsEverydayWater.java
  13. 1 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsH5GameDay.java
  14. 12 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/enums/OrderByEnum.java
  15. 265 48
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayVO.java
  16. 3 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataTotalVO.java
  17. 65 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataWaterVO.java
  18. 45 9
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteDayVO.java
  19. 3 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteTotalVO.java
  20. 10 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRechargeRankingVO.java
  21. 52 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerTemplateVO.java
  22. 45 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/RechargeTemplateVO.java
  23. 30 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/RechargeTrendVO.java
  24. 4 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameDataService.java
  25. 138 21
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java
  26. 764 132
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  27. 3 5
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RankingServiceImpl.java
  28. 4 3
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/AccountTypeEnum.java
  29. 34 4
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/PayWayEnum.java
  30. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  31. 2 2
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java
  32. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java
  33. 4 3
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java
  34. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GamePayWayServiceImpl.java
  35. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java
  36. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/PayMerchantServiceImpl.java
  37. 76 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameRemitLog.java
  38. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameRemitLogMapper.java
  39. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  40. 36 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/RemitController.java
  41. 63 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/GameRemitLogParam.java
  42. 21 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IGameRemitLogService.java
  43. 88 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameRemitLogServiceImpl.java
  44. 2 2
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserTokenServiceImpl.java
  45. 1 1
      game-platform/game-platform-serve/src/main/java/com/zanxiang/game/platform/serve/GamePlatformApplication.java
  46. 1 1
      pom.xml

+ 1 - 1
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/GameBackApplication.java

@@ -16,7 +16,7 @@ public class GameBackApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(GameBackApplication.class, args);
-        System.out.println("游戏回传服务启动成功123 ( ´・・)ノ(._.`) \n" +
+        System.out.println("游戏回传服务启动成功 <dubbo升级3.0> ( ´・・)ノ(._.`) \n" +
                 " ______  __     __     \n" +
                 "/_____/\\/__/\\ /__/\\    \n" +
                 "\\:::__\\/\\ \\::\\\\:.\\ \\   \n" +

+ 18 - 18
game-back/game-back-serve/src/main/java/com/zanxiang/game/back/serve/service/impl/GameBackPolicyServiceImpl.java

@@ -79,7 +79,7 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
         }
         GameBackPolicy backPolicy = GameBackPolicy.builder()
                 .backPolicyName(dto.getBackPolicyName())
-                .firstMinMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
+                .firstMinMoney(NumberUtil.multiply100(dto.getFirstMinMoney()).longValue())
                 .firstMinMoneyType(dto.getFirstMinMoneyType())
                 .firstMinMoneyRate(dto.getFirstMinMoneyRate())
                 .firstMaxMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
@@ -87,14 +87,14 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .firstMaxMoneyRate(dto.getFirstMaxMoneyRate())
                 .firstOtherMoneyType(dto.getFirstOtherMoneyType())
                 .firstOtherMoneyRate(dto.getFirstOtherMoneyRate())
-                .rechargeMinMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
-                .rechargeMinMoneyType(dto.getFirstMinMoneyType())
-                .rechargeMinMoneyRate(dto.getFirstMinMoneyRate())
-                .rechargeMaxMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
-                .rechargeMaxMoneyType(dto.getFirstMaxMoneyType())
-                .rechargeMaxMoneyRate(dto.getFirstMaxMoneyRate())
-                .rechargeOtherMoneyType(dto.getFirstOtherMoneyType())
-                .rechargeOtherMoneyRate(dto.getFirstOtherMoneyRate())
+                .rechargeMinMoney(NumberUtil.multiply100(dto.getRechargeMinMoney()).longValue())
+                .rechargeMinMoneyType(dto.getRechargeMinMoneyType())
+                .rechargeMinMoneyRate(dto.getRechargeMinMoneyRate())
+                .rechargeMaxMoney(NumberUtil.multiply100(dto.getRechargeMaxMoney()).longValue())
+                .rechargeMaxMoneyType(dto.getRechargeMaxMoneyType())
+                .rechargeMaxMoneyRate(dto.getRechargeMaxMoneyRate())
+                .rechargeOtherMoneyType(dto.getRechargeOtherMoneyType())
+                .rechargeOtherMoneyRate(dto.getRechargeOtherMoneyRate())
                 .levelDown(dto.getLevelDown())
                 .createBy(SecurityUtil.getUserId())
                 .createTime(LocalDateTime.now())
@@ -111,7 +111,7 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
         GameBackPolicy backPolicy = GameBackPolicy.builder()
                 .id(policyId)
                 .backPolicyName(dto.getBackPolicyName())
-                .firstMinMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
+                .firstMinMoney(NumberUtil.multiply100(dto.getFirstMinMoney()).longValue())
                 .firstMinMoneyType(dto.getFirstMinMoneyType())
                 .firstMinMoneyRate(dto.getFirstMinMoneyRate())
                 .firstMaxMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
@@ -119,14 +119,14 @@ public class GameBackPolicyServiceImpl extends ServiceImpl<GameBackPolicyMapper,
                 .firstMaxMoneyRate(dto.getFirstMaxMoneyRate())
                 .firstOtherMoneyType(dto.getFirstOtherMoneyType())
                 .firstOtherMoneyRate(dto.getFirstOtherMoneyRate())
-                .rechargeMinMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
-                .rechargeMinMoneyType(dto.getFirstMinMoneyType())
-                .rechargeMinMoneyRate(dto.getFirstMinMoneyRate())
-                .rechargeMaxMoney(NumberUtil.multiply100(dto.getFirstMaxMoney()).longValue())
-                .rechargeMaxMoneyType(dto.getFirstMaxMoneyType())
-                .rechargeMaxMoneyRate(dto.getFirstMaxMoneyRate())
-                .rechargeOtherMoneyType(dto.getFirstOtherMoneyType())
-                .rechargeOtherMoneyRate(dto.getFirstOtherMoneyRate())
+                .rechargeMinMoney(NumberUtil.multiply100(dto.getRechargeMinMoney()).longValue())
+                .rechargeMinMoneyType(dto.getRechargeMinMoneyType())
+                .rechargeMinMoneyRate(dto.getRechargeMinMoneyRate())
+                .rechargeMaxMoney(NumberUtil.multiply100(dto.getRechargeMaxMoney()).longValue())
+                .rechargeMaxMoneyType(dto.getRechargeMaxMoneyType())
+                .rechargeMaxMoneyRate(dto.getRechargeMaxMoneyRate())
+                .rechargeOtherMoneyType(dto.getRechargeOtherMoneyType())
+                .rechargeOtherMoneyRate(dto.getRechargeOtherMoneyRate())
                 .levelDown(dto.getLevelDown())
                 .createBy(old.getCreateBy())
                 .createTime(old.getCreateTime())

+ 0 - 2
game-data/game-data-serve/pom.xml

@@ -97,12 +97,10 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-spring-boot-starter</artifactId>
-            <version>3.2.3</version>
         </dependency>
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-metadata-definition-protobuf</artifactId>
-            <version>3.2.3</version>
         </dependency>
         <dependency>
             <groupId>io.springfox</groupId>

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/GameDataApplication.java

@@ -16,7 +16,7 @@ public class GameDataApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(GameDataApplication.class, args);
-        System.out.println("游戏数据服务启动成功 ( ´・・)ノ(._.`) \n" +
+        System.out.println("游戏数据服务启动成功 <dubbo升级3.0> ( ´・・)ノ(._.`) \n" +
                 " ______  __     __     \n" +
                 "/_____/\\/__/\\ /__/\\    \n" +
                 "\\:::__\\/\\ \\::\\\\:.\\ \\   \n" +

+ 2 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AccountAgentDayController.java

@@ -23,7 +23,7 @@ public class AccountAgentDayController {
     private IAccountAgentDayService accountAgentDayService;
 
     @ApiOperation(value = "推广每日数据")
-    @PreAuthorize(permissionKey = "gameData:accountAgent:day")
+//    @PreAuthorize(permissionKey = "gameData:accountAgent:day")
     @PostMapping("/day")
     public ResultVO<Page<GamePromoteDayVO>> accountAgentDay(@RequestBody GamePromoteDayDTO dto) {
         return ResultVO.ok(accountAgentDayService.accountAgentDay(dto));
@@ -37,7 +37,7 @@ public class AccountAgentDayController {
     }
 
     @ApiOperation(value = "推广总数据")
-    @PreAuthorize(permissionKey = "gameData:accountAgent:total")
+//    @PreAuthorize(permissionKey = "gameData:accountAgent:total")
     @PostMapping("/total")
     public ResultVO<Page<GamePromoteTotalVO>> accountAgentTotal(@RequestBody GamePromoteTotalDTO dto) {
         return ResultVO.ok(accountAgentDayService.accountAgentTotal(dto));

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java

@@ -2,8 +2,10 @@ package com.zanxiang.game.data.serve.controller;
 
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
+import com.zanxiang.game.data.serve.pojo.vo.GameDataWaterVO;
 import com.zanxiang.game.data.serve.service.IGameDataService;
 import com.zanxiang.game.data.serve.utils.Page;
 import com.zanxiang.module.util.pojo.ResultVO;
@@ -49,5 +51,12 @@ public class GameDataController {
         return ResultVO.ok(gameDataService.getGameDataTotal(dto));
     }
 
+    @ApiOperation(value = "每日流水贡献")
+    //@PreAuthorize(permissionKey = "gameData:adsGameDay:water")
+    @PostMapping("/water")
+    public ResultVO<Page<GameDataWaterVO>> getGameDataWater(@RequestBody GameDataWaterDTO dto) {
+        return ResultVO.ok(gameDataService.getGameDataWater(dto));
+    }
+
 
 }

+ 2 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/RankingController.java

@@ -31,9 +31,9 @@ public class RankingController {
     }
 
     @ApiOperation(value = "玩家充值排行榜")
-    @PreAuthorize(permissionKey = "gameData:ranking:player")
+//    @PreAuthorize(permissionKey = "gameData:ranking:player")
     @PostMapping("/player")
-    public ResultVO<Page<PlayerRechargeRankingVO>> userRanking(@RequestBody RechargeRankingDTO dto) {
+    public ResultVO<Page<PlayerRechargeRankingVO>> playerRanking(@RequestBody RechargeRankingDTO dto) {
         return ResultVO.ok(rankingService.playerRanking(dto));
     }
 }

+ 48 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataWaterDTO.java

@@ -0,0 +1,48 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+import com.zanxiang.game.data.serve.pojo.base.BasePage;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigInteger;
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 游戏总数据前端查询参数实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataWaterDTO extends BasePage {
+
+    /**
+     * 推广游戏名称
+     */
+    @ApiModelProperty(notes = "游戏名称")
+    private String gameName;
+
+    /**
+     * 推广游戏应用类别
+     */
+    @ApiModelProperty(notes = "游戏应用类型")
+    private String gameClassify;
+
+    /**
+     * 充值时间(开始)
+     */
+    @ApiModelProperty(notes = "充值时间")
+    private LocalDate rechargeDate;
+
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
+
+}

+ 5 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteDayDTO.java

@@ -1,8 +1,6 @@
 package com.zanxiang.game.data.serve.pojo.dto;
 
 import com.zanxiang.game.data.serve.pojo.base.BasePage;
-import com.zanxiang.game.data.serve.pojo.entity.AdsAccountAgentDay;
-import com.zanxiang.module.web.pojo.BaseListDTO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -37,5 +35,10 @@ public class GamePromoteDayDTO extends BasePage {
     @ApiModelProperty(notes = "消耗结束日期")
     private LocalDate endDay;
 
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
 
 }

+ 6 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GamePromoteTotalDTO.java

@@ -1,7 +1,6 @@
 package com.zanxiang.game.data.serve.pojo.dto;
 
 import com.zanxiang.game.data.serve.pojo.base.BasePage;
-import com.zanxiang.game.data.serve.pojo.entity.AdsAccountAgentDay;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -40,4 +39,10 @@ public class GamePromoteTotalDTO extends BasePage {
     private LocalDate rechargeBeginDay;
     @ApiModelProperty(notes = "充值结束日期")
     private LocalDate rechargeEndDay;
+
+    @ApiModelProperty(notes = "排序字段")
+    private String sortFiled;
+
+    @ApiModelProperty(notes = "排序方式:升序asc;降序desc")
+    private String sortType;
 }

+ 12 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsAccountAgentDay.java

@@ -490,6 +490,12 @@ public class AdsAccountAgentDay implements Serializable {
     @Column
     private String amountD3;
 
+    /**
+     * 付费趋势第五天总:增/回/倍
+     */
+    @Column
+    private String amountD5;
+
     /**
      * 付费趋势第七天总:增/回/倍
      */
@@ -520,6 +526,12 @@ public class AdsAccountAgentDay implements Serializable {
     @Column
     private String amountM3;
 
+    /**
+     * 付费趋势第六月总:增/回/倍
+     */
+    @Column
+    private String amountM6;
+
     /**
      * 付费趋势总:增/回/倍
      */

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsEverydayWater.java

@@ -107,6 +107,12 @@ public class AdsEverydayWater implements Serializable {
     @Column
     private Long userId;
 
+    /**
+     * 用户名称
+     */
+    @Column
+    private String userName;
+
     /**
      * 用户充值金额
      */

+ 1 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/entity/AdsH5GameDay.java

@@ -28,7 +28,7 @@ import java.time.LocalDate;
 @PK({"dt", "gameId", "gameName", "gameClassify", "sourceSystem"})
 public class AdsH5GameDay implements Serializable {
     private static final long serialVersionUID = 1L;
-    public static final String TABLE_NAME = "ads_H5_game_day";
+    public static final String TABLE_NAME = "ads_h5_game_day";
 
     /**
      * ID

+ 12 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/enums/OrderByEnum.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.data.serve.pojo.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum OrderByEnum {
+    DESC("desc"),
+    ASC("asc");
+    private final String orderType;
+}

+ 265 - 48
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayVO.java

@@ -472,147 +472,364 @@ public class GameDataDayVO {
     private BigDecimal amountArpu;
 
     /**
-     * 付费趋势:1天(买量)
+     * 付费趋势:1天(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1天(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1天(买量)金额/人数/增/回/倍")
     private String buyAmountD1;
 
     /**
-     * 付费趋势:3天(买量)
+     * 付费趋势:3天(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3天(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3天(买量)金额/人数/增/回/倍")
     private String buyAmountD3;
 
     /**
-     * 付费趋势:7天(买量)
+     * 付费趋势:5天(买量)金额/人数/增/回/倍
      */
-    @ApiModelProperty(value = "付费趋势:7天(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:5天(买量)金额/人数/增/回/倍")
+    private String buyAmountD5;
+
+    /**
+     * 付费趋势:7天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:7天(买量)金额/人数/增/回/倍")
     private String buyAmountD7;
 
     /**
-     * 付费趋势:15天(买量)
+     * 付费趋势:15天(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:15天(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:15天(买量)金额/人数/增/回/倍")
     private String buyAmountD15;
 
     /**
-     * 付费趋势:1个月(买量)
+     * 付费趋势:1个月(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1个月(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1个月(买量)金额/人数/增/回/倍")
     private String buyAmountM1;
 
     /**
-     * 付费趋势:2个月(买量)
+     * 付费趋势:2个月(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:2个月(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:2个月(买量)金额/人数/增/回/倍")
     private String buyAmountM2;
 
     /**
-     * 付费趋势:3个月(买量)
+     * 付费趋势:3个月(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3个月(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3个月(买量)金额/人数/增/回/倍")
     private String buyAmountM3;
 
     /**
-     * 付费趋势:总(买量)
+     * 付费趋势:6个月(买量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:总(买量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:6个月(买量)金额/人数/增/回/倍")
+    private String buyAmountM6;
+
+    /**
+     * 付费趋势:总(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:总(买量)金额/人数/增/回/倍")
     private String buyAmountSum;
 
     /**
-     * 付费趋势:1天(自然量)
+     * 付费趋势:1天(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1天(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1天(自然量)金额/人数/增/回/倍")
     private String natureAmountD1;
 
     /**
-     * 付费趋势:3天(自然量)
+     * 付费趋势:3天(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3天(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3天(自然量)金额/人数/增/回/倍")
     private String natureAmountD3;
 
     /**
-     * 付费趋势:7天(自然量)
+     * 付费趋势:5天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:5天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD5;
+
+    /**
+     * 付费趋势:7天(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:7天(自然量)")
+    @ApiModelProperty(value = "付费趋势:7天(自然量)金额/人数/增/回/倍")
     private String natureAmountD7;
 
     /**
-     * 付费趋势:15天(自然量)
+     * 付费趋势:15天(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:15天(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:15天(自然量)金额/人数/增/回/倍")
     private String natureAmountD15;
 
     /**
-     * 付费趋势:1个月(自然量)
+     * 付费趋势:1个月(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1个月(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1个月(自然量)金额/人数/增/回/倍")
     private String natureAmountM1;
 
     /**
-     * 付费趋势:2个月(自然量)
+     * 付费趋势:2个月(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:2个月(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:2个月(自然量)金额/人数/增/回/倍")
     private String natureAmountM2;
 
     /**
-     * 付费趋势:3个月(自然量)
+     * 付费趋势:3个月(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3个月(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3个月(自然量)金额/人数/增/回/倍")
     private String natureAmountM3;
 
     /**
-     * 付费趋势:总(自然量)
+     * 付费趋势:6个月(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:总(自然量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:6个月(自然量)金额/人数/增/回/倍")
+    private String natureAmountM6;
+
+    /**
+     * 付费趋势:总(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:总(自然量)金额/人数/增/回/倍")
     private String natureAmountSum;
 
     /**
-     * 付费趋势:1天(总量)
+     * 付费趋势:1天(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1天(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1天(总量)金额/人数/增/回/倍")
     private String amountD1;
 
     /**
-     * 付费趋势:3天(总量)
+     * 付费趋势:3天(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3天(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3天(总量)金额/人数/增/回/倍")
     private String amountD3;
 
     /**
-     * 付费趋势:7天(总量)
+     * 付费趋势:5天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:5天(总量)金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势:7天(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:7天(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:7天(总量)金额/人数/增/回/倍")
     private String amountD7;
 
     /**
-     * 付费趋势:15天(总量)
+     * 付费趋势:15天(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:15天(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:15天(总量)金额/人数/增/回/倍")
     private String amountD15;
 
     /**
-     * 付费趋势:1个月(总量)
+     * 付费趋势:1个月(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:1个月(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:1个月(总量)金额/人数/增/回/倍")
     private String amountM1;
 
     /**
-     * 付费趋势:2个月(总量)
+     * 付费趋势:2个月(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:2个月(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:2个月(总量)金额/人数/增/回/倍")
     private String amountM2;
 
     /**
-     * 付费趋势:3个月(总量)
+     * 付费趋势:3个月(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:3个月(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:3个月(总量)金额/人数/增/回/倍")
     private String amountM3;
 
     /**
-     * 付费趋势:总(总量)
+     * 付费趋势:6个月(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:6个月(总量)金额/人数/增/回/倍")
+    private String amountM6;
+
+    /**
+     * 付费趋势:总(总量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:总(总量)")
+    @ApiModelProperty(value = "(不展示)付费趋势:总(总量)金额/人数/增/回/倍")
     private String amountSum;
 
+    /**
+     * 付费趋势:1天(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1天(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountD1Trend;
+
+    /**
+     * 付费趋势:3天(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3天(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountD3Trend;
+
+    /**
+     * 付费趋势:5天(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:5天(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountD5Trend;
+
+    /**
+     * 付费趋势:7天(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:7天(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountD7Trend;
+
+    /**
+     * 付费趋势:15天(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:15天(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountD15Trend;
+
+    /**
+     * 付费趋势:1个月(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1个月(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountM1Trend;
+
+    /**
+     * 付费趋势:2个月(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:2个月(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountM2Trend;
+
+    /**
+     * 付费趋势:3个月(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3个月(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountM3Trend;
+
+    /**
+     * 付费趋势:6个月(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:6个月(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountM6Trend;
+
+    /**
+     * 付费趋势:总(买量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:总(买量)金额/人数/增/回/倍")
+    private RechargeTrendVO buyAmountSumTrend;
+
+    /**
+     * 付费趋势:1天(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1天(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountD1Trend;
+
+    /**
+     * 付费趋势:3天(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3天(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountD3Trend;
+
+    /**
+     * 付费趋势:5天(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:5天(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountD5Trend;
+
+    /**
+     * 付费趋势:7天(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:7天(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountD7Trend;
+
+    /**
+     * 付费趋势:15天(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:15天(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountD15Trend;
+
+    /**
+     * 付费趋势:1个月(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1个月(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountM1Trend;
+
+    /**
+     * 付费趋势:2个月(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:2个月(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountM2Trend;
+
+    /**
+     * 付费趋势:3个月(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3个月(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountM3Trend;
+
+    /**
+     * 付费趋势:6个月(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:6个月(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountM6Trend;
+
+    /**
+     * 付费趋势:总(自然量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:总(自然量)金额/人数/增/回/倍")
+    private RechargeTrendVO natureAmountSumTrend;
+
+    /**
+     * 付费趋势:1天(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1天(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountD1Trend;
+
+    /**
+     * 付费趋势:3天(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3天(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountD3Trend;
+
+    /**
+     * 付费趋势:5天(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:5天(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountD5Trend;
+
+    /**
+     * 付费趋势:7天(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:7天(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountD7Trend;
+
+    /**
+     * 付费趋势:15天(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:15天(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountD15Trend;
+
+    /**
+     * 付费趋势:1个月(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:1个月(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountM1Trend;
+
+    /**
+     * 付费趋势:2个月(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:2个月(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountM2Trend;
+
+    /**
+     * 付费趋势:3个月(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:3个月(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountM3Trend;
+
+    /**
+     * 付费趋势:6个月(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:6个月(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountM6Trend;
+
+    /**
+     * 付费趋势:总(总量)金额/人数/增/回/倍(展示数据)
+     */
+    @ApiModelProperty(value = "付费趋势:总(总量)金额/人数/增/回/倍")
+    private RechargeTrendVO amountSumTrend;
+
+
 }

+ 3 - 3
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataTotalVO.java

@@ -216,7 +216,7 @@ public class GameDataTotalVO {
      * 新用户复充人数(买量)(前端不需要显示)
      */
     @ApiModelProperty(value = "新用户复充人数(买量)(前端不需要显示)")
-    private BigInteger buyNewUserAgainCount;
+    private BigInteger buyNewUserAgainNum;
 
     /**
      * 新增注册ARPU(买量)
@@ -408,7 +408,7 @@ public class GameDataTotalVO {
      * 新用户复充人数(自然量)(前端不需要显示)
      */
     @ApiModelProperty(value = "新用户复充人数(自然量)(前端不需要显示)")
-    private BigInteger natureNewUserAgainCount;
+    private BigInteger natureNewUserAgainNum;
 
     /**
      * 新增注册ARPU(自然量)
@@ -600,7 +600,7 @@ public class GameDataTotalVO {
      * 新用户复充人数(总量)(前端不需要显示)
      */
     @ApiModelProperty(value = "新用户复充人数(总量)(前端不需要显示)")
-    private BigInteger newUserAgainCount;
+    private BigInteger newUserAgainNum;
 
     /**
      * 新增注册ARPU(总量)

+ 65 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataWaterVO.java

@@ -0,0 +1,65 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.nutz.dao.entity.annotation.Column;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataWaterVO {
+    private Long id;
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty("游戏ID")
+    private Long gameId;
+
+    /**
+     * 游戏名称
+     */
+    @ApiModelProperty("游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏类别
+     */
+    @ApiModelProperty("游戏类别")
+    private String gameClassify;
+
+    /**
+     * 充值金额总
+     */
+    @ApiModelProperty("充值金额总")
+    private BigDecimal amount;
+
+    /**
+     * 买量金额
+     */
+    @ApiModelProperty("买量金额")
+    private BigDecimal buyAmount;
+
+    /**
+     * 自然量充值金额
+     */
+    @ApiModelProperty("自然量充值金额")
+    private BigDecimal natureAmount;
+
+    private List<RechargeTemplateVO> rechargeTemplateVOList;
+
+    private List<PlayerTemplateVO> playerTemplateVOS;
+}

+ 45 - 9
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteDayVO.java

@@ -228,35 +228,71 @@ public class GamePromoteDayVO {
     @ApiModelProperty(notes = "首日付费Arpu=首日新用户充值金额/首日新用户充值人数")
     private BigDecimal firstRechargeArpu;
 
-    @ApiModelProperty(notes = "付费Arpu=新用户累计充值金额/新用户累计充值人数")
+    @ApiModelProperty(notes = "当天付费Arpu=新用户累计充值金额/新用户累计充值人数")
     private BigDecimal todayRechargeArpu;
 
     @ApiModelProperty(notes = "账面Arpu=账面充值金额/账面充值人数")
     private BigDecimal showRechargeArpu;
 
+    @ApiModelProperty(notes = "不展示--付费趋势:1天")
+    private String trendDay1;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:3天")
+    private String trendDay3;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:5天")
+    private String trendDay5;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:7天")
+    private String trendDay7;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:15天")
+    private String trendDay15;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:1个月")
+    private String trendMonth1;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:2个月")
+    private String trendMonth2;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:3个月")
+    private String trendMonth3;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:6个月")
+    private String trendMonth6;
+
+    @ApiModelProperty(notes = "不展示--付费趋势:总")
+    private String trendTotal;
+
     @ApiModelProperty(notes = "付费趋势:1天")
-    private String rechargeTrendDay1;
+    private RechargeTrendVO rechargeTrendDay1;
 
     @ApiModelProperty(notes = "付费趋势:3天")
-    private String rechargeTrendDay3;
+    private RechargeTrendVO rechargeTrendDay3;
+
+    @ApiModelProperty(notes = "付费趋势:5天")
+    private RechargeTrendVO rechargeTrendDay5;
 
     @ApiModelProperty(notes = "付费趋势:7天")
-    private String rechargeTrendDay7;
+    private RechargeTrendVO rechargeTrendDay7;
 
     @ApiModelProperty(notes = "付费趋势:15天")
-    private String rechargeTrendDay15;
+    private RechargeTrendVO rechargeTrendDay15;
 
     @ApiModelProperty(notes = "付费趋势:1个月")
-    private String rechargeTrendMonth1;
+    private RechargeTrendVO rechargeTrendMonth1;
 
     @ApiModelProperty(notes = "付费趋势:2个月")
-    private String rechargeTrendMonth2;
+    private RechargeTrendVO rechargeTrendMonth2;
 
     @ApiModelProperty(notes = "付费趋势:3个月")
-    private String rechargeTrendMonth3;
+    private RechargeTrendVO rechargeTrendMonth3;
+
+    @ApiModelProperty(notes = "付费趋势:6个月")
+    private RechargeTrendVO rechargeTrendMonth6;
 
     @ApiModelProperty(notes = "付费趋势:总")
-    private String rechargeTrendTotal;
+    private RechargeTrendVO rechargeTrendTotal;
 
     @ApiModelProperty(notes = "单日付费100+人数")
     private String hundredUserNum;

+ 3 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GamePromoteTotalVO.java

@@ -132,6 +132,9 @@ public class GamePromoteTotalVO {
     @ApiModelProperty(notes = "新用户充值人数")
     private Long userRechargeUser;
 
+    @ApiModelProperty(notes = "不展示字段--新用户复充人数")
+    private Long repeatRechargeUser;
+
     @ApiModelProperty(notes = "新用户充值金额")
     private BigDecimal userRechargeMoney;
 

+ 10 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerRechargeRankingVO.java

@@ -47,6 +47,12 @@ public class PlayerRechargeRankingVO {
     @ApiModelProperty("注册游戏ID")
     private Long regGameId;
 
+    /**
+     * 注册游戏ID
+     */
+    @ApiModelProperty("注册游戏名")
+    private String regGameName;
+
     /**
      * 玩家操作系统
      */
@@ -56,9 +62,12 @@ public class PlayerRechargeRankingVO {
     /**
      * 最近充值游戏
      */
-    @ApiModelProperty("最近充值游戏")
+    @ApiModelProperty("最近充值游戏ID")
     private Long lastAmountGameId;
 
+    @ApiModelProperty("最近充值游戏名称")
+    private String lastAmountGameName;
+
     /**
      * 最近充值时间
      */

+ 52 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/PlayerTemplateVO.java

@@ -0,0 +1,52 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class PlayerTemplateVO {
+    /**
+     * 玩家模板排序
+     */
+    @ApiModelProperty("玩家模板排序")
+    private String userOrderBy;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户名称")
+    private String userName;
+
+    /**
+     * 用户充值金额
+     */
+    @ApiModelProperty("用户充值金额")
+    private BigDecimal userAmount;
+
+    /**
+     * 用户充值占比
+     */
+    @ApiModelProperty("用户充值占比")
+    private BigDecimal proportion;
+
+
+}

+ 45 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/RechargeTemplateVO.java

@@ -0,0 +1,45 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author tianhua
+ * @time 2023/7/12
+ * @Description 返回给前端的游戏总数据实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class RechargeTemplateVO {
+    /**
+     * 充值模板排序
+     */
+    @ApiModelProperty("充值模板排序")
+    private String amountOrderBy;
+
+    /**
+     * 充值挡位
+     */
+    @ApiModelProperty("充值挡位")
+    private BigDecimal amountPost;
+
+    /**
+     * 充值次数
+     */
+    @ApiModelProperty("充值次数")
+    private Long amountCount;
+
+    /**
+     * 充值人数
+     */
+    @ApiModelProperty("充值人数")
+    private Long amountNum;
+
+}

+ 30 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/RechargeTrendVO.java

@@ -0,0 +1,30 @@
+package com.zanxiang.game.data.serve.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class RechargeTrendVO {
+    @ApiModelProperty(notes = "充值人数")
+    private Long rechargeUserCount;
+
+    @ApiModelProperty(notes = "充值金额")
+    private BigDecimal rechargeMoney;
+
+    @ApiModelProperty(notes = "增")
+    private BigDecimal increase;
+
+    @ApiModelProperty(notes = "回")
+    private BigDecimal back;
+
+    @ApiModelProperty(notes = "倍")
+    private BigDecimal multiples;
+}

+ 4 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/IGameDataService.java

@@ -2,8 +2,10 @@ package com.zanxiang.game.data.serve.service;
 
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
+import com.zanxiang.game.data.serve.pojo.vo.GameDataWaterVO;
 import com.zanxiang.game.data.serve.utils.Page;
 
 public interface IGameDataService {
@@ -21,4 +23,6 @@ public interface IGameDataService {
      * @return
      */
     Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto);
+
+    Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto);
 }

+ 138 - 21
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java

@@ -1,15 +1,17 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.google.common.base.CaseFormat;
 import com.google.gson.Gson;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.data.serve.pojo.dto.GamePromoteDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GamePromoteDayTotalDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GamePromoteTotalDTO;
 import com.zanxiang.game.data.serve.pojo.entity.AdsAccountAgentDay;
-import com.zanxiang.game.data.serve.pojo.entity.AdsGameDay;
+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 import com.zanxiang.game.data.serve.pojo.vo.GamePromoteDayTotalVO;
 import com.zanxiang.game.data.serve.pojo.vo.GamePromoteDayVO;
 import com.zanxiang.game.data.serve.pojo.vo.GamePromoteTotalVO;
+import com.zanxiang.game.data.serve.pojo.vo.RechargeTrendVO;
 import com.zanxiang.game.data.serve.service.IAccountAgentDayService;
 import com.zanxiang.game.data.serve.utils.Page;
 import com.zanxiang.module.util.DateUtil;
@@ -22,8 +24,6 @@ import org.nutz.dao.Dao;
 import org.nutz.dao.Sqls;
 import org.nutz.dao.entity.Entity;
 import org.nutz.dao.pager.Pager;
-import org.nutz.dao.sql.Criteria;
-import org.nutz.dao.sql.GroupBy;
 import org.nutz.dao.sql.Sql;
 import org.nutz.dao.util.Daos;
 import org.nutz.dao.util.cri.SimpleCriteria;
@@ -51,6 +51,12 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
         dto.setSysUserId(sysUserId);
+        if (StringUtils.isBlank(dto.getSortFiled())){
+            dto.setSortFiled("dt");
+        }
+        if (StringUtils.isBlank(dto.getSortType())){
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
         if (null == dto.getBeginDay() || null == dto.getEndDay()){
             dto.setBeginDay(LocalDate.now());
             dto.setEndDay(LocalDate.now());
@@ -83,13 +89,106 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         if (null != dto.getEndDay()) {
             cri.where().and("dt", "<=", dto.getEndDay());
         }
-        Sql sql = Sqls.queryEntity(accountAgentDaySql() + "$condition" + " order by dt desc");
+        cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        Sql sql = Sqls.queryEntity(accountAgentDaySql() + "$condition");
         sql.setPager(pager);
         Entity<GamePromoteDayVO> entity = dao.getEntity(GamePromoteDayVO.class);
         sql.setEntity(entity).setCondition(cri);
         dao.execute(sql);
         pager.setRecordCount(dao.count(AdsAccountAgentDay.class, cri));
-        return new Page<>(sql.getList(GamePromoteDayVO.class), pager);
+        List<GamePromoteDayVO> collect = sql.getList(GamePromoteDayVO.class).stream().map(item -> {
+            String[] trendDay1 = item.getTrendDay1().split("/");
+            item.setRechargeTrendDay1(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendDay1[0]))
+                    .rechargeUserCount(Long.valueOf(trendDay1[1]))
+                    .increase(new BigDecimal(trendDay1[2]))
+                    .back(new BigDecimal(trendDay1[3]))
+                    .multiples(new BigDecimal(trendDay1[4]))
+                    .build());
+
+            String[] trendDay3 = item.getTrendDay3().split("/");
+            item.setRechargeTrendDay3(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendDay3[0]))
+                    .rechargeUserCount(Long.valueOf(trendDay3[1]))
+                    .increase(new BigDecimal(trendDay3[2]))
+                    .back(new BigDecimal(trendDay3[3]))
+                    .multiples(new BigDecimal(trendDay3[4]))
+                    .build());
+
+            String[] trendDay5 = item.getTrendDay5().split("/");
+            item.setRechargeTrendDay5(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendDay5[0]))
+                    .rechargeUserCount(Long.valueOf(trendDay5[1]))
+                    .increase(new BigDecimal(trendDay5[2]))
+                    .back(new BigDecimal(trendDay5[3]))
+                    .multiples(new BigDecimal(trendDay5[4]))
+                    .build());
+
+            String[] trendDay7 = item.getTrendDay7().split("/");
+            item.setRechargeTrendDay7(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendDay7[0]))
+                    .rechargeUserCount(Long.valueOf(trendDay7[1]))
+                    .increase(new BigDecimal(trendDay7[2]))
+                    .back(new BigDecimal(trendDay7[3]))
+                    .multiples(new BigDecimal(trendDay7[4]))
+                    .build());
+
+            String[] trendDay15 = item.getTrendDay15().split("/");
+            item.setRechargeTrendDay15(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendDay15[0]))
+                    .rechargeUserCount(Long.valueOf(trendDay15[1]))
+                    .increase(new BigDecimal(trendDay15[2]))
+                    .back(new BigDecimal(trendDay15[3]))
+                    .multiples(new BigDecimal(trendDay15[4]))
+                    .build());
+
+            String[] trendMonth1 = item.getTrendMonth1().split("/");
+            item.setRechargeTrendMonth1(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendMonth1[0]))
+                    .rechargeUserCount(Long.valueOf(trendMonth1[1]))
+                    .increase(new BigDecimal(trendMonth1[2]))
+                    .back(new BigDecimal(trendMonth1[3]))
+                    .multiples(new BigDecimal(trendMonth1[4]))
+                    .build());
+
+            String[] trendMonth2 = item.getTrendMonth2().split("/");
+            item.setRechargeTrendMonth2(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendMonth2[0]))
+                    .rechargeUserCount(Long.valueOf(trendMonth2[1]))
+                    .increase(new BigDecimal(trendMonth2[2]))
+                    .back(new BigDecimal(trendMonth2[3]))
+                    .multiples(new BigDecimal(trendMonth2[4]))
+                    .build());
+
+            String[] trendMonth3 = item.getTrendMonth3().split("/");
+            item.setRechargeTrendMonth3(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendMonth3[0]))
+                    .rechargeUserCount(Long.valueOf(trendMonth3[1]))
+                    .increase(new BigDecimal(trendMonth3[2]))
+                    .back(new BigDecimal(trendMonth3[3]))
+                    .multiples(new BigDecimal(trendMonth3[4]))
+                    .build());
+
+            String[] trendMonth6 = item.getTrendMonth6().split("/");
+            item.setRechargeTrendMonth6(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendMonth6[0]))
+                    .rechargeUserCount(Long.valueOf(trendMonth6[1]))
+                    .increase(new BigDecimal(trendMonth6[2]))
+                    .back(new BigDecimal(trendMonth6[3]))
+                    .multiples(new BigDecimal(trendMonth6[4]))
+                    .build());
+
+            String[] trendTotal = item.getTrendTotal().split("/");
+            item.setRechargeTrendTotal(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(trendTotal[0]))
+                    .rechargeUserCount(Long.valueOf(trendTotal[1]))
+                    .increase(new BigDecimal(trendTotal[2]))
+                    .back(new BigDecimal(trendTotal[3]))
+                    .multiples(new BigDecimal(trendTotal[4]))
+                    .build());
+            return item;
+        }).collect(Collectors.toList());
+        return new Page<>(collect, pager);
     }
 
     @Override
@@ -136,6 +235,12 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
         dto.setSysUserId(sysUserId);
+        if (StringUtils.isBlank(dto.getSortFiled())){
+            dto.setSortFiled("cost");
+        }
+        if (StringUtils.isBlank(dto.getSortType())){
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
         if (null == dto.getCostEndDay() || null == dto.getCostBeginDay()) {
             dto.setCostBeginDay(LocalDate.now());
             dto.setCostEndDay(LocalDate.now());
@@ -173,6 +278,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
             cri.where().and("a.dt", "<=", dto.getCostEndDay());
         }
         cri.groupBy("a.account_id,a.agent_id");
+        cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
         Sql sql = Sqls.queryEntity(accountAgentTotalSql() + "$condition");
         sql.setPager(pager);
         Entity<GamePromoteTotalVO> entity = dao.getEntity(GamePromoteTotalVO.class);
@@ -185,10 +291,10 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
         List<GamePromoteTotalVO> list = sql.getList(GamePromoteTotalVO.class);
 
-        //存在充值时间,获取表ads_dayn_amount的json数据
+        //渠道注册时间内的dayn充值数据,获取表ads_dayn_amount的json数据
         Map<String, Object> dayNMap = new HashMap<>(4);
-        dayNMap.put("beginDay", dto.getRechargeBeginDay());
-        dayNMap.put("endDay", dto.getRechargeEndDay());
+        dayNMap.put("beginDay", dto.getCostBeginDay());
+        dayNMap.put("endDay", dto.getCostEndDay());
 
         //循环总数据的每条数据
         List<GamePromoteTotalVO> hasRechargeDayList = list.stream().map(item -> {
@@ -208,7 +314,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 List<Map<String, String>> jsonList = gson.fromJson(dayNList.toString(), ArrayList.class);
 
                 Map<String, String> resultMap = new HashMap<>();
-                resultMap.put("dayN", "0.00-0-0");
+                resultMap.put("dayN", "0.00-0-0-0");
                 for (Map<String, String> jsonMap : jsonList) {
                     for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
                         String key = entry.getKey();
@@ -220,7 +326,8 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                             BigDecimal money = new BigDecimal(existingParts[0]).add(new BigDecimal(parts[0]));
                             int count = Integer.parseInt(existingParts[1]) + Integer.parseInt(parts[1]);
                             int num = Integer.parseInt(existingParts[2]) + Integer.parseInt(parts[2]);
-                            String newValue = money + "-" + count + "-" + num;
+                            int repeatNum = Integer.parseInt(existingParts[3]) + Integer.parseInt(parts[3]);
+                            String newValue = money + "-" + count + "-" + num + "-" + repeatNum;
                             resultMap.put("dayN", newValue);
                         }
                     }
@@ -231,6 +338,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                             .rechargeMoney(new BigDecimal(parts[0]))
                             .rechargeCount(Long.valueOf(parts[1]))
                             .rechargeNum(Long.valueOf(parts[2]))
+                            .repeatNum(Long.valueOf(parts[3]))
                             .build();
                 }
             }
@@ -239,6 +347,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 item.setUserRechargeMoney(dayN.getRechargeMoney());
                 item.setUserRechargeCount(dayN.getRechargeCount());
                 item.setUserRechargeUser(dayN.getRechargeNum());
+                item.setRepeatRechargeUser(dayN.getRepeatNum());
                 item.setUserRechargeArpu(item.getUserRechargeUser() == 0 ?
                         BigDecimal.ZERO:item.getUserRechargeMoney().divide(BigDecimal.valueOf(item.getUserRechargeUser()),4, RoundingMode.DOWN));
 
@@ -260,6 +369,11 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
 
                 item.setUserRechargeCost(item.getUserRechargeUser() == 0 ?
                         BigDecimal.ZERO:item.getCost().divide(BigDecimal.valueOf(item.getUserRechargeUser()),4, RoundingMode.DOWN));
+
+                item.setRepeatRechargeRate(item.getUserRechargeUser() == 0 ?
+                        BigDecimal.ZERO:BigDecimal.valueOf(item.getRepeatRechargeUser()).divide(BigDecimal.valueOf(item.getUserRechargeUser()),4, RoundingMode.DOWN));
+                item.setUserRepeatRechargeRate(item.getNewUserRechargeUser() == 0 ?
+                        BigDecimal.ZERO:BigDecimal.valueOf(item.getRepeatRechargeUser()).divide(BigDecimal.valueOf(item.getNewUserRechargeUser()),4, RoundingMode.DOWN));
             }
             return item;
         }).collect(Collectors.toList());
@@ -348,14 +462,16 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 	first_arpu AS first_recharge_arpu,
                 	today_arpu AS today_recharge_arpu,
                 	paper_arpu AS show_recharge_arpu,
-                	amount_d1 AS recharge_trend_day1,
-                	amount_d3 AS recharge_trend_day3,
-                	amount_d7 AS recharge_trend_day7,
-                	amount_d15 AS recharge_trend_day15,
-                	amount_m1 AS recharge_trend_month1,
-                	amount_m2 AS recharge_trend_month2,
-                	amount_m3 AS recharge_trend_month3,
-                	amount_sum AS recharge_trend_total,
+                	amount_d1 AS trend_day1,
+                	amount_d3 AS trend_day3,
+                	amount_d5 AS trend_day5,
+                	amount_d7 AS trend_day7,
+                	amount_d15 AS trend_day15,
+                	amount_m1 AS trend_month1,
+                	amount_m2 AS trend_month2,
+                	amount_m3 AS trend_month3,
+                	amount_m6 AS trend_month6,
+                	amount_sum AS trend_total,
                 	hundred_user_num,
                 	hundred_user_num_cost
                 from
@@ -491,9 +607,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
                 	sum(a.first_new_user_amount_count) as user_recharge_count,
                 	sum(a.first_new_user_amount_num) as user_recharge_user,
                 	sum(a.first_new_user_amount) as user_recharge_money,
-                	sum(b.amount_count) as show_recharge_count,
-                	sum(b.amount_num) as show_recharge_user,
-                	sum(b.amount) as show_recharge_money,
+                	ifnull(sum(b.amount_count),0) as show_recharge_count,
+                	ifnull(sum(b.amount_num),0) as show_recharge_user,
+                	ifnull(sum(b.amount),0) as show_recharge_money,
                 	sum(a.old_amount_count) as old_user_recharge_count,
                 	sum(a.old_amount_num) as old_user_recharge_user,
                 	sum(a.old_amount) as old_user_recharge_money,
@@ -542,5 +658,6 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
         private BigDecimal rechargeMoney;
         private Long rechargeCount;
         private Long rechargeNum;
+        private Long repeatNum;
     }
 }

+ 764 - 132
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -1,24 +1,42 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.google.common.base.CaseFormat;
+import com.google.gson.Gson;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameDataTotalDTO;
-import com.zanxiang.game.data.serve.pojo.vo.GameDataDayVO;
-import com.zanxiang.game.data.serve.pojo.vo.GameDataTotalVO;
+import com.zanxiang.game.data.serve.pojo.dto.GameDataWaterDTO;
+import com.zanxiang.game.data.serve.pojo.entity.AdsEverydayWater;
+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
+import com.zanxiang.game.data.serve.pojo.vo.*;
 import com.zanxiang.game.data.serve.service.IGameDataService;
 import com.zanxiang.game.data.serve.utils.Page;
+import com.zanxiang.module.util.DateUtil;
+import lombok.Builder;
+import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.Dao;
 import org.nutz.dao.Sqls;
+import org.nutz.dao.entity.Entity;
 import org.nutz.dao.pager.Pager;
 import org.nutz.dao.sql.Criteria;
 import org.nutz.dao.sql.Sql;
+import org.nutz.dao.util.Daos;
+import org.nutz.dao.util.cri.SimpleCriteria;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.math.RoundingMode;
 import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author tianhua
@@ -32,6 +50,11 @@ public class GameDataServiceImpl implements IGameDataService {
     @Autowired
     private Dao dao;
 
+    /**
+     * 游戏每日数据
+     * @param dto 前端传递查询参数
+     * @return 返回给前端的数据
+     */
     @Override
     public Page<GameDataDayVO> getGameDataDay(GameDataDayDTO dto) {
 
@@ -71,18 +94,300 @@ public class GameDataServiceImpl implements IGameDataService {
         //设置查询总数
         pager.setRecordCount(list.size());
 
+        List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> {
+            //买量数据
+            String[] buyAmountD1 = vo.getBuyAmountD1().split("/");
+            vo.setBuyAmountD1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountD1[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountD1[1]))
+                    .increase(new BigDecimal(buyAmountD1[2]))
+                    .back(new BigDecimal(buyAmountD1[3]))
+                    .multiples(new BigDecimal(buyAmountD1[4]))
+                    .build());
+
+            String[] buyAmountD3 = vo.getBuyAmountD3().split("/");
+            vo.setBuyAmountD3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountD3[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountD3[1]))
+                    .increase(new BigDecimal(buyAmountD3[2]))
+                    .back(new BigDecimal(buyAmountD3[3]))
+                    .multiples(new BigDecimal(buyAmountD3[4]))
+                    .build());
+
+            String[] buyAmountD5 = vo.getBuyAmountD5().split("/");
+            vo.setBuyAmountD5Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountD5[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountD5[1]))
+                    .increase(new BigDecimal(buyAmountD5[2]))
+                    .back(new BigDecimal(buyAmountD5[3]))
+                    .multiples(new BigDecimal(buyAmountD5[4]))
+                    .build());
+
+            String[] buyAmountD7 = vo.getBuyAmountD7().split("/");
+            vo.setBuyAmountD7Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountD7[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountD7[1]))
+                    .increase(new BigDecimal(buyAmountD7[2]))
+                    .back(new BigDecimal(buyAmountD7[3]))
+                    .multiples(new BigDecimal(buyAmountD7[4]))
+                    .build());
+
+            String[] buyAmountD15 = vo.getBuyAmountD15().split("/");
+            vo.setBuyAmountD15Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountD15[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountD15[1]))
+                    .increase(new BigDecimal(buyAmountD15[2]))
+                    .back(new BigDecimal(buyAmountD15[3]))
+                    .multiples(new BigDecimal(buyAmountD15[4]))
+                    .build());
+
+            String[] buyAmountM1 = vo.getBuyAmountM1().split("/");
+            vo.setBuyAmountM1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountM1[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountM1[1]))
+                    .increase(new BigDecimal(buyAmountM1[2]))
+                    .back(new BigDecimal(buyAmountM1[3]))
+                    .multiples(new BigDecimal(buyAmountM1[4]))
+                    .build());
+
+            String[] buyAmountM2 = vo.getBuyAmountM2().split("/");
+            vo.setBuyAmountM2Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountM2[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountM2[1]))
+                    .increase(new BigDecimal(buyAmountM2[2]))
+                    .back(new BigDecimal(buyAmountM2[3]))
+                    .multiples(new BigDecimal(buyAmountM2[4]))
+                    .build());
+
+            String[] buyAmountM3 = vo.getBuyAmountM3().split("/");
+            vo.setBuyAmountM3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountM3[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountM3[1]))
+                    .increase(new BigDecimal(buyAmountM3[2]))
+                    .back(new BigDecimal(buyAmountM3[3]))
+                    .multiples(new BigDecimal(buyAmountM3[4]))
+                    .build());
+
+            String[] buyAmountM6 = vo.getBuyAmountM6().split("/");
+            vo.setBuyAmountM6Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountM6[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountM6[1]))
+                    .increase(new BigDecimal(buyAmountM6[2]))
+                    .back(new BigDecimal(buyAmountM6[3]))
+                    .multiples(new BigDecimal(buyAmountM6[4]))
+                    .build());
+
+            String[] buyAmountSum = vo.getBuyAmountSum().split("/");
+            vo.setBuyAmountSumTrend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(buyAmountSum[0]))
+                    .rechargeUserCount(Long.valueOf(buyAmountSum[1]))
+                    .increase(new BigDecimal(buyAmountSum[2]))
+                    .back(new BigDecimal(buyAmountSum[3]))
+                    .multiples(new BigDecimal(buyAmountSum[4]))
+                    .build());
+
+            //自然量数据
+            String[] natureAmountD1 = vo.getNatureAmountD1().split("/");
+            vo.setNatureAmountD1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountD1[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountD1[1]))
+                    .increase(new BigDecimal(natureAmountD1[2]))
+                    .back(new BigDecimal(natureAmountD1[3]))
+                    .multiples(new BigDecimal(natureAmountD1[4]))
+                    .build());
+
+            String[] natureAmountD3 = vo.getNatureAmountD3().split("/");
+            vo.setNatureAmountD3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountD3[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountD3[1]))
+                    .increase(new BigDecimal(natureAmountD3[2]))
+                    .back(new BigDecimal(natureAmountD3[3]))
+                    .multiples(new BigDecimal(natureAmountD3[4]))
+                    .build());
+
+            String[] natureAmountD5 = vo.getNatureAmountD5().split("/");
+            vo.setNatureAmountD5Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountD5[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountD5[1]))
+                    .increase(new BigDecimal(natureAmountD5[2]))
+                    .back(new BigDecimal(natureAmountD5[3]))
+                    .multiples(new BigDecimal(natureAmountD5[4]))
+                    .build());
+
+            String[] natureAmountD7 = vo.getNatureAmountD7().split("/");
+            vo.setNatureAmountD7Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountD7[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountD7[1]))
+                    .increase(new BigDecimal(natureAmountD7[2]))
+                    .back(new BigDecimal(natureAmountD7[3]))
+                    .multiples(new BigDecimal(natureAmountD7[4]))
+                    .build());
+
+            String[] natureAmountD15 = vo.getNatureAmountD15().split("/");
+            vo.setNatureAmountD15Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountD15[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountD15[1]))
+                    .increase(new BigDecimal(natureAmountD15[2]))
+                    .back(new BigDecimal(natureAmountD15[3]))
+                    .multiples(new BigDecimal(natureAmountD15[4]))
+                    .build());
+
+            String[] natureAmountM1 = vo.getNatureAmountM1().split("/");
+            vo.setNatureAmountM1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountM1[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountM1[1]))
+                    .increase(new BigDecimal(natureAmountM1[2]))
+                    .back(new BigDecimal(natureAmountM1[3]))
+                    .multiples(new BigDecimal(natureAmountM1[4]))
+                    .build());
+
+            String[] natureAmountM2 = vo.getNatureAmountM2().split("/");
+            vo.setNatureAmountM2Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountM2[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountM2[1]))
+                    .increase(new BigDecimal(natureAmountM2[2]))
+                    .back(new BigDecimal(natureAmountM2[3]))
+                    .multiples(new BigDecimal(natureAmountM2[4]))
+                    .build());
+
+            String[] natureAmountM3 = vo.getNatureAmountM3().split("/");
+            vo.setNatureAmountM3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountM3[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountM3[1]))
+                    .increase(new BigDecimal(natureAmountM3[2]))
+                    .back(new BigDecimal(natureAmountM3[3]))
+                    .multiples(new BigDecimal(natureAmountM3[4]))
+                    .build());
+
+            String[] natureAmountM6 = vo.getNatureAmountM6().split("/");
+            vo.setNatureAmountM6Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountM6[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountM6[1]))
+                    .increase(new BigDecimal(natureAmountM6[2]))
+                    .back(new BigDecimal(natureAmountM6[3]))
+                    .multiples(new BigDecimal(natureAmountM6[4]))
+                    .build());
+
+            String[] natureAmountSum = vo.getNatureAmountSum().split("/");
+            vo.setNatureAmountSumTrend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(natureAmountSum[0]))
+                    .rechargeUserCount(Long.valueOf(natureAmountSum[1]))
+                    .increase(new BigDecimal(natureAmountSum[2]))
+                    .back(new BigDecimal(natureAmountSum[3]))
+                    .multiples(new BigDecimal(natureAmountSum[4]))
+                    .build());
+
+            //总量数据
+            String[] amountD1 = vo.getAmountD1().split("/");
+            vo.setAmountD1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountD1[0]))
+                    .rechargeUserCount(Long.valueOf(amountD1[1]))
+                    .increase(new BigDecimal(amountD1[2]))
+                    .back(new BigDecimal(amountD1[3]))
+                    .multiples(new BigDecimal(amountD1[4]))
+                    .build());
+
+            String[] amountD3 = vo.getAmountD3().split("/");
+            vo.setAmountD3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountD3[0]))
+                    .rechargeUserCount(Long.valueOf(amountD3[1]))
+                    .increase(new BigDecimal(amountD3[2]))
+                    .back(new BigDecimal(amountD3[3]))
+                    .multiples(new BigDecimal(amountD3[4]))
+                    .build());
+
+            String[] amountD5 = vo.getAmountD5().split("/");
+            vo.setAmountD5Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountD5[0]))
+                    .rechargeUserCount(Long.valueOf(amountD5[1]))
+                    .increase(new BigDecimal(amountD5[2]))
+                    .back(new BigDecimal(amountD5[3]))
+                    .multiples(new BigDecimal(amountD5[4]))
+                    .build());
+
+            String[] amountD7 = vo.getAmountD7().split("/");
+            vo.setAmountD7Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountD7[0]))
+                    .rechargeUserCount(Long.valueOf(amountD7[1]))
+                    .increase(new BigDecimal(amountD7[2]))
+                    .back(new BigDecimal(amountD7[3]))
+                    .multiples(new BigDecimal(amountD7[4]))
+                    .build());
+
+            String[] amountD15 = vo.getAmountD15().split("/");
+            vo.setAmountD15Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountD15[0]))
+                    .rechargeUserCount(Long.valueOf(amountD15[1]))
+                    .increase(new BigDecimal(amountD15[2]))
+                    .back(new BigDecimal(amountD15[3]))
+                    .multiples(new BigDecimal(amountD15[4]))
+                    .build());
+
+            String[] amountM1 = vo.getAmountM1().split("/");
+            vo.setAmountM1Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountM1[0]))
+                    .rechargeUserCount(Long.valueOf(amountM1[1]))
+                    .increase(new BigDecimal(amountM1[2]))
+                    .back(new BigDecimal(amountM1[3]))
+                    .multiples(new BigDecimal(amountM1[4]))
+                    .build());
+
+            String[] amountM2 = vo.getAmountM2().split("/");
+            vo.setAmountM2Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountM2[0]))
+                    .rechargeUserCount(Long.valueOf(amountM2[1]))
+                    .increase(new BigDecimal(amountM2[2]))
+                    .back(new BigDecimal(amountM2[3]))
+                    .multiples(new BigDecimal(amountM2[4]))
+                    .build());
+
+            String[] amountM3 = vo.getAmountM3().split("/");
+            vo.setAmountM3Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountM3[0]))
+                    .rechargeUserCount(Long.valueOf(amountM3[1]))
+                    .increase(new BigDecimal(amountM3[2]))
+                    .back(new BigDecimal(amountM3[3]))
+                    .multiples(new BigDecimal(amountM3[4]))
+                    .build());
+
+            String[] amountM6 = vo.getAmountM6().split("/");
+            vo.setAmountM6Trend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountM6[0]))
+                    .rechargeUserCount(Long.valueOf(amountM6[1]))
+                    .increase(new BigDecimal(amountM6[2]))
+                    .back(new BigDecimal(amountM6[3]))
+                    .multiples(new BigDecimal(amountM6[4]))
+                    .build());
+
+            String[] amountSum = vo.getAmountSum().split("/");
+            vo.setAmountSumTrend(RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(amountSum[0]))
+                    .rechargeUserCount(Long.valueOf(amountSum[1]))
+                    .increase(new BigDecimal(amountSum[2]))
+                    .back(new BigDecimal(amountSum[3]))
+                    .multiples(new BigDecimal(amountSum[4]))
+                    .build());
+
+            return vo;
+        }).collect(Collectors.toList());
+
         //返回list结果 封装到page对象里
-        return new Page<>(list, pager);
+        return new Page<>(gameDataDayVOList, pager);
     }
 
+    /**
+     * 游戏总数据
+     * @param dto 前端传递的查询参数
+     * @return 返回给前端的数据
+     */
     @Override
     public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
-        //如果注册时间参数为空,默认设置为当天
+        //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getRegisteredBeginDate() == null || dto.getRechargeEndDate() == null) {
             dto.setRegisteredBeginDate(LocalDate.now());
             dto.setRegisteredEndDate(LocalDate.now());
         }
-        //如果充值时间参数为空,默认设置为注册时间
+        //如果充值时间参数为空,默认设置查询当天数据
         if (dto.getRechargeBeginDate() == null || dto.getRechargeEndDate() == null) {
             dto.setRechargeBeginDate(LocalDate.now());
             dto.setRechargeEndDate(LocalDate.now());
@@ -121,33 +426,135 @@ public class GameDataServiceImpl implements IGameDataService {
         //设置查询总数
         pager.setRecordCount(list.size());
 
-        /*//根据充值时间修改值
-        list.stream().map(new Function<GameDataTotalVO, Object>() {
-            //第一个参数 转换之前的参数
-            //第二个参数,转换之后的参数
-            //apply中的传入参数 就是流中的每一个数据
-            //返回值类型就是需要转换之后的类型
-            @Override
-            public Object apply(GameDataTotalVO gameDataTotalVO) {
+        //根据充值时间修改值
+        List<GameDataTotalVO> gameDataTotalVOList = list.stream().map(vo -> {
+            //设置查询参数map
+            Map<String, Object> dayNMap = new HashMap<>(4);
+            dayNMap.put("registerBeginDate", dto.getRegisteredBeginDate());
+            dayNMap.put("registerEndDate", dto.getRegisteredEndDate());
+            dayNMap.put("rechargeBeginDate", dto.getRechargeBeginDate());
+            dayNMap.put("rechargeEndDate", dto.getRechargeEndDate());
+            dayNMap.put("gameId", vo.getGameId());
 
-                //联表查询根据充值时间查询出相关参数
+            //买量表的充值相关数据
+            DayN buyDayN = getDayNByTableName(dayNMap, "ads_dayn_game_buy");
+            //自然量表的充值相关数据
+            DayN natureDayN = getDayNByTableName(dayNMap, "ads_dayn_game_nature");
+            //总量表的充值相关数据
+            DayN dayN = getDayNByTableName(dayNMap, "ads_dayn_game");
 
+            //设置买量数据
+            //新用户充值次数、金额、人数
+            vo.setBuyNewUserAmount(buyDayN == null ? BigDecimal.ZERO : buyDayN.getRechargeMoney());
+            vo.setBuyNewUserAmountNum(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeNum());
+            vo.setBuyNewUserAmountCount(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeCount());
+            //新用户复充人数
+            vo.setBuyNewUserAgainNum(buyDayN == null ? BigInteger.ZERO : buyDayN.getRechargeAgainNum());
 
-                //设置新用户相关数据
+            //老用户充值次数、人数、金额
+            vo.setBuyOldUserAmount(vo.getBuyAmount().subtract(vo.getBuyNewUserAmount()));
+            vo.setBuyOldUserCount(vo.getBuyAmountCount().subtract(vo.getBuyNewUserAmountCount()));
+            vo.setBuyOldUserNum(vo.getBuyAmountNum().subtract(vo.getBuyNewUserAmountNum()));
 
+            //新用户付费比
+            vo.setBuyNewUserRate(vo.getBuyAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户付费率
+            vo.setBuyNewUserRoi(vo.getBuyRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAmountNum().doubleValue() / vo.getBuyRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
 
-                //联表查询新用户复充人数
+            //新用户客单价
+            vo.setBuyNewUserAvgAmount(vo.getBuyNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
 
+            //复充率
+            vo.setBuyUserAgainRate(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户复充率
+            vo.setBuyNewUserAgainRate(vo.getBuyNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAgainNum().doubleValue() / vo.getBuyNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
 
-                return null;
-            }
-        });*/
+            //新用户付费ARPU
+            vo.setBuyNewUserAmountArpu(vo.getBuyNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getBuyNewUserAmount().doubleValue() / vo.getBuyNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //设置自然量数据
+            //新用户充值次数、金额、人数
+            vo.setNatureNewUserAmount(natureDayN == null ? BigDecimal.ZERO : natureDayN.getRechargeMoney());
+            vo.setNatureNewUserAmountNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeNum());
+            vo.setNatureNewUserAmountCount(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeCount());
+            //新用户复充人数
+            vo.setNatureNewUserAgainNum(natureDayN == null ? BigInteger.ZERO : natureDayN.getRechargeAgainNum());
+
+            //老用户充值次数、人数、金额
+            vo.setNatureOldUserAmount(vo.getNatureAmount().subtract(vo.getNatureNewUserAmount()));
+            vo.setNatureOldUserCount(vo.getNatureAmountCount().subtract(vo.getNatureNewUserAmountCount()));
+            vo.setNatureOldUserNum(vo.getNatureAmountNum().subtract(vo.getNatureNewUserAmountNum()));
+
+            //新用户付费比
+            vo.setNatureNewUserRate(vo.getNatureAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户付费率
+            vo.setNatureNewUserRoi(vo.getNatureRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAmountNum().doubleValue() / vo.getNatureRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //新用户客单价
+            vo.setNatureNewUserAvgAmount(vo.getNatureNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //复充率
+            vo.setNatureUserAgainRate(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户复充率
+            vo.setNatureNewUserAgainRate(vo.getNatureNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAgainNum().doubleValue() / vo.getNatureNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //新用户付费ARPU
+            vo.setNatureNewUserAmountArpu(vo.getNatureNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNatureNewUserAmount().doubleValue() / vo.getNatureNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //设置总量数据
+            //新用户充值次数、金额、人数
+            vo.setNewUserAmount(dayN == null ? BigDecimal.ZERO : dayN.getRechargeMoney());
+            vo.setNewUserAmountNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeNum());
+            vo.setNewUserAmountCount(dayN == null ? BigInteger.ZERO : dayN.getRechargeCount());
+            //新用户复充人数
+            vo.setNewUserAgainNum(dayN == null ? BigInteger.ZERO : dayN.getRechargeAgainNum());
+
+            //老用户充值次数、人数、金额
+            vo.setOldUserAmount(vo.getAmount().subtract(vo.getNewUserAmount()));
+            vo.setOldUserCount(vo.getAmountCount().subtract(vo.getNewUserAmountCount()));
+            vo.setOldUserNum(vo.getAmountNum().subtract(vo.getNewUserAmountNum()));
+
+            //新用户付费比
+            vo.setNewUserRate(vo.getAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户付费率
+            vo.setNewUserRoi(vo.getRegNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAmountNum().doubleValue() / vo.getRegNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //新用户客单价
+            vo.setNewUserAvgAmount(vo.getNewUserAmountCount().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountCount().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //复充率
+            vo.setUserAgainRate(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+            //新用户复充率
+            vo.setNewUserAgainRate(vo.getNewUserTotalAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAgainNum().doubleValue() / vo.getNewUserTotalAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            //新用户付费ARPU
+            vo.setNewUserAmountArpu(vo.getNewUserAmountNum().compareTo(BigInteger.ZERO) == 0 ? BigDecimal.ZERO :
+                    BigDecimal.valueOf(vo.getNewUserAmount().doubleValue() / vo.getNewUserAmountNum().doubleValue()).setScale(4, RoundingMode.HALF_UP));
+
+            return vo;
+        }).collect(Collectors.toList());
 
         //返回list结果封装到page对象里
-        return new Page<>(list, pager);
+        return new Page<>(gameDataTotalVOList, pager);
     }
 
-
     /**
      * 游戏每日数据SQL
      *
@@ -156,122 +563,123 @@ public class GameDataServiceImpl implements IGameDataService {
     private String gameDataDaySql() {
         return """
                 SELECT
-                dt cost_date,
-                game_name,
-                game_classify,
-                
-                buy_reg_num,
-                nature_reg_num,
-                reg_num,
-                    
-                buy_first_new_user_amount_count,
-                buy_first_new_user_amount_num,
-                buy_first_new_user_amount,
-                buy_old_user_count,
-                buy_old_user_num,
-                buy_old_user_amount,
-                buy_amount_count,
-                buy_amount_num,
-                buy_amount,
-                buy_new_user_total_amount_count,
-                buy_new_user_total_amount_num,
-                buy_new_user_total_amount,
-                buy_first_roi,
-                buy_today_roi,
-                buy_new_user_rate,
-                buy_first_avg_amount,
-                buy_today_avg_amount,
-                buy_avg_amount,
-                buy_user_again_rate,
-                buy_reg_user_arpu,
-                buy_first_amount_arpu,
-                buy_today_amount_arpu,
-                buy_amount_arpu,
-                buy_amount_d1,
-                buy_amount_d3,
-                buy_amount_d5,
-                buy_amount_d7,
-                buy_amount_d15,
-                buy_amount_m1,
-                buy_amount_m2,
-                buy_amount_m3,
-                buy_amount_m6,
-                buy_amount_sum,
-                    
-                nature_first_new_user_amount_count,
-                nature_first_new_user_amount_num,
-                nature_first_new_user_amount,
-                nature_old_user_count,
-                nature_old_user_num,
-                nature_old_user_amount,
-                nature_amount_count,
-                nature_amount_num,
-                nature_amount,
-                nature_new_user_total_amount_count,
-                nature_new_user_total_amount_num,
-                nature_new_user_total_amount,
-                nature_first_roi,
-                nature_today_roi,
-                nature_new_user_rate,
-                nature_first_avg_amount,
-                nature_today_avg_amount,
-                nature_avg_amount,
-                nature_user_again_rate,
-                nature_reg_user_arpu,
-                nature_first_amount_arpu,
-                nature_today_amount_arpu,
-                nature_amount_arpu,
-                nature_amount_d1,
-                nature_amount_d3,
-                nature_amount_d5,
-                nature_amount_d7,
-                nature_amount_d15,
-                nature_amount_m1,
-                nature_amount_m2,
-                nature_amount_m3,
-                nature_amount_m6,
-                nature_amount_sum,
+                    dt cost_date,
+                    game_name,
+                    game_classify,
+                                    
+                    buy_reg_num,
+                    nature_reg_num,
+                    reg_num,
+                        
+                    buy_first_new_user_amount_count,
+                    buy_first_new_user_amount_num,
+                    buy_first_new_user_amount,
+                    buy_old_user_count,
+                    buy_old_user_num,
+                    buy_old_user_amount,
+                    buy_amount_count,
+                    buy_amount_num,
+                    buy_amount,
+                    buy_new_user_total_amount_count,
+                    buy_new_user_total_amount_num,
+                    buy_new_user_total_amount,
+                    buy_first_roi,
+                    buy_today_roi,
+                    buy_new_user_rate,
+                    buy_first_avg_amount,
+                    buy_today_avg_amount,
+                    buy_avg_amount,
+                    buy_user_again_rate,
+                    buy_reg_user_arpu,
+                    buy_first_amount_arpu,
+                    buy_today_amount_arpu,
+                    buy_amount_arpu,
+                    buy_amount_d1,
+                    buy_amount_d3,
+                    buy_amount_d5,
+                    buy_amount_d7,
+                    buy_amount_d15,
+                    buy_amount_m1,
+                    buy_amount_m2,
+                    buy_amount_m3,
+                    buy_amount_m6,
+                    buy_amount_sum,
+                        
+                    nature_first_new_user_amount_count,
+                    nature_first_new_user_amount_num,
+                    nature_first_new_user_amount,
+                    nature_old_user_count,
+                    nature_old_user_num,
+                    nature_old_user_amount,
+                    nature_amount_count,
+                    nature_amount_num,
+                    nature_amount,
+                    nature_new_user_total_amount_count,
+                    nature_new_user_total_amount_num,
+                    nature_new_user_total_amount,
+                    nature_first_roi,
+                    nature_today_roi,
+                    nature_new_user_rate,
+                    nature_first_avg_amount,
+                    nature_today_avg_amount,
+                    nature_avg_amount,
+                    nature_user_again_rate,
+                    nature_reg_user_arpu,
+                    nature_first_amount_arpu,
+                    nature_today_amount_arpu,
+                    nature_amount_arpu,
+                    nature_amount_d1,
+                    nature_amount_d3,
+                    nature_amount_d5,
+                    nature_amount_d7,
+                    nature_amount_d15,
+                    nature_amount_m1,
+                    nature_amount_m2,
+                    nature_amount_m3,
+                    nature_amount_m6,
+                    nature_amount_sum,
+                        
+                    first_new_user_amount_count,
+                    first_new_user_amount_num,
+                    first_new_user_amount,
+                    old_user_count,
+                    old_user_num,
+                    old_user_amount,
+                    amount_count,
+                    amount_num,
+                    amount,
+                    new_user_total_amount_count,
+                    new_user_total_amount_num,
+                    new_user_total_amount,
+                    first_roi,
+                    today_roi,
+                    new_user_rate,
+                    first_avg_amount,
+                    today_avg_amount,
+                    avg_amount,
+                    user_again_rate,
+                    reg_user_arpu,
+                    first_amount_arpu,
+                    today_amount_arpu,
+                    amount_arpu,
+                    amount_d1,
+                    amount_d3,
+                    amount_d5,
+                    amount_d7,
+                    amount_d15,
+                    amount_m1,
+                    amount_m2,
+                    amount_m3,
+                    amount_m6,
+                    amount_sum
                     
-                first_new_user_amount_count,
-                first_new_user_amount_num,
-                first_new_user_amount,
-                old_user_count,
-                old_user_num,
-                old_user_amount,
-                amount_count,
-                amount_num,
-                amount,
-                new_user_total_amount_count,
-                new_user_total_amount_num,
-                new_user_total_amount,
-                first_roi,
-                today_roi,
-                new_user_rate,
-                first_avg_amount,
-                today_avg_amount,
-                avg_amount,
-                user_again_rate,
-                reg_user_arpu,
-                first_amount_arpu,
-                today_amount_arpu,
-                amount_arpu,
-                amount_d1,
-                amount_d3,
-                amount_d5,
-                amount_d7,
-                amount_d15,
-                amount_m1,
-                amount_m2,
-                amount_m3,
-                amount_m6,
-                amount_sum
-                    
-                FROM ads_game_day
+                FROM
+                    ads_game_day
                 """;
     }
 
     /**
-     * 游戏总数SQL
+     * 游戏总数据SQL
      *
      * @return String
      */
@@ -361,5 +769,229 @@ public class GameDataServiceImpl implements IGameDataService {
                 """;
     }
 
+    /** 三张表共用的方法
+     * @param dayNMap 参数Map
+     * @param tableName 查询的表名
+     * @return DayN数据
+     */
+    private DayN getDayNByTableName(Map<String, Object> dayNMap, String tableName) {
+
+        //构架SQL语句,查询相关DayN表获取相关充值数据
+        Sql dayNSql = Sqls.create(
+                """
+                   SELECT
+                        dayN
+                   FROM
+                        $tableName
+                   where
+                        dt between @registerBeginDate and @registerEndDate
+                        and game_id = @gameId
+                """
+        );
+        //sql语句传入参数
+        dayNSql.setParams(dayNMap);
+        //给定查询的表名
+        dayNSql.vars().set("tableName", tableName);
+        //设置回传
+        dayNSql.setCallback(Sqls.callback.strList());
+        //执行sql 获取数据到list中
+        dao.execute(dayNSql);
+
+        //将数据库中获取的所有结果封装到一个List中
+        List<String> dayNList = dayNSql.getList(String.class);
+        //构建一个内部类
+        DayN dayN = null;
+        //解析dayNList
+        if (!CollectionUtils.isEmpty(dayNList)) {
+            //将dayNList中json格式数据转换为 Map
+            Gson gson = new Gson();
+            List<Map<String, String>> jsonList = gson.fromJson(dayNList.toString(), ArrayList.class);
+            //用来存储数据的map
+            Map<String, String> resMap = new HashMap<>();
+            //对应的参数说明:  日期:每天充值金额-充值次数-充值人数-新用户复充人数
+            resMap.put("dayN", "0.00-0-0-0");
+            for (Map<String, String> jsonMap : jsonList) {
+                for (Map.Entry<String, String> entry : jsonMap.entrySet()) {
+                    //key是充值日期
+                    String key = entry.getKey();
+                    String value = entry.getValue();
+                    //将value按“-”分割
+                    String[] resValues = value.split("-");
+                    //判断充值日期 在充值日期内的数据进行计算
+                    if (DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeBeginDate")) >= 0
+                            && DateUtil.parseLocalDate(key).compareTo((LocalDate) dayNMap.get("rechargeEndDate")) <= 0) {
+                        //获取原先的dayN的值
+                        String[] oldValues = resMap.get("dayN").split("-");
+                        //充值的金额
+                        BigDecimal chargeMoney = new BigDecimal(oldValues[0]).add(new BigDecimal(resValues[0]));
+                        //充值的次数
+                        BigInteger count = new BigInteger(oldValues[1]).add(new BigInteger(resValues[1]));
+                        //充值的人数
+                        BigInteger num = new BigInteger(oldValues[2]).add(new BigInteger(resValues[2]));
+                        //新用户复充人数
+                        BigInteger againNum = new BigInteger(oldValues[3]).add(new BigInteger(resValues[3]));
+                        //合并成字符串 更新dayN的值
+                        String newValue = chargeMoney + "-" + count + "-" + num + "-" + againNum;
+                        resMap.put("dayN", newValue);
+                    }
+                }
+            }
+            //设置dayN的参数
+            if (!resMap.isEmpty() && !resMap.get("dayN").isEmpty()) {
+                String[] values = resMap.get("dayN").split("-");
+                dayN = DayN.builder()
+                        .rechargeMoney(new BigDecimal(values[0]))
+                        .rechargeCount(new BigInteger(values[1]))
+                        .rechargeNum(new BigInteger(values[2]))
+                        .rechargeAgainNum(new BigInteger(values[3]))
+                        .build();
+            }
+        }
+        return dayN;
+    }
+
+    /**
+     * DayN内部类
+     */
+    @Data
+    @Builder
+    public static class DayN {
+        /**
+         * 充值金额
+         */
+        private BigDecimal rechargeMoney;
+
+        /**
+         * 充值次数
+         */
+        private BigInteger rechargeCount;
+
+        /**
+         * 充值人数
+         */
+        private BigInteger rechargeNum;
+
+        /**
+         * 新用户复充人数
+         */
+        private BigInteger rechargeAgainNum;
+    }
+
+    @Override
+    public Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto) {
+        if (null == dto.getRechargeDate()) {
+            dto.setRechargeDate(LocalDate.now());
+        }
+        if (StringUtils.isBlank(dto.getSortFiled())) {
+            dto.setSortFiled("amount");
+        }
+        if (StringUtils.isBlank(dto.getSortType())) {
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
+        }
+        Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
+        // 创建一个 Criteria 接口实例
+        SimpleCriteria cri = Cnd.cri();
+        if (StringUtils.isNotBlank(dto.getGameName())) {
+            cri.where().andLike("game_name", dto.getGameName());
+        }
+        if (StringUtils.isNotBlank(dto.getGameClassify())) {
+            cri.where().andEquals("game_classify", dto.getGameClassify());
+        }
+        cri.where().and("dt", "=", dto.getRechargeDate());
+        cri.groupBy("game_id");
+        cri.orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
+        Sql sql = Sqls.queryEntity(waterSql() + "$condition");
+        sql.setPager(pager);
+        Entity<GameDataWaterVO> entity = dao.getEntity(GameDataWaterVO.class);
+        sql.setEntity(entity).setCondition(cri);
+        dao.execute(sql);
+
+        Sql sqlCount = Sqls.queryEntity("select count(*) from ads_everyday_water " + "$condition");
+        sqlCount.setCondition(cri);
+        pager.setRecordCount((int) Daos.queryCount(dao, sqlCount));
+
+        List<Long> gameIds = sql.getList(GameDataWaterVO.class).stream()
+                .map(GameDataWaterVO::getGameId)
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(gameIds)) {
+            return new Page<>();
+        }
+
+        SimpleCriteria templateCri = Cnd.cri();
+        templateCri.where().and("dt", "=", dto.getRechargeDate());
+        templateCri.where().andInList("game_id", gameIds);
+        Sql templateSql = Sqls.queryEntity(waterTemplateSql() + "$condition");
+        Entity<AdsEverydayWater> everydayWaterEntity = dao.getEntity(AdsEverydayWater.class);
+        templateSql.setEntity(everydayWaterEntity).setCondition(templateCri);
+        dao.execute(templateSql);
+
+        Map<Long, List<AdsEverydayWater>> collect = templateSql.getList(AdsEverydayWater.class).stream().collect(Collectors.groupingBy(AdsEverydayWater::getGameId));
+        List<GameDataWaterVO> result = sql.getList(GameDataWaterVO.class).stream()
+                .map(item -> {
+                    List<AdsEverydayWater> adsEverydayWaters = collect.get(item.getGameId());
+                    if (!CollectionUtils.isEmpty(adsEverydayWaters)) {
+                        List<RechargeTemplateVO> rechargeTemplateVOList = new ArrayList<>(10);
+
+                        List<PlayerTemplateVO> playerTemplateVOS = new ArrayList<>(10);
+                        adsEverydayWaters.forEach(adsEverydayWater -> {
+                            if (StringUtils.isNotBlank(adsEverydayWater.getAmountOrderBy())) {
+                                rechargeTemplateVOList.add(RechargeTemplateVO.builder()
+                                        .amountCount(adsEverydayWater.getAmountCount())
+                                        .amountNum(adsEverydayWater.getAmountNum())
+                                        .amountOrderBy(adsEverydayWater.getAmountOrderBy())
+                                        .amountPost(adsEverydayWater.getAmountPost())
+                                        .build());
+                            }
+                            if (StringUtils.isNotBlank(adsEverydayWater.getUserOrderBy())) {
+                                playerTemplateVOS.add(PlayerTemplateVO.builder()
+                                        .userId(adsEverydayWater.getUserId())
+                                        .userAmount(adsEverydayWater.getUserAmount())
+                                        .userOrderBy(adsEverydayWater.getUserOrderBy())
+                                        .userName(adsEverydayWater.getUserName())
+                                        .proportion(
+                                                item.getAmount().compareTo(BigDecimal.ZERO) == 0 ?
+                                                        BigDecimal.ZERO :
+                                                        adsEverydayWater.getUserAmount().divide(item.getAmount(), 4, RoundingMode.DOWN)
+                                        )
+                                        .build());
+                            }
+                        });
+                        item.setRechargeTemplateVOList(rechargeTemplateVOList);
+                        item.setPlayerTemplateVOS(playerTemplateVOS);
+                    }
+                    return item;
+                }).collect(Collectors.toList());
+
+        return new Page<>(result, pager);
+    }
+
+    private String waterSql() {
+        return """
+                select
+                game_id as id,
+                game_id,
+                max(game_name) as game_name,
+                max(game_classify) as game_classify,
+                max(amount) as amount,
+                max(buy_amount) as buy_amount,
+                max(nature_amount) as nature_amount
+                from ads_everyday_water
+                """;
+    }
 
+    private String waterTemplateSql() {
+        return """
+                select
+                game_id,
+                user_order_by,
+                user_id,
+                user_name,
+                user_amount,
+                amount_order_by,
+                amount_post,
+                amount_count,
+                amount_num
+                from ads_everyday_water
+                """;
+    }
 }

+ 3 - 5
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RankingServiceImpl.java

@@ -2,6 +2,7 @@ package com.zanxiang.game.data.serve.service.impl;
 
 import com.google.common.base.CaseFormat;
 import com.zanxiang.game.data.serve.pojo.dto.RechargeRankingDTO;
+import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 import com.zanxiang.game.data.serve.pojo.vo.GameRechargeRankingVO;
 import com.zanxiang.game.data.serve.pojo.vo.PlayerRechargeRankingVO;
 import com.zanxiang.game.data.serve.service.IRankingService;
@@ -25,16 +26,13 @@ public class RankingServiceImpl implements IRankingService {
     @Autowired
     private Dao dao;
 
-    private static final String ASC = "asc";
-    private static final String DESC = "desc";
-
     @Override
     public Page<GameRechargeRankingVO> gameRanking(RechargeRankingDTO dto) {
         if (StringUtils.isBlank(dto.getSortFiled())){
             dto.setSortFiled("totalAmount");
         }
         if (StringUtils.isBlank(dto.getSortType())){
-            dto.setSortType(DESC);
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
         }
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
         // 创建一个 Criteria 接口实例
@@ -85,7 +83,7 @@ public class RankingServiceImpl implements IRankingService {
             dto.setSortFiled("totalAmount");
         }
         if (StringUtils.isBlank(dto.getSortType())){
-            dto.setSortType(DESC);
+            dto.setSortType(OrderByEnum.DESC.getOrderType());
         }
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
         // 创建一个 Criteria 接口实例

+ 4 - 3
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/enums/AccountTypeEnum.java → game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/AccountTypeEnum.java

@@ -1,11 +1,12 @@
-package com.zanxiang.game.module.manage.pojo.enums;
+package com.zanxiang.game.module.base.pojo.enums;
 
 import lombok.Getter;
 
 @Getter
 public enum AccountTypeEnum {
-    TENCENT(1),
-    BYTE(2);
+    TENCENT_H5(1),
+    BYTE(2),
+    TENCENT_MINI_GAME(3);
 
     private final Integer value;
 

+ 34 - 4
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/enums/PayWayEnum.java

@@ -52,15 +52,45 @@ public enum PayWayEnum {
      * @param payWayId : 支付类型
      * @return : 支付类型枚举
      */
-    public static String getByPayWayId(Long payWayId) {
+    public static String getNameByPayWayId(Long payWayId) {
         if (payWayId == null) {
             return Strings.EMPTY;
         }
+        PayWayEnum payWayEnum = PayWayEnum.getByPayWayId(payWayId.intValue());
+        //获取支付名称
+        return payWayEnum == null ? Strings.EMPTY : payWayEnum.getPayWayName();
+    }
+
+    /**
+     * 根据支付类型id获取名称
+     *
+     * @param payWayId : 支付类型
+     * @return : 支付类型枚举
+     */
+    public static String getKeyByPayWayId(Integer payWayId) {
+        if (payWayId == null) {
+            return Strings.EMPTY;
+        }
+        PayWayEnum payWayEnum = PayWayEnum.getByPayWayId(payWayId);
+        //获取支付名称
+        return payWayEnum == null ? Strings.EMPTY : payWayEnum.getPayWayKey();
+    }
+
+    /**
+     * 根据支付类型id获取名称
+     *
+     * @param payWayId : 支付类型
+     * @return : 支付类型枚举
+     */
+    public static PayWayEnum getByPayWayId(Integer payWayId) {
+        if (payWayId == null) {
+            return null;
+        }
         for (PayWayEnum payWayEnum : PayWayEnum.values()) {
-            if (Objects.equals(payWayId.intValue(), payWayEnum.getPayWayId())) {
-                return payWayEnum.getPayWayName();
+            if (Objects.equals(payWayId, payWayEnum.getPayWayId())) {
+                return payWayEnum;
             }
         }
-        return Strings.EMPTY;
+        return null;
     }
 }

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java

@@ -21,7 +21,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功001 ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 2 - 2
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/AgentController.java

@@ -2,7 +2,7 @@ package com.zanxiang.game.module.manage.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.zanxiang.erp.security.annotation.PreAuthorize;
-import com.zanxiang.game.module.manage.pojo.enums.AccountTypeEnum;
+import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.manage.pojo.params.AgentAddParam;
 import com.zanxiang.game.module.manage.pojo.params.AgentListParam;
 import com.zanxiang.game.module.manage.pojo.vo.AgentVO;
@@ -40,7 +40,7 @@ public class AgentController {
         if (accountType == null) {
             throw new BaseException("错误的账号类型:" + dto.getAccountType());
         }
-        if (accountType == AccountTypeEnum.TENCENT) {
+        if (accountType == AccountTypeEnum.TENCENT_H5) {
             if (dto.getUserActionSetId() == null) {
                 throw new BaseException("腾讯广告账号必须选回传的数据源");
             }

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/AgentAddParam.java

@@ -24,7 +24,7 @@ public class AgentAddParam {
     /**
      * 推广账号类型(1:腾讯、2:头条)
      */
-    @ApiModelProperty(notes = "推广账号类型(1:腾讯、2:头条)")
+    @ApiModelProperty(notes = "推广账号类型(1:腾讯H5、2:头条、3:腾讯小游戏)")
     @NotNull(message = "渠道类型不能为空")
     private Integer accountType;
 

+ 4 - 3
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

@@ -16,7 +16,7 @@ import com.zanxiang.game.back.base.ServerInfo;
 import com.zanxiang.game.back.base.pojo.vo.GameBackPolicyRpcVO;
 import com.zanxiang.game.back.base.rpc.IGameBackPolicyRpc;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
-import com.zanxiang.game.module.manage.pojo.enums.AccountTypeEnum;
+import com.zanxiang.game.module.base.pojo.enums.AccountTypeEnum;
 import com.zanxiang.game.module.manage.pojo.params.AgentAddParam;
 import com.zanxiang.game.module.manage.pojo.params.AgentListParam;
 import com.zanxiang.game.module.manage.pojo.vo.AgentAccountChoiceVO;
@@ -143,7 +143,8 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
         Set<Long> backPolicyIds = new HashSet<>();
         agentList.forEach(agent -> {
             gameIds.add(agent.getGameId());
-            if (AccountTypeEnum.TENCENT.getValue().equals(agent.getAccountType())) {
+            if (AccountTypeEnum.TENCENT_H5.getValue().equals(agent.getAccountType())
+                    || AccountTypeEnum.TENCENT_MINI_GAME.getValue().equals(agent.getAccountType())) {
                 txAccountIds.add(agent.getAccountId());
             }
             userIds.add(agent.getCreateBy());
@@ -170,7 +171,7 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
         return agentList.stream().map(agent -> {
             AgentVO vo = BeanUtil.copy(agent, AgentVO.class);
             vo.setGameInfo(gameMap.get(agent.getGameId()));
-            if (AccountTypeEnum.TENCENT.getValue().equals(agent.getAccountType())) {
+            if (AccountTypeEnum.TENCENT_H5.getValue().equals(agent.getAccountType())) {
                 vo.setUserActionSet(userActionSetMap.get(agent.getAccountId() + "_" + agent.getUserActionSetId()));
             }
             vo.setCreateByName(userMap.get(agent.getCreateBy()));

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GamePayWayServiceImpl.java

@@ -70,7 +70,7 @@ public class GamePayWayServiceImpl extends ServiceImpl<GamePayWayMapper, GamePay
                 .gameId(param.getGameId())
                 .payWayId(param.getPayWayId())
                 .payDeviceId(param.getPayDeviceId())
-                .payName(PayWayEnum.getByPayWayId(param.getPayWayId()) + PayDeviceEnum.getByPayWayId(param.getPayDeviceId()))
+                .payName(PayWayEnum.getNameByPayWayId(param.getPayWayId()) + PayDeviceEnum.getByPayWayId(param.getPayDeviceId()))
                 .remark(param.getRemark())
                 .status(StatusEnum.YES.getCode())
                 .isDelete(DeleteEnum.NO.getCode())

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java

@@ -188,7 +188,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             orderVO.setGameCategoryName(gameCategoryEnum == null ? null : gameCategoryEnum.getName());
         }
         //支付渠道, 场景
-        orderVO.setPayWayName(PayWayEnum.getByPayWayId(orderVO.getPayWayId()));
+        orderVO.setPayWayName(PayWayEnum.getNameByPayWayId(orderVO.getPayWayId()));
         orderVO.setPayDeviceName(PayDeviceEnum.getByPayWayId(orderVO.getPayDeviceId()));
     }
 

+ 1 - 1
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/PayMerchantServiceImpl.java

@@ -170,7 +170,7 @@ public class PayMerchantServiceImpl extends ServiceImpl<PayMerchantMapper, PayMe
             }
         }
         //支付渠道
-        payMerchantListVO.setPayWayName(PayWayEnum.getByPayWayId(payMerchantListVO.getPayWayId()));
+        payMerchantListVO.setPayWayName(PayWayEnum.getNameByPayWayId(payMerchantListVO.getPayWayId()));
         //支付方式
         String payDeviceIds = payMerchant.getPayDeviceIds();
         if (Strings.isBlank(payDeviceIds)) {

+ 76 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameRemitLog.java

@@ -0,0 +1,76 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : 游戏提现记录
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@ToString
+@Builder
+@TableName("t_game_remit_log")
+public class GameRemitLog implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 游戏id
+     */
+    private Long gameId;
+
+    /**
+     * 交易订单号
+     */
+    private String merchantOrderNo;
+
+    /**
+     * 金额(单位 : 分)
+     */
+    private Long amount;
+
+    /**
+     * 提现平台
+     */
+    private String payPlatform;
+
+    /**
+     * 提现账号
+     */
+    private String payAccount;
+
+    /**
+     * 提现时间
+     */
+    private LocalDateTime createdTime;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 12 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameRemitLogMapper.java

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameRemitLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : ${description}
+ */
+public interface GameRemitLogMapper extends BaseMapper<GameRemitLog> {
+}

+ 1 - 1
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java

@@ -23,7 +23,7 @@ public class SDKApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(SDKApplication.class, args);
-        System.out.println("赞象SDK服务启动成功 003 ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <dubbo升级3.0> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 36 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/controller/RemitController.java

@@ -0,0 +1,36 @@
+package com.zanxiang.game.module.sdk.controller;
+
+import com.zanxiang.game.module.sdk.pojo.param.GameRemitLogParam;
+import com.zanxiang.game.module.sdk.service.IGameRemitLogService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : 提现
+ */
+@Api(tags = "注册登录接口")
+@RestController
+@RequestMapping(value = "/api/remit")
+public class RemitController {
+
+    @Autowired
+    private IGameRemitLogService gameRemitLogService;
+
+    @ApiOperation(value = "游戏提现记录日志推送")
+    @PostMapping("/log/push")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody GameRemitLogParam param) {
+        return ResultVO.ok(gameRemitLogService.addOrUpdate(param));
+    }
+}

+ 63 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/pojo/param/GameRemitLogParam.java

@@ -0,0 +1,63 @@
+package com.zanxiang.game.module.sdk.pojo.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : 游戏提现参数
+ */
+@Data
+public class GameRemitLogParam {
+
+    /**
+     * 用户id
+     */
+    @NotNull(message = "用户id不可为空")
+    private Long userId;
+
+    /**
+     * 游戏id
+     */
+    @NotBlank(message = "游戏应用id不可为空")
+    private String appId;
+
+    /**
+     * 交易订单号
+     */
+    @NotBlank(message = "交易订单号不可为空")
+    private String merchantOrderNo;
+
+    /**
+     * 金额(单位 : 分)
+     */
+    @NotNull(message = "金额不可为空")
+    private Long amount;
+
+    /**
+     * 提现平台,  1 : 支付宝, 2 : 微信
+     */
+    @NotNull(message = "提现平台不可为空")
+    private Integer payPlatform;
+
+    /**
+     * 提现账号
+     */
+    @NotBlank(message = "提现账号不可为空")
+    private String payAccount;
+
+    /**
+     * 提现时间
+     */
+    @NotNull(message = "提现时间不可为空")
+    private Long createdTime;
+
+    /**
+     * 加密标识
+     */
+    @NotBlank(message = "加密标识不可为空")
+    private String sign;
+}

+ 21 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/IGameRemitLogService.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.sdk.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.GameRemitLog;
+import com.zanxiang.game.module.sdk.pojo.param.GameRemitLogParam;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : 游戏提现记录
+ */
+public interface IGameRemitLogService extends IService<GameRemitLog> {
+
+    /**
+     * 添加或更新
+     *
+     * @param param 参数
+     * @return boolean
+     */
+    boolean addOrUpdate(GameRemitLogParam param);
+}

+ 88 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/GameRemitLogServiceImpl.java

@@ -0,0 +1,88 @@
+package com.zanxiang.game.module.sdk.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.base.pojo.enums.PayWayEnum;
+import com.zanxiang.game.module.mybatis.entity.GameExt;
+import com.zanxiang.game.module.mybatis.entity.GameRemitLog;
+import com.zanxiang.game.module.mybatis.mapper.GameRemitLogMapper;
+import com.zanxiang.game.module.sdk.pojo.param.GameRemitLogParam;
+import com.zanxiang.game.module.sdk.service.IGameExtService;
+import com.zanxiang.game.module.sdk.service.IGameRemitLogService;
+import com.zanxiang.game.module.sdk.util.SignUtil;
+import com.zanxiang.module.util.DateUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-17
+ * @description : 游戏提现记录
+ */
+@Slf4j
+@Service
+public class GameRemitLogServiceImpl extends ServiceImpl<GameRemitLogMapper, GameRemitLog> implements IGameRemitLogService {
+
+    @Autowired
+    private IGameExtService gameExtService;
+
+    @Override
+    public boolean addOrUpdate(GameRemitLogParam param) {
+        GameExt gameExt = gameExtService.getByGameAppId(param.getAppId());
+        StringBuilder sb = new StringBuilder();
+        sb.append("payKey=").append(gameExt.getPayKey());
+        sb.append("&appId=").append(param.getAppId());
+        sb.append("&userId=").append(param.getUserId());
+        sb.append("&merchantOrderNo=").append(param.getMerchantOrderNo());
+        sb.append("&createdTime=").append(param.getCreatedTime());
+
+        log.error("加密签名字符串, str : {}", sb.toString());
+
+        String mySign;
+        try {
+            mySign = SignUtil.MD5(sb.toString());
+        } catch (Exception e) {
+            log.error("md5工具类加密异常, str : {}, e : {}", sb.toString(), e.getMessage());
+            throw new BaseException("MD5加密异常");
+        }
+        //签名错误
+        if (!Objects.equals(mySign, param.getSign())) {
+            log.error("游戏提现签名验证失败, mySign : {}, sign : {}", mySign, param.getSign());
+            throw new BaseException("签名验证失败");
+        }
+        GameRemitLog gameRemitLog = super.getOne(new LambdaQueryWrapper<GameRemitLog>()
+                .eq(GameRemitLog::getMerchantOrderNo, param.getMerchantOrderNo()));
+        if (gameRemitLog == null) {
+            gameRemitLog = this.transform(param, gameExt.getGameId());
+        } else {
+            gameRemitLog.setUserId(param.getUserId());
+            gameRemitLog.setGameId(gameExt.getGameId());
+            gameRemitLog.setAmount(param.getAmount());
+            gameRemitLog.setPayPlatform(PayWayEnum.getKeyByPayWayId(param.getPayPlatform()));
+            gameRemitLog.setPayAccount(param.getPayAccount());
+            gameRemitLog.setCreatedTime(DateUtil.milliToLocalDateTime(param.getCreatedTime()));
+            gameRemitLog.setUpdateTime(LocalDateTime.now());
+        }
+        return super.saveOrUpdate(gameRemitLog);
+    }
+
+    private GameRemitLog transform(GameRemitLogParam param, Long gameId) {
+        return GameRemitLog.builder()
+                .userId(param.getUserId())
+                .gameId(gameId)
+                .merchantOrderNo(param.getMerchantOrderNo())
+                .amount(param.getAmount())
+                .payPlatform(PayWayEnum.getKeyByPayWayId(param.getPayPlatform()))
+                .payAccount(param.getPayAccount())
+                .createdTime(DateUtil.milliToLocalDateTime(param.getCreatedTime()))
+                .createTime(LocalDateTime.now())
+                .updateTime(LocalDateTime.now())
+                .build();
+    }
+
+}

+ 2 - 2
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/UserTokenServiceImpl.java

@@ -59,7 +59,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
         //查询登录签名
         GameExt gameExt = gameExtService.getByGameAppId(appId);
         if (gameExt == null || Strings.isBlank(gameExt.getLoginKey())) {
-            log.error("token验证失败 , 游戏拓展信息不存在!");
+            log.error("token验证失败 , 游戏拓展信息不存在, appId : {}, userId : {}", appId, userId);
             return ResultVO.fail(TokenCheckEnum.PARAM_LACK.getMsg());
         }
         //查询token是否存在
@@ -68,7 +68,7 @@ public class UserTokenServiceImpl extends ServiceImpl<UserTokenMapper, UserToken
                 .eq(UserToken::getUserId, userId));
         //判断token是否存在, 并且没有过期
         if (userToken == null || userToken.getExpireTime() < DateUtils.localDateTimeToSecond(LocalDateTime.now())) {
-            log.error("token验证失败 , token不存在或者已经失效!");
+            log.error("token验证失败 , token不存在或者已经失效, appId : {}, userId : {}, token : {}", appId, userId, token);
             return ResultVO.fail(TokenCheckEnum.SIGN_ERROR.getMsg());
         }
         //登录密钥

+ 1 - 1
game-platform/game-platform-serve/src/main/java/com/zanxiang/game/platform/serve/GamePlatformApplication.java

@@ -23,7 +23,7 @@ public class GamePlatformApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(GamePlatformApplication.class, args);
-        System.out.println("游戏第三方平台数据服务启动成功--pro ( ´・・)ノ(._.`) \n" +
+        System.out.println("游戏第三方平台数据服务启动成功 <dubbo升级3.0> ( ´・・)ノ(._.`) \n" +
                 " ______  __     __     \n" +
                 "/_____/\\/__/\\ /__/\\    \n" +
                 "\\:::__\\/\\ \\::\\\\:.\\ \\   \n" +

+ 1 - 1
pom.xml

@@ -13,7 +13,7 @@
     <parent>
         <groupId>com.zanxiang</groupId>
         <artifactId>microservices-parent</artifactId>
-        <version>0.0.4-SNAPSHOT</version>
+        <version>0.0.5-SNAPSHOT</version>
         <relativePath/>
     </parent>