|
@@ -338,6 +338,111 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
|
|
|
return new Page<>(list, pager);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public Map getPlayerRoleTotalData(PlayerRoleDataListDTO dto) {
|
|
|
+ //查询条件
|
|
|
+ Criteria cri = Cnd.cri();
|
|
|
+ if (dto.getUserId() != null) {
|
|
|
+ cri.where().andEquals("user_id", dto.getUserId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getUserName())) {
|
|
|
+ //玩家账号
|
|
|
+ cri.where().andEquals("username", dto.getUserName());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getNickname())) {
|
|
|
+ //玩家昵称
|
|
|
+ cri.where().andLike("nickname", dto.getNickname());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getRegIp())) {
|
|
|
+ //玩家注册IP
|
|
|
+ cri.where().andEquals("reg_ip", dto.getRegIp());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getServerName())) {
|
|
|
+ //游戏区服
|
|
|
+ cri.where().andLike("server_name", dto.getServerName());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getRoleName())) {
|
|
|
+ cri.where().andLike("role_name", dto.getRoleName());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getRoleId())) {
|
|
|
+ cri.where().andEquals("role_id", dto.getRoleId());
|
|
|
+ }
|
|
|
+ if (dto.getCpId() != null) {
|
|
|
+ cri.where().andEquals("cp_id", dto.getCpId());
|
|
|
+ }
|
|
|
+ if (dto.getGameId() != null) {
|
|
|
+ cri.where().andEquals("game_id", dto.getGameId());
|
|
|
+ }
|
|
|
+ if (dto.getGameCategoryId() != null) {
|
|
|
+ //游戏应用类型
|
|
|
+ cri.where().andEquals("game_category_id", dto.getGameCategoryId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getAccountId())) {
|
|
|
+ //推广账号ID
|
|
|
+ cri.where().andEquals("account_id", dto.getAccountId());
|
|
|
+ }
|
|
|
+ if (dto.getChannelId() != null) {
|
|
|
+ //渠道ID
|
|
|
+ cri.where().andEquals("agent_id", dto.getChannelId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getPitcherId())) {
|
|
|
+ cri.where().andEquals("pitcher_id", dto.getPitcherId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getOs())) {
|
|
|
+ cri.where().andEquals("os", dto.getOs());
|
|
|
+ }
|
|
|
+ //判断是否充值
|
|
|
+ if (BooleanUtils.isFalse(dto.getIsRecharge())) {
|
|
|
+ //未充值 充值金额为0
|
|
|
+ cri.where().andEquals("recharge_money", 0);
|
|
|
+ }
|
|
|
+ if (BooleanUtils.isTrue(dto.getIsRecharge())) {
|
|
|
+ //充值金额大于0
|
|
|
+ cri.where().andNotEquals("recharge_money", 0);
|
|
|
+ }
|
|
|
+ if (dto.getVipLevel() != null) {
|
|
|
+ cri.where().andEquals("role_vip_level", dto.getVipLevel());
|
|
|
+ }
|
|
|
+ if (dto.getRoleLevelMin() != null) {
|
|
|
+ //玩家最小等级
|
|
|
+ cri.where().andGTE("role_level", dto.getRoleLevelMin());
|
|
|
+ }
|
|
|
+ if (dto.getRoleLevelMax() != null) {
|
|
|
+ //玩家最大等级
|
|
|
+ cri.where().andLTE("role_level", dto.getRoleLevelMax());
|
|
|
+ }
|
|
|
+ if (dto.getBeginDate() != null && dto.getEndDate() != null) {
|
|
|
+ //角色创建时间
|
|
|
+ cri.where().andBetween("DATE(create_time)", dto.getBeginDate(), dto.getEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getRechargeBeginDate() != null && dto.getRechargeEndDate() != null) {
|
|
|
+ //最近充值时间
|
|
|
+ cri.where().andBetween("DATE(last_recharge_time)", dto.getRechargeBeginDate(), dto.getRechargeEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getRegTimeBeginDate() != null && dto.getRegTimeEndDate() != null) {
|
|
|
+ //玩家注册时间
|
|
|
+ cri.where().andBetween("DATE(reg_time)", dto.getRegTimeBeginDate(), dto.getRegTimeEndDate());
|
|
|
+ }
|
|
|
+ if (dto.getRegPayIntervalTimeMin() != null) {
|
|
|
+ //充值到注册的最小间隔时间(分)
|
|
|
+ cri.where().andGTE("TIMESTAMPDIFF(MINUTE, reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMin());
|
|
|
+ }
|
|
|
+ if (dto.getRegPayIntervalTimeMax() != null) {
|
|
|
+ //充值到注册的最大间隔时间(分)
|
|
|
+ cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, last_recharge_time)", dto.getRegPayIntervalTimeMax());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(dto.getSourceSystem())) {
|
|
|
+ cri.where().andEquals("source_system", dto.getSourceSystem());
|
|
|
+ }
|
|
|
+ //查询sql
|
|
|
+ Sql sql = Sqls.create(getUserRoleDataTotalSql() + cri);
|
|
|
+ sql.setCallback(Sqls.callback.map());
|
|
|
+ //执行sql 得到结果
|
|
|
+ dao.execute(sql);
|
|
|
+
|
|
|
+ return sql.getObject(Map.class);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 玩家登陆日志列表
|
|
|
* @param dto PlayerLoginLogDataListDTO
|
|
@@ -733,12 +838,13 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
|
|
|
-- 角色最近充值时间、角色最近充值金额
|
|
|
source_system,
|
|
|
role_id,
|
|
|
+ user_id,
|
|
|
real_amount,
|
|
|
pay_time,
|
|
|
- ROW_NUMBER()over(partition by role_id , source_system order by pay_time desc) as num
|
|
|
+ ROW_NUMBER()over(partition by role_id , user_id , source_system order by pay_time desc) as num
|
|
|
FROM dm_game_order.t_game_order
|
|
|
WHERE status =2
|
|
|
- ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
|
|
|
+ ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND a.user_id = g.user_id AND g.num = 1
|
|
|
LEFT JOIN (
|
|
|
SELECT
|
|
|
a.source_system,
|
|
@@ -766,20 +872,21 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
|
|
|
game_id,
|
|
|
active_time,
|
|
|
role_id ,
|
|
|
- ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
|
|
|
+ ROW_NUMBER()over(partition by role_id ,user_id, source_system order by active_time desc) as num
|
|
|
FROM game_dw.dw_active_log
|
|
|
) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
|
|
|
LEFT JOIN (
|
|
|
SELECT
|
|
|
-- 累计充值金额、累计充值次数
|
|
|
role_id,
|
|
|
+ user_id ,
|
|
|
source_system,
|
|
|
SUM(real_amount) as amount ,
|
|
|
COUNT(user_id) as amount_count
|
|
|
FROM dm_game_order.t_game_order
|
|
|
WHERE status =2
|
|
|
- GROUP BY role_id , source_system
|
|
|
- ) j on a.source_system = j.source_system AND a.role_id = j.role_id
|
|
|
+ GROUP BY role_id , user_id , source_system
|
|
|
+ ) j on a.source_system = j.source_system AND a.role_id = j.role_id AND a.user_id = j.user_id
|
|
|
) a
|
|
|
""";
|
|
|
}
|
|
@@ -791,107 +898,216 @@ public class PlayerDataServiceImpl implements IPlayerDataService {
|
|
|
private String getUserRoleDataListCountSql() {
|
|
|
return """
|
|
|
SELECT
|
|
|
- COUNT(1)
|
|
|
+ COUNT(1)
|
|
|
FROM (
|
|
|
- SELECT
|
|
|
- *
|
|
|
- FROM (
|
|
|
- SELECT
|
|
|
- a.id, -- 主键id
|
|
|
- a.source_system , -- SDK来源
|
|
|
- a.user_id , -- 玩家ID
|
|
|
- b.username , -- 玩家账号
|
|
|
- b.nickname , -- 玩家昵称
|
|
|
- b.ip as reg_ip, -- 玩家注册IP
|
|
|
- b.create_time as reg_time, -- 玩家注册时间
|
|
|
- b.agent_id , -- 注册渠道ID
|
|
|
- IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
|
|
|
- c.pitcher_id , -- 投手ID
|
|
|
- d.zx_pitcher_name as pitcher_name, -- 投手名
|
|
|
- c.account_id , -- 推广账号ID
|
|
|
- c.account_name , -- 推广账号名
|
|
|
- c.account_type , -- 推广账号类型
|
|
|
- a.game_id , -- 角色注册游戏ID
|
|
|
- e.game_name , -- 游戏名
|
|
|
- e.classify as game_category_id, -- 游戏应用类型
|
|
|
- e.cp_id , -- cpID
|
|
|
- f.cp_name , -- cp名字
|
|
|
- h.server_id , -- 角色注册区服ID
|
|
|
- h.server_name , -- 区服名
|
|
|
- h.origin_server_id , -- 原始区服ID
|
|
|
- h.origin_server_name as source_server_name, -- 原始区服名
|
|
|
- a.role_id , -- 角色ID
|
|
|
- a.role_name , -- 角色名
|
|
|
- a.role_level , -- 角色等级
|
|
|
- a.combat_num as role_power, -- 角色攻击力
|
|
|
- a.role_vip as role_vip_level, -- 角色vip
|
|
|
- a.os , -- 角色操作系统
|
|
|
- a.create_time as create_time, -- 角色创建时间
|
|
|
- a.update_time, -- 角色最近更新时间
|
|
|
- g.pay_time as last_recharge_time, -- 角色最近充值时间
|
|
|
- TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as reg_pay_time_diff, -- 最近充值距注册时间差(秒)
|
|
|
- i.active_time as last_login_time, -- 玩家最近登陆时间
|
|
|
- j.amount as recharge_money, -- 角色充值金额
|
|
|
- j.amount_count as recharge_count -- 角色充值次数
|
|
|
- FROM dm_game_order.t_game_user_role a
|
|
|
- LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
|
|
|
- LEFT JOIN dm_game_order.t_pitcher_agent c on b.source_system = c.source_system AND b.agent_id = c.id
|
|
|
- LEFT JOIN dm_game_order.t_pitcher_map d on c.source_system = d.source_system AND c.pitcher_id = d.zx_pitcher_id
|
|
|
- LEFT JOIN dm_game_order.t_game e on a.source_system = e.source_system AND a.game_id = e.id
|
|
|
- LEFT JOIN dm_game_order.t_cp f on e.source_system = f.source_system AND e.cp_id = f.id
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- -- 角色最近充值时间、角色最近充值金额
|
|
|
- source_system,
|
|
|
- role_id,
|
|
|
- real_amount,
|
|
|
- pay_time,
|
|
|
- ROW_NUMBER()over(partition by role_id , source_system order by pay_time desc) as num
|
|
|
- FROM dm_game_order.t_game_order
|
|
|
- WHERE status =2
|
|
|
- ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND g.num = 1
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- a.source_system,
|
|
|
- a.game_id, -- 子游戏ID
|
|
|
- a.server_id, -- 区服ID
|
|
|
- a.server_name, -- 区服名(冠名后)
|
|
|
- ifnull(b.server_id,a.server_id) as origin_server_id, -- 原始区服ID
|
|
|
- ifnull(b.server_name,a.server_name) as origin_server_name -- 原始区服名
|
|
|
- from (
|
|
|
- SELECT
|
|
|
- a.game_id ,
|
|
|
- a.server_id ,
|
|
|
- a.server_name ,
|
|
|
- b.super_game_id,
|
|
|
- a.source_system
|
|
|
- FROM dm_game_order.t_game_server a
|
|
|
- LEFT JOIN dm_game_order.t_game b on a.source_system = b.source_system AND a.game_id = b.id
|
|
|
- )a LEFT JOIN dm_game_order.t_game_server_merge b
|
|
|
- on a.source_system = b.source_system AND a.super_game_id = b.game_id AND a.server_id = b.server_id
|
|
|
- ) h on a.source_system = h.source_system AND a.server_id = h.server_id AND a.game_id = h.game_id
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- source_system ,
|
|
|
- user_id,
|
|
|
- game_id,
|
|
|
- active_time,
|
|
|
- role_id ,
|
|
|
- ROW_NUMBER()over(partition by role_id , source_system order by active_time desc) as num
|
|
|
- FROM game_dw.dw_active_log
|
|
|
- ) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
|
|
|
- LEFT JOIN (
|
|
|
- SELECT
|
|
|
- -- 累计充值金额、累计充值次数
|
|
|
- role_id,
|
|
|
- source_system,
|
|
|
- SUM(real_amount) as amount ,
|
|
|
- COUNT(user_id) as amount_count
|
|
|
- FROM dm_game_order.t_game_order
|
|
|
- WHERE status =2
|
|
|
- GROUP BY role_id , source_system
|
|
|
- ) j on a.source_system = j.source_system AND a.role_id = j.role_id
|
|
|
- ) a
|
|
|
+ SELECT
|
|
|
+ a.id, -- 主键id
|
|
|
+ a.source_system , -- SDK来源
|
|
|
+ a.user_id , -- 玩家ID
|
|
|
+ b.username , -- 玩家账号
|
|
|
+ b.nickname , -- 玩家昵称
|
|
|
+ b.ip as reg_ip, -- 玩家注册IP
|
|
|
+ b.create_time as reg_time, -- 玩家注册时间
|
|
|
+ b.agent_id , -- 注册渠道ID
|
|
|
+ IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
|
|
|
+ c.pitcher_id , -- 投手ID
|
|
|
+ d.zx_pitcher_name as pitcher_name, -- 投手名
|
|
|
+ c.account_id , -- 推广账号ID
|
|
|
+ c.account_name , -- 推广账号名
|
|
|
+ c.account_type , -- 推广账号类型
|
|
|
+ a.game_id , -- 角色注册游戏ID
|
|
|
+ e.game_name , -- 游戏名
|
|
|
+ e.classify as game_category_id, -- 游戏应用类型
|
|
|
+ e.cp_id , -- cpID
|
|
|
+ f.cp_name , -- cp名字
|
|
|
+ h.server_id , -- 角色注册区服ID
|
|
|
+ h.server_name , -- 区服名
|
|
|
+ h.origin_server_id , -- 原始区服ID
|
|
|
+ h.origin_server_name as source_server_name, -- 原始区服名
|
|
|
+ a.role_id , -- 角色ID
|
|
|
+ a.role_name , -- 角色名
|
|
|
+ a.role_level , -- 角色等级
|
|
|
+ a.combat_num as role_power, -- 角色攻击力
|
|
|
+ a.role_vip as role_vip_level, -- 角色vip
|
|
|
+ a.os , -- 角色操作系统
|
|
|
+ a.create_time as create_time, -- 角色创建时间
|
|
|
+ a.update_time, -- 角色最近更新时间
|
|
|
+ g.pay_time as last_recharge_time, -- 角色最近充值时间
|
|
|
+ TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as reg_pay_time_diff, -- 最近充值距注册时间差(秒)
|
|
|
+ i.active_time as last_login_time, -- 玩家最近登陆时间
|
|
|
+ j.amount as recharge_money, -- 角色充值金额
|
|
|
+ j.amount_count as recharge_count -- 角色充值次数
|
|
|
+ FROM dm_game_order.t_game_user_role a
|
|
|
+ LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
|
|
|
+ LEFT JOIN dm_game_order.t_pitcher_agent c on b.source_system = c.source_system AND b.agent_id = c.id
|
|
|
+ LEFT JOIN dm_game_order.t_pitcher_map d on c.source_system = d.source_system AND c.pitcher_id = d.zx_pitcher_id
|
|
|
+ LEFT JOIN dm_game_order.t_game e on a.source_system = e.source_system AND a.game_id = e.id
|
|
|
+ LEFT JOIN dm_game_order.t_cp f on e.source_system = f.source_system AND e.cp_id = f.id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色最近充值时间、角色最近充值金额
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ user_id,
|
|
|
+ real_amount,
|
|
|
+ pay_time,
|
|
|
+ ROW_NUMBER()over(partition by role_id , user_id , source_system order by pay_time desc) as num
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND a.user_id = g.user_id AND g.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ a.source_system,
|
|
|
+ a.game_id, -- 子游戏ID
|
|
|
+ a.server_id, -- 区服ID
|
|
|
+ a.server_name, -- 区服名(冠名后)
|
|
|
+ ifnull(b.server_id,a.server_id) as origin_server_id, -- 原始区服ID
|
|
|
+ ifnull(b.server_name,a.server_name) as origin_server_name -- 原始区服名
|
|
|
+ from (
|
|
|
+ SELECT
|
|
|
+ a.game_id ,
|
|
|
+ a.server_id ,
|
|
|
+ a.server_name ,
|
|
|
+ b.super_game_id,
|
|
|
+ a.source_system
|
|
|
+ FROM dm_game_order.t_game_server a
|
|
|
+ LEFT JOIN dm_game_order.t_game b on a.source_system = b.source_system AND a.game_id = b.id
|
|
|
+ )a LEFT JOIN dm_game_order.t_game_server_merge b
|
|
|
+ on a.source_system = b.source_system AND a.super_game_id = b.game_id AND a.server_id = b.server_id
|
|
|
+ ) h on a.source_system = h.source_system AND a.server_id = h.server_id AND a.game_id = h.game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ source_system ,
|
|
|
+ user_id,
|
|
|
+ game_id,
|
|
|
+ active_time,
|
|
|
+ role_id ,
|
|
|
+ ROW_NUMBER()over(partition by role_id ,user_id, source_system order by active_time desc) as num
|
|
|
+ FROM game_dw.dw_active_log
|
|
|
+ ) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 累计充值金额、累计充值次数
|
|
|
+ role_id,
|
|
|
+ user_id ,
|
|
|
+ source_system,
|
|
|
+ SUM(real_amount) as amount ,
|
|
|
+ COUNT(user_id) as amount_count
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ GROUP BY role_id , user_id , source_system
|
|
|
+ ) j on a.source_system = j.source_system AND a.role_id = j.role_id AND a.user_id = j.user_id
|
|
|
+ ) a
|
|
|
+ """;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 玩家角色列表总计一栏sql
|
|
|
+ * @return String
|
|
|
+ */
|
|
|
+ private String getUserRoleDataTotalSql() {
|
|
|
+ return """
|
|
|
+ SELECT
|
|
|
+ SUM(recharge_money) as recharge_money,
|
|
|
+ SUM(recharge_count) as recharge_count
|
|
|
+ FROM (
|
|
|
+ SELECT
|
|
|
+ a.id, -- 主键id
|
|
|
+ a.source_system , -- SDK来源
|
|
|
+ a.user_id , -- 玩家ID
|
|
|
+ b.username , -- 玩家账号
|
|
|
+ b.nickname , -- 玩家昵称
|
|
|
+ b.ip as reg_ip, -- 玩家注册IP
|
|
|
+ b.create_time as reg_time, -- 玩家注册时间
|
|
|
+ b.agent_id , -- 注册渠道ID
|
|
|
+ IF(b.agent_id = 0, '自然量', c.agent_name) as agent_name , -- 注册渠道名
|
|
|
+ c.pitcher_id , -- 投手ID
|
|
|
+ d.zx_pitcher_name as pitcher_name, -- 投手名
|
|
|
+ c.account_id , -- 推广账号ID
|
|
|
+ c.account_name , -- 推广账号名
|
|
|
+ c.account_type , -- 推广账号类型
|
|
|
+ a.game_id , -- 角色注册游戏ID
|
|
|
+ e.game_name , -- 游戏名
|
|
|
+ e.classify as game_category_id, -- 游戏应用类型
|
|
|
+ e.cp_id , -- cpID
|
|
|
+ f.cp_name , -- cp名字
|
|
|
+ h.server_id , -- 角色注册区服ID
|
|
|
+ h.server_name , -- 区服名
|
|
|
+ h.origin_server_id , -- 原始区服ID
|
|
|
+ h.origin_server_name as source_server_name, -- 原始区服名
|
|
|
+ a.role_id , -- 角色ID
|
|
|
+ a.role_name , -- 角色名
|
|
|
+ a.role_level , -- 角色等级
|
|
|
+ a.combat_num as role_power, -- 角色攻击力
|
|
|
+ a.role_vip as role_vip_level, -- 角色vip
|
|
|
+ a.os , -- 角色操作系统
|
|
|
+ a.create_time as create_time, -- 角色创建时间
|
|
|
+ a.update_time, -- 角色最近更新时间
|
|
|
+ g.pay_time as last_recharge_time, -- 角色最近充值时间
|
|
|
+ TIMESTAMPDIFF(SECOND, b.create_time, g.pay_time) as reg_pay_time_diff, -- 最近充值距注册时间差(秒)
|
|
|
+ i.active_time as last_login_time, -- 玩家最近登陆时间
|
|
|
+ j.amount as recharge_money, -- 角色充值金额
|
|
|
+ j.amount_count as recharge_count -- 角色充值次数
|
|
|
+ FROM dm_game_order.t_game_user_role a
|
|
|
+ LEFT JOIN dm_game_order.t_game_user b on a.source_system = b.source_system AND a.user_id = b.id
|
|
|
+ LEFT JOIN dm_game_order.t_pitcher_agent c on b.source_system = c.source_system AND b.agent_id = c.id
|
|
|
+ LEFT JOIN dm_game_order.t_pitcher_map d on c.source_system = d.source_system AND c.pitcher_id = d.zx_pitcher_id
|
|
|
+ LEFT JOIN dm_game_order.t_game e on a.source_system = e.source_system AND a.game_id = e.id
|
|
|
+ LEFT JOIN dm_game_order.t_cp f on e.source_system = f.source_system AND e.cp_id = f.id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 角色最近充值时间、角色最近充值金额
|
|
|
+ source_system,
|
|
|
+ role_id,
|
|
|
+ user_id,
|
|
|
+ real_amount,
|
|
|
+ pay_time,
|
|
|
+ ROW_NUMBER()over(partition by role_id , user_id , source_system order by pay_time desc) as num
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ ) g on a.source_system = g.source_system AND a.role_id = g.role_id AND a.user_id = g.user_id AND g.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ a.source_system,
|
|
|
+ a.game_id, -- 子游戏ID
|
|
|
+ a.server_id, -- 区服ID
|
|
|
+ a.server_name, -- 区服名(冠名后)
|
|
|
+ ifnull(b.server_id,a.server_id) as origin_server_id, -- 原始区服ID
|
|
|
+ ifnull(b.server_name,a.server_name) as origin_server_name -- 原始区服名
|
|
|
+ from (
|
|
|
+ SELECT
|
|
|
+ a.game_id ,
|
|
|
+ a.server_id ,
|
|
|
+ a.server_name ,
|
|
|
+ b.super_game_id,
|
|
|
+ a.source_system
|
|
|
+ FROM dm_game_order.t_game_server a
|
|
|
+ LEFT JOIN dm_game_order.t_game b on a.source_system = b.source_system AND a.game_id = b.id
|
|
|
+ )a LEFT JOIN dm_game_order.t_game_server_merge b
|
|
|
+ on a.source_system = b.source_system AND a.super_game_id = b.game_id AND a.server_id = b.server_id
|
|
|
+ ) h on a.source_system = h.source_system AND a.server_id = h.server_id AND a.game_id = h.game_id
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ source_system ,
|
|
|
+ user_id,
|
|
|
+ game_id,
|
|
|
+ active_time,
|
|
|
+ role_id ,
|
|
|
+ ROW_NUMBER()over(partition by role_id ,user_id, source_system order by active_time desc) as num
|
|
|
+ FROM game_dw.dw_active_log
|
|
|
+ ) i on a.source_system = i.source_system AND a.role_id = i.role_id AND a.user_id = i.user_id AND a.game_id = i.game_id AND i.num = 1
|
|
|
+ LEFT JOIN (
|
|
|
+ SELECT
|
|
|
+ -- 累计充值金额、累计充值次数
|
|
|
+ role_id,
|
|
|
+ user_id ,
|
|
|
+ source_system,
|
|
|
+ SUM(real_amount) as amount ,
|
|
|
+ COUNT(user_id) as amount_count
|
|
|
+ FROM dm_game_order.t_game_order
|
|
|
+ WHERE status =2
|
|
|
+ GROUP BY role_id , user_id , source_system
|
|
|
+ ) j on a.source_system = j.source_system AND a.role_id = j.role_id AND a.user_id = j.user_id
|
|
|
) a
|
|
|
""";
|
|
|
}
|