瀏覽代碼

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

zhangxianyu 1 年之前
父節點
當前提交
f90d0cb136

+ 53 - 9
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/component/DataPowerComponent.java

@@ -14,12 +14,16 @@ 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;
+import org.nutz.dao.sql.Criteria;
+import org.nutz.dao.sql.Sql;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Component
@@ -31,6 +35,9 @@ public class DataPowerComponent {
     @DubboReference(providedBy = ServerInfo.SERVER_DUBBO_NAME)
     private GameAuthRpc gameAuthRpc;
 
+    @Autowired
+    private Dao dao;
+
     public Tuple2<List<Long>, List<Long>> getPowerInfo() {
         return getPowerInfo("ZX_ONE");
     }
@@ -54,7 +61,9 @@ public class DataPowerComponent {
             return Tuple2.with(new ArrayList<>(subUserIds), null);
         }
         GameAuthUserVO userGameInfo = gameAuthRpc.getGameAuthByUserIds().getData();
-        if (CollectionUtils.isEmpty(userGameInfo.getGameIdList())) {
+        //原有的游戏ID添加通包游戏的权限
+        List<Long> gameIds = getFullGameIdList(userGameInfo.getGameIdList());
+        if (CollectionUtils.isEmpty(gameIds)) {
             throw new BaseException("没有游戏查看权限,请联系管理员指派游戏权限");
         }
         GameAuthEnum gameAuth = userGameInfo.getGameAuthEnum();
@@ -66,22 +75,22 @@ public class DataPowerComponent {
                 return Tuple2.with(null, null);
             } else if (gameAuth == GameAuthEnum.OPERATE || gameAuth == GameAuthEnum.CUSTOMER || gameAuth == GameAuthEnum.GS) {
                 // 运营
-                return Tuple2.with(null, userGameInfo.getGameIdList());
+                return Tuple2.with(null, gameIds);
             } else {
                 // 投手
-                return Tuple2.with(new ArrayList<>(subUserIds), userGameInfo.getGameIdList());
+                return Tuple2.with(new ArrayList<>(subUserIds), gameIds);
             }
         } else {
             if (gameAuth == GameAuthEnum.MANAGE) {
                 return Tuple2.with(null, null);
             } else if (gameAuth == GameAuthEnum.OPERATE || gameAuth == GameAuthEnum.CUSTOMER || gameAuth == GameAuthEnum.GS) {
                 // 运营组长
-                return Tuple2.with(null, userGameInfo.getGameIdList());
+                return Tuple2.with(null, gameIds);
             } else {
                 // 投手组长
                 // 自然量
                 subUserIds.add(0L);
-                return Tuple2.with(new ArrayList<>(subUserIds), userGameInfo.getGameIdList());
+                return Tuple2.with(new ArrayList<>(subUserIds), gameIds);
             }
         }
     }
@@ -127,4 +136,39 @@ public class DataPowerComponent {
         }
         return gameIdList;
     }
+
+    /**
+     * 获取全量的游戏ID(补全虚拟的IOS包游戏ID)
+     * @param gameIds 用户拥有的游戏权限的游戏ID
+     * @return 游戏ID
+     */
+    public List<Long> getFullGameIdList(List<Long> gameIds) {
+        //查询条件
+        Criteria cri = Cnd.cri();
+        if (CollectionUtils.isEmpty(gameIds)) {
+            return null;
+        } else {
+            cri.where().andInList("id", gameIds);
+        }
+        cri.where().andEquals("source_system", "ZX_ONE");
+        cri.where().andEquals("is_common_game", 1);
+        Sql sql = Sqls.create("""
+                SELECT
+                    guide_game_ids
+                FROM dm_game_order.t_game
+                """ + cri);
+        sql.setCallback(Sqls.callback.strList());
+        dao.execute(sql);
+        List<String> strList = sql.getList(String.class);
+        if (CollectionUtils.isEmpty(strList)) {
+            return gameIds;
+        }
+        for (String str : strList) {
+            gameIds.addAll(Arrays.stream(str.split(",")).
+                    map(gameId -> Long.parseLong(gameId) + 10000).toList());
+        }
+        return gameIds;
+    }
+
+
 }

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

