浏览代码

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

bilingfeng 1 年之前
父节点
当前提交
3722416dd7
共有 17 个文件被更改,包括 690 次插入135 次删除
  1. 49 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/component/DataPowerComponent.java
  2. 3 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsGameServerController.java
  3. 2 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/AdsAgentRechargeRankingListDTO.java
  4. 2 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PlayerDataListDTO.java
  5. 2 1
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PlayerRoleDataListDTO.java
  6. 13 8
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java
  7. 1 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsAccountRechargeRankingServiceImpl.java
  8. 2 4
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsAgentRechargeRankingServiceImpl.java
  9. 16 10
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailService.java
  10. 22 11
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java
  11. 490 31
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameServerServiceImpl.java
  12. 4 2
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IActiveDataServiceImpl.java
  13. 28 16
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IMediaDataServiceImpl.java
  14. 8 10
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/OverallSummaryServiceImpl.java
  15. 11 6
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java
  16. 13 13
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java
  17. 24 16
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java

+ 49 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/component/DataPowerComponent.java

@@ -1,9 +1,12 @@
 package com.zanxiang.game.data.serve.component;
 
+import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.erp.base.ErpServer;
 import com.zanxiang.erp.base.rpc.ISysGameUserGroupRpc;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.pojo.enums.GameAuthEnum;
+import com.zanxiang.game.module.base.pojo.vo.GameAuthUserVO;
 import com.zanxiang.game.module.base.rpc.GameAuthRpc;
 import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.exception.BaseException;
