ソースを参照

Merge remote-tracking branch 'origin/package' into package

wcc 1 年間 前
コミット
f846510473
24 ファイル変更863 行追加83 行削除
  1. 3 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/GameDataController.java
  2. 59 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataDayTotalDTO.java
  3. 26 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayTotalVO.java
  4. 435 3
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayVO.java
  5. 134 52
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  6. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  7. 8 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/UserController.java
  8. 24 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameUserRoleListParam.java
  9. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserListVO.java
  10. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserRoleListVO.java
  11. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/OrderVO.java
  12. 6 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserListVO.java
  13. 26 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserWeChatVO.java
  14. 0 11
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserWechatVO.java
  15. 9 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IAgentService.java
  16. 19 6
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IUserService.java
  17. 32 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java
  18. 8 2
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java
  19. 5 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserServiceImpl.java
  20. 7 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/OrderServiceImpl.java
  21. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserCardServiceImpl.java
  22. 35 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserServiceImpl.java
  23. 1 1
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/SDKApplication.java
  24. 6 0
      game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

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

@@ -36,7 +36,7 @@ public class GameDataController {
     private IGameDataService gameDataService;
 
     @ApiOperation(value = "游戏每日数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:day")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:day")
     @PostMapping("/day")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameDataDayVO.class)})
     public ResultVO<Page<GameDataDayVO>> getGameDataDay(@RequestBody GameDataDayDTO dto) {
@@ -50,7 +50,7 @@ public class GameDataController {
         return ResultVO.ok(gameDataService.getH5Recharge(dto));
     }
     @ApiOperation(value = "游戏总数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:total")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:total")
     @PostMapping("/total")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameDataTotalVO.class)})
     public ResultVO<Page<GameDataTotalVO>> getGameDataTotal(@RequestBody GameDataTotalDTO dto) {
@@ -65,7 +65,7 @@ public class GameDataController {
     }
 
     @ApiOperation(value = "游戏每日复充数据")
-    //@PreAuthorize(permissionKey = "gameData:adsGameDay:again")
+    @PreAuthorize(permissionKey = "gameData:adsGameDay:again")
     @PostMapping("/again")
     public ResultVO<Map<LocalDate, List<GameDataAgainDayVO>>> getGameDataAgainDay(@RequestBody GameDataAgainDayDTO dto) throws Exception {
         return ResultVO.ok(gameDataService.getGameDataAgainDay(dto));

+ 59 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/GameDataDayTotalDTO.java

@@ -0,0 +1,59 @@
+package com.zanxiang.game.data.serve.pojo.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDate;
+
+/**
+ * @author tianhua
+ * @time 2023/7/26
+ * @Description 游戏每日数据总计查询条件实体
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataDayTotalDTO {
+
+    /**
+     * 推广游戏名称
+     */
+    @ApiModelProperty(notes = "游戏名称")
+    private String gameName;
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(notes = "游戏ID")
+    private Long gameId;
+
+    /**
+     * 推广游戏应用类别
+     */
+    @ApiModelProperty(notes = "游戏类别")
+    private Long gameClassify;
+
+    /**
+     * 注册时间(开始)
+     */
+    @ApiModelProperty(notes = "注册开始时间")
+    private LocalDate registeredBeginDate;
+
+    /**
+     * SDK来源
+     */
+    @ApiModelProperty(value = "SDK来源")
+    private String sourceSystem;
+
+    /**
+     * 注册时间(结束)
+     */
+    @ApiModelProperty(notes = "注册结束时间")
+    private LocalDate registeredEndDate;
+
+
+}

+ 26 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/GameDataDayTotalVO.java

@@ -0,0 +1,26 @@
+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;
+
+/**
+ * @author tianhua
+ * @time 2023/7/26
+ * @Description 游戏每日数据总计一栏
+ **/
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class GameDataDayTotalVO {
+
+    /**
+     * 游戏ID
+     */
+    @ApiModelProperty(value = "游戏ID")
+    private Long gameId;
+
+}

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

@@ -495,30 +495,174 @@ public class GameDataDayVO {
     @ApiModelProperty(value = "(不展示)付费趋势:1天(买量)金额/人数/增/回/倍")
     private String buyAmountD1;
 
+    /**
+     * 付费趋势:2天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:2天(买量)金额/人数/增/回/倍")
+    private String buyAmountD2;
+
     /**
      * 付费趋势:3天(买量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:3天(买量)金额/人数/增/回/倍")
     private String buyAmountD3;
 
+    /**
+     * 付费趋势:4天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:4天(买量)金额/人数/增/回/倍")
+    private String buyAmountD4;
+
     /**
      * 付费趋势:5天(买量)金额/人数/增/回/倍
      */
     @ApiModelProperty(value = "(不展示)付费趋势:5天(买量)金额/人数/增/回/倍")
     private String buyAmountD5;
 
+    /**
+     * 付费趋势:6天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:6天(买量)金额/人数/增/回/倍")
+    private String buyAmountD6;
+
     /**
      * 付费趋势:7天(买量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:7天(买量)金额/人数/增/回/倍")
     private String buyAmountD7;
 
+    /**
+     * 付费趋势:8天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:8天(买量)金额/人数/增/回/倍")
+    private String buyAmountD8;
+
+    /**
+     * 付费趋势:9天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:9天(买量)金额/人数/增/回/倍")
+    private String buyAmountD9;
+
+    /**
+     * 付费趋势:10天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:10天(买量)金额/人数/增/回/倍")
+    private String buyAmountD10;
+
+    /**
+     * 付费趋势:11天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:11天(买量)金额/人数/增/回/倍")
+    private String buyAmountD11;
+
+    /**
+     * 付费趋势:12天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:12天(买量)金额/人数/增/回/倍")
+    private String buyAmountD12;
+
+    /**
+     * 付费趋势:13天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:13天(买量)金额/人数/增/回/倍")
+    private String buyAmountD13;
+
+    /**
+     * 付费趋势:14天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:14天(买量)金额/人数/增/回/倍")
+    private String buyAmountD14;
+
     /**
      * 付费趋势:15天(买量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:15天(买量)金额/人数/增/回/倍")
     private String buyAmountD15;
 
+    /**
+     * 付费趋势:16天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:16天(买量)金额/人数/增/回/倍")
+    private String buyAmountD16;
+
+    /**
+     * 付费趋势:17天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:17天(买量)金额/人数/增/回/倍")
+    private String buyAmountD17;
+
+    /**
+     * 付费趋势:18天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:18天(买量)金额/人数/增/回/倍")
+    private String buyAmountD18;
+
+    /**
+     * 付费趋势:19天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:19天(买量)金额/人数/增/回/倍")
+    private String buyAmountD19;
+
+    /**
+     * 付费趋势:20天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:20天(买量)金额/人数/增/回/倍")
+    private String buyAmountD20;
+
+    /**
+     * 付费趋势:21天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:21天(买量)金额/人数/增/回/倍")
+    private String buyAmountD21;
+
+    /**
+     * 付费趋势:22天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:22天(买量)金额/人数/增/回/倍")
+    private String buyAmountD22;
+
+    /**
+     * 付费趋势:23天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:23天(买量)金额/人数/增/回/倍")
+    private String buyAmountD23;
+
+    /**
+     * 付费趋势:24天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:24天(买量)金额/人数/增/回/倍")
+    private String buyAmountD24;
+
+    /**
+     * 付费趋势:25天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:25天(买量)金额/人数/增/回/倍")
+    private String buyAmountD25;
+
+    /**
+     * 付费趋势:26天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:26天(买量)金额/人数/增/回/倍")
+    private String buyAmountD26;
+
+    /**
+     * 付费趋势:27天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:27天(买量)金额/人数/增/回/倍")
+    private String buyAmountD27;
+
+    /**
+     * 付费趋势:28天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:28天(买量)金额/人数/增/回/倍")
+    private String buyAmountD28;
+
+    /**
+     * 付费趋势:29天(买量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:29天(买量)金额/人数/增/回/倍")
+    private String buyAmountD29;
+
     /**
      * 付费趋势:1个月(买量)金额/人数/增/回/倍(不展示)
      */
@@ -555,6 +699,12 @@ public class GameDataDayVO {
     @ApiModelProperty(value = "(不展示)付费趋势:1天(自然量)金额/人数/增/回/倍")
     private String natureAmountD1;
 
+    /**
+     * 付费趋势:2天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:2天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD2;
+
     /**
      * 付费趋势:3天(自然量)金额/人数/增/回/倍(不展示)
      */
@@ -562,23 +712,161 @@ public class GameDataDayVO {
     private String natureAmountD3;
 
     /**
-     * 付费趋势:5天(自然量)金额/人数/增/回/倍(不展示)
+     * 付费趋势:4天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:4天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD4;
+
+    /**
+     * 付费趋势:5天(自然量)金额/人数/增/回/倍
      */
     @ApiModelProperty(value = "(不展示)付费趋势:5天(自然量)金额/人数/增/回/倍")
     private String natureAmountD5;
 
+    /**
+     * 付费趋势:6天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:6天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD6;
+
     /**
      * 付费趋势:7天(自然量)金额/人数/增/回/倍(不展示)
      */
-    @ApiModelProperty(value = "付费趋势:7天(自然量)金额/人数/增/回/倍")
+    @ApiModelProperty(value = "(不展示)付费趋势:7天(自然量)金额/人数/增/回/倍")
     private String natureAmountD7;
 
+    /**
+     * 付费趋势:8天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:8天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD8;
+
+    /**
+     * 付费趋势:9天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:9天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD9;
+
+    /**
+     * 付费趋势:10天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:10天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD10;
+
+    /**
+     * 付费趋势:11天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:11天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD11;
+
+    /**
+     * 付费趋势:12天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:12天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD12;
+
+    /**
+     * 付费趋势:13天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:13天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD13;
+
+    /**
+     * 付费趋势:14天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:14天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD14;
+
     /**
      * 付费趋势:15天(自然量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:15天(自然量)金额/人数/增/回/倍")
     private String natureAmountD15;
 
+    /**
+     * 付费趋势:16天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:16天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD16;
+
+    /**
+     * 付费趋势:17天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:17天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD17;
+
+    /**
+     * 付费趋势:18天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:18天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD18;
+
+    /**
+     * 付费趋势:19天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:19天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD19;
+
+    /**
+     * 付费趋势:20天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:20天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD20;
+
+    /**
+     * 付费趋势:21天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:21天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD21;
+
+    /**
+     * 付费趋势:22天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:22天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD22;
+
+    /**
+     * 付费趋势:23天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:23天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD23;
+
+    /**
+     * 付费趋势:24天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:24天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD24;
+
+    /**
+     * 付费趋势:25天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:25天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD25;
+
+    /**
+     * 付费趋势:26天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:26天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD26;
+
+    /**
+     * 付费趋势:27天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:27天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD27;
+
+    /**
+     * 付费趋势:28天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:28天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD28;
+
+    /**
+     * 付费趋势:29天(自然量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:29天(自然量)金额/人数/增/回/倍")
+    private String natureAmountD29;
+
     /**
      * 付费趋势:1个月(自然量)金额/人数/增/回/倍(不展示)
      */
@@ -615,6 +903,12 @@ public class GameDataDayVO {
     @ApiModelProperty(value = "(不展示)付费趋势:1天(总量)金额/人数/增/回/倍")
     private String amountD1;
 
+    /**
+     * 付费趋势:2天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:2天(总量)金额/人数/增/回/倍")
+    private String amountD2;
+
     /**
      * 付费趋势:3天(总量)金额/人数/增/回/倍(不展示)
      */
@@ -622,23 +916,161 @@ public class GameDataDayVO {
     private String amountD3;
 
     /**
-     * 付费趋势:5天(总量)金额/人数/增/回/倍(不展示)
+     * 付费趋势:4天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:4天(总量)金额/人数/增/回/倍")
+    private String amountD4;
+
+    /**
+     * 付费趋势:5天(总量)金额/人数/增/回/倍
      */
     @ApiModelProperty(value = "(不展示)付费趋势:5天(总量)金额/人数/增/回/倍")
     private String amountD5;
 
+    /**
+     * 付费趋势:6天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:6天(总量)金额/人数/增/回/倍")
+    private String amountD6;
+
     /**
      * 付费趋势:7天(总量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:7天(总量)金额/人数/增/回/倍")
     private String amountD7;
 
+    /**
+     * 付费趋势:8天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:8天(总量)金额/人数/增/回/倍")
+    private String amountD8;
+
+    /**
+     * 付费趋势:9天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:9天(总量)金额/人数/增/回/倍")
+    private String amountD9;
+
+    /**
+     * 付费趋势:10天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:10天(总量)金额/人数/增/回/倍")
+    private String amountD10;
+
+    /**
+     * 付费趋势:11天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:11天(总量)金额/人数/增/回/倍")
+    private String amountD11;
+
+    /**
+     * 付费趋势:12天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:12天(总量)金额/人数/增/回/倍")
+    private String amountD12;
+
+    /**
+     * 付费趋势:13天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:13天(总量)金额/人数/增/回/倍")
+    private String amountD13;
+
+    /**
+     * 付费趋势:14天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:14天(总量)金额/人数/增/回/倍")
+    private String amountD14;
+
     /**
      * 付费趋势:15天(总量)金额/人数/增/回/倍(不展示)
      */
     @ApiModelProperty(value = "(不展示)付费趋势:15天(总量)金额/人数/增/回/倍")
     private String amountD15;
 
+    /**
+     * 付费趋势:16天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:16天(总量)金额/人数/增/回/倍")
+    private String amountD16;
+
+    /**
+     * 付费趋势:17天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:17天(总量)金额/人数/增/回/倍")
+    private String amountD17;
+
+    /**
+     * 付费趋势:18天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:18天(总量)金额/人数/增/回/倍")
+    private String amountD18;
+
+    /**
+     * 付费趋势:19天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:19天(总量)金额/人数/增/回/倍")
+    private String amountD19;
+
+    /**
+     * 付费趋势:20天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:20天(总量)金额/人数/增/回/倍")
+    private String amountD20;
+
+    /**
+     * 付费趋势:21天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:21天(总量)金额/人数/增/回/倍")
+    private String amountD21;
+
+    /**
+     * 付费趋势:22天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:22天(总量)金额/人数/增/回/倍")
+    private String amountD22;
+
+    /**
+     * 付费趋势:23天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:23天(总量)金额/人数/增/回/倍")
+    private String amountD23;
+
+    /**
+     * 付费趋势:24天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:24天(总量)金额/人数/增/回/倍")
+    private String amountD24;
+
+    /**
+     * 付费趋势:25天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:25天(总量)金额/人数/增/回/倍")
+    private String amountD25;
+
+    /**
+     * 付费趋势:26天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:26天(总量)金额/人数/增/回/倍")
+    private String amountD26;
+
+    /**
+     * 付费趋势:27天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:27天(总量)金额/人数/增/回/倍")
+    private String amountD27;
+
+    /**
+     * 付费趋势:28天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:28天(总量)金额/人数/增/回/倍")
+    private String amountD28;
+
+    /**
+     * 付费趋势:29天(总量)金额/人数/增/回/倍(不展示)
+     */
+    @ApiModelProperty(value = "(不展示)付费趋势:29天(总量)金额/人数/增/回/倍")
+    private String amountD29;
+
     /**
      * 付费趋势:1个月(总量)金额/人数/增/回/倍(不展示)
      */

+ 134 - 52
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -2,11 +2,7 @@ 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.GameDataAgainDayDTO;
-import com.zanxiang.game.data.serve.pojo.dto.GameDataDayDTO;
-import com.zanxiang.game.data.serve.pojo.dto.GameDataH5DTO;
-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.dto.*;
 import com.zanxiang.game.data.serve.pojo.entity.*;
 import com.zanxiang.game.data.serve.pojo.enums.OrderByEnum;
 import com.zanxiang.game.data.serve.pojo.vo.*;
@@ -37,9 +33,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.beans.PropertyDescriptor;
-import java.lang.reflect.Method;
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
-
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.util.*;
@@ -119,14 +114,16 @@ public class GameDataServiceImpl implements IGameDataService {
 
         List<GameDataDayVO> gameDataDayVOList = list.stream().map(vo -> {
             //买量数据
-            String[] buyAmountD1 = vo.getBuyAmountD1().split("/");
+            /*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());
+                    .build());*/
+            setAgainContentByNum(vo, "D1", "buy");
+
 
             String[] buyAmountD3 = vo.getBuyAmountD3().split("/");
             vo.setBuyAmountD3Trend(RechargeTrendVO.builder()
@@ -134,7 +131,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountD3[1]))
                     .increase(new BigDecimal(buyAmountD3[2]))
                     .back(new BigDecimal(buyAmountD3[3]))
-                    .multiples(new BigDecimal(buyAmountD3[4]))
+                    .multiples(new BigDecimal(buyAmountD3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountD5 = vo.getBuyAmountD5().split("/");
@@ -143,7 +140,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountD5[1]))
                     .increase(new BigDecimal(buyAmountD5[2]))
                     .back(new BigDecimal(buyAmountD5[3]))
-                    .multiples(new BigDecimal(buyAmountD5[4]))
+                    .multiples(new BigDecimal(buyAmountD5[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountD7 = vo.getBuyAmountD7().split("/");
@@ -152,7 +149,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountD7[1]))
                     .increase(new BigDecimal(buyAmountD7[2]))
                     .back(new BigDecimal(buyAmountD7[3]))
-                    .multiples(new BigDecimal(buyAmountD7[4]))
+                    .multiples(new BigDecimal(buyAmountD7[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountD15 = vo.getBuyAmountD15().split("/");
@@ -161,7 +158,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountD15[1]))
                     .increase(new BigDecimal(buyAmountD15[2]))
                     .back(new BigDecimal(buyAmountD15[3]))
-                    .multiples(new BigDecimal(buyAmountD15[4]))
+                    .multiples(new BigDecimal(buyAmountD15[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountM1 = vo.getBuyAmountM1().split("/");
@@ -170,7 +167,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountM1[1]))
                     .increase(new BigDecimal(buyAmountM1[2]))
                     .back(new BigDecimal(buyAmountM1[3]))
-                    .multiples(new BigDecimal(buyAmountM1[4]))
+                    .multiples(new BigDecimal(buyAmountM1[4]).setScale(2,RoundingMode.HALF_UP).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountM2 = vo.getBuyAmountM2().split("/");
@@ -179,7 +176,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountM2[1]))
                     .increase(new BigDecimal(buyAmountM2[2]))
                     .back(new BigDecimal(buyAmountM2[3]))
-                    .multiples(new BigDecimal(buyAmountM2[4]))
+                    .multiples(new BigDecimal(buyAmountM2[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountM3 = vo.getBuyAmountM3().split("/");
@@ -188,7 +185,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountM3[1]))
                     .increase(new BigDecimal(buyAmountM3[2]))
                     .back(new BigDecimal(buyAmountM3[3]))
-                    .multiples(new BigDecimal(buyAmountM3[4]))
+                    .multiples(new BigDecimal(buyAmountM3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountM6 = vo.getBuyAmountM6().split("/");
@@ -197,7 +194,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountM6[1]))
                     .increase(new BigDecimal(buyAmountM6[2]))
                     .back(new BigDecimal(buyAmountM6[3]))
-                    .multiples(new BigDecimal(buyAmountM6[4]))
+                    .multiples(new BigDecimal(buyAmountM6[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] buyAmountSum = vo.getBuyAmountSum().split("/");
@@ -206,7 +203,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(buyAmountSum[1]))
                     .increase(new BigDecimal(buyAmountSum[2]))
                     .back(new BigDecimal(buyAmountSum[3]))
-                    .multiples(new BigDecimal(buyAmountSum[4]))
+                    .multiples(new BigDecimal(buyAmountSum[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             //自然量数据
@@ -216,7 +213,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountD1[1]))
                     .increase(new BigDecimal(natureAmountD1[2]))
                     .back(new BigDecimal(natureAmountD1[3]))
-                    .multiples(new BigDecimal(natureAmountD1[4]))
+                    .multiples(new BigDecimal(natureAmountD1[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountD3 = vo.getNatureAmountD3().split("/");
@@ -225,7 +222,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountD3[1]))
                     .increase(new BigDecimal(natureAmountD3[2]))
                     .back(new BigDecimal(natureAmountD3[3]))
-                    .multiples(new BigDecimal(natureAmountD3[4]))
+                    .multiples(new BigDecimal(natureAmountD3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountD5 = vo.getNatureAmountD5().split("/");
@@ -234,7 +231,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountD5[1]))
                     .increase(new BigDecimal(natureAmountD5[2]))
                     .back(new BigDecimal(natureAmountD5[3]))
-                    .multiples(new BigDecimal(natureAmountD5[4]))
+                    .multiples(new BigDecimal(natureAmountD5[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountD7 = vo.getNatureAmountD7().split("/");
@@ -243,7 +240,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountD7[1]))
                     .increase(new BigDecimal(natureAmountD7[2]))
                     .back(new BigDecimal(natureAmountD7[3]))
-                    .multiples(new BigDecimal(natureAmountD7[4]))
+                    .multiples(new BigDecimal(natureAmountD7[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountD15 = vo.getNatureAmountD15().split("/");
@@ -252,7 +249,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountD15[1]))
                     .increase(new BigDecimal(natureAmountD15[2]))
                     .back(new BigDecimal(natureAmountD15[3]))
-                    .multiples(new BigDecimal(natureAmountD15[4]))
+                    .multiples(new BigDecimal(natureAmountD15[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountM1 = vo.getNatureAmountM1().split("/");
@@ -261,7 +258,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountM1[1]))
                     .increase(new BigDecimal(natureAmountM1[2]))
                     .back(new BigDecimal(natureAmountM1[3]))
-                    .multiples(new BigDecimal(natureAmountM1[4]))
+                    .multiples(new BigDecimal(natureAmountM1[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountM2 = vo.getNatureAmountM2().split("/");
@@ -270,7 +267,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountM2[1]))
                     .increase(new BigDecimal(natureAmountM2[2]))
                     .back(new BigDecimal(natureAmountM2[3]))
-                    .multiples(new BigDecimal(natureAmountM2[4]))
+                    .multiples(new BigDecimal(natureAmountM2[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountM3 = vo.getNatureAmountM3().split("/");
@@ -279,7 +276,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountM3[1]))
                     .increase(new BigDecimal(natureAmountM3[2]))
                     .back(new BigDecimal(natureAmountM3[3]))
-                    .multiples(new BigDecimal(natureAmountM3[4]))
+                    .multiples(new BigDecimal(natureAmountM3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountM6 = vo.getNatureAmountM6().split("/");
@@ -288,7 +285,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountM6[1]))
                     .increase(new BigDecimal(natureAmountM6[2]))
                     .back(new BigDecimal(natureAmountM6[3]))
-                    .multiples(new BigDecimal(natureAmountM6[4]))
+                    .multiples(new BigDecimal(natureAmountM6[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] natureAmountSum = vo.getNatureAmountSum().split("/");
@@ -297,18 +294,20 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(natureAmountSum[1]))
                     .increase(new BigDecimal(natureAmountSum[2]))
                     .back(new BigDecimal(natureAmountSum[3]))
-                    .multiples(new BigDecimal(natureAmountSum[4]))
+                    .multiples(new BigDecimal(natureAmountSum[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             //总量数据
-            String[] amountD1 = vo.getAmountD1().split("/");
+            /*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());
+                    .multiples(new BigDecimal(amountD1[4]).setScale(2,RoundingMode.HALF_UP))
+                    .build());*/
+            setAgainContentByNum(vo, "D1", "");
+
 
             String[] amountD3 = vo.getAmountD3().split("/");
             vo.setAmountD3Trend(RechargeTrendVO.builder()
@@ -316,7 +315,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountD3[1]))
                     .increase(new BigDecimal(amountD3[2]))
                     .back(new BigDecimal(amountD3[3]))
-                    .multiples(new BigDecimal(amountD3[4]))
+                    .multiples(new BigDecimal(amountD3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountD5 = vo.getAmountD5().split("/");
@@ -325,7 +324,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountD5[1]))
                     .increase(new BigDecimal(amountD5[2]))
                     .back(new BigDecimal(amountD5[3]))
-                    .multiples(new BigDecimal(amountD5[4]))
+                    .multiples(new BigDecimal(amountD5[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountD7 = vo.getAmountD7().split("/");
@@ -334,7 +333,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountD7[1]))
                     .increase(new BigDecimal(amountD7[2]))
                     .back(new BigDecimal(amountD7[3]))
-                    .multiples(new BigDecimal(amountD7[4]))
+                    .multiples(new BigDecimal(amountD7[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountD15 = vo.getAmountD15().split("/");
@@ -343,7 +342,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountD15[1]))
                     .increase(new BigDecimal(amountD15[2]))
                     .back(new BigDecimal(amountD15[3]))
-                    .multiples(new BigDecimal(amountD15[4]))
+                    .multiples(new BigDecimal(amountD15[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountM1 = vo.getAmountM1().split("/");
@@ -352,7 +351,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountM1[1]))
                     .increase(new BigDecimal(amountM1[2]))
                     .back(new BigDecimal(amountM1[3]))
-                    .multiples(new BigDecimal(amountM1[4]))
+                    .multiples(new BigDecimal(amountM1[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountM2 = vo.getAmountM2().split("/");
@@ -361,7 +360,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountM2[1]))
                     .increase(new BigDecimal(amountM2[2]))
                     .back(new BigDecimal(amountM2[3]))
-                    .multiples(new BigDecimal(amountM2[4]))
+                    .multiples(new BigDecimal(amountM2[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountM3 = vo.getAmountM3().split("/");
@@ -370,7 +369,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountM3[1]))
                     .increase(new BigDecimal(amountM3[2]))
                     .back(new BigDecimal(amountM3[3]))
-                    .multiples(new BigDecimal(amountM3[4]))
+                    .multiples(new BigDecimal(amountM3[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountM6 = vo.getAmountM6().split("/");
@@ -379,7 +378,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountM6[1]))
                     .increase(new BigDecimal(amountM6[2]))
                     .back(new BigDecimal(amountM6[3]))
-                    .multiples(new BigDecimal(amountM6[4]))
+                    .multiples(new BigDecimal(amountM6[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             String[] amountSum = vo.getAmountSum().split("/");
@@ -388,7 +387,7 @@ public class GameDataServiceImpl implements IGameDataService {
                     .rechargeUserCount(Long.valueOf(amountSum[1]))
                     .increase(new BigDecimal(amountSum[2]))
                     .back(new BigDecimal(amountSum[3]))
-                    .multiples(new BigDecimal(amountSum[4]))
+                    .multiples(new BigDecimal(amountSum[4]).setScale(2,RoundingMode.HALF_UP))
                     .build());
 
             return vo;
@@ -398,6 +397,45 @@ public class GameDataServiceImpl implements IGameDataService {
         return new Page<>(gameDataDayVOList, pager);
     }
 
+    /**
+     * 游戏每日数据总计
+     * @param dto 前端传递的查询条件
+     * @return 返回给前端的总计数据实体
+     */
+    public GameDataDayTotalVO getGameDataDayTotal(GameDataDayTotalDTO dto) {
+
+        //如果没有传入查询时间默认查询当天
+        if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
+            dto.setRegisteredEndDate(LocalDate.now());
+            dto.setRegisteredEndDate(LocalDate.now());
+        }
+        //新增查询条件
+        Criteria cri = Cnd.cri();
+        if (dto.getGameId() != null) {
+            //拼接游戏id
+            cri.where().andEquals("game_id", dto.getGameId());
+        }
+        if (StringUtils.isNotBlank(dto.getGameName())) {
+            //拼接游戏名称
+            cri.where().andEquals("game_name", dto.getGameName());
+        }
+        if (StringUtils.isNotBlank(dto.getSourceSystem())) {
+            //拼接SDK来源
+            cri.where().andEquals("source_system", dto.getSourceSystem());
+        }
+        if (dto.getRegisteredBeginDate() != null && dto.getRegisteredEndDate() != null) {
+            //拼接查询时间
+            cri.where().andBetween("dt", dto.getRegisteredBeginDate(), dto.getRegisteredEndDate());
+        }
+
+        //Sql gameDataDayTotalsql =
+
+
+
+
+        return null;
+    }
+
     /**
      * 游戏总数据
      *
@@ -1044,25 +1082,69 @@ public class GameDataServiceImpl implements IGameDataService {
     /**
      * 通过反射来获取Cn的值
      *
-     * @param dto 数据库查询出来的原始数据对象实体
+     * @param vo 数据库查询出来的原始数据对象实体
      * @param num 1-9
      * @return Cn
      */
-    private Long getCnByNum(Object dto, int num) {
+    private Long getCnByNum(Object vo, int num) {
         try {
-            Method m1 = null;
-            //不同对象获取的方法不同
-            if (dto instanceof AdsGameDayAgain) {
-                m1 = AdsGameDayAgain.class.getDeclaredMethod(String.format("getC%s", num));
-            } else if (dto instanceof AdsGameDayAgainBuy) {
-                m1 = AdsGameDayAgainBuy.class.getDeclaredMethod(String.format("getBuyC%s", num));
-            } else if (dto instanceof AdsGameDayAgainNature) {
-                m1 = AdsGameDayAgainNature.class.getDeclaredMethod(String.format("getNatureC%s", num));
+
+            Field f = null;
+            if (vo instanceof AdsGameDayAgain) {
+                f = AdsGameDayAgain.class.getDeclaredField(String.format("c%s", num));
+            } else if (vo instanceof AdsGameDayAgainBuy) {
+                f = AdsGameDayAgainBuy.class.getDeclaredField(String.format("buyC%s", num));
+            } else if (vo instanceof AdsGameDayAgainNature) {
+                f = AdsGameDayAgainNature.class.getDeclaredField(String.format("natureC%s", num));
             }
+            f.setAccessible(true);
             //返回对应的Cn值
-            return (Long) m1.invoke(dto);
+            return (Long) f.get(vo);
+        } catch (Exception e) {
+            throw new BaseException("get方法出错,映射出错");
+        }
+    }
+
+    /**
+     * 通过反射使用set方法 得到复充趋势的值
+     *
+     * @param vo        需要操作的对象
+     * @param timeType  D1-D30 , M1-M6
+     * @param tableType buy、nature 总
+     */
+    private void setAgainContentByNum(GameDataDayVO vo, String timeType, String tableType) {
+        try {
+            //反射得到复充趋势数据字符串
+            Field f;
+            if (StringUtils.isNotBlank(tableType)) {
+                f = vo.getClass().getDeclaredField(tableType + "Amount" + timeType);
+            } else {
+                f = vo.getClass().getDeclaredField("amount" + timeType);
+            }
+            f.setAccessible(true);
+            //分割数据
+            String[] strs = f.get(vo).toString().split("/");
+
+            //反射得到set方法
+            Field field;
+            if (StringUtils.isNotBlank(tableType)) {
+                field = vo.getClass().getDeclaredField(tableType + "Amount" + timeType + "Trend");
+            } else {
+                field = vo.getClass().getDeclaredField("amount" + timeType + "Trend");
+            }
+
+            field.setAccessible(true);
+            //赋值
+            field.set(vo, RechargeTrendVO.builder()
+                    .rechargeMoney(new BigDecimal(strs[0]))
+                    .rechargeUserCount(Long.valueOf(strs[1]))
+                    .increase(new BigDecimal(strs[2]))
+                    .back(new BigDecimal(strs[3]))
+                    .multiples(new BigDecimal(strs[4]).setScale(2,RoundingMode.HALF_UP))
+                    .build());
         } catch (Exception e) {
-            throw new BaseException("发生错误");
+            e.printStackTrace();
+            throw new BaseException("get/set 方法出错,映射出错");
         }
     }
 

+ 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服务启动成功 <dubbo升级3.0, 用户列表昵称改成角色名称> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <dubbo升级3.0, 角色列表区服搜索模糊匹配> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 8 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/UserController.java

@@ -128,4 +128,12 @@ public class UserController {
     public ResultVO<IPage<UserCardVO>> authList(@Validated @RequestBody UserNameAuthListParam param) {
         return ResultVO.ok(userCardService.getUserCardList(param));
     }
+
+    @ApiOperation(value = "获取用户微信信息")
+    @GetMapping(value = "/weChat/info")
+    @PreAuthorize(permissionKey = "manage:user:weChatInfo")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = UserWeChatVO.class)})
+    public ResultVO<UserWeChatVO> getUserWeChat(@RequestParam Long userId) {
+        return ResultVO.ok(userService.getUserWeChat(userId));
+    }
 }

+ 24 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameUserRoleListParam.java

@@ -138,4 +138,28 @@ public class GameUserRoleListParam extends BaseListDTO<GameUserRole> {
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @ApiModelProperty(value = "结束时间")
     private LocalDate endDate;
+
+    /**
+     * 最小角色等级
+     */
+    @ApiModelProperty(value = "最小角色等级")
+    private Long roleLevelMin;
+
+    /**
+     * 最大角色等级
+     */
+    @ApiModelProperty(value = "最大角色等级")
+    private Long roleLevelMax;
+
+    /**
+     * 注册开始时间
+     */
+    @ApiModelProperty(value = "注册开始时间")
+    private LocalDate regTimeBeginDate;
+
+    /**
+     * 注册结束时间
+     */
+    @ApiModelProperty(value = "注册结束时间")
+    private LocalDate regTimeEndDate;
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserListVO.java

@@ -176,4 +176,10 @@ public class GameUserListVO {
     @ApiModelProperty(notes = "最新游戏角色名称")
     private String lastGameRoleName;
 
+    /**
+     * 注册充值时间差
+     */
+    @ApiModelProperty(notes = "注册充值时间差")
+    private Long regPayTimeDiff;
+
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameUserRoleListVO.java

@@ -208,4 +208,10 @@ public class GameUserRoleListVO {
     @ApiModelProperty(notes = "归因推广账号类型(1:腾讯、2:头条)")
     private Integer accountType;
 
+    /**
+     * 注册充值时间差
+     */
+    @ApiModelProperty(notes = "注册充值时间差")
+    private Long regPayTimeDiff;
+
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/OrderVO.java

@@ -260,4 +260,10 @@ public class OrderVO {
      */
     @ApiModelProperty(notes = "是否首充 0 否 1 是")
     private Integer isFirstRecharge;
+
+    /**
+     * 注册充值时间差
+     */
+    @ApiModelProperty(notes = "注册充值时间差")
+    private Long regPayTimeDiff;
 }

+ 6 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserListVO.java

@@ -188,4 +188,10 @@ public class UserListVO {
     @ApiModelProperty(notes = "最新游戏角色名称")
     private String lastGameRoleName;
 
+    /**
+     * 注册充值时间差
+     */
+    @ApiModelProperty(notes = "注册充值时间差")
+    private Long regPayTimeDiff;
+
 }

+ 26 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserWeChatVO.java

@@ -0,0 +1,26 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-26
+ * @description : 用户微信信息
+ */
+@Data
+public class UserWeChatVO {
+
+    /**
+     * 微信昵称
+     */
+    @ApiModelProperty(notes = "微信昵称")
+    private String name;
+
+    /**
+     * 微信头像
+     */
+    @ApiModelProperty(notes = "微信头像")
+    private String avatar;
+
+}

+ 0 - 11
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/UserWechatVO.java

@@ -1,11 +0,0 @@
-package com.zanxiang.game.module.manage.pojo.vo;
-
-/**
- * @author : lingfeng
- * @time : 2023-07-26
- * @description : 用户微信信息
- */
-public class UserWechatVO {
-
-
-}

+ 9 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IAgentService.java

@@ -12,6 +12,7 @@ import com.zanxiang.game.module.mybatis.entity.Agent;
 import reactor.util.function.Tuple2;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author wcc
@@ -75,4 +76,12 @@ public interface IAgentService extends IService<Agent> {
      * @return {@link List}<{@link AgentChoiceVO}>
      */
     List<AgentChoiceVO> agentChoiceList();
+
+    /**
+     * 通道变换
+     *
+     * @param channel 通道
+     * @return {@link Map}<{@link String}, {@link String}>
+     */
+    Map<String, String> channelTransform(String channel);
 }

+ 19 - 6
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IUserService.java

@@ -7,8 +7,10 @@ import com.zanxiang.game.module.manage.pojo.params.UserListParam;
 import com.zanxiang.game.module.manage.pojo.params.UserUpdateParam;
 import com.zanxiang.game.module.manage.pojo.vo.UserListVO;
 import com.zanxiang.game.module.manage.pojo.vo.UserVO;
+import com.zanxiang.game.module.manage.pojo.vo.UserWeChatVO;
 import com.zanxiang.game.module.mybatis.entity.User;
 
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -19,6 +21,14 @@ import java.util.Map;
  */
 public interface IUserService extends IService<User> {
 
+    /**
+     * 获取用户微信
+     *
+     * @param userId 用户id
+     * @return {@link UserWeChatVO}
+     */
+    UserWeChatVO getUserWeChat(Long userId);
+
     /**
      * 玩家列表查询
      *
@@ -46,14 +56,17 @@ public interface IUserService extends IService<User> {
     /**
      * 玩家相关条件查询用户信息
      *
-     * @param userId      : 用户id
-     * @param agentIdList : 渠道id列表
-     * @param userName    : 用户名称
-     * @param nickname    : 用户昵称
-     * @param regIp       : 用户注册ip
+     * @param userId           : 用户id
+     * @param agentIdList      : 渠道id列表
+     * @param userName         : 用户名称
+     * @param nickname         : 用户昵称
+     * @param regIp            : 用户注册ip
+     * @param regTimeBeginDate 注册时间开始日期
+     * @param regTimeEndDate   注册时间结束日期
      * @return {@link Map}<{@link Long}, {@link UserDTO}>
      */
-    Map<Long, UserDTO> userCondition(Long userId, List<Long> agentIdList, String userName, String nickname, String regIp);
+    Map<Long, UserDTO> userCondition(Long userId, List<Long> agentIdList, String userName, String nickname,
+                                     String regIp, LocalDate regTimeBeginDate, LocalDate regTimeEndDate);
 
     /**
      * 根据用户id查询信息

+ 32 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/AgentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.module.manage.service.impl;
 
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -28,6 +29,7 @@ import com.zanxiang.game.module.manage.service.IAgentService;
 import com.zanxiang.game.module.manage.service.IGameService;
 import com.zanxiang.game.module.mybatis.entity.Agent;
 import com.zanxiang.game.module.mybatis.mapper.AgentMapper;
+import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.exception.BaseException;
 import lombok.extern.slf4j.Slf4j;
@@ -288,4 +290,34 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
         choiceVOList.add(AgentChoiceVO.builder().id(Agent.DEFAULT_AGENT).agentName(Agent.DEFAULT_AGENT_NAME).build());
         return choiceVOList;
     }
+
+    @Override
+    public Map<String, String> channelTransform(String channel) {
+        //判断是否是json, 是就直接转成map
+        if (this.isJsonStr(channel)) {
+            return JsonUtil.toMap(channel, Map.class, String.class);
+        }
+        //非json, 自己解析
+        Map<String, String> paramMap = new HashMap<>(11);
+        String[] params = channel.split("&");
+        for (String param : params) {
+            String[] keyValue = param.split("=");
+            if (keyValue.length > 1) {
+                String key = keyValue[0];
+                String value = keyValue[1];
+                paramMap.put(key, value);
+            }
+        }
+        return paramMap;
+    }
+
+    private boolean isJsonStr(String str) {
+        boolean result = false;
+        try {
+            JSON.parse(str);
+            result = true;
+        } catch (Exception ignored) {
+        }
+        return result;
+    }
 }

+ 8 - 2
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameUserRoleServiceImpl.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import reactor.util.function.Tuple2;
 
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.*;
@@ -116,7 +117,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         }
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
-                param.getNickname(), param.getRegIp());
+                param.getNickname(), param.getRegIp(), param.getRegTimeBeginDate(), param.getRegTimeEndDate());
         //根据条件, 匹配不到玩家
         if (userMap != null && userMap.isEmpty()) {
             return new Page<>();
@@ -128,7 +129,7 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
         //执行查询
         return page(param.toPage(), new QueryWrapper<GameUserRole>().lambda()
                 .in(CollectionUtils.isNotEmpty(userIdSet), GameUserRole::getUserId, userIdSet)
-                .eq(Strings.isNotBlank(param.getServerName()), GameUserRole::getServerName, param.getServerName())
+                .like(Strings.isNotBlank(param.getServerName()), GameUserRole::getServerName, param.getServerName())
                 .like(Strings.isNotBlank(param.getRoleName()), GameUserRole::getRoleName, param.getRoleName())
                 .in(gameMap != null, GameUserRole::getGameId, gameMap != null ? gameMap.keySet() : null)
                 .eq(Strings.isNotBlank(param.getOs()), GameUserRole::getOs, param.getOs())
@@ -140,6 +141,8 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
                 .le(param.getEndDate() != null, GameUserRole::getCreateTime, param.getEndDate() == null ? null : LocalDateTime.of(param.getEndDate(), LocalTime.MAX))
                 .ge(param.getRechargeBeginDate() != null, GameUserRole::getLastRechargeTime, param.getRechargeBeginDate() == null ? null : LocalDateTime.of(param.getRechargeBeginDate(), LocalTime.MIN))
                 .le(param.getRechargeEndDate() != null, GameUserRole::getLastRechargeTime, param.getRechargeEndDate() == null ? null : LocalDateTime.of(param.getRechargeEndDate(), LocalTime.MAX))
+                .ge(param.getRoleLevelMin() != null, GameUserRole::getRoleLevel, param.getRoleLevelMin())
+                .le(param.getRoleLevelMax() != null, GameUserRole::getRoleLevel, param.getRoleLevelMax())
                 .orderByDesc(GameUserRole::getCreateTime)
         ).convert(u -> this.toVo(u, userMap, gameMap, cpMap, agentMap));
     }
@@ -160,6 +163,9 @@ public class GameUserRoleServiceImpl extends ServiceImpl<GameUserRoleMapper, Gam
             gameUserRoleListVO.setRegIp(userDTO.getIp());
             gameUserRoleListVO.setRegTime(userDTO.getCreateTime());
             gameUserRoleListVO.setAgentId(userDTO.getAgentId());
+            if (gameUserRoleListVO.getLastRechargeTime() != null) {
+                gameUserRoleListVO.setRegPayTimeDiff(Duration.between(userDTO.getCreateTime(), gameUserRoleListVO.getLastRechargeTime()).getSeconds());
+            }
             AgentDTO agentDTO = agentMap.get(userDTO.getAgentId());
             if (agentDTO != null) {
                 gameUserRoleListVO.setAgentName(agentDTO.getAgentName());

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

@@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import reactor.util.function.Tuple2;
 
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.List;
@@ -74,7 +75,7 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
         }
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
-                param.getNickname(), null);
+                param.getNickname(), null, null, null);
         //根据条件, 匹配不到玩家
         if (userMap != null && userMap.isEmpty()) {
             return new Page<>();
@@ -110,6 +111,9 @@ public class GameUserServiceImpl extends ServiceImpl<GameUserMapper, GameUser> i
         if (userDTO != null) {
             gameUserListVO.setNickname(userDTO.getNickname());
             gameUserListVO.setUsername(userDTO.getUsername());
+            if (gameUserListVO.getLastRechargeTime() != null) {
+                gameUserListVO.setRegPayTimeDiff(Duration.between(userDTO.getCreateTime(), gameUserListVO.getLastRechargeTime()).getSeconds());
+            }
             //用户渠道
             AgentDTO agentDTO = agentMap.get(userDTO.getAgentId());
             if (agentDTO != null) {

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

@@ -34,6 +34,7 @@ import reactor.util.function.Tuple2;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.*;
@@ -160,7 +161,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         orderVO.setDateTime(orderVO.getCreateTime().toLocalDate());
         //用户信息补充
         UserDTO userDTO = userMap.get(orderVO.getUserId());
-        orderVO.setUsername(userDTO == null ? null : userDTO.getUsername());
+        if (userDTO != null) {
+            orderVO.setUsername(userDTO.getUsername());
+            if (orderVO.getPayTime() != null) {
+                orderVO.setRegPayTimeDiff(Duration.between(userDTO.getCreateTime(), orderVO.getPayTime()).getSeconds());
+            }
+        }
         //渠道账号
         AgentDTO agentDTO = agentMap.get(orderVO.getAgentId());
         if (agentDTO != null) {

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

@@ -51,7 +51,7 @@ public class UserCardServiceImpl extends ServiceImpl<UserCardMapper, UserCard> i
         List<Long> agentIdList = tuple2.getT1();
         //玩家条件处理
         Map<Long, UserDTO> userMap = userService.userCondition(param.getUserId(), agentIdList, param.getUserName(),
-                param.getNickname(), null);
+                param.getNickname(), null, null, null);
         //根据条件, 匹配不到玩家
         if (userMap != null && userMap.isEmpty()) {
             return new Page<>();

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

@@ -7,6 +7,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.corp.base.CorpServer;
+import com.zanxiang.corp.base.pojo.dto.CorpExternalUserDTO;
+import com.zanxiang.corp.base.rpc.ICorpExternalUserServiceRpc;
 import com.zanxiang.game.module.base.pojo.enums.GameCategoryEnum;
 import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
 import com.zanxiang.game.module.manage.pojo.dto.CpDTO;
@@ -17,6 +20,7 @@ import com.zanxiang.game.module.manage.pojo.params.UserUpdateParam;
 import com.zanxiang.game.module.manage.pojo.vo.UserCardVO;
 import com.zanxiang.game.module.manage.pojo.vo.UserListVO;
 import com.zanxiang.game.module.manage.pojo.vo.UserVO;
+import com.zanxiang.game.module.manage.pojo.vo.UserWeChatVO;
 import com.zanxiang.game.module.manage.service.*;
 import com.zanxiang.game.module.mybatis.entity.Agent;
 import com.zanxiang.game.module.mybatis.entity.GameUserRole;
@@ -26,12 +30,15 @@ import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.encryption.Md5Util;
 import com.zanxiang.module.util.exception.BaseException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.logging.log4j.util.Strings;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import reactor.util.function.Tuple2;
 
+import java.time.Duration;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Collections;
@@ -65,6 +72,26 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Autowired
     private IGameUserRoleService gameUserRoleService;
 
+    @DubboReference(providedBy = CorpServer.SERVER_DUBBO_NAME)
+    private ICorpExternalUserServiceRpc corpExternalUserServiceRpc;
+
+    @Override
+    public UserWeChatVO getUserWeChat(Long userId) {
+        User user = super.getById(userId);
+        if (user == null) {
+            throw new BaseException("参数错误, 用户信息不存在");
+        }
+        Map<String, String> channelTransform = agentService.channelTransform(user.getChannel());
+        if (channelTransform.containsKey("params")) {
+            String[] params = channelTransform.get("params").split(":");
+            CorpExternalUserDTO corpExternalUser = corpExternalUserServiceRpc.getCorpExternalUser(params[0], params[1]);
+            if (corpExternalUser != null) {
+                return BeanUtil.copy(corpExternalUser, UserWeChatVO.class);
+            }
+        }
+        throw new BaseException("未查询到用户微信信息");
+    }
+
     @Override
     public IPage<UserListVO> list(UserListParam param) {
         //游戏条件处理
@@ -138,6 +165,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         //最近角色
         GameUserRole gameUserRole = gameUserRoleService.getLastGameUserRoleName(user.getId(), user.getGameId());
         userListVO.setLastGameRoleName(gameUserRole == null ? null : gameUserRole.getRoleName());
+        //注册充值时间差
+        if (userListVO.getLastRechargeTime() != null) {
+            userListVO.setRegPayTimeDiff(Duration.between(userListVO.getCreateTime(), userListVO.getLastRechargeTime()).getSeconds());
+        }
         //返回
         return userListVO;
     }
@@ -199,7 +230,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     }
 
     @Override
-    public Map<Long, UserDTO> userCondition(Long userId, List<Long> agentIdList, String userName, String nickname, String regIp) {
+    public Map<Long, UserDTO> userCondition(Long userId, List<Long> agentIdList, String userName, String nickname,
+                                            String regIp, LocalDate regTimeBeginDate, LocalDate regTimeEndDate) {
         //用户信息条件处理
         if (userId == null && CollectionUtils.isEmpty(agentIdList) && Strings.isBlank(userName)
                 && Strings.isBlank(nickname) && Strings.isBlank(regIp)) {
@@ -212,6 +244,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 .eq(Strings.isNotBlank(regIp), User::getIp, regIp)
                 .like(Strings.isNotBlank(userName), User::getUsername, userName)
                 .like(Strings.isNotBlank(nickname), User::getNickname, nickname)
+                .ge(regTimeBeginDate != null, User::getCreateTime, regTimeBeginDate == null ? null : LocalDateTime.of(regTimeBeginDate, LocalTime.MIN))
+                .le(regTimeEndDate != null, User::getCreateTime, regTimeEndDate == null ? null : LocalDateTime.of(regTimeEndDate, LocalTime.MAX))
                 .select(User::getId, User::getUsername, User::getNickname, User::getIp, User::getCreateTime, User::getAgentId));
         if (CollectionUtils.isEmpty(userList)) {
             return Collections.emptyMap();

+ 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服务启动成功 <dubbo升级3.0, 订单回传过滤> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象SDK服务启动成功 <dubbo升级3.0, 问题修正2> ( ´・・)ノ(._.`) \n" +
                 " ___________ _   __\n" +
                 "/  ___|  _  \\ | / /\n" +
                 "\\ `--.| | | | |/ / \n" +

+ 6 - 0
game-module/game-module-sdk/src/main/java/com/zanxiang/game/module/sdk/service/impl/AgentServiceImpl.java

@@ -226,6 +226,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
 
     @Override
     public Map<String, String> channelTransform(String channel) {
+        if (Strings.isBlank(channel) || Strings.isBlank(channel.trim())) {
+            return Collections.emptyMap();
+        }
         //判断是否是json, 是就直接转成map
         if (this.isJsonStr(channel)) {
             return JsonUtil.toMap(channel, Map.class, String.class);
@@ -251,6 +254,9 @@ public class AgentServiceImpl extends ServiceImpl<AgentMapper, Agent> implements
     }
 
     private boolean isJsonStr(String str) {
+        if (Strings.isBlank(str) || Strings.isBlank(str.trim())) {
+            return false;
+        }
         boolean result = false;
         try {
             JSON.parse(str);