@@ -31,7 +31,7 @@ public class GamePromoteDayDTO extends BasePage {
     private String cpName;
 
     @ApiModelProperty(notes = "游戏id")
-    private List<Long> gameId;
+    private Long gameId;
     @ApiModelProperty(notes = "游戏名")
     private String gameName;
     @ApiModelProperty(notes = "游戏应用类型")

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

@@ -29,7 +29,7 @@ public class GamePromoteDayTotalDTO {
     private String cpName;
 
     @ApiModelProperty(notes = "游戏id")
-    private List<Long> gameId;
+    private Long gameId;
 
     @ApiModelProperty(notes = "游戏名")
     private String gameName;

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

@@ -54,7 +54,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
     public Page<GamePromoteDayVO> accountAgentDay(GamePromoteDayDTO dto) {
         Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
         List<Long> userIds = StringUtils.isBlank(dto.getSysUserId()) ? poerInfo.first : List.of(Long.valueOf(dto.getSysUserId()));
-        List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : List.of(dto.getGameId());
 
         if (null == dto.getBeginDay() || null == dto.getEndDay()) {
             dto.setBeginDay(LocalDate.now());
@@ -265,7 +265,7 @@ public class AccountAgentDayServiceImpl implements IAccountAgentDayService {
     public GamePromoteDayTotalVO accountAgentDayTotal(GamePromoteDayTotalDTO dto) {
         Tuple2<List<Long>, List<Long>> poerInfo = dataPowerComponent.getPowerInfo(dto.getSourceSystem());
         List<Long> userIds = StringUtils.isBlank(dto.getSysUserId()) ? poerInfo.first : List.of(Long.valueOf(dto.getSysUserId()));
-        List<Long> gameIds = CollectionUtils.isEmpty(dto.getGameId()) ? poerInfo.second : dto.getGameId();
+        List<Long> gameIds = dto.getGameId() == null ? poerInfo.second : List.of(dto.getGameId());
 
         if (null == dto.getBeginDay() || null == dto.getEndDay()) {
             dto.setBeginDay(LocalDate.now());

+ 20 - 17
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/GameDataServiceImpl.java

@@ -696,25 +696,25 @@ public class GameDataServiceImpl implements IGameDataService {
         GameDataDayTotalVO vo = gameDataDayTotalsql.getObject(GameDataDayTotalVO.class);
         if (vo.getAmountD1() != null) {
             formatDayNTotal(vo);
-        }
 
-        //得到所有userID
-        Long[] usersIdTotal = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
-        //得到所有用户的id整合字符串
-        String usersIdTotalStr = findUsersIdTotalForGameData(dto);
-        if (StringUtils.isNotBlank(usersIdTotalStr)) {
-            usersIdTotal = Arrays.stream(usersIdTotalStr.split("/"))
-                    .map(Long::parseLong)
-                    .toArray(Long[]::new);
+            //得到所有userID
+            Long[] usersIdTotal = ArrayUtils.EMPTY_LONG_OBJECT_ARRAY;
+            //得到所有用户的id整合字符串
+            String usersIdTotalStr = findUsersIdTotalForGameData(dto);
+            if (StringUtils.isNotBlank(usersIdTotalStr)) {
+                usersIdTotal = Arrays.stream(usersIdTotalStr.split("/"))
+                        .map(Long::parseLong)
+                        .toArray(Long[]::new);
+            }
+            FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
+                    .gameDimension(dto.getGameDimension())
+                    .sourceSystem(dto.getSourceSystem())
+                    .timeType("da1")
+                    .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
+                    .usersId(usersIdTotal)
+                    .build();
+            vo.setUserDetails(againTrendVO);
         }
-        FirstNewUserAgainTrendVO againTrendVO = FirstNewUserAgainTrendVO.builder()
-                .gameDimension(dto.getGameDimension())
-                .sourceSystem(dto.getSourceSystem())
-                .timeType("da1")
-                .rechargeCount(vo.getAmountD1Trend().getRechargeUserCount())
-                .usersId(usersIdTotal)
-                .build();
-        vo.setUserDetails(againTrendVO);
 
         return vo;
     }
@@ -5111,6 +5111,9 @@ public class GameDataServiceImpl implements IGameDataService {
     @Override
     public Page<GameDataUserDetailsVO> getUserDetails(GameDataUserDetailsDTO dto) {
 
+        if (dto.getAgainTrendVO() == null || StringUtils.isBlank(dto.getAgainTrendVO().getTimeType())) {
+            return new Page<>(null, dto.toPage());
+        }
         //得到需要查询的usersID内容
         FirstNewUserAgainTrendVO againTrendVO = dto.getAgainTrendVO();
         if (againTrendVO.getGameDimension() == null) {

+ 4 - 44
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/RoleManageServiceImpl.java

@@ -851,7 +851,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 		a.association_user_id as association_user_id, -- 来源的用户id
                 		a.source_system as source_system, -- sdk来源
                 		a.role_id as role_id, -- 角色id
-                		u.role_name as role_name, -- 角色名
+                		b.role_name as role_name, -- 角色名
                 		a.create_time as role_create_time, -- 角色创建时间
                 		a.os as os, -- 角色操作系统
                 		b.role_level as role_level, -- 角色等级
@@ -958,6 +958,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                 			-- 角色等级、角色攻击力(取最新的信息)
                 			source_system,
                 			role_id,
+                			role_name,
                 			role_level,
                 			combat_num,
                 			ROW_NUMBER()over(partition by role_id , source_system order by update_time desc, user_id desc) as num
@@ -1209,27 +1210,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         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
-                			a.source_system,
-                			a.role_id,
-                			a.role_name,
-                			a.role_level,
-                			a.combat_num ,
-                			a.game_id ,
-                			b.parent_game_id,
-                			b.super_game_id ,
-                			ROW_NUMBER()over(partition by a.source_system , a.role_id, b.parent_game_id order by a.role_level desc,a.combat_num desc) as num
-                		FROM dm_game_order.t_game_user_role a
-                		LEFT JOIN (
-                			SELECT
-                				source_system,
-                				id,
-                				IFNULL(parent_id, id) as parent_game_id,
-                				IFNULL(super_game_id, id) as super_game_id
-                			FROM dm_game_order.t_game
-                		) b on a.source_system = b.source_system AND a.game_id = b.id
-                	) u on a.source_system = u.source_system AND a.role_id = u.role_id AND d.super_game_id = u.super_game_id AND u.num =1
                 	LEFT JOIN (
                 		SELECT
                 			-- vip等级
@@ -1264,7 +1244,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         a.association_user_id as association_user_id, -- 来源的用户id
                         a.source_system as source_system, -- sdk来源
                         a.role_id as role_id, -- 角色id
-                        u.role_name as role_name, -- 角色名
+                        b.role_name as role_name, -- 角色名
                         a.create_time as role_create_time, -- 角色创建时间
                         a.os as os, -- 角色操作系统
                         b.role_level as role_level, -- 角色等级
@@ -1371,6 +1351,7 @@ public class RoleManageServiceImpl implements IRoleManageService {
                             -- 角色等级、角色攻击力(取最新的信息)
                             source_system,
                             role_id,
+                            role_name,
                             role_level,
                             combat_num,
                             ROW_NUMBER()over(partition by role_id , source_system order by update_time desc, user_id desc) as num
@@ -1622,27 +1603,6 @@ public class RoleManageServiceImpl implements IRoleManageService {
                         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
-                			a.source_system,
-                			a.role_id,
-                			a.role_name,
-                			a.role_level,
-                			a.combat_num ,
-                			a.game_id ,
-                			b.parent_game_id,
-                			b.super_game_id ,
-                			ROW_NUMBER()over(partition by a.source_system , a.role_id, b.parent_game_id order by a.role_level desc,a.combat_num desc) as num
-                		FROM dm_game_order.t_game_user_role a
-                		LEFT JOIN (
-                			SELECT
-                				source_system,
-                				id,
-                				IFNULL(parent_id, id) as parent_game_id,
-                				IFNULL(super_game_id, id) as super_game_id
-                			FROM dm_game_order.t_game
-                		) b on a.source_system = b.source_system AND a.game_id = b.id
-                	) u on a.source_system = u.source_system AND a.role_id = u.role_id AND d.super_game_id = u.super_game_id AND u.num =1
                 	LEFT JOIN (
                 		SELECT
                 			-- vip等级

+ 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服务启动成功 <导量逻辑> ( ´・・)ノ(._.`) \n" +
+        System.out.println("赞象Manage服务启动成功 <导量插入渠道变更记录, 修改手机号加限制> ( ´・・)ノ(._.`) \n" +
                 "___  ___  ___   _   _   ___  _____  _____ \n" +
                 "|  \\/  | / _ \\ | \\ | | / _ \\|  __ \\|  ___|\n" +
                 "| .  . |/ /_\\ \\|  \\| |/ /_\\ \\ |  \\/| |__  \n" +

+ 21 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/IUserAgentLogService.java

@@ -0,0 +1,21 @@
+package com.zanxiang.game.module.manage.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.mybatis.entity.UserAgentLog;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-20
+ * @description : 用户渠道记录
+ */
+public interface IUserAgentLogService extends IService<UserAgentLog> {
+
+    /**
+     * 注册代理日志
+     *
+     * @param user 用户
+     * @return boolean
+     */
+    boolean regAgentLog(User user);
+}

+ 44 - 0
game-module/game-module-manage/src/main/java/com/zanxiang/game/module/manage/service/impl/UserAgentLogServiceImpl.java

@@ -0,0 +1,44 @@
+package com.zanxiang.game.module.manage.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zanxiang.game.module.manage.service.IUserAgentLogService;
+import com.zanxiang.game.module.mybatis.entity.Agent;
+import com.zanxiang.game.module.mybatis.entity.User;
+import com.zanxiang.game.module.mybatis.entity.UserAgentLog;
+import com.zanxiang.game.module.mybatis.mapper.UserAgentLogMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : lingfeng
+ * @time : 2023-07-20
+ * @description : 用户渠道记录
+ */
+@Slf4j
+@Service
+public class UserAgentLogServiceImpl extends ServiceImpl<UserAgentLogMapper, UserAgentLog> implements IUserAgentLogService {
+
+    @Override
+    public boolean regAgentLog(User user) {
+        if (Agent.DEFAULT_AGENT.equals(user.getAgentId()) || Strings.isBlank(user.getChannel())) {
+            return Boolean.FALSE;
+        }
+        try {
+            return super.save(this.transform(user));
+        } catch (Exception e) {
+            log.error("用户注册渠道记录保存异常, userId : {}, e : {}", user.getId(), e.getMessage());
+        }
+        return Boolean.FALSE;
+    }
+
+    private UserAgentLog transform(User user) {
+        return UserAgentLog.builder()
+                .userId(user.getId())
+                .newAgentId(user.getAgentId())
+                .newChannel(user.getChannel())
+                .createTime(user.getCreateTime())
+                .updateTime(user.getCreateTime())
+                .build();
+    }
+}

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

@@ -83,6 +83,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Autowired
     private IGameAuthService gameAuthService;
 
+    @Autowired
+    private IUserAgentLogService userAgentLogService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean appletToH5(Long userId, String mobile, Integer type) {
@@ -179,10 +182,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         ).collect(Collectors.toList());
         gameUserRoleService.saveBatch(h5GameUserRoleList);
         //用户更新
-        return super.update(new LambdaUpdateWrapper<User>()
+        super.update(new LambdaUpdateWrapper<User>()
                 .set(User::getRelationUserId, h5User.getId())
                 .set(User::getRelationCreateTime, LocalDateTime.now())
                 .eq(User::getId, userId));
+        //添加导量用户的渠道变更记录
+        return userAgentLogService.regAgentLog(h5User);
     }
 
     @Override
@@ -304,6 +309,16 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean userUpdate(UserUpdateParam param) {
+        if (Strings.isNotBlank(param.getMobile()) && !param.getMobile().contains("*")) {
+            User user = super.getById(param.getUserId());
+            //判断手机号是否被该游戏其他用户绑定
+            if (super.count(new LambdaQueryWrapper<User>()
+                    .eq(User::getGameId, user.getGameId())
+                    .eq(User::getMobile, param.getMobile())
+            ) > 0) {
+                throw new BaseException("手机号已被同游戏其他玩家绑定, 禁止修改");
+            }
+        }
         //用户信息更新
         if (Strings.isNotBlank(param.getMobile()) || Strings.isNotBlank(param.getAliPay()) || Strings.isNotBlank(param.getPassword())) {
             super.update(new LambdaUpdateWrapper<User>()