فهرست منبع

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

wcc 1 سال پیش
والد
کامیت
03b1293218

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

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.controller;
 
+import com.zanxiang.erp.security.annotation.PreAuthorize;
 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;
@@ -33,7 +34,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) {
@@ -42,7 +43,7 @@ public class GameDataController {
 
 
     @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) {

+ 0 - 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;

+ 0 - 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;

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

@@ -472,147 +472,183 @@ 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 = "付费趋势:7天(总量)")
+    @ApiModelProperty(value = "付费趋势:5天(总量)金额/人数/增/回/倍")
+    private String amountD5;
+
+    /**
+     * 付费趋势: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;
 
 }

+ 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(总量)

+ 352 - 129
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -1,11 +1,15 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+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.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;
@@ -16,9 +20,17 @@ import org.nutz.dao.sql.Criteria;
 import org.nutz.dao.sql.Sql;
 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
@@ -77,12 +89,12 @@ public class GameDataServiceImpl implements IGameDataService {
 
     @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 +133,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 +270,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 +476,113 @@ 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;
+    }
+
 
 }

+ 0 - 2
game-module/game-module-manage/pom.xml

@@ -92,12 +92,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>

+ 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());
         }
         //登录密钥