Browse Source

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

zhimo 11 months ago
parent
commit
2cc9dc9a3c
27 changed files with 1173 additions and 317 deletions
  1. 6 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/component/DataPowerComponent.java
  2. 4 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/MsgTaskDTO.java
  3. 4 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/MsgTaskResultDTO.java
  4. 33 0
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleRechargeRankingDTO.java
  5. 23 7
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailServiceImpl.java
  6. 35 7
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameListServiceImpl.java
  7. 329 301
      game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java
  8. 4 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/params/SendMsgTaskParam.java
  9. 4 0
      game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/params/SendMsgTaskResultParam.java
  10. 1 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/ManageApplication.java
  11. 87 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameAuthGroupController.java
  12. 28 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthGroupAddUpdateParam.java
  13. 21 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthGroupListParam.java
  14. 31 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleGroupAddParam.java
  15. 28 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleGroupListParam.java
  16. 39 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthGroupVO.java
  17. 51 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthRoleGroupVO.java
  18. 40 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthGroupService.java
  19. 40 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthRoleGroupService.java
  20. 2 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/CPSendMsgTaskServiceImpl.java
  21. 3 1
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/CpSendMsgResultServiceImpl.java
  22. 97 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthGroupServiceImpl.java
  23. 99 0
      game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthRoleGroupServiceImpl.java
  24. 65 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthGroup.java
  25. 75 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthRoleGroup.java
  26. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameAuthGroupMapper.java
  27. 12 0
      game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/mapper/GameAuthRoleGroupMapper.java

+ 6 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/component/DataPowerComponent.java

@@ -61,8 +61,13 @@ public class DataPowerComponent {
             return Tuple2.with(new ArrayList<>(subUserIds), null);
         }
         GameAuthUserVO userGameInfo = gameAuthRpc.getGameAuthByUserIds().getData();
+        log.error("11111, userId :{}, userGameInfo : {}", SecurityUtil.getUserId(), JsonUtil.toString(userGameInfo));
+        List<Long> gameIdList = userGameInfo.getGameIdList();
+//        String str = gameIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
         //原有的游戏ID添加通包游戏的权限
         List<Long> gameIds = getFullGameIdList(userGameInfo.getGameIdList());
+//        String strIds = gameIds.stream().map(String::valueOf).collect(Collectors.joining(","));
+        log.error("22222, userId :{},gameIds : {}",SecurityUtil.getUserId(), JsonUtil.toString(gameIds));
         if (CollectionUtils.isEmpty(gameIds)) {
             throw new BaseException("没有游戏查看权限,请联系管理员指派游戏权限");
         }