@@ -26,6 +29,51 @@ public class DataPowerComponent {
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private GameAuthRpc gameAuthRpc;
 
+
+
+    /**
+     * 获取当前登录用户有权限查看的用户列表
+     * 1:普通用户-投手:自己
+     * 1:普通用户-运营:游戏数据
+     * 2:投手组长:自己+组员+自然量
+     * 3:管理员/超管:所有数据
+     */
+    public Tuple2<List<Long>, List<Long>> getPowerInfo() {
+        if (SecurityUtil.isAdmin()) {
+            return Tuple2.with(null, null);
+        }
+        GameAuthUserVO userGameInfo = gameAuthRpc.getGameAuthByUserIds().getData();
+        if(CollectionUtils.isEmpty(userGameInfo.getGameIdList())) {
+            throw new BaseException("没有游戏查看权限,请联系管理员指派游戏权限");
+        }
+        GameAuthEnum gameAuth = userGameInfo.getGameAuthEnum();
+        Collection<Long> subUserIds = sysGameUserGroupRpc.memberUserIds(SecurityUtil.getCompanyId(), SecurityUtil.getUserId()).getData();
+        if(CollectionUtils.isEmpty(subUserIds)) {
+            throw new BaseException("服务异常,获取用户列表失败!!");
+        }
+        if (subUserIds.size() == 1) {
+            if(gameAuth == GameAuthEnum.OPERATE) {
+                // 运营
+                return Tuple2.with(null, userGameInfo.getGameIdList());
+            } else {
+                // 投手
+                return Tuple2.with(new ArrayList<>(subUserIds), userGameInfo.getGameIdList());
+            }
+        } else {
+            // 组长
+            if(gameAuth == GameAuthEnum.OPERATE) {
+                // 运营组长
+                return Tuple2.with(null, userGameInfo.getGameIdList());
+            } else {
+                // 投手组长
+                // 自然量
+                subUserIds.add(0L);
+                return Tuple2.with(new ArrayList<>(subUserIds), userGameInfo.getGameIdList());
+            }
+        }
+    }
+
+
     /**
      * 获取当前登录用户有权限查看的用户列表
      * 1:普通用户-投手:自己
@@ -41,7 +89,7 @@ public class DataPowerComponent {
         Collection<Long> subUserIds = sysGameUserGroupRpc.memberUserIds(SecurityUtil.getCompanyId(), SecurityUtil.getUserId()).getData();
         if (subUserIds.size() > 1) {
             // 自然量
-            subUserIds.add(-2L);
+            subUserIds.add(0L);
         }
         log.error("1111--------->" + JsonUtil.toString(subUserIds));
         return new ArrayList<>(subUserIds);

+ 3 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/controller/AdsGameServerController.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.GameServerDayDTO;
 import com.zanxiang.game.data.serve.pojo.dto.GameServerDayTotalDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameServerDayTotalVO;
@@ -31,14 +32,14 @@ public class AdsGameServerController {
     private IGameServerService gameServerService;
 
     @ApiOperation(value = "游戏区服数据")
-    //@PreAuthorize(permissionKey = "gameServer:adsGameServerDay:day")
+    @PreAuthorize(permissionKey = "gameServer:adsGameServerDay:day")
     @PostMapping("/day")
     public ResultVO<Page<GameServerDayVO>> getGameServerDataDay(@RequestBody GameServerDayDTO dto) {
         return ResultVO.ok(gameServerService.getGameServerDataDay(dto));
     }
 
     @ApiOperation(value = "游戏区服数据总计一栏")
-    //@PreAuthorize(permissionKey = "gameServer:adsGameServerDay:dayTotal")
+    @PreAuthorize(permissionKey = "gameServer:adsGameServerDay:dayTotal")
     @PostMapping("/day/total")
     public ResultVO<GameServerDayTotalVO> getGameServerDataDayTotal(@RequestBody GameServerDayTotalDTO dto) {
         return ResultVO.ok(gameServerService.getGameServerDataDayTotal(dto));

+ 2 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/AdsAgentRechargeRankingListDTO.java

@@ -4,6 +4,7 @@ import com.zanxiang.game.data.serve.pojo.base.BasePage;
 import lombok.Data;
 
 import java.time.LocalDate;
+import java.util.List;
 
 @Data
 public class AdsAgentRechargeRankingListDTO extends BasePage {
@@ -14,7 +15,7 @@ public class AdsAgentRechargeRankingListDTO extends BasePage {
 
     private String sourceSystem;
 
-    private String agentId;
+    private List<String> agentId;
 
     private Long pitcherId;
 

+ 2 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PlayerDataListDTO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * @author tianhua
@@ -104,7 +105,7 @@ public class PlayerDataListDTO extends BasePage {
      * 注册渠道对应的id
      */
     @ApiModelProperty(notes = "注册渠道对应的id")
-    private Long channelId;
+    private List<String> channelId;
 
     /**
      * 归因推广账号

+ 2 - 1
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/PlayerRoleDataListDTO.java

@@ -7,6 +7,7 @@ import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * @author tianhua
@@ -80,7 +81,7 @@ public class PlayerRoleDataListDTO extends BasePage {
      * 注册渠道对应的id
      */
     @ApiModelProperty(notes = "注册渠道对应的id")
-    private Long channelId;
+    private List<String> channelId;
 
     /**
      * 归因推广账号

+ 13 - 8
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AccountAgentDayServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.github.sd4324530.jtuple.Tuple2;
 import com.google.common.base.CaseFormat;
 import com.google.gson.Gson;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
@@ -50,8 +51,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
 
     @Override
     public Page<GamePromoteDayVO> accountAgentDay(GamePromoteDayDTO dto) {
-        List<Long> userIds = dto.getSysUserId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getSysUserId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getSysUserId() == null ? poerInfo.first : Collections.singletonList(dto.getSysUserId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         /*Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
@@ -244,8 +246,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
 
     @Override
     public GamePromoteDayTotalVO accountAgentDayTotal(GamePromoteDayTotalDTO dto) {
-        List<Long> userIds = dto.getSysUserId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getSysUserId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getSysUserId() == null ? poerInfo.first : Collections.singletonList(dto.getSysUserId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         /*Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
@@ -451,8 +454,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
 
     @Override
     public Page<GamePromoteTotalVO> accountAgentTotal(GamePromoteTotalDTO dto) {
-        List<Long> userIds = dto.getSysUserId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getSysUserId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getSysUserId() == null ? poerInfo.first : Collections.singletonList(dto.getSysUserId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         /*Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
         dto.setSysUserId(sysUserId);*/
@@ -850,8 +854,9 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
 
     @Override
     public GamePromoteTotalSumVO accountAgentTotalSum(GamePromoteTotalSumDTO dto) {
-        List<Long> userIds = dto.getSysUserId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getSysUserId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getSysUserId() == null ? poerInfo.first : Collections.singletonList(dto.getSysUserId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         /*Long sysUserId = SecurityUtil.isAdmin() ? null : SecurityUtil.getUserId();
         sysUserId = null == dto.getSysUserId() ? sysUserId : dto.getSysUserId();
         dto.setSysUserId(sysUserId);*/

+ 1 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsAccountRechargeRankingServiceImpl.java

@@ -1,7 +1,6 @@
 package com.zanxiang.game.data.serve.service.impl;
 
 import com.google.common.base.CaseFormat;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
 import com.zanxiang.game.data.serve.pojo.dto.AdsAccountRechargeRankingListDTO;
 import com.zanxiang.game.data.serve.pojo.vo.AdsAccountRechargeRankingVO;
@@ -39,7 +38,7 @@ public class AdsAccountRechargeRankingServiceImpl implements IAdsAccountRecharge
     @Override
     public Page<AdsAccountRechargeRankingVO> listOfPage(AdsAccountRechargeRankingListDTO dto) {
         List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getPitcherId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
         if (StringUtils.isBlank(dto.getSortFiled())) {
             dto.setSortFiled("cost");
         }

+ 2 - 4
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsAgentRechargeRankingServiceImpl.java

@@ -1,10 +1,8 @@
 package com.zanxiang.game.data.serve.service.impl;
 
 import com.google.common.base.CaseFormat;
-import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
 import com.zanxiang.game.data.serve.pojo.dto.AdsAgentRechargeRankingListDTO;
-import com.zanxiang.game.data.serve.pojo.entity.AdsAgentRechargeRanking;
 import com.zanxiang.game.data.serve.pojo.vo.AdsAgentRechargeRankingVO;
 import com.zanxiang.game.data.serve.service.IAdsAgentRechargeRankingService;
 import com.zanxiang.game.data.serve.utils.Page;
@@ -61,8 +59,8 @@ public class AdsAgentRechargeRankingServiceImpl implements IAdsAgentRechargeRank
         if (null != dto.getBeginDay() && null != dto.getEndDay()) {
             cri.where().and("dt", ">=", dto.getBeginDay()).and("dt", "<=", dto.getEndDay());
         }
-        if (StringUtils.isNotBlank(dto.getAgentId())) {
-            cri.where().and("agent_id", "=", dto.getAgentId());
+        if (CollectionUtils.isNotEmpty(dto.getAgentId())) {
+            cri.where().andIn("agent_id", dto.getAgentId().toArray(String[]::new));
         }
         if (userIds != null) {
             cri.where().andInList("pitcher_id", userIds);

+ 16 - 10
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailService.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.github.sd4324530.jtuple.Tuple2;
 import com.google.common.base.CaseFormat;
 import com.zanxiang.erp.security.util.SecurityUtil;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
@@ -42,8 +43,9 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 
     @Override
     public Page<AdsOrderDetailVO> listOfPage(AdsOrderDetailListDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(Long.parseLong(dto.getPitcherId()));
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : dto.getGameId();
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(Long.parseLong(dto.getPitcherId()));
+        List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
         if (StringUtils.isBlank(dto.getPitcherId()) && !SecurityUtil.isManager()) {
             // 只有管理员才能查看全部数据
             dto.setPitcherId(SecurityUtil.getUserId().toString());
@@ -154,8 +156,9 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 
     @Override
     public AdsOrderDetailTotalVO orderTotal(AdsOrderDetailTotalDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(Long.parseLong(dto.getPitcherId()));
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : dto.getGameId();
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(Long.parseLong(dto.getPitcherId()));
+        List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
         /*if (StringUtils.isBlank(dto.getPitcherId()) && !SecurityUtil.isManager()) {
             // 只有管理员才能查看全部数据
             dto.setPitcherId(SecurityUtil.getUserId().toString());
@@ -308,6 +311,7 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		b.username , -- 玩家账号
                 		b.nickname , -- 玩家昵称
                 		b.create_time as reg_time, -- 玩家注册时间
+                		c.account_id , -- 广告账号
                 		a.agent_id , -- 玩家注册渠道ID
                 		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
                 		b.game_id , -- 玩家注册游戏ID
@@ -315,8 +319,8 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		g.classify , -- 玩家注册游戏类型
                 		a.cp_id , -- CPID
                 		e.cp_name ,-- cp名
-                		c.pitcher_id as zx_pitcher_id, -- 投手ID
-                		d.zx_pitcher_name , -- 投手名
+                		IFNULL(c.pitcher_id, 0) as zx_pitcher_id, -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as zx_pitcher_name, -- 投手名
                 		a.game_id as order_game_id, -- 玩家充值游戏ID
                 		f.game_name as order_game_name,-- 玩家充值游戏名
                 		f.classify as order_game_classify,-- 玩家充值游戏类型
@@ -386,6 +390,7 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		b.username , -- 玩家账号
                 		b.nickname , -- 玩家昵称
                 		b.create_time as reg_time, -- 玩家注册时间
+                		c.account_id , -- 广告账号
                 		a.agent_id , -- 玩家注册渠道ID
                 		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
                 		b.game_id , -- 玩家注册游戏ID
@@ -393,8 +398,8 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		g.classify , -- 玩家注册游戏类型
                 		a.cp_id , -- CPID
                 		e.cp_name ,-- cp名
-                		c.pitcher_id as zx_pitcher_id, -- 投手ID
-                		d.zx_pitcher_name , -- 投手名
+                		IFNULL(c.pitcher_id, 0) as zx_pitcher_id, -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as zx_pitcher_name, -- 投手名
                 		a.game_id as order_game_id, -- 玩家充值游戏ID
                 		f.game_name as order_game_name,-- 玩家充值游戏名
                 		f.classify as order_game_classify,-- 玩家充值游戏类型
@@ -465,6 +470,7 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		b.username , -- 玩家账号
                 		b.nickname , -- 玩家昵称
                 		b.create_time as reg_time, -- 玩家注册时间
+                		c.account_id , -- 广告账号
                 		a.agent_id , -- 玩家注册渠道ID
                 		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
                 		b.game_id , -- 玩家注册游戏ID
@@ -472,8 +478,8 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
                 		g.classify , -- 玩家注册游戏类型
                 		a.cp_id , -- CPID
                 		e.cp_name ,-- cp名
-                		c.pitcher_id as zx_pitcher_id, -- 投手ID
-                		d.zx_pitcher_name , -- 投手名
+                		IFNULL(c.pitcher_id, 0) as zx_pitcher_id, -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as zx_pitcher_name, -- 投手名
                 		a.game_id as order_game_id, -- 玩家充值游戏ID
                 		f.game_name as order_game_name,-- 玩家充值游戏名
                 		f.classify as order_game_classify,-- 玩家充值游戏类型

+ 22 - 11
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -195,7 +195,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<GameDataDayVO> getGameDataDay(GameDataDayDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //默认查询 total 总量数据
         if (StringUtils.isBlank(dto.getTableTypes())) {
@@ -263,7 +264,8 @@ public class GameDataServiceImpl implements IGameDataService {
      * @return 返回给前端的总计数据实体
      */
     public GameDataDayTotalVO getGameDataDayTotal(GameDataDayTotalDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //默认查询 total 总量数据
         if (StringUtils.isBlank(dto.getTableTypes())) {
@@ -314,7 +316,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<GameDataTotalVO> getGameDataTotal(GameDataTotalDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             dto.setRegisteredBeginDate(LocalDate.now());
@@ -435,7 +438,8 @@ public class GameDataServiceImpl implements IGameDataService {
      * @return 返回给前端额数据
      */
     public GameDataTotalTotalVO getGameDataTotalTotal(GameDataTotalTotalDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             dto.setRegisteredBeginDate(LocalDate.now());
@@ -654,7 +658,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<GameDataWaterVO> getGameDataWater(GameDataWaterDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         if (null == dto.getRechargeDate()) {
             dto.setRechargeDate(LocalDate.now());
         }
@@ -762,7 +767,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Map<LocalDate, List<GameDataAgainDayVO>> getGameDataAgainDay(GameDataAgainDayDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //如果查询时间不传递默认从今天开始查询
         if (dto.getBeginDate() == null) {
@@ -2832,7 +2838,8 @@ public class GameDataServiceImpl implements IGameDataService {
 
     @Override
     public Page<GameDataH5VO> getH5Recharge(GameDataH5DTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         if (null == dto.getCostBeginDate() || null == dto.getCostEndDate()) {
             dto.setCostEndDate(LocalDate.now());
             dto.setCostBeginDate(LocalDate.now());
@@ -2991,7 +2998,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<LtvDataVO> getLtvData(LtvDataDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             //查询时间不传递默认传递当天
             dto.setRegisteredBeginDate(LocalDate.now());
@@ -3057,7 +3065,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public LtvDataTotalVO getLtvTotalData(LtvDataTotalDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有传入查询时间默认查询当天
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             dto.setRegisteredBeginDate(LocalDate.now());
@@ -3118,7 +3127,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public Page<GameDataFirstNewUserAgainVO> getFirstNewUserAgain(GameDataFirstNewUserAgainDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             //查询时间不传递默认传递当天
             dto.setRegisteredBeginDate(LocalDate.now());
@@ -3202,7 +3212,8 @@ public class GameDataServiceImpl implements IGameDataService {
      */
     @Override
     public GameDataFirstNewUserAgainTotalVO getFirstNewUserAgainTotal(GameDataFirstNewUserAgainTotalDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有传入查询时间默认查询当天
         if (dto.getRegisteredBeginDate() == null || dto.getRegisteredEndDate() == null) {
             dto.setRegisteredBeginDate(LocalDate.now());

+ 490 - 31
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameServerServiceImpl.java

@@ -128,7 +128,8 @@ public class GameServerServiceImpl implements IGameServerService {
      */
     @Override
     public Page<GameServerDayVO> getGameServerDataDay(GameServerDayDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //创建查询条件
         Criteria cri = Cnd.cri();
@@ -192,7 +193,12 @@ public class GameServerServiceImpl implements IGameServerService {
      */
     @Override
     public GameServerDayTotalVO getGameServerDataDayTotal(GameServerDayTotalDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
+        //默认查询注册留存数据
+        if (StringUtils.isBlank(dto.getActiveTypes())) {
+            dto.setActiveTypes("reg");
+        }
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (gameIds != null) {
@@ -216,7 +222,7 @@ public class GameServerServiceImpl implements IGameServerService {
             cri.where().andEquals("source_system", dto.getSourceSystem());
         }
         //创建sql语句查询数据
-        Sql sql = Sqls.create(gameServerDayTotalSql() + cri);
+        Sql sql = Sqls.create(gameServerDayTotalSql(dto.getActiveTypes()) + cri);
         //设置自定义回传对象
         sql.setCallback(Sqls.callback.entity());
         sql.setEntity(dao.getEntity(GameServerDayTotalVO.class));
@@ -225,7 +231,7 @@ public class GameServerServiceImpl implements IGameServerService {
         //得到查询的结果
         GameServerDayTotalVO vo = sql.getObject(GameServerDayTotalVO.class);
         if (StringUtils.isNotBlank(vo.getDa1())) {
-            formatTotalDayN(vo);
+            formatTotalDayN(vo, dto.getActiveTypes());
         }
         //返回结果
         return vo;
@@ -276,32 +282,99 @@ public class GameServerServiceImpl implements IGameServerService {
     /**
      * 将vo中的原始String数据修改为一个对象
      * @param vo 展示给前端的游戏区服数据总计
+     * @param activeType 查询的留存类型 reg -> 注册留存 ; role -> 角色留存 ; amount -> 付费留存
      */
-    private void formatTotalDayN(GameServerDayTotalVO vo) {
+    private void formatTotalDayN(GameServerDayTotalVO vo, String activeType) {
         if (CollectionUtils.isEmpty(dayNTotalFieldMapList)) {
             return;
         }
         dayNTotalFieldMapList.forEach(dayNTotalFieldMap -> {
             try {
+                /*注册人数0/创角人数1/活跃人数2/付费人数3/付费金额4/滚服人数5/滚服付费人数6/滚服付费金额7/ (游戏区服数据)*/
                 String[] temps = ((String) dayNTotalFieldMap.getT1().get(vo)).split("/");
                 //付费金额
                 BigDecimal amount = new BigDecimal(temps[4]);
                 //滚服付费金额
                 BigDecimal rollServerAmount = new BigDecimal(temps[7]);
-                //设置trend对象
-                dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
-                        .regNum(Long.parseLong(temps[0]))
-                        .roleNum(Long.parseLong(temps[1]))
-                        .activeNum(Long.parseLong(temps[2]))
-                        .amountNum(Long.parseLong(temps[3]))
-                        .amount(amount)
-                        .rollServerNum(Long.parseLong(temps[5]))
-                        .rollServerAmountNum(Long.parseLong(temps[6]))
-                        .rollServerAmount(rollServerAmount)
-                        .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
-                                rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
-                        .build()
-                );
+                //不同留存数据
+                if ("reg".equals(activeType)) {
+                    //注册留存
+                    /* DayN活跃人数8/ (注册留存数据)/ 注册人数9(去除时间未到的数据)*/
+                    //活跃人数(注册留存数据)
+                    Long regActiveNum = Long.valueOf(temps[8]);
+                    //注册人数(注册留存数据)
+                    Long regNum = Long.valueOf(temps[9]);
+                    //设置trend对象
+                    dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
+                            .regNum(Long.parseLong(temps[0]))
+                            .roleNum(Long.parseLong(temps[1]))
+                            .activeNum(Long.parseLong(temps[2]))
+                            .amountNum(Long.parseLong(temps[3]))
+                            .amount(amount)
+                            .rollServerNum(Long.parseLong(temps[5]))
+                            .rollServerAmountNum(Long.parseLong(temps[6]))
+                            .rollServerAmount(rollServerAmount)
+                            .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                    rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
+                            .regActiveNum(regActiveNum)
+                            .regActiveRate(regNum == 0L ? BigDecimal.ZERO :
+                                    BigDecimal.valueOf(regActiveNum.doubleValue() / regNum.doubleValue()).setScale(4, RoundingMode.HALF_UP))
+                            .build());
+                } else if ("amount".equals(activeType)) {
+                    //付费留存
+                    /* 第N天的新增付费用户8/第N天的老活跃用户9/第N天的累计付费用户10/第N天的累计活跃用户11/(付费留存数据)*/
+                    //累计到第N天的付费人数(付费留存数据)
+                    Long amountTotalNum = Long.parseLong(temps[10]);
+                    //累计到第N天的活跃人数(付费留存数据)
+                    Long amountActiveTotalNum = Long.valueOf(temps[11]);
+                    //设置trend对象
+                    dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
+                            .regNum(Long.parseLong(temps[0]))
+                            .roleNum(Long.parseLong(temps[1]))
+                            .activeNum(Long.parseLong(temps[2]))
+                            .amountNum(Long.parseLong(temps[3]))
+                            .amount(amount)
+                            .rollServerNum(Long.parseLong(temps[5]))
+                            .rollServerAmountNum(Long.parseLong(temps[6]))
+                            .rollServerAmount(rollServerAmount)
+                            .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                    rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
+                            .newUserAmountNum(Long.parseLong(temps[8]))
+                            .oldActiveUserNum(Long.valueOf(temps[9]))
+                            .newUserTotalAmountNum(amountTotalNum)
+                            .newActiveUserTotalNum(amountActiveTotalNum)
+                            .amountActiveRate(amountTotalNum == 0L ? BigDecimal.ZERO :
+                                    BigDecimal.valueOf(amountActiveTotalNum.doubleValue() / amountTotalNum.doubleValue())
+                                            .setScale(4, RoundingMode.HALF_UP))
+                            .build());
+                } else {
+                    /* 第N天的新增创角用户8/第N天的老活跃用户9/第N天的累计创角用户10/第N天的累计活跃用户11/(创角留存数据)*/
+                    //创角留存
+                    //累计到第N天的创角用户数
+                    Long roleActiveTotalNum = Long.valueOf(temps[10]);
+                    //累计到第N天的活跃人数(活跃人数)
+                    Long roleActiveUserNum = Long.valueOf(temps[11]);
+                    //设置trend对象
+                    dayNTotalFieldMap.getT2().set(vo, GameServerTrendVO.builder()
+                            .regNum(Long.parseLong(temps[0]))
+                            .roleNum(Long.parseLong(temps[1]))
+                            .activeNum(Long.parseLong(temps[2]))
+                            .amountNum(Long.parseLong(temps[3]))
+                            .amount(amount)
+                            .rollServerNum(Long.parseLong(temps[5]))
+                            .rollServerAmountNum(Long.parseLong(temps[6]))
+                            .rollServerAmount(rollServerAmount)
+                            .rollServerAmountRate(amount.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO :
+                                    rollServerAmount.divide(amount, 4, RoundingMode.HALF_UP))
+                            .roleNewUserNum(Long.valueOf(temps[8]))
+                            .roleOldActiveUserNum(Long.valueOf(temps[9]))
+                            .roleNewUserTotalNum(roleActiveTotalNum)
+                            .roleNewActiveUserTotalNum(roleActiveUserNum)
+                            .roleActiveRate(roleActiveTotalNum == 0L ? BigDecimal.ZERO :
+                                    BigDecimal.valueOf(roleActiveUserNum.doubleValue() / roleActiveTotalNum.doubleValue())
+                                            .setScale(4, RoundingMode.HALF_UP))
+                            .build());
+                }
             } catch (IllegalAccessException e) {
                 e.printStackTrace();
             }
@@ -311,9 +384,8 @@ public class GameServerServiceImpl implements IGameServerService {
 
     /**
      * 计算总计一栏的daN数据
-     * @return String
      * 注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/ (游戏区服数据)
-     * DayN活跃人数/ (注册留存数据)
+     * DayN活跃人数/ (注册留存数据)/ 注册人数(去除时间未到的数据)
      * 第N天的新增付费用户/第N天的老活跃用户/第N天的累计付费用户/第N天的累计活跃用户/ (付费留存数据)
      * 第N天的新增创角用户/第N天的老活跃用户/第N天的累计创角用户/第N天的累计活跃用户/ (创角留存数据)
      */
@@ -330,9 +402,15 @@ public class GameServerServiceImpl implements IGameServerService {
                     	SUM(SPLIT_PART(da%s, '/', 5)), '/',
                     	SUM(SPLIT_PART(da%s, '/', 6)), '/',
                     	SUM(SPLIT_PART(da%s, '/', 7)), '/',
-                    	SUM(SPLIT_PART(da%s, '/', 8))
+                    	SUM(SPLIT_PART(da%s, '/', 8)), '/',
+                    	SUM(SPLIT_PART(da%s, '/', 10)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), total_reg_num, 0)), '/',
+                        SUM(SPLIT_PART(da%s, '/', 12)), '/',
+                        SUM(SPLIT_PART(da%s, '/', 13)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), SPLIT_PART(da%s, '/', 14), 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), SPLIT_PART(da%s, '/', 15), 0))
                     ) as da%s ,
-                    """.formatted(i, i, i, i, i, i, i, i, i));
+                    """.formatted(i, i, i, i, i, i, i, i, i, i-1,i ,i, i-1, i, i-1, i, i ));
         }
         //拼接m4-m12 sql
         for (int i = 4; i <= 12; i++) {
@@ -345,9 +423,15 @@ public class GameServerServiceImpl implements IGameServerService {
                     	SUM(SPLIT_PART(m%s, '/', 5)), '/',
                     	SUM(SPLIT_PART(m%s, '/', 6)), '/',
                     	SUM(SPLIT_PART(m%s, '/', 7)), '/',
-                    	SUM(SPLIT_PART(m%s, '/', 8))
+                    	SUM(SPLIT_PART(m%s, '/', 8)), '/',
+                    	SUM(SPLIT_PART(m%s, '/', 10)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), total_reg_num, 0)), '/',
+                        SUM(SPLIT_PART(m%s, '/', 12)), '/',
+                        SUM(SPLIT_PART(m%s, '/', 13)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), SPLIT_PART(m%s, '/', 14), 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), SPLIT_PART(m%s, '/', 15), 0))
                     ) as m%s ,
-                    """.formatted(i, i, i, i, i, i, i, i, i));
+                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
         }
         //拼接total
         daySql.append("""
@@ -359,9 +443,264 @@ public class GameServerServiceImpl implements IGameServerService {
                     	SUM(SPLIT_PART(total, '/', 5)), '/',
                     	SUM(SPLIT_PART(total, '/', 6)), '/',
                     	SUM(SPLIT_PART(total, '/', 7)), '/',
-                    	SUM(SPLIT_PART(total, '/', 8))
+                    	SUM(SPLIT_PART(total, '/', 8)), '/',
+                    	SUM(SPLIT_PART(total, '/', 10)), '/',
+                        SUM(total_reg_num), '/',
+                        SUM(SPLIT_PART(total, '/', 12)), '/',
+                        SUM(SPLIT_PART(total, '/', 13)), '/',
+                        SUM(SPLIT_PART(total, '/', 14)), '/',
+                        SUM(SPLIT_PART(total, '/', 15))
+                    ) as total
+                    """);
+
+        return daySql.toString();
+    }
+
+    private String trendDayDemo1() {
+        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
+        //拼接da1-da90 sql
+        for (int i = 1; i <= 90; i++) {
+            daySql.append("""
+                    CONCAT(
+                    	SUM(da%s[1]), '/',
+                    	SUM(da%s[2]), '/',
+                    	SUM(da%s[3]), '/',
+                    	SUM(da%s[4]), '/',
+                    	SUM(da%s[5]), '/',
+                    	SUM(da%s[6]), '/',
+                    	SUM(da%s[7]), '/',
+                    	SUM(da%s[8]), '/',
+                    	SUM(da%s[10]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), total_reg_num, 0)), '/',
+                        SUM(da%s[12]), '/',
+                        SUM(da%s[13]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[14], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[15], 0))
+                    ) as da%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i-1,i ,i, i-1, i, i-1, i, i ));
+        }
+        //拼接m4-m12 sql
+        for (int i = 4; i <= 12; i++) {
+            daySql.append("""
+                    CONCAT(
+                    	SUM(m%s[1]), '/',
+                    	SUM(m%s[2]), '/',
+                    	SUM(m%s[3]), '/',
+                    	SUM(m%s[4]), '/',
+                    	SUM(m%s[5]), '/',
+                    	SUM(m%s[6]), '/',
+                    	SUM(m%s[7]), '/',
+                    	SUM(m%s[8]), '/',
+                    	SUM(m%s[10]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), total_reg_num, 0)), '/',
+                        SUM(m%s[12]), '/',
+                        SUM(m%s[13]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[14], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[15], 0))
+                    ) as m%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
+        }
+        //拼接total
+        daySql.append("""
+                    CONCAT(
+                    	SUM(total[1]), '/',
+                    	SUM(total[2]), '/',
+                    	SUM(total[3]), '/',
+                    	SUM(total[4]), '/',
+                    	SUM(total[5]), '/',
+                    	SUM(total[6]), '/',
+                    	SUM(total[7]), '/',
+                    	SUM(total[8]), '/',
+                    	SUM(total[10]), '/',
+                        SUM(total_reg_num), '/',
+                        SUM(total[12]), '/',
+                        SUM(total[13]), '/',
+                        SUM(total[14]), '/',
+                        SUM(total[15])
+                    ) as total
+                    """);
+
+        return daySql.toString();
+    }
+
+    /**
+     * 计算总计一栏的daN数据
+     * 注册人数/创角人数/活跃人数/付费人数/付费金额/滚服人数/滚服付费人数/滚服付费金额/ (游戏区服数据)
+     * DayN活跃人数/ (注册留存数据)/ 注册人数(去除时间未到的数据)
+     * 第N天的新增付费用户/第N天的老活跃用户/第N天的累计付费用户/第N天的累计活跃用户/ (付费留存数据)
+     * 第N天的新增创角用户/第N天的老活跃用户/第N天的累计创角用户/第N天的累计活跃用户/ (创角留存数据)
+     * @param activeType reg -> 注册留存 ; role -> 角色留存 ; amount -> 付费留存
+     *
+     * @return String
+     */
+    private String trendDayDemo2(String activeType) {
+        StringBuilder daySql = new StringBuilder(StringUtils.EMPTY);
+        //注册留存数据
+        if ("reg".equals(activeType)) {
+            //拼接da1-da90 sql
+            for (int i = 1; i <= 90; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(da%s[1]), '/',
+                    	SUM(da%s[2]), '/',
+                    	SUM(da%s[3]), '/',
+                    	SUM(da%s[4]), '/',
+                    	SUM(da%s[5]), '/',
+                    	SUM(da%s[6]), '/',
+                    	SUM(da%s[7]), '/',
+                    	SUM(da%s[8]), '/',
+                    	SUM(da%s[10]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), total_reg_num, 0))
+                    ) as da%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i-1, i));
+            }
+            //拼接m4-m12 sql
+            for (int i = 4; i <= 12; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(m%s[1]), '/',
+                    	SUM(m%s[2]), '/',
+                    	SUM(m%s[3]), '/',
+                    	SUM(m%s[4]), '/',
+                    	SUM(m%s[5]), '/',
+                    	SUM(m%s[6]), '/',
+                    	SUM(m%s[7]), '/',
+                    	SUM(m%s[8]), '/',
+                    	SUM(m%s[10]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), total_reg_num, 0))
+                    ) as m%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i, i));
+            }
+            //拼接total
+            daySql.append("""
+                    CONCAT(
+                    	SUM(total[1]), '/',
+                    	SUM(total[2]), '/',
+                    	SUM(total[3]), '/',
+                    	SUM(total[4]), '/',
+                    	SUM(total[5]), '/',
+                    	SUM(total[6]), '/',
+                    	SUM(total[7]), '/',
+                    	SUM(total[8]), '/',
+                    	SUM(total[10]), '/',
+                        SUM(total_reg_num)
                     ) as total
                     """);
+        } else if ("amount".equals(activeType)) {
+            //付费留存数据
+            //拼接da1-da90 sql
+            for (int i = 1; i <= 90; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(da%s[1]), '/',
+                    	SUM(da%s[2]), '/',
+                    	SUM(da%s[3]), '/',
+                    	SUM(da%s[4]), '/',
+                    	SUM(da%s[5]), '/',
+                    	SUM(da%s[6]), '/',
+                    	SUM(da%s[7]), '/',
+                    	SUM(da%s[8]), '/',
+                        SUM(da%s[12]), '/',
+                        SUM(da%s[13]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[14], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[15], 0))
+                    ) as da%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i ,i, i-1, i, i-1, i, i ));
+            }
+            //拼接m4-m12 sql
+            for (int i = 4; i <= 12; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(m%s[1]), '/',
+                    	SUM(m%s[2]), '/',
+                    	SUM(m%s[3]), '/',
+                    	SUM(m%s[4]), '/',
+                    	SUM(m%s[5]), '/',
+                    	SUM(m%s[6]), '/',
+                    	SUM(m%s[7]), '/',
+                    	SUM(m%s[8]), '/',
+                        SUM(m%s[12]), '/',
+                        SUM(m%s[13]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[14], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[15], 0))
+                    ) as m%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
+            }
+            //拼接total
+            daySql.append("""
+                    CONCAT(
+                    	SUM(total[1]), '/',
+                    	SUM(total[2]), '/',
+                    	SUM(total[3]), '/',
+                    	SUM(total[4]), '/',
+                    	SUM(total[5]), '/',
+                    	SUM(total[6]), '/',
+                    	SUM(total[7]), '/',
+                    	SUM(total[8]), '/',
+                        SUM(total[12]), '/',
+                        SUM(total[13]), '/',
+                        SUM(total[14]), '/',
+                        SUM(total[15])
+                    ) as total
+                    """);
+        } else {
+            //创角留存数据
+            //拼接da1-da90 sql
+            for (int i = 1; i <= 90; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(da%s[1]), '/',
+                    	SUM(da%s[2]), '/',
+                    	SUM(da%s[3]), '/',
+                    	SUM(da%s[4]), '/',
+                    	SUM(da%s[5]), '/',
+                    	SUM(da%s[6]), '/',
+                    	SUM(da%s[7]), '/',
+                    	SUM(da%s[8]), '/',
+                        SUM(da%s[17]), '/',
+                        SUM(da%s[18]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[19], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s day) <= Local.now(), da%s[20], 0))
+                    ) as da%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i ,i, i-1, i, i-1, i, i ));
+            }
+            //拼接m4-m12 sql
+            for (int i = 4; i <= 12; i++) {
+                daySql.append("""
+                    CONCAT(
+                    	SUM(m%s[1]), '/',
+                    	SUM(m%s[2]), '/',
+                    	SUM(m%s[3]), '/',
+                    	SUM(m%s[4]), '/',
+                    	SUM(m%s[5]), '/',
+                    	SUM(m%s[6]), '/',
+                    	SUM(m%s[7]), '/',
+                    	SUM(m%s[8]), '/',
+                        SUM(m%s[17]), '/',
+                        SUM(m%s[18]), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[19], 0)), '/',
+                        SUM(IF(DATE_ADD(dt, INTERVAL %s month) <= Local.now(), m%s[20], 0))
+                    ) as m%s ,
+                    """.formatted(i, i, i, i, i, i, i, i, i, i, i, i, i, i, i));
+            }
+            //拼接total
+            daySql.append("""
+                    CONCAT(
+                    	SUM(total[1]), '/',
+                    	SUM(total[2]), '/',
+                    	SUM(total[3]), '/',
+                    	SUM(total[4]), '/',
+                    	SUM(total[5]), '/',
+                    	SUM(total[6]), '/',
+                    	SUM(total[7]), '/',
+                    	SUM(total[8]), '/',
+                        SUM(total[17]), '/',
+                        SUM(total[18]), '/',
+                        SUM(total[19]), '/',
+                        SUM(total[20])
+                    ) as total
+                    """);
+        }
 
         return daySql.toString();
     }
@@ -495,9 +834,11 @@ public class GameServerServiceImpl implements IGameServerService {
 
     /**
      * 游戏区服数据总计SQL
+     * @param activeType 查询的留存类型 reg -> 注册留存 ; role -> 角色留存 ; amount -> 付费留存
+     *
      * @return String
      */
-    private String gameServerDayTotalSql() {
+    private String gameServerDayTotalSql(String activeType) {
         return """
                 SELECT
                     IFNULL(SUM(out_total_num), 0) as out_total_num,
@@ -508,11 +849,129 @@ public class GameServerServiceImpl implements IGameServerService {
                     IFNULL(SUM(total_reg_num), 0) as total_reg_num,
                     IFNULL(SUM(total_amount_num), 0) as total_amount_num,
                     IFNULL(SUM(total_amount), 0) as total_amount,
-                """ + trendDay() +
+                """ + trendDayDemo2(activeType) +
                 """
-                FROM
-                    game_ads.ads_game_server_day
-                """;
+                FROM (
+                    SELECT
+                        dt,
+                        source_system,
+                        server_id,
+                        server_name,
+                        game_id,
+                        game_name,
+                        classify,
+                        out_total_num,
+                        out_total_amount_num,
+                        out_total_amount,
+                        out_total_rate,
+                        total_role_num,
+                        total_reg_num,
+                        total_amount_num,
+                        total_amount,
+                        SPLIT(da1, '/') as da1,
+                        SPLIT(da2, '/') as da2,
+                        SPLIT(da3, '/') as da3,
+                        SPLIT(da4, '/') as da4,
+                        SPLIT(da5, '/') as da5,
+                        SPLIT(da6, '/') as da6,
+                        SPLIT(da7, '/') as da7,
+                        SPLIT(da8, '/') as da8,
+                        SPLIT(da9, '/') as da9,
+                        SPLIT(da10, '/') as da10,
+                        SPLIT(da11, '/') as da11,
+                        SPLIT(da12, '/') as da12,
+                        SPLIT(da13, '/') as da13,
+                        SPLIT(da14, '/') as da14,
+                        SPLIT(da15, '/') as da15,
+                        SPLIT(da16, '/') as da16,
+                        SPLIT(da17, '/') as da17,
+                        SPLIT(da18, '/') as da18,
+                        SPLIT(da19, '/') as da19,
+                        SPLIT(da20, '/') as da20,
+                        SPLIT(da21, '/') as da21,
+                        SPLIT(da22, '/') as da22,
+                        SPLIT(da23, '/') as da23,
+                        SPLIT(da24, '/') as da24,
+                        SPLIT(da25, '/') as da25,
+                        SPLIT(da26, '/') as da26,
+                        SPLIT(da27, '/') as da27,
+                        SPLIT(da28, '/') as da28,
+                        SPLIT(da29, '/') as da29,
+                        SPLIT(da30, '/') as da30,
+                        SPLIT(da31, '/') as da31,
+                        SPLIT(da32, '/') as da32,
+                        SPLIT(da33, '/') as da33,
+                        SPLIT(da34, '/') as da34,
+                        SPLIT(da35, '/') as da35,
+                        SPLIT(da36, '/') as da36,
+                        SPLIT(da37, '/') as da37,
+                        SPLIT(da38, '/') as da38,
+                        SPLIT(da39, '/') as da39,
+                        SPLIT(da40, '/') as da40,
+                        SPLIT(da41, '/') as da41,
+                        SPLIT(da42, '/') as da42,
+                        SPLIT(da43, '/') as da43,
+                        SPLIT(da44, '/') as da44,
+                        SPLIT(da45, '/') as da45,
+                        SPLIT(da46, '/') as da46,
+                        SPLIT(da47, '/') as da47,
+                        SPLIT(da48, '/') as da48,
+                        SPLIT(da49, '/') as da49,
+                        SPLIT(da50, '/') as da50,
+                        SPLIT(da51, '/') as da51,
+                        SPLIT(da52, '/') as da52,
+                        SPLIT(da53, '/') as da53,
+                        SPLIT(da54, '/') as da54,
+                        SPLIT(da55, '/') as da55,
+                        SPLIT(da56, '/') as da56,
+                        SPLIT(da57, '/') as da57,
+                        SPLIT(da58, '/') as da58,
+                        SPLIT(da59, '/') as da59,
+                        SPLIT(da60, '/') as da60,
+                        SPLIT(da61, '/') as da61,
+                        SPLIT(da62, '/') as da62,
+                        SPLIT(da63, '/') as da63,
+                        SPLIT(da64, '/') as da64,
+                        SPLIT(da65, '/') as da65,
+                        SPLIT(da66, '/') as da66,
+                        SPLIT(da67, '/') as da67,
+                        SPLIT(da68, '/') as da68,
+                        SPLIT(da69, '/') as da69,
+                        SPLIT(da70, '/') as da70,
+                        SPLIT(da71, '/') as da71,
+                        SPLIT(da72, '/') as da72,
+                        SPLIT(da73, '/') as da73,
+                        SPLIT(da74, '/') as da74,
+                        SPLIT(da75, '/') as da75,
+                        SPLIT(da76, '/') as da76,
+                        SPLIT(da77, '/') as da77,
+                        SPLIT(da78, '/') as da78,
+                        SPLIT(da79, '/') as da79,
+                        SPLIT(da80, '/') as da80,
+                        SPLIT(da81, '/') as da81,
+                        SPLIT(da82, '/') as da82,
+                        SPLIT(da83, '/') as da83,
+                        SPLIT(da84, '/') as da84,
+                        SPLIT(da85, '/') as da85,
+                        SPLIT(da86, '/') as da86,
+                        SPLIT(da87, '/') as da87,
+                        SPLIT(da88, '/') as da88,
+                        SPLIT(da89, '/') as da89,
+                        SPLIT(da90, '/') as da90,
+                        SPLIT(m4, '/') as m4,
+                        SPLIT(m5, '/') as m5,
+                        SPLIT(m6, '/') as m6,
+                        SPLIT(m7, '/') as m7,
+                        SPLIT(m8, '/') as m8,
+                        SPLIT(m9, '/') as m9,
+                        SPLIT(m10, '/') as m10,
+                        SPLIT(m11, '/') as m11,
+                        SPLIT(m12, '/') as m12,
+                        SPLIT(total, '/') as total
+                    FROM
+                        game_ads.ads_game_server_day
+                ) a
+                        """;
     }
 
 

+ 4 - 2
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IActiveDataServiceImpl.java

@@ -126,7 +126,8 @@ public class IActiveDataServiceImpl implements IActiveDataService {
      */
     @Override
     public Page<ActiveDataDayVO> getActiveDataDay(ActiveDataDayDTO dto) {
-        List<Long> userGameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userGameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //默认查询总数据
         if (StringUtils.isBlank(dto.getTableTypes())) {
             dto.setTableTypes("total");
@@ -217,7 +218,8 @@ public class IActiveDataServiceImpl implements IActiveDataService {
      */
     @Override
     public ActiveDataTotalVO getActiveDataTotal(ActiveDataTotalDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //默认查询总数据
         if (StringUtils.isBlank(dto.getTableTypes())) {
             dto.setTableTypes("total");

+ 28 - 16
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/IMediaDataServiceImpl.java

@@ -156,8 +156,9 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<PitcherGameMediaDataDayVO> getPitcherGameMediaDataDay(PitcherGameMediaDataDayDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (pitcherIds != null) {
@@ -223,8 +224,9 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public PitcherGameMediaDataDayVO getPitcherGameMediaDataDayTotal(PitcherGameMediaDataDayTotalDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (pitcherIds != null) {
@@ -271,8 +273,9 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<PitcherGameMediaDataTotalVO> getPitcherGameMediaDataTotal(PitcherGameMediaDataTotalDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : List.of(dto.getPitcherId());
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : List.of(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : List.of(dto.getPitcherId());
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : List.of(Long.parseLong(dto.getGameId()));
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -366,8 +369,9 @@ public class IMediaDataServiceImpl implements IMediaDataService {
      */
     @Override
     public PitcherGameMediaDataTotalVO getPitcherGameMediaDataTotalSum(PitcherGameMediaDataTotalSumDTO dto) {
-        List<Long> pitcherId = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherId = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -457,7 +461,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<PitcherMediaDataDayVO> getPitcherMediaDataDay(PitcherMediaDataDayDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (pitcherIds != null) {
@@ -514,7 +519,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public PitcherMediaDataDayVO getPitcherMediaDataDayTotal(PitcherMediaDataDayTotalDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (pitcherIds != null) {
@@ -552,7 +558,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<PitcherMediaDataTotalVO> getPitcherMediaDataTotal(PitcherMediaDataTotalDTO dto) {
         //添加权限
-        List<Long> pitcherIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : List.of(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherIds = dto.getPitcherId() == null ? poerInfo.first : List.of(dto.getPitcherId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -646,7 +653,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
      */
     @Override
     public PitcherMediaDataTotalVO getPitcherMediaDataTotalSum(PitcherMediaDataTotalSumDTO dto) {
-        List<Long> pitcherId = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> pitcherId = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -736,7 +744,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<GameMediaDataDayVO> getGameMediaDataDay(GameMediaDataDayDTO dto) {
         //添加权限
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (gameIds != null) {
@@ -799,7 +808,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public GameMediaDataDayVO getGameMediaDataDayTotal(GameMediaDataDayTotalDTO dto) {
         //添加权限
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (gameIds != null) {
@@ -843,7 +853,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
     @Override
     public Page<GameMediaDataTotalVO> getGameMediaDataTotal(GameMediaDataTotalDTO dto) {
         //添加权限
-        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? dataPowerComponent.getSubGameIdList() : List.of(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = StringUtils.isBlank(dto.getGameId()) ? poerInfo.second : List.of(Long.parseLong(dto.getGameId()));
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -937,7 +948,8 @@ public class IMediaDataServiceImpl implements IMediaDataService {
      */
     @Override
     public GameMediaDataTotalVO getGameMediaDataTotalSum(GameMediaDataTotalSumDTO dto) {
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());

+ 8 - 10
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/OverallSummaryServiceImpl.java

@@ -1,6 +1,6 @@
 package com.zanxiang.game.data.serve.service.impl;
 
-import com.zanxiang.erp.security.util.SecurityUtil;
+import com.github.sd4324530.jtuple.Tuple2;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
 import com.zanxiang.game.data.serve.pojo.dto.OverallSummaryDTO;
 import com.zanxiang.game.data.serve.pojo.vo.OverallSummaryAmountLineDataVO;
@@ -23,11 +23,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.temporal.ChronoUnit;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author tianhua
@@ -51,8 +47,9 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
      */
     @Override
     public OverallSummaryVO getOverallSummaryTotalData(OverallSummaryDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //创建返回给前端的对象
         OverallSummaryVO overallSummaryVO = new OverallSummaryVO();
@@ -150,8 +147,9 @@ public class OverallSummaryServiceImpl implements IOverallSummaryService {
      */
     @Override
     public Map<String, List> getOverallSummaryLineData(OverallSummaryDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
 
         //根据条件获取数据
         Condition lineCon = myCondition(userIds, gameIds, dto, true, true, -1);

+ 11 - 6
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PitcherDataServiceImpl.java

@@ -202,7 +202,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
      */
     @Override
     public Page<PitcherDataDayVO> getPitcherDataDay(PitcherDataDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //不传递时间,默认查询当天
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -260,7 +261,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
      */
     @Override
     public PitcherDataDayTotalVO getPitcherDataDayTotal(PitcherDataDayTotalDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //不传递时间,默认查询当天
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -301,7 +303,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
      */
     @Override
     public Page<PitcherDataTotalVO> getPitcherDataTotal(PitcherDataTotalDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -392,7 +395,8 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
      */
     @Override
     public PitcherDataTotalSumVO getPitcherDataTotalSum(PitcherDataTotalSumDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
         //如果注册时间参数为空,默认设置查询当天数据
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());
@@ -482,8 +486,9 @@ public class PitcherDataServiceImpl implements IPitcherDataService {
      */
     @Override
     public Page<PitcherGameDataDayVO> getPitcherGameDataDay(PitcherGameDataDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(Long.parseLong(dto.getGameId()));
+        com.github.sd4324530.jtuple.Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(Long.parseLong(dto.getGameId()));
         //不传递时间,默认查询当天
         if (dto.getBeginDate() == null || dto.getEndDate() == null) {
             dto.setBeginDate(LocalDate.now());

+ 13 - 13
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PlayerDataServiceImpl.java

@@ -125,7 +125,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         }
         if (dto.getChannelId() != null) {
             //渠道id
-            cri.where().andEquals("agent_id", dto.getChannelId());
+            cri.where().andIn("agent_id", dto.getChannelId().toArray(String[]::new));
         }
         if (StringUtils.isNotBlank(dto.getAccountId())) {
             cri.where().andEquals("account_id", dto.getAccountId());
@@ -251,7 +251,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         }
         if (dto.getChannelId() != null) {
             //渠道ID
-            cri.where().andEquals("agent_id", dto.getChannelId());
+            cri.where().andIn("agent_id", dto.getChannelId().toArray(String[]::new));
         }
         if (StringUtils.isNotBlank(dto.getPitcherId())) {
             cri.where().andEquals("pitcher_id", dto.getPitcherId());
@@ -383,7 +383,7 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
         }
         if (dto.getChannelId() != null) {
             //渠道ID
-            cri.where().andEquals("agent_id", dto.getChannelId());
+            cri.where().andIn("agent_id", dto.getChannelId().toArray(String[]::new));
         }
         if (StringUtils.isNotBlank(dto.getPitcherId())) {
             cri.where().andEquals("pitcher_id", dto.getPitcherId());
@@ -605,8 +605,8 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                         a.game_id as game_id ,
                         e.game_name as game_name ,
                         e.classify as game_category_id ,
-                        d.zx_pitcher_name as pitcher_name ,
-                        d.zx_pitcher_id as pitcher_id ,
+                        IFNULL(d.zx_pitcher_name, '自然量') as pitcher_name ,
+                        IFNULL(d.zx_pitcher_id, 0) as pitcher_id ,
                         c.account_id as account_id,
                         c.account_type as account_type,
                         a.mobile as mobile ,
@@ -705,8 +705,8 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                         a.game_id as game_id ,
                         e.game_name as game_name ,
                         e.classify as game_category_id ,
-                        d.zx_pitcher_name as pitcher_name ,
-                        d.zx_pitcher_id as pitcher_id ,
+                        IFNULL(d.zx_pitcher_name, '自然量') as pitcher_name ,
+                        IFNULL(d.zx_pitcher_id, 0) as pitcher_id ,
                         c.account_id as account_id,
                         c.account_type as account_type,
                         a.mobile as mobile ,
@@ -801,8 +801,8 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                 		b.create_time as reg_time, -- 玩家注册时间
                 		b.agent_id , -- 注册渠道ID
                 		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
-                		c.pitcher_id , -- 投手ID
-                		d.zx_pitcher_name as pitcher_name, -- 投手名
+                		IFNULL(c.pitcher_id, 0) as pitcher_id , -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as pitcher_name, -- 投手名
                 		c.account_id , -- 推广账号ID
                 		c.account_name , -- 推广账号名
                 		c.account_type , -- 推广账号类型
@@ -911,8 +911,8 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                 		b.create_time as reg_time, -- 玩家注册时间
                 		b.agent_id , -- 注册渠道ID
                 		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
-                		c.pitcher_id , -- 投手ID
-                		d.zx_pitcher_name as pitcher_name, -- 投手名
+                		IFNULL(c.pitcher_id, 0) as pitcher_id , -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as pitcher_name, -- 投手名
                 		c.account_id , -- 推广账号ID
                 		c.account_name , -- 推广账号名
                 		c.account_type , -- 推广账号类型
@@ -1022,8 +1022,8 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
                 		b.create_time as reg_time, -- 玩家注册时间
                 		b.agent_id , -- 注册渠道ID
                 		IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
-                		c.pitcher_id , -- 投手ID
-                		d.zx_pitcher_name as pitcher_name, -- 投手名
+                		IFNULL(c.pitcher_id, 0) as pitcher_id , -- 投手ID
+                  		IFNULL(d.zx_pitcher_name, '自然量') as pitcher_name, -- 投手名
                 		c.account_id , -- 推广账号ID
                 		c.account_name , -- 推广账号名
                 		c.account_type , -- 推广账号类型

+ 24 - 16
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/PromotionDayServiceImpl.java

@@ -1,5 +1,6 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.github.sd4324530.jtuple.Tuple2;
 import com.google.common.base.CaseFormat;
 import com.zanxiang.game.data.serve.component.DataPowerComponent;
 import com.zanxiang.game.data.serve.pojo.dto.PromotionDayDTO;
@@ -11,6 +12,7 @@ import com.zanxiang.game.data.serve.pojo.vo.*;
 import com.zanxiang.game.data.serve.service.IAdsPromotionDayService;
 import com.zanxiang.game.data.serve.utils.Page;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.Dao;
@@ -52,8 +54,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      * @return
      */
     public Page<PromotionDayVO> getPromotionDayListData(PromotionDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有排序条件给默认值
         if (StringUtils.isBlank(dto.getSortFiled())) {
             dto.setSortFiled("dt");
@@ -138,8 +141,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      */
     @Override
     public Page<PromotionDayVO> getPromotionDayData(PromotionDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有排序条件给默认值
         if (StringUtils.isBlank(dto.getSortFiled())) {
             dto.setSortFiled("today_cost");
@@ -220,8 +224,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      */
     @Override
     public PromotionDayTotalVO getPromotionDayTotalData(PromotionDayTotalDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (dto.getAccountId() != null) {
@@ -239,7 +244,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
         if (userIds != null) {
             cri.where().andInList("pitcher_id", userIds);
         }
-        if (dto.getAgentId() != null) {
+        if (ArrayUtils.isNotEmpty(dto.getAgentId())) {
             cri.where().andInList("agent_id", Arrays.asList(dto.getAgentId()));
         }
         if (StringUtils.isNotBlank(dto.getCpName())) {
@@ -410,8 +415,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      * @return
      */
     public Page<TencentPromotionDayVO> getTencentPromotionDayListData(TencentPromotionDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有排序条件给默认值
         if (StringUtils.isBlank(dto.getSortFiled())) {
             dto.setSortFiled("dt");
@@ -496,8 +502,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      */
     @Override
     public Page<TencentPromotionDayVO> getTencentPromotionDayData(TencentPromotionDayDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //如果没有排序条件给默认值
         if (StringUtils.isBlank(dto.getSortFiled())) {
             dto.setSortFiled("today_cost");
@@ -578,8 +585,9 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
      */
     @Override
     public TencentPromotionDayTotalVO getTencentPromotionDayTotalData(TencentPromotionDayTotalDTO dto) {
-        List<Long> userIds = dto.getPitcherId() == null ? dataPowerComponent.getSubUserIdList() : Collections.singletonList(dto.getPitcherId());
-        List<Long> gameIds = dto.getGameId() == null ? dataPowerComponent.getSubGameIdList() : Collections.singletonList(dto.getGameId());
+        Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo();
+        List<Long> userIds = dto.getPitcherId() == null ? poerInfo.first : Collections.singletonList(dto.getPitcherId());
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : Collections.singletonList(dto.getGameId());
         //创建查询条件
         Criteria cri = Cnd.cri();
         if (dto.getAccountId() != null) {
@@ -597,7 +605,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
         if (userIds != null) {
             cri.where().andInList("pitcher_id", userIds);
         }
-        if (dto.getAgentId() != null) {
+        if (ArrayUtils.isNotEmpty(dto.getAgentId())) {
             cri.where().andInList("agent_id", Arrays.asList(dto.getAgentId()));
         }
         if (StringUtils.isNotBlank(dto.getCpName())) {
@@ -779,7 +787,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
         if (userIds != null) {
             cri.where().andInList("pitcher_id", userIds);
         }
-        if (dto.getAgentId() != null) {
+        if (ArrayUtils.isNotEmpty(dto.getAgentId())) {
             cri.where().andInList("agent_id", Arrays.asList(dto.getAgentId()));
         }
         if (StringUtils.isNotBlank(dto.getCpName())) {
@@ -852,7 +860,7 @@ public class PromotionDayServiceImpl implements IAdsPromotionDayService {
         if (userIds != null) {
             cri.where().andInList("pitcher_id", userIds);
         }
-        if (dto.getAgentId() != null) {
+        if (ArrayUtils.isNotEmpty(dto.getAgentId())) {
             cri.where().andInList("agent_id", Arrays.asList(dto.getAgentId()));
         }
         if (StringUtils.isNotBlank(dto.getCpName())) {