@@ -139,6 +144,7 @@ public class DataPowerComponent {
 
     /**
      * 获取全量的游戏ID(补全虚拟的IOS包游戏ID)
+     *
      * @param gameIds 用户拥有的游戏权限的游戏ID
      * @return 游戏ID
      */

+ 4 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/MsgTaskDTO.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.data.serve.pojo.dto;
 
 import com.zanxiang.game.data.serve.pojo.base.BasePage;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -15,4 +16,7 @@ public class MsgTaskDTO extends BasePage {
     @ApiModelProperty(value = "游戏id")
     private Long gameId;
 
+    @ApiModelProperty(value = "任务状态")
+    private String taskStatus;
+
 }

+ 4 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/MsgTaskResultDTO.java

@@ -1,6 +1,7 @@
 package com.zanxiang.game.data.serve.pojo.dto;
 
 import com.zanxiang.game.data.serve.pojo.base.BasePage;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
@@ -17,4 +18,7 @@ public class MsgTaskResultDTO extends BasePage implements Serializable {
 
     @NotNull(message = "任务id不能为空")
     private Long taskId;
+
+    @ApiModelProperty(value = "发送状态")
+    private String sendStatus;
 }

+ 33 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/dto/RoleRechargeRankingDTO.java

@@ -238,5 +238,38 @@ public class RoleRechargeRankingDTO extends BasePage {
     @ApiModelProperty(value = "角色最近活跃时间结束时间")
     private LocalDate lastActiveTimeMax;
 
+    /**
+     * 角色等级最小值
+     */
+    @ApiModelProperty(value = "角色等级最小值")
+    private Long roleLevelMin;
+    /**
+     * 角色等级最大值
+     */
+    @ApiModelProperty(value = "角色等级最大值")
+    private Long roleLevelMax;
+
+    /**
+     * 玩家注册时间开始时间
+     */
+    @ApiModelProperty(value = "玩家注册时间开始时间")
+    private LocalDate registerTimeMin;
+    /**
+     * 玩家注册时间结束时间
+     */
+    @ApiModelProperty(value = "玩家注册时间结束时间")
+    private LocalDate registerTimeMax;
+    /**
+     * 玩家注册渠道类型(0自然量  1非自然量)
+     */
+    @ApiModelProperty(value = "玩家注册渠道类型(0自然量  1非自然量)")
+    private Integer registerType;
+
+    /**
+     * 玩家渠道id
+     */
+    @ApiModelProperty(value = "玩家渠道id")
+    private List<Long> agentIds;
+
 
 }

+ 23 - 7
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailServiceImpl.java

@@ -14,6 +14,7 @@ import com.zanxiang.game.data.serve.pojo.vo.AdsOrderDetailVO;
 import com.zanxiang.game.data.serve.pojo.vo.OrderCPDetailVO;
 import com.zanxiang.game.data.serve.service.IAdsOrderDetailService;
 import com.zanxiang.game.data.serve.utils.Page;
+import com.zanxiang.module.util.JsonUtil;
 import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -27,6 +28,8 @@ import org.nutz.dao.sql.Sql;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -39,13 +42,21 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
     private Dao dao;
     @Autowired
     private DataPowerComponent dataPowerComponent;
-
     @Override
     public Page<AdsOrderDetailVO> listOfPage(AdsOrderDetailListDTO dto) {
         Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
         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();
-
+        List<Long> paramGameIds = dto.getGameId();
+        log.error("传进来的游戏id:{}", JsonUtil.toStringWithClass(paramGameIds));
+        log.error("拥有权限的游戏id:{}", JsonUtil.toStringWithClass(poerInfo.second));
+        if (CollectionUtils.isNotEmpty(paramGameIds)) {
+            //将paramGameIds中不在authGameIds中的游戏id过滤掉
+            if (poerInfo.second != null) {
+                paramGameIds.retainAll(poerInfo.second);
+            }
+        } else {
+            paramGameIds = poerInfo.second;
+        }
         Criteria cri = Cnd.cri();
         if (StringUtils.isNotBlank(dto.getSourceSystem())) {
             cri.where().andEquals("source_system", dto.getSourceSystem());
@@ -71,8 +82,8 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
         if (StringUtils.isNotBlank(dto.getSourceServerName())) {
             cri.where().andLike("source_server_name", dto.getSourceServerName());
         }
-        if (gameIds != null) {
-            cri.where().andInList("order_game_id", gameIds);
+        if (paramGameIds != null) {
+            cri.where().andInList("order_game_id", paramGameIds);
         }
         if (CollectionUtils.isNotEmpty(dto.getChannelId())) {
             cri.where().andInStrList("agent_id", dto.getChannelId());
@@ -147,7 +158,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
             }
         }
         //添加判断,除去BG的数据 BG的数据在我们这找不到用户以及渠道
-        if(StringUtils.isNotEmpty(dto.getSourceSystem())&&dto.getSourceSystem().contains("BG")){
+        if (StringUtils.isNotEmpty(dto.getSourceSystem()) && dto.getSourceSystem().contains("BG")) {
             cri.where().andNotIsNull("agent_name");
             cri.where().andNotIsNull("username");
         }
@@ -294,7 +305,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
             }
         }
         //添加判断,除去BG的数据 BG的数据在我们这找不到用户以及渠道
-        if(StringUtils.isNotEmpty(dto.getSourceSystem())&&dto.getSourceSystem().contains("BG")){
+        if (StringUtils.isNotEmpty(dto.getSourceSystem()) && dto.getSourceSystem().contains("BG")) {
             cri.where().andNotIsNull("agent_name");
             cri.where().andNotIsNull("username");
         }
@@ -328,6 +339,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
 
     /**
      * 订单详情列表
+     *
      * @param gameOrder 原始表中的数据
      * @return AdsOrderDetailVO
      */
@@ -344,6 +356,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
 
     /**
      * cp回调信息
+     *
      * @param tPayCallCpLog 原始表中的数据
      * @return OrderCPDetailVO
      */
@@ -356,6 +369,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
 
     /**
      * 查询订单列表sql
+     *
      * @return String
      */
     private String getOrderDetailSql() {
@@ -527,6 +541,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
 
     /**
      * 查询订单列表记录数sql
+     *
      * @return String
      */
     private String getCountSql() {
@@ -698,6 +713,7 @@ public class AdsOrderDetailServiceImpl implements IAdsOrderDetailService {
 
     /**
      * 查询订单总计
+     *
      * @return String
      */
     private String getOrderDetailTotalSql() {

+ 35 - 7
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameListServiceImpl.java

@@ -1,10 +1,19 @@
 package com.zanxiang.game.data.serve.service.impl;
 
+import com.github.sd4324530.jtuple.Tuple2;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.data.serve.component.DataPowerComponent;
 import com.zanxiang.game.data.serve.pojo.dto.ChoiceListDTO;
 import com.zanxiang.game.data.serve.pojo.vo.GameListVO;
 import com.zanxiang.game.data.serve.service.IGameListService;
+import com.zanxiang.game.module.base.ServerInfo;
+import com.zanxiang.game.module.base.pojo.vo.GameAuthUserVO;
+import com.zanxiang.game.module.base.rpc.GameAuthRpc;
+import com.zanxiang.module.util.JsonUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.nutz.dao.Cnd;
 import org.nutz.dao.Dao;
 import org.nutz.dao.Sqls;
@@ -13,6 +22,8 @@ import org.nutz.dao.sql.Sql;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -26,15 +37,26 @@ public class GameListServiceImpl implements IGameListService {
 
     @Autowired
     private Dao dao;
+    @Autowired
+    private DataPowerComponent dataPowerComponent;
+
+    @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
+    private GameAuthRpc gameAuthRpc;
 
     /**
      * 游戏列表接口 查看所有游戏、父游戏、超父游戏列表
+     *
      * @param dto
      * @return
      */
     @Override
     public GameListVO getGameList(ChoiceListDTO dto) {
-
+        GameAuthUserVO userGameInfo = gameAuthRpc.getGameAuthByUserIds().getData();
+        List<Long> gameIds = dataPowerComponent.getFullGameIdList(userGameInfo.getGameIdList());
+        log.error("userId:{},下拉框游戏列表gameIds:{}", SecurityUtil.getUserId(), JsonUtil.toString(gameIds));
+        if (CollectionUtils.isEmpty(gameIds)) {
+            return null;
+        }
         Criteria cri = Cnd.cri();
         if (StringUtils.isBlank(dto.getSourceSystem())) {
             //默认查询“ZX_ONE”数据
@@ -44,6 +66,10 @@ public class GameListServiceImpl implements IGameListService {
             //不同的数据源
             cri.where().andEquals("source_system", dto.getSourceSystem());
         }
+        Criteria gameCri = Cnd.cri();
+        if (CollectionUtils.isNotEmpty(gameIds)) {
+            gameCri.where().andInList("a.id", gameIds);
+        }
 
         //查询游戏列表
         Sql gameListSql = Sqls.create("""
@@ -69,11 +95,12 @@ public class GameListServiceImpl implements IGameListService {
                 	on a.source_system = b.source_system AND a.parent_id = b.id
                 	LEFT JOIN dm_game_order.t_game_super c
                 	on a.source_system = c.source_system AND a.super_game_id = c.id
+                	""" + gameCri + """
                 ) a
                 """ + cri +
                 """
-                GROUP BY id, game_name, parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
-                """);
+                        GROUP BY id, game_name, parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
+                        """);
         gameListSql.setCallback(Sqls.callback.maps());
         dao.execute(gameListSql);
 
@@ -97,11 +124,12 @@ public class GameListServiceImpl implements IGameListService {
                 	on a.source_system = b.source_system AND a.parent_id = b.id
                 	LEFT JOIN dm_game_order.t_game_super c
                 	on a.source_system = c.source_system AND a.super_game_id = c.id
+                	""" + gameCri + """
                 ) a
                 """ + cri +
                 """
-                GROUP BY parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
-                """);
+                        GROUP BY parent_game_id, source_system, parent_game_name, super_game_id, super_game_name;
+                        """);
         parentGameListSql.setCallback(Sqls.callback.maps());
         dao.execute(parentGameListSql);
 
@@ -123,8 +151,8 @@ public class GameListServiceImpl implements IGameListService {
                 ) a
                 """ + cri +
                 """
-                GROUP BY super_game_id, source_system, super_game_name;
-                """);
+                        GROUP BY super_game_id, source_system, super_game_name;
+                        """);
         superGameListSql.setCallback(Sqls.callback.maps());
         dao.execute(superGameListSql);
 

+ 329 - 301
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java

@@ -69,7 +69,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         Criteria criTodayAmount = getDateSqlByQuery(dto);
         //判断是否合服 默认不合服
         String margeSql = "is_merge = 0";
-        if(dto.getIsMergeServer()){
+        if (dto.getIsMergeServer()) {
             margeSql = "is_source_server = 0";
         }
         //分页对象
@@ -78,7 +78,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         StopWatch watch = new StopWatch();
         watch.start();
         //查询总记录数
-        Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount,margeSql));
+        Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount, margeSql));
         countSql.setCallback(Sqls.callback.integer());
         dao.execute(countSql);
         watch.stop();
@@ -96,7 +96,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         //创建sql
         StopWatch watch2 = new StopWatch();
         watch2.start();
-        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount,margeSql));
+        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount, margeSql));
         sql.setCallback(Sqls.callback.maps());
         sql.setPager(pager);
         dao.execute(sql);
@@ -161,14 +161,14 @@ public class RoleManageServiceImpl implements IRoleManageService {
         Pager pager = dao.createPager(dto.getPageNum(), dto.getPageSize());
         //判断是否合服 默认不合服
         String margeSql = "is_merge = 0";
-        if(dto.getIsMergeServer()){
+        if (dto.getIsMergeServer()) {
             margeSql = "is_source_server = 0";
         }
 
         StopWatch watch = new StopWatch();
         watch.start();
         //查询总记录数
-        Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount,margeSql));
+        Sql countSql = Sqls.create(getCountNumSql2(criA, criTodayAmount, margeSql));
         countSql.setCallback(Sqls.callback.integer());
         dao.execute(countSql);
         watch.stop();
@@ -186,7 +186,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         //创建sql
         StopWatch watch2 = new StopWatch();
         watch2.start();
-        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount,margeSql));
+        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount, margeSql));
         sql.setCallback(Sqls.callback.maps());
         sql.setPager(pager);
         dao.execute(sql);
@@ -262,6 +262,33 @@ public class RoleManageServiceImpl implements IRoleManageService {
             dto.setIsMergeServer(Boolean.FALSE);
         }
         Criteria criA = Cnd.cri();
+
+        //角色等级区间筛选
+        if (dto.getRoleLevelMin() != null) {
+            criA.where().andGTE("role_level", dto.getRoleLevelMin());
+        }
+        if (dto.getRoleLevelMax() != null) {
+            criA.where().andLTE("role_level", dto.getRoleLevelMin());
+        }
+        //玩家注册时间
+        if (dto.getRegisterTimeMax() != null && dto.getRegisterTimeMin() != null) {
+            criA.where().andBetween("user_create_time", dto.getRegisterTimeMin(), dto.getRegisterTimeMax());
+        }
+        //玩家渠道
+        if (CollectionUtils.isNotEmpty(dto.getAgentIds())) {
+            criA.where().andInList("agent_id", dto.getAgentIds());
+        }
+
+        //玩家注册渠道类型(0自然量  1非自然量)
+        if (dto.getRegisterType() != null) {
+            if (dto.getRegisterType() == 0) {
+                criA.where().andEquals("agent_id", 0);
+            } else {
+                criA.where().andNotEquals("agent_id", 0);
+            }
+        }
+
+
         if (CollectionUtils.isNotEmpty(dto.getGameId())) {
             //角色注册子游戏
             criA.where().andInList("role_reg_game_id", dto.getGameId());
@@ -717,11 +744,11 @@ public class RoleManageServiceImpl implements IRoleManageService {
         }
         //判断是否合服 默认不合服
         String margeSql = "is_merge = 0";
-        if(dto.getIsMergeServer()){
+        if (dto.getIsMergeServer()) {
             margeSql = "is_source_server = 0";
         }
         //创建sql
-        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount,margeSql));
+        Sql sql = Sqls.create(getRoleRechargeRankingSql(criA, criTodayAmount, margeSql));
         sql.setCallback(Sqls.callback.maps());
         dao.execute(sql);
         return sql.getList(Map.class);
@@ -738,6 +765,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         try {
             SendMsgTaskParam sendMsgTaskParam = new SendMsgTaskParam();
             sendMsgTaskParam.setGameId(dto.getGameId());
+            sendMsgTaskParam.setTaskStatus(dto.getTaskStatus());
             sendMsgTaskParam.setPageNum(dto.getPageNum());
             sendMsgTaskParam.setPageSize(dto.getPageSize());
             PageUtil<SendMsgVO> sendMsgTaskList = sendMsgRpc.getSendMsgTaskList(sendMsgTaskParam);
@@ -818,6 +846,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
         try {
             SendMsgTaskResultParam param = new SendMsgTaskResultParam();
             param.setTaskId(msgTaskResultDto.getTaskId());
+            param.setSendStatus(msgTaskResultDto.getSendStatus());
             param.setPageNum(msgTaskResultDto.getPageNum());
             param.setPageSize(msgTaskResultDto.getPageSize());
             PageUtil<SendMsgResultVO> sendMsgTaskResultList = sendMsgRpc.getSendMsgTaskResultList(param);
@@ -863,7 +892,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
     }
 
 
-
     /**
      * 补充查询发送消息任务结果sql
      *
@@ -1466,7 +1494,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
      * @param criTodayAmount 当天充值金额相关的查询条件
      * @return String
      */
-    private String getRoleRechargeRankingSql(Criteria criA, Criteria criTodayAmount,String margeSql) {
+    private String getRoleRechargeRankingSql(Criteria criA, Criteria criTodayAmount, String margeSql) {
         return """
                 SELECT
                 	*
@@ -1669,210 +1697,210 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 		FROM dm_game_order.t_game_order
                 """ + criTodayAmount +
                 """
-                                GROUP BY role_id ,source_system
-                            ) p on a.source_system = p.source_system AND a.role_id = p.role_id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 区服名
-                                    source_system ,
-                                    game_id,
-                                    server_id,
-                                    server_name
-                                FROM dm_game_order.t_game_server
-                            ) q on a.source_system = q.source_system AND a.game_id = q.game_id AND a.server_id = q.server_id
-                            LEFT JOIN (
+                            GROUP BY role_id ,source_system
+                        ) p on a.source_system = p.source_system AND a.role_id = p.role_id
+                        LEFT JOIN (
+                            SELECT
+                                -- 区服名
+                                source_system ,
+                                game_id,
+                                server_id,
+                                server_name
+                            FROM dm_game_order.t_game_server
+                        ) q on a.source_system = q.source_system AND a.game_id = q.game_id AND a.server_id = q.server_id
+                        LEFT JOIN (
+                            SELECT
+                                -- 合服id、合服名称
+                                source_system,
+                                game_id,
+                                source_server_ids,
+                                server_id,
+                                server_name
+                            FROM dm_game_order.t_game_server_merge
+                            WHERE   
+                            """ + margeSql + """ 
+                        AND is_delete = 0
+                    ) r on a.source_system = r.source_system AND a.server_id = r.source_server_ids AND d.super_game_id = r.game_id
+                    LEFT JOIN (
+                        -- 玩家信息
+                        -- 玩家ID、玩家账号、玩家昵称、注册电话、注册邮箱、注册时间、注册游戏、注册渠道
+                        SELECT
+                            i.source_system as source_system,
+                            i.association_user_id as association_user_id, -- 来源用户id
+                            i.id as id, -- 玩家id
+                            i.username as username,
+                            i.nickname as nickname,
+                            i.reg_mobile as reg_mobile,
+                            i.reg_email as reg_email,
+                            i.user_create_time as user_create_time,
+                            i.user_reg_game_id as user_reg_game_id,
+                            k.game_name as user_reg_game_name,
+                            l.update_time as user_active_time,
+                            m.user_last_recharge_game_id as user_last_recharge_game_id,
+                            n.game_name as user_last_recharge_game_name,
+                            m.pay_time as user_pay_time -- 玩家最近充值时间
+                        FROM
+                        (
+                            SELECT
+                                *
+                            FROM
+                            (
                                 SELECT
-                                    -- 合服id、合服名称
                                     source_system,
-                                    game_id,
-                                    source_server_ids,
-                                    server_id,
-                                    server_name
-                                FROM dm_game_order.t_game_server_merge
-                                WHERE   
-                                """ + margeSql + """ 
-                                AND is_delete = 0
-                            ) r on a.source_system = r.source_system AND a.server_id = r.source_server_ids AND d.super_game_id = r.game_id
-                            LEFT JOIN (
-                                -- 玩家信息
-                                -- 玩家ID、玩家账号、玩家昵称、注册电话、注册邮箱、注册时间、注册游戏、注册渠道
-                                SELECT
-                                    i.source_system as source_system,
-                                    i.association_user_id as association_user_id, -- 来源用户id
-                                    i.id as id, -- 玩家id
-                                    i.username as username,
-                                    i.nickname as nickname,
-                                    i.reg_mobile as reg_mobile,
-                                    i.reg_email as reg_email,
-                                    i.user_create_time as user_create_time,
-                                    i.user_reg_game_id as user_reg_game_id,
-                                    k.game_name as user_reg_game_name,
-                                    l.update_time as user_active_time,
-                                    m.user_last_recharge_game_id as user_last_recharge_game_id,
-                                    n.game_name as user_last_recharge_game_name,
-                                    m.pay_time as user_pay_time -- 玩家最近充值时间
-                                FROM
-                                (
-                                    SELECT
-                                        *
-                                    FROM
-                                    (
-                                        SELECT
-                                            source_system,
-                                            association_user_id, -- 来源用户id
-                                            id , -- 玩家id
-                                            username ,
-                                            nickname ,
-                                            reg_mobile ,
-                                            reg_email ,
-                                            create_time as user_create_time,
-                                            game_id as user_reg_game_id,
-                                            ROW_NUMBER()over(partition by association_user_id, source_system order by create_time desc, id asc) as num
-                                        FROM dm_game_order.t_game_user
-                                    ) z WHERE z.num = 1
-                                ) i
-                                LEFT JOIN (
-                                    SELECT
-                                        -- 玩家注册游戏名
-                                        source_system,
-                                        id,
-                                        game_name
-                                    FROM dm_game_order.t_game
-                                ) k ON i.user_reg_game_id = k.id AND i.source_system = k.source_system
-                                LEFT JOIN (
-                                    -- 玩家最近活跃时间
-                        			SELECT
-                        			    association_user_id,
-                        			    b.source_system,
-                        			    b.active_time as update_time,
-                        			    ROW_NUMBER()over(partition by association_user_id, b.source_system order by b.active_time desc) as num
-                        			FROM dm_game_order.t_game_user a
-                        			LEFT JOIN (
-                        			    SELECT
-                        			    	source_system ,
-                        			    	user_id,
-                        			    	active_time
-                        			    FROM game_dw.dw_active_log
-                        			) b ON a.source_system = b.source_system AND a.id = b.user_id
-                                ) l ON i.association_user_id = l.association_user_id AND i.source_system = l.source_system AND l.num = 1
-                                LEFT JOIN (
-                                    -- 玩家最近充值游戏、玩家最近充值时间
-                                    SELECT
-                                        association_user_id,
-                                        b.*,
-                                        ROW_NUMBER()over(partition by association_user_id, b.source_system order by pay_time desc) as num
-                                    FROM dm_game_order.t_game_user a
-                                    RIGHT JOIN (
-                                        -- 玩家最近充值游戏id、最近充值时间
-                                        SELECT
-                                            source_system,
-                                            user_id,
-                                            game_id as user_last_recharge_game_id,
-                                            pay_time
-                                        FROM dm_game_order.t_game_order
-                                        WHERE status = 2
-                                    ) b on a.id = b.user_id AND a.source_system = b.source_system
-                                ) m on i.association_user_id = m.association_user_id AND i.source_system = m.source_system AND m.num = 1
-                                LEFT JOIN (
-                                    SELECT
-                                        -- 玩家最近充值游戏名
-                                        source_system,
-                                        id,
-                                        game_name
-                                    FROM dm_game_order.t_game
-                                ) n ON m.user_last_recharge_game_id = n.id AND m.source_system = n.source_system
-                            ) i on a.source_system = i.source_system AND a.association_user_id = i.association_user_id
-                            LEFT JOIN (
+                                    association_user_id, -- 来源用户id
+                                    id , -- 玩家id
+                                    username ,
+                                    nickname ,
+                                    reg_mobile ,
+                                    reg_email ,
+                                    create_time as user_create_time,
+                                    game_id as user_reg_game_id,
+                                    ROW_NUMBER()over(partition by association_user_id, source_system order by create_time desc, id asc) as num
+                                FROM dm_game_order.t_game_user
+                            ) z WHERE z.num = 1
+                        ) i
+                        LEFT JOIN (
+                            SELECT
+                                -- 玩家注册游戏名
+                                source_system,
+                                id,
+                                game_name
+                            FROM dm_game_order.t_game
+                        ) k ON i.user_reg_game_id = k.id AND i.source_system = k.source_system
+                        LEFT JOIN (
+                            -- 玩家最近活跃时间
+                			SELECT
+                			    association_user_id,
+                			    b.source_system,
+                			    b.active_time as update_time,
+                			    ROW_NUMBER()over(partition by association_user_id, b.source_system order by b.active_time desc) as num
+                			FROM dm_game_order.t_game_user a
+                			LEFT JOIN (
+                			    SELECT
+                			    	source_system ,
+                			    	user_id,
+                			    	active_time
+                			    FROM game_dw.dw_active_log
+                			) b ON a.source_system = b.source_system AND a.id = b.user_id
+                        ) l ON i.association_user_id = l.association_user_id AND i.source_system = l.source_system AND l.num = 1
+                        LEFT JOIN (
+                            -- 玩家最近充值游戏、玩家最近充值时间
+                            SELECT
+                                association_user_id,
+                                b.*,
+                                ROW_NUMBER()over(partition by association_user_id, b.source_system order by pay_time desc) as num
+                            FROM dm_game_order.t_game_user a
+                            RIGHT JOIN (
+                                -- 玩家最近充值游戏id、最近充值时间
                                 SELECT
-                                    -- 操作表相关数据
                                     source_system,
                                     user_id,
-                                    role_id,
-                                    server_id,
-                                    game_id,
-                                    is_send_mail, -- 是否发送邮件
-                                    send_gift_id, -- 最新发送礼包id
-                                    is_change_game_type, -- 是否转端 1-是;0-否
-                                    is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
-                                    add_corp_user_id, -- 企微号
-                                    user_wechat, -- 客户微信号
-                                    user_phone, -- 客户手机号
-                                    is_remove_game, -- 是否退游 1-是;0-否
-                                    is_wake_up, -- 是否唤醒 1-是;0-否
-                                    remark, -- 备注
-                                    gs_id, -- GS_ID
-                                    customer_service_id, -- 客服ID
-                                    oper_user_id, -- 运营ID
-                                    create_time, -- 创建时间
-                                    create_by, -- 创建者
-                                    update_time, -- 更新时间
-                                    update_by, -- 更新者
-                                    is_delete -- 是否删除 1-删除;0-正常
-                                FROM dm_game_order.t_role_operate
-                            ) j on a.source_system = j.source_system AND a.association_user_id = j.user_id AND
-                            a.role_id = j.role_id AND a.server_id = j.server_id AND a.game_id = j.game_id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 礼包名
-                                    source_system,
-                                    id,
-                                    gift_name
-                                FROM dm_game_order.t_game_gift
-                            ) k on j.source_system = k.source_system AND j.send_gift_id = k.id
-                            LEFT JOIN (
-                                SELECT
-                                    source_system ,
-                                    id,
-                                    name
-                                FROM dm_game_order.t_game_super
-                            ) s on d.source_system = s.source_system AND d.super_game_id = s.id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 原始服名
-                                    source_system,
-                                    game_id,
-                                    server_id,
-                                    server_name
-                                FROM dm_game_order.t_game_server_merge
-                                WHERE is_delete = 0
-                            ) t on a.source_system = t.source_system AND a.server_id = t.server_id AND d.super_game_id = t.game_id
-                        	LEFT JOIN (
-                        		SELECT
-                        			-- vip等级
-                        			source_system ,
-                        			super_game_id ,
-                        			parent_game_id ,
-                        			recharge_money_min ,
-                        			recharge_money_max ,
-                        			vip_level ,
-                        			is_delete
-                        		FROM dm_game_order.t_game_vip
-                        		WHERE is_delete = 0
-                        	) w on d.source_system = w.source_system AND IFNULL(d.parent_id, a.game_id) = w.parent_game_id
-                        	AND IFNULL(d.super_game_id, a.game_id) = w.super_game_id
-                        	AND c.amount >= w.recharge_money_min AND c.amount < recharge_money_max
-                        	LEFT JOIN (
-                        		SELECT
-                        			source_system,
-                        			id,
-                        			create_time,
-                        			end_time,
-                        			agent_id,
-                        			association_user_id
-                        		FROM dm_game_order.t_game_user_burst
-                        	) x on a.source_system = x.source_system AND a.association_user_id = x.id
-                        	AND a.create_time >= x.create_time AND a.create_time < x.end_time
-                        	LEFT JOIN (
-                                SELECT
-                                    -- 渠道名称、投手id
-                                    source_system,
-                                    id,
-                                    agent_name,
-                                    pitcher_id as put_user_id
-                                FROM dm_game_order.t_pitcher_agent
-                            ) y ON x.agent_id = y.id AND x.source_system = y.source_system
-                        ) a
-                        """ + criA;
+                                    game_id as user_last_recharge_game_id,
+                                    pay_time
+                                FROM dm_game_order.t_game_order
+                                WHERE status = 2
+                            ) b on a.id = b.user_id AND a.source_system = b.source_system
+                        ) m on i.association_user_id = m.association_user_id AND i.source_system = m.source_system AND m.num = 1
+                        LEFT JOIN (
+                            SELECT
+                                -- 玩家最近充值游戏名
+                                source_system,
+                                id,
+                                game_name
+                            FROM dm_game_order.t_game
+                        ) n ON m.user_last_recharge_game_id = n.id AND m.source_system = n.source_system
+                    ) i on a.source_system = i.source_system AND a.association_user_id = i.association_user_id
+                    LEFT JOIN (
+                        SELECT
+                            -- 操作表相关数据
+                            source_system,
+                            user_id,
+                            role_id,
+                            server_id,
+                            game_id,
+                            is_send_mail, -- 是否发送邮件
+                            send_gift_id, -- 最新发送礼包id
+                            is_change_game_type, -- 是否转端 1-是;0-否
+                            is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
+                            add_corp_user_id, -- 企微号
+                            user_wechat, -- 客户微信号
+                            user_phone, -- 客户手机号
+                            is_remove_game, -- 是否退游 1-是;0-否
+                            is_wake_up, -- 是否唤醒 1-是;0-否
+                            remark, -- 备注
+                            gs_id, -- GS_ID
+                            customer_service_id, -- 客服ID
+                            oper_user_id, -- 运营ID
+                            create_time, -- 创建时间
+                            create_by, -- 创建者
+                            update_time, -- 更新时间
+                            update_by, -- 更新者
+                            is_delete -- 是否删除 1-删除;0-正常
+                        FROM dm_game_order.t_role_operate
+                    ) j on a.source_system = j.source_system AND a.association_user_id = j.user_id AND
+                    a.role_id = j.role_id AND a.server_id = j.server_id AND a.game_id = j.game_id
+                    LEFT JOIN (
+                        SELECT
+                            -- 礼包名
+                            source_system,
+                            id,
+                            gift_name
+                        FROM dm_game_order.t_game_gift
+                    ) k on j.source_system = k.source_system AND j.send_gift_id = k.id
+                    LEFT JOIN (
+                        SELECT
+                            source_system ,
+                            id,
+                            name
+                        FROM dm_game_order.t_game_super
+                    ) s on d.source_system = s.source_system AND d.super_game_id = s.id
+                    LEFT JOIN (
+                        SELECT
+                            -- 原始服名
+                            source_system,
+                            game_id,
+                            server_id,
+                            server_name
+                        FROM dm_game_order.t_game_server_merge
+                        WHERE is_delete = 0
+                    ) t on a.source_system = t.source_system AND a.server_id = t.server_id AND d.super_game_id = t.game_id
+                	LEFT JOIN (
+                		SELECT
+                			-- vip等级
+                			source_system ,
+                			super_game_id ,
+                			parent_game_id ,
+                			recharge_money_min ,
+                			recharge_money_max ,
+                			vip_level ,
+                			is_delete
+                		FROM dm_game_order.t_game_vip
+                		WHERE is_delete = 0
+                	) w on d.source_system = w.source_system AND IFNULL(d.parent_id, a.game_id) = w.parent_game_id
+                	AND IFNULL(d.super_game_id, a.game_id) = w.super_game_id
+                	AND c.amount >= w.recharge_money_min AND c.amount < recharge_money_max
+                	LEFT JOIN (
+                		SELECT
+                			source_system,
+                			id,
+                			create_time,
+                			end_time,
+                			agent_id,
+                			association_user_id
+                		FROM dm_game_order.t_game_user_burst
+                	) x on a.source_system = x.source_system AND a.association_user_id = x.id
+                	AND a.create_time >= x.create_time AND a.create_time < x.end_time
+                	LEFT JOIN (
+                        SELECT
+                            -- 渠道名称、投手id
+                            source_system,
+                            id,
+                            agent_name,
+                            pitcher_id as put_user_id
+                        FROM dm_game_order.t_pitcher_agent
+                    ) y ON x.agent_id = y.id AND x.source_system = y.source_system
+                ) a
+                """ + criA;
     }
 
     /**
@@ -2297,7 +2325,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
      * @param criTodayAmount 今日充值条件
      * @return String
      */
-    private String getCountNumSql2(Criteria criA, Criteria criTodayAmount,String margeSql) {
+    private String getCountNumSql2(Criteria criA, Criteria criTodayAmount, String margeSql) {
         return """
                 SELECT
                     COUNT(1)
@@ -2465,97 +2493,97 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         FROM dm_game_order.t_game_order
                 """ + criTodayAmount +
                 """
-                                GROUP BY role_id ,source_system
-                            ) p on a.source_system = p.source_system AND a.role_id = p.role_id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 操作表相关数据
-                                    source_system,
-                                    user_id,
-                                    role_id,
-                                    server_id,
-                                    game_id,
-                                    user_phone, -- 客户手机号
-                                    is_send_mail, -- 是否发送邮件
-                                    send_gift_id, -- 最新发送礼包id
-                                    is_change_game_type, -- 是否转端 1-是;0-否
-                                    is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
-                                    is_remove_game, -- 是否退游 1-是;0-否
-                                    is_wake_up, -- 是否唤醒 1-是;0-否
-                                    gs_id, -- GS_ID
-                                    customer_service_id, -- 客服ID
-                                    oper_user_id, -- 运营ID
-                                    is_delete -- 是否删除 1-删除;0-正常
-                                FROM dm_game_order.t_role_operate
-                            ) j on a.source_system = j.source_system AND a.association_user_id = j.user_id AND
-                            a.role_id = j.role_id AND a.server_id = j.server_id AND a.game_id = j.game_id
-                            LEFT JOIN (
-                                SELECT
-                                    source_system ,
-                                    id,
-                                    name
-                                FROM dm_game_order.t_game_super
-                            ) s on d.source_system = s.source_system AND d.super_game_id = s.id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 合服id、合服名称
-                                    source_system,
-                                    game_id,
-                                    source_server_ids,
-                                    server_id,
-                                    server_name
-                                FROM dm_game_order.t_game_server_merge
-                                WHERE  
-                                 """ + margeSql + """ 
-                                  AND is_delete = 0
-                            ) r on a.source_system = r.source_system AND a.server_id = r.source_server_ids AND d.super_game_id = r.game_id
-                            LEFT JOIN (
-                                SELECT
-                                    -- 原始服名
-                                    source_system,
-                                    game_id,
-                                    server_id,
-                                    server_name
-                                FROM dm_game_order.t_game_server_merge
-                                WHERE is_delete = 0
-                            ) t on a.source_system = t.source_system AND a.server_id = t.server_id AND d.super_game_id = t.game_id
-                            LEFT JOIN (
-                                SELECT
-                                    -- vip等级
-                                    source_system ,
-                                    super_game_id ,
-                                    parent_game_id ,
-                                    recharge_money_min ,
-                                    recharge_money_max ,
-                                    vip_level ,
-                                    is_delete
-                                FROM dm_game_order.t_game_vip
-                                WHERE is_delete = 0
-                            ) w on d.source_system = w.source_system AND IFNULL(d.parent_id, a.game_id) = w.parent_game_id
-                            AND IFNULL(d.super_game_id, a.game_id) = w.super_game_id
-                            AND c.amount >= w.recharge_money_min AND c.amount < recharge_money_max
-                            LEFT JOIN (
-                                SELECT
-                                    source_system,
-                                    id,
-                                    create_time,
-                                    end_time,
-                                    agent_id,
-                                    association_user_id
-                                FROM dm_game_order.t_game_user_burst
-                            ) x on a.source_system = x.source_system AND a.association_user_id = x.id
-                            AND a.create_time >= x.create_time AND a.create_time < x.end_time
-                            LEFT JOIN (
-                                SELECT
-                                    -- 渠道名称、投手id
-                                    source_system,
-                                    id,
-                                    agent_name,
-                                    pitcher_id as put_user_id
-                                FROM dm_game_order.t_pitcher_agent
-                            ) y ON x.agent_id = y.id AND x.source_system = y.source_system
-                        ) a
-                        """ + criA;
+                            GROUP BY role_id ,source_system
+                        ) p on a.source_system = p.source_system AND a.role_id = p.role_id
+                        LEFT JOIN (
+                            SELECT
+                                -- 操作表相关数据
+                                source_system,
+                                user_id,
+                                role_id,
+                                server_id,
+                                game_id,
+                                user_phone, -- 客户手机号
+                                is_send_mail, -- 是否发送邮件
+                                send_gift_id, -- 最新发送礼包id
+                                is_change_game_type, -- 是否转端 1-是;0-否
+                                is_add_corp_wechat, -- 是否添加企微 1-是; 0-否
+                                is_remove_game, -- 是否退游 1-是;0-否
+                                is_wake_up, -- 是否唤醒 1-是;0-否
+                                gs_id, -- GS_ID
+                                customer_service_id, -- 客服ID
+                                oper_user_id, -- 运营ID
+                                is_delete -- 是否删除 1-删除;0-正常
+                            FROM dm_game_order.t_role_operate
+                        ) j on a.source_system = j.source_system AND a.association_user_id = j.user_id AND
+                        a.role_id = j.role_id AND a.server_id = j.server_id AND a.game_id = j.game_id
+                        LEFT JOIN (
+                            SELECT
+                                source_system ,
+                                id,
+                                name
+                            FROM dm_game_order.t_game_super
+                        ) s on d.source_system = s.source_system AND d.super_game_id = s.id
+                        LEFT JOIN (
+                            SELECT
+                                -- 合服id、合服名称
+                                source_system,
+                                game_id,
+                                source_server_ids,
+                                server_id,
+                                server_name
+                            FROM dm_game_order.t_game_server_merge
+                            WHERE  
+                             """ + margeSql + """ 
+                          AND is_delete = 0
+                    ) r on a.source_system = r.source_system AND a.server_id = r.source_server_ids AND d.super_game_id = r.game_id
+                    LEFT JOIN (
+                        SELECT
+                            -- 原始服名
+                            source_system,
+                            game_id,
+                            server_id,
+                            server_name
+                        FROM dm_game_order.t_game_server_merge
+                        WHERE is_delete = 0
+                    ) t on a.source_system = t.source_system AND a.server_id = t.server_id AND d.super_game_id = t.game_id
+                    LEFT JOIN (
+                        SELECT
+                            -- vip等级
+                            source_system ,
+                            super_game_id ,
+                            parent_game_id ,
+                            recharge_money_min ,
+                            recharge_money_max ,
+                            vip_level ,
+                            is_delete
+                        FROM dm_game_order.t_game_vip
+                        WHERE is_delete = 0
+                    ) w on d.source_system = w.source_system AND IFNULL(d.parent_id, a.game_id) = w.parent_game_id
+                    AND IFNULL(d.super_game_id, a.game_id) = w.super_game_id
+                    AND c.amount >= w.recharge_money_min AND c.amount < recharge_money_max
+                    LEFT JOIN (
+                        SELECT
+                            source_system,
+                            id,
+                            create_time,
+                            end_time,
+                            agent_id,
+                            association_user_id
+                        FROM dm_game_order.t_game_user_burst
+                    ) x on a.source_system = x.source_system AND a.association_user_id = x.id
+                    AND a.create_time >= x.create_time AND a.create_time < x.end_time
+                    LEFT JOIN (
+                        SELECT
+                            -- 渠道名称、投手id
+                            source_system,
+                            id,
+                            agent_name,
+                            pitcher_id as put_user_id
+                        FROM dm_game_order.t_pitcher_agent
+                    ) y ON x.agent_id = y.id AND x.source_system = y.source_system
+                ) a
+                """ + criA;
     }
 
 

+ 4 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/params/SendMsgTaskParam.java

@@ -18,5 +18,9 @@ public class SendMsgTaskParam extends BaseListDTO implements Serializable {
      * 游戏id
      */
     private Long gameId;
+    /**
+     * 任务状态
+     */
+    private String taskStatus;
 
 }

+ 4 - 0
game-module/game-module-base/src/main/java/com/zanxiang/game/module/base/pojo/params/SendMsgTaskResultParam.java

@@ -14,4 +14,8 @@ public class SendMsgTaskResultParam extends BaseListDTO implements Serializable
      * 任务id
      */
     private Long taskId;
+    /**
+     * 发送状态
+     */
+    private String sendStatus;
 }

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

@@ -23,7 +23,7 @@ public class ManageApplication {
 
     public static void main(String[] args) {
         SpringApplication.run(ManageApplication.class, args);
-        System.out.println("赞象Manage服务启动成功 < (头条投放虚拟游戏小程序改版03´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 < (新增权限分组´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 87 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/controller/GameAuthGroupController.java

@@ -0,0 +1,87 @@
+package com.zanxiang.game.module.manage.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.zanxiang.erp.security.annotation.PreAuthorize;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupAddUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupListParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthGroupVO;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleGroupVO;
+import com.zanxiang.game.module.manage.service.IGameAuthGroupService;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleGroupService;
+import com.zanxiang.module.util.pojo.ResultVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 角色授权分组
+ */
+@Api(tags = {"角色授权分组接口"})
+@RestController
+@RequestMapping("/game/auth/group")
+@Slf4j
+public class GameAuthGroupController {
+
+    @Autowired
+    private IGameAuthGroupService gameAuthGroupService;
+
+    @Autowired
+    private IGameAuthRoleGroupService gameAuthRoleGroupService;
+
+    @ApiOperation(value = "授权分组列表查询")
+    @PostMapping(value = "/listOfPage")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroup:listOfPage")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAuthGroupVO.class)})
+    public ResultVO<IPage<GameAuthGroupVO>> listOfPage(@Validated @RequestBody GameAuthGroupListParam param) {
+        return ResultVO.ok(gameAuthGroupService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "授权分组新增或者修改")
+    @PostMapping(value = "/add/or/update")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroup:addOrUpdate")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> addOrUpdate(@Validated @RequestBody GameAuthGroupAddUpdateParam param) {
+        return ResultVO.ok(gameAuthGroupService.addOrUpdate(param));
+    }
+
+    @ApiOperation(value = "授权分组删除")
+    @DeleteMapping(value = "/delete")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroup:deleteById")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> deleteById(@RequestParam Long id) {
+        return ResultVO.ok(gameAuthGroupService.deleteById(id));
+    }
+
+    @ApiOperation(value = "授权角色分组列表查询")
+    @PostMapping(value = "/role/listOfPage")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroupRole:listOfPage")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = GameAuthRoleGroupVO.class)})
+    public ResultVO<IPage<GameAuthRoleGroupVO>> list(@Validated @RequestBody GameAuthRoleGroupListParam param) {
+        return ResultVO.ok(gameAuthRoleGroupService.listOfPage(param));
+    }
+
+    @ApiOperation(value = "授权分组添加")
+    @PostMapping(value = "/role/add")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroupRole:add")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> add(@Validated @RequestBody GameAuthRoleGroupAddParam param) {
+        return ResultVO.ok(gameAuthRoleGroupService.groupAddUser(param));
+    }
+
+    @ApiOperation(value = "授权分组删除")
+    @DeleteMapping(value = "/role/delete")
+    @PreAuthorize(permissionKey = "manage:gameAuthGroupRole:deleteById")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "成功", response = Boolean.class)})
+    public ResultVO<Boolean> delete(@RequestParam Long id) {
+        return ResultVO.ok(gameAuthRoleGroupService.deleteById(id));
+    }
+}

+ 28 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthGroupAddUpdateParam.java

@@ -0,0 +1,28 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-20
+ * @description : 授权分组添加更新
+ */
+@Data
+public class GameAuthGroupAddUpdateParam {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "id, 不传则添加, 传则修改")
+    private Long id;
+
+    /**
+     * 组名称
+     */
+    @NotBlank(message = "组名称不可为空")
+    @ApiModelProperty(notes = "组名称, 必传")
+    private String groupName;
+}

+ 21 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthGroupListParam.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GameAuthGroup;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 授权分组查询参数
+ */
+@Data
+public class GameAuthGroupListParam extends BaseListDTO<GameAuthGroup> {
+
+    /**
+     * 分组名称
+     */
+    @ApiModelProperty(notes = "分组名称")
+    private String groupName;
+}

+ 31 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleGroupAddParam.java

@@ -0,0 +1,31 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 授权游戏角色分组参数
+ */
+@Data
+public class GameAuthRoleGroupAddParam {
+
+    /**
+     * 分组id
+     */
+    @NotNull(message = "分组id不可为空")
+    @ApiModelProperty(notes = "分组id")
+    private Long groupId;
+
+    /**
+     * 用户id列表
+     */
+    @NotEmpty(message = "用户id列表不可为空")
+    @ApiModelProperty(notes = "用户id列表")
+    private List<Long> userIdList;
+}

+ 28 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/params/GameAuthRoleGroupListParam.java

@@ -0,0 +1,28 @@
+package com.zanxiang.game.module.manage.pojo.params;
+
+import com.zanxiang.game.module.mybatis.entity.GameAuthRoleGroup;
+import com.zanxiang.module.web.pojo.BaseListDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 游戏授权角色分组
+ */
+@Data
+public class GameAuthRoleGroupListParam extends BaseListDTO<GameAuthRoleGroup> {
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Integer userId;
+
+    /**
+     * 是否组长
+     */
+    @ApiModelProperty(notes = "是否组长")
+    private Boolean isLeader;
+
+}

+ 39 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthGroupVO.java

@@ -0,0 +1,39 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 授权分组
+ */
+@Data
+public class GameAuthGroupVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 组名称
+     */
+    @ApiModelProperty(notes = "组名称")
+    private String groupName;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    @ApiModelProperty(notes = "更新时间")
+    private LocalDateTime updateTime;
+}

+ 51 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/pojo/vo/GameAuthRoleGroupVO.java

@@ -0,0 +1,51 @@
+package com.zanxiang.game.module.manage.pojo.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-21
+ * @description : 游戏授权角色分组
+ */
+@Data
+public class GameAuthRoleGroupVO {
+
+    /**
+     * 主键
+     */
+    @ApiModelProperty(notes = "主键")
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(notes = "用户id")
+    private Long userId;
+
+    /**
+     * 用户名称
+     */
+    @ApiModelProperty(notes = "用户名称")
+    private String userName;
+
+    /**
+     * 分组id
+     */
+    @ApiModelProperty(notes = "分组id")
+    private Long groupId;
+
+    /**
+     * 是否组长
+     */
+    @ApiModelProperty(notes = "是否组长")
+    private Boolean isLeader;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(notes = "创建时间")
+    private LocalDateTime createTime;
+}

+ 40 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthGroupService.java

@@ -0,0 +1,40 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupAddUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthGroupVO;
+import com.zanxiang.game.module.mybatis.entity.GameAuthGroup;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-20
+ * @description : 授权分组
+ */
+public interface IGameAuthGroupService extends IService<GameAuthGroup> {
+
+    /**
+     * 分页查询授权分组
+     *
+     * @param param : 查询参数
+     * @return : 返回分页数据
+     */
+    IPage<GameAuthGroupVO> listOfPage(GameAuthGroupListParam param);
+
+    /**
+     * 添加修改分组
+     *
+     * @param param : 参数
+     * @return : 返回执行结果
+     */
+    boolean addOrUpdate(GameAuthGroupAddUpdateParam param);
+
+    /**
+     * 删除
+     *
+     * @param id : 主键id
+     * @return : 返回结果
+     */
+    boolean deleteById(Long id);
+}

+ 40 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IGameAuthRoleGroupService.java

@@ -0,0 +1,40 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleGroupVO;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRoleGroup;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-20
+ * @description : 游戏授权角色分组
+ */
+public interface IGameAuthRoleGroupService extends IService<GameAuthRoleGroup> {
+
+    /**
+     * 根据id删除
+     *
+     * @param id : 主键id
+     * @return : 返回删除结果
+     */
+    boolean deleteById(Long id);
+
+    /**
+     * 分页查询游戏授权角色分组
+     *
+     * @param param : 查询参数
+     * @return : 返回分页数据
+     */
+    IPage<GameAuthRoleGroupVO> listOfPage(GameAuthRoleGroupListParam param);
+
+    /**
+     * 授权分组加人
+     *
+     * @param param : 参数
+     * @return : 返回添加结果
+     */
+    boolean groupAddUser(GameAuthRoleGroupAddParam param);
+}

+ 2 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/CPSendMsgTaskServiceImpl.java

@@ -16,6 +16,7 @@ import com.zanxiang.game.module.mybatis.mapper.CpSendMsgTaskMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
 import com.zanxiang.module.util.pojo.ResultVO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
@@ -61,6 +62,7 @@ public class CPSendMsgTaskServiceImpl extends ServiceImpl<CpSendMsgTaskMapper, C
         Page<CpSendMsgTask> page = sendMsgTaskService.page(new Page<>(param.getPageNum(), param.getPageSize()),
                 new LambdaQueryWrapper<CpSendMsgTask>()
                         .eq(param.getGameId() != null, CpSendMsgTask::getGameId, param.getGameId())
+                        .eq(StringUtils.isNotEmpty(param.getTaskStatus()), CpSendMsgTask::getType, param.getTaskStatus())
                         .orderByDesc(CpSendMsgTask::getCreateTime));
         List<CpSendMsgTask> cpSendMsgTasks = page.getRecords();
         List<SendMsgVO> sendMsgVos = toVo(cpSendMsgTasks);

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

@@ -11,6 +11,7 @@ import com.zanxiang.game.module.mybatis.entity.CpSendMsgResult;
 import com.zanxiang.game.module.mybatis.mapper.CpSendMsgResultMapper;
 import com.zanxiang.module.util.bean.BeanUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -32,11 +33,12 @@ public class CpSendMsgResultServiceImpl extends ServiceImpl<CpSendMsgResultMappe
         Page<CpSendMsgResult> page = this.page(new Page<>(param.getPageNum(), param.getPageSize()),
                 new LambdaQueryWrapper<CpSendMsgResult>()
                         .eq(CpSendMsgResult::getTaskId, param.getTaskId())
+                        .eq(StringUtils.isNotEmpty(param.getSendStatus()), CpSendMsgResult::getSendStatus, param.getSendStatus())
                         .orderByDesc(CpSendMsgResult::getCreateTime)
         );
         List<CpSendMsgResult> cpSendMsgResults = page.getRecords();
         List<SendMsgResultVO> sendMsgVos = toVo(cpSendMsgResults);
-        return new PageUtil<>(sendMsgVos, page.getTotal(), param.getPageSize(), param.getPageNum(),0);
+        return new PageUtil<>(sendMsgVos, page.getTotal(), param.getPageSize(), param.getPageNum(), 0);
     }
 
     private List<SendMsgResultVO> toVo(List<CpSendMsgResult> cpSendMsgResults) {

+ 97 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthGroupServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.base.pojo.enums.DeleteEnum;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupAddUpdateParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthGroupListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthGroupVO;
+import com.zanxiang.game.module.manage.service.IGameAuthGroupService;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleGroupService;
+import com.zanxiang.game.module.mybatis.entity.GameAuthGroup;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRoleGroup;
+import com.zanxiang.game.module.mybatis.mapper.GameAuthGroupMapper;
+import com.zanxiang.module.util.bean.BeanUtil;
+import com.zanxiang.module.util.exception.BaseException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Objects;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-20
+ * @description : 授权分组
+ */
+@Slf4j
+@Service
+public class GameAuthGroupServiceImpl extends ServiceImpl<GameAuthGroupMapper, GameAuthGroup> implements IGameAuthGroupService {
+
+    @Autowired
+    private IGameAuthRoleGroupService gameAuthRoleGroupService;
+
+    @Override
+    public IPage<GameAuthGroupVO> listOfPage(GameAuthGroupListParam param) {
+        return page(param.toPage(), new QueryWrapper<GameAuthGroup>().lambda()
+                .like(Strings.isNotBlank(param.getGroupName()), GameAuthGroup::getGroupName, param.getGroupName())
+                .eq(!SecurityUtil.isAdmin(), GameAuthGroup::getCreateBy, SecurityUtil.getUserId())
+                .orderByDesc(GameAuthGroup::getCreateTime)
+        ).convert(this::toVo);
+    }
+
+    private GameAuthGroupVO toVo(GameAuthGroup gameAuthGroup) {
+        if (Objects.isNull(gameAuthGroup)) {
+            return null;
+        }
+        return BeanUtil.copy(gameAuthGroup, GameAuthGroupVO.class);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addOrUpdate(GameAuthGroupAddUpdateParam param) {
+        //分组名称不可重复判断
+        if (super.count(new LambdaQueryWrapper<GameAuthGroup>()
+                .eq(GameAuthGroup::getGroupName, param.getGroupName())
+                .ne(param.getId() != null, GameAuthGroup::getId, param.getId())
+        ) > 0) {
+            throw new BaseException("参数错误, 分组名称不可重复");
+        }
+        //修改组名称
+        if (param.getId() != null) {
+            return super.update(new LambdaUpdateWrapper<GameAuthGroup>()
+                    .set(GameAuthGroup::getGroupName, param.getGroupName())
+                    .set(GameAuthGroup::getUpdateBy, SecurityUtil.getUserId())
+                    .set(GameAuthGroup::getUpdateTime, LocalDateTime.now())
+                    .eq(GameAuthGroup::getId, param.getId())
+            );
+        }
+        //组添加
+        return super.save(GameAuthGroup.builder()
+                .groupName(param.getGroupName())
+                .isDelete(DeleteEnum.NO.getCode())
+                .createBy(SecurityUtil.getUserId())
+                .createTime(LocalDateTime.now())
+                .build());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean deleteById(Long id) {
+        super.removeById(id);
+        gameAuthRoleGroupService.update(new LambdaUpdateWrapper<GameAuthRoleGroup>()
+                .set(GameAuthRoleGroup::getIsDelete, DeleteEnum.YES.getCode())
+                .set(GameAuthRoleGroup::getUpdateBy, SecurityUtil.getUserId())
+                .set(GameAuthRoleGroup::getUpdateTime, LocalDateTime.now())
+                .eq(GameAuthRoleGroup::getGroupId, id)
+        );
+        return Boolean.TRUE;
+    }
+}

+ 99 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/GameAuthRoleGroupServiceImpl.java

@@ -0,0 +1,99 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.erp.base.ErpServer;
+import com.zanxiang.erp.base.rpc.ISysUserRpc;
+import com.zanxiang.erp.security.util.SecurityUtil;
+import com.zanxiang.game.module.base.pojo.enums.DeleteEnum;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupAddParam;
+import com.zanxiang.game.module.manage.pojo.params.GameAuthRoleGroupListParam;
+import com.zanxiang.game.module.manage.pojo.vo.GameAuthRoleGroupVO;
+import com.zanxiang.game.module.manage.service.IGameAuthRoleGroupService;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRoleGroup;
+import com.zanxiang.game.module.mybatis.mapper.GameAuthRoleGroupMapper;
+import com.zanxiang.module.util.bean.BeanUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-20
+ * @description : 游戏授权角色分组
+ */
+@Slf4j
+@Service
+public class GameAuthRoleGroupServiceImpl extends ServiceImpl<GameAuthRoleGroupMapper, GameAuthRoleGroup> implements IGameAuthRoleGroupService {
+
+    @DubboReference(providedBy = ErpServer.SERVER_DUBBO_NAME)
+    private ISysUserRpc sysUserRpc;
+
+    @Override
+    public IPage<GameAuthRoleGroupVO> listOfPage(GameAuthRoleGroupListParam param) {
+        IPage<GameAuthRoleGroupVO> gameAuthRoleGroupPage = page(param.toPage(), new QueryWrapper<GameAuthRoleGroup>().lambda()
+                .eq(param.getUserId() != null, GameAuthRoleGroup::getUserId, param.getUserId())
+                .eq(param.getIsLeader() != null, GameAuthRoleGroup::getIsLeader, param.getIsLeader())
+                .orderByDesc(GameAuthRoleGroup::getCreateTime)
+        ).convert(this::toVo);
+        List<GameAuthRoleGroupVO> records = gameAuthRoleGroupPage.getRecords();
+        if (CollectionUtils.isEmpty(records)) {
+            return gameAuthRoleGroupPage;
+        }
+        List<Long> userIdList = records.stream().map(GameAuthRoleGroupVO::getUserId)
+                .distinct().collect(Collectors.toList());
+        Map<Long, String> userNameMap = sysUserRpc.getUserNameByIds(userIdList).getData();
+        records.forEach(r -> r.setUserName(userNameMap.get(r.getUserId())));
+        return gameAuthRoleGroupPage;
+    }
+
+    private GameAuthRoleGroupVO toVo(GameAuthRoleGroup gameAuthRoleGroup) {
+        if (Objects.isNull(gameAuthRoleGroup)) {
+            return null;
+        }
+        return BeanUtil.copy(gameAuthRoleGroup, GameAuthRoleGroupVO.class);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean groupAddUser(GameAuthRoleGroupAddParam param) {
+        List<GameAuthRoleGroup> addList = new ArrayList<>();
+        param.getUserIdList().forEach(userId -> {
+            if (super.count(new LambdaQueryWrapper<GameAuthRoleGroup>()
+                    .eq(GameAuthRoleGroup::getGroupId, param.getGroupId())
+                    .eq(GameAuthRoleGroup::getUserId, userId)
+            ) > 0) {
+                return;
+            }
+            addList.add(this.transform(param.getGroupId(), userId));
+        });
+        return super.saveBatch(addList);
+    }
+
+    private GameAuthRoleGroup transform(Long groupId, Long userId) {
+        return GameAuthRoleGroup.builder()
+                .userId(userId)
+                .groupId(groupId)
+                .isLeader(Boolean.FALSE)
+                .isDelete(DeleteEnum.NO.getCode())
+                .createBy(SecurityUtil.getUserId())
+                .createTime(LocalDateTime.now())
+                .build();
+    }
+
+    @Override
+    public boolean deleteById(Long id) {
+        return super.removeById(id);
+    }
+}

+ 65 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthGroup.java

@@ -0,0 +1,65 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-16
+ * @description : 授权分组
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("t_game_auth_group")
+public class GameAuthGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 组名称
+     */
+    private String groupName;
+
+    /**
+     * 1 删除  0 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

+ 75 - 0
game-module/game-module-mybatis/src/main/java/com/zanxiang/game/module/mybatis/entity/GameAuthRoleGroup.java

@@ -0,0 +1,75 @@
+package com.zanxiang.game.module.mybatis.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-16
+ * @description : 游戏授权角色分组
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("t_game_auth_role_group")
+public class GameAuthRoleGroup implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 分组id
+     */
+    private Long groupId;
+
+    /**
+     * 是否组长
+     */
+    private Boolean isLeader;
+
+    /**
+     * 1 删除  0 正常
+     */
+    @TableLogic
+    private Integer isDelete;
+
+    /**
+     * 创建者
+     */
+    private Long createBy;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新者
+     */
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+}

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

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameAuthGroup;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-16
+ * @description : ${description}
+ */
+public interface GameAuthGroupMapper extends BaseMapper<GameAuthGroup> {
+}

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

@@ -0,0 +1,12 @@
+package com.zanxiang.game.module.mybatis.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zanxiang.game.module.mybatis.entity.GameAuthRoleGroup;
+
+/**
+ * @author : lingfeng
+ * @time : 2024-05-16
+ * @description : ${description}
+ */
+public interface GameAuthRoleGroupMapper extends BaseMapper<GameAuthRoleGroup> {
+}