|  | @@ -1,5 +1,6 @@
 | 
	
		
			
				|  |  |  package com.zanxiang.game.data.serve.service.impl;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import com.google.common.base.CaseFormat;
 | 
	
		
			
				|  |  |  import com.zanxiang.erp.security.util.SecurityUtil;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.component.DataPowerComponent;
 | 
	
		
			
				|  |  |  import com.zanxiang.game.data.serve.pojo.dto.AdsOrderDetailDTO;
 | 
	
	
		
			
				|  | @@ -47,7 +48,6 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 | 
	
		
			
				|  |  |              // 只有管理员才能查看全部数据
 | 
	
		
			
				|  |  |              dto.setPitcherId(SecurityUtil.getUserId().toString());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        Pager pager = dto.toPage();
 | 
	
		
			
				|  |  |          Criteria cri = Cnd.cri();
 | 
	
		
			
				|  |  |          if (StringUtils.isNotBlank(dto.getSourceSystem())) {
 | 
	
		
			
				|  |  |              cri.where().andEquals("source_system", dto.getSourceSystem());
 | 
	
	
		
			
				|  | @@ -121,19 +121,35 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 | 
	
		
			
				|  |  |          if (dto.getRegPayIntervalTimeMax() != null) {
 | 
	
		
			
				|  |  |              cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        //pager
 | 
	
		
			
				|  |  | +        Pager pager = dto.toPage();
 | 
	
		
			
				|  |  | +        Sql countSql = Sqls.create(getCountSql() + cri);
 | 
	
		
			
				|  |  | +        countSql.setCallback(Sqls.callback.integer());
 | 
	
		
			
				|  |  | +        dao.execute(countSql);
 | 
	
		
			
				|  |  | +        //获取记录数
 | 
	
		
			
				|  |  | +        pager.setRecordCount(countSql.getInt());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          //默认排序方式
 | 
	
		
			
				|  |  |          if (StringUtils.isBlank(dto.getSortType())) {
 | 
	
		
			
				|  |  |              dto.setSortType(OrderByEnum.DESC.getOrderType());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          if (StringUtils.isBlank(dto.getSortFiled())) {
 | 
	
		
			
				|  |  | -            cri.getOrderBy().orderBy("day", dto.getSortType())
 | 
	
		
			
				|  |  | -                    .orderBy("order_create_time", dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("day", dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy("order_create_time", dto.getSortType());
 | 
	
		
			
				|  |  |          } else {
 | 
	
		
			
				|  |  | -            cri.getOrderBy().orderBy(dto.getSortFiled(), dto.getSortType());
 | 
	
		
			
				|  |  | +            cri.getOrderBy().orderBy(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, dto.getSortFiled()), dto.getSortType());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        List<AdsOrderDetailVO> records = dao.query(AdsOrderDetail.class, cri, pager).stream().map(this::toVO).collect(Collectors.toList());
 | 
	
		
			
				|  |  | -        pager.setRecordCount(dao.count(AdsOrderDetail.class, cri));
 | 
	
		
			
				|  |  | -        return new Page<>(records, pager);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create(getOrderDetailSql() + cri);
 | 
	
		
			
				|  |  | +        sql.setCallback(Sqls.callback.entities());
 | 
	
		
			
				|  |  | +        sql.setEntity(dao.getEntity(AdsOrderDetailVO.class));
 | 
	
		
			
				|  |  | +        sql.setPager(pager);
 | 
	
		
			
				|  |  | +        //执行获取结果
 | 
	
		
			
				|  |  | +        dao.execute(sql);
 | 
	
		
			
				|  |  | +        List<AdsOrderDetailVO> list = sql.getList(AdsOrderDetailVO.class);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return new Page<>(list, pager);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @Override
 | 
	
	
		
			
				|  | @@ -217,13 +233,7 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 | 
	
		
			
				|  |  |          if (dto.getRegPayIntervalTimeMax() != null) {
 | 
	
		
			
				|  |  |              cri.where().andLTE("TIMESTAMPDIFF(MINUTE, reg_time, pay_time)", dto.getRegPayIntervalTimeMax());
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        Sql sql = Sqls.create("""
 | 
	
		
			
				|  |  | -                SELECT
 | 
	
		
			
				|  |  | -                    IFNULL(SUM(amount), 0) as amount,
 | 
	
		
			
				|  |  | -                    IFNULL(SUM(real_amount), 0) as real_amount
 | 
	
		
			
				|  |  | -                FROM
 | 
	
		
			
				|  |  | -                    game_ads.ads_order_detail
 | 
	
		
			
				|  |  | -                """ + cri);
 | 
	
		
			
				|  |  | +        Sql sql = Sqls.create(getOrderDetailTotalSql() + cri);
 | 
	
		
			
				|  |  |          sql.setCallback(Sqls.callback.entity());
 | 
	
		
			
				|  |  |          sql.setEntity(dao.getEntity(AdsOrderDetailTotalVO.class));
 | 
	
		
			
				|  |  |          dao.execute(sql);
 | 
	
	
		
			
				|  | @@ -278,5 +288,239 @@ public class AdsOrderDetailService implements IAdsOrderDetailService {
 | 
	
		
			
				|  |  |          return BeanUtil.copy(tPayCallCpLog, OrderCPDetailVO.class);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询订单列表sql
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String getOrderDetailSql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                	*
 | 
	
		
			
				|  |  | +                FROM (
 | 
	
		
			
				|  |  | +                	SELECT
 | 
	
		
			
				|  |  | +                		a.id, -- 主键id
 | 
	
		
			
				|  |  | +                		a.source_system , -- SDK来源
 | 
	
		
			
				|  |  | +                		DATE(a.create_time) as `day`, -- 订单创建日期
 | 
	
		
			
				|  |  | +                		a.order_id , -- 商户订单号ID
 | 
	
		
			
				|  |  | +                		a.cp_order_id , -- cp订单号
 | 
	
		
			
				|  |  | +                		a.merchant_order_no , -- 第三方支付订单号
 | 
	
		
			
				|  |  | +                		a.user_id as game_user_id, -- 玩家ID
 | 
	
		
			
				|  |  | +                		b.username , -- 玩家账号
 | 
	
		
			
				|  |  | +                		b.nickname , -- 玩家昵称
 | 
	
		
			
				|  |  | +                		b.create_time as reg_time, -- 玩家注册时间
 | 
	
		
			
				|  |  | +                		a.agent_id , -- 玩家注册渠道ID
 | 
	
		
			
				|  |  | +                		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
 | 
	
		
			
				|  |  | +                		b.game_id , -- 玩家注册游戏ID
 | 
	
		
			
				|  |  | +                		g.game_name , -- 玩家注册游戏名
 | 
	
		
			
				|  |  | +                		g.classify , -- 玩家注册游戏类型
 | 
	
		
			
				|  |  | +                		a.cp_id , -- CPID
 | 
	
		
			
				|  |  | +                		e.cp_name ,-- cp名
 | 
	
		
			
				|  |  | +                		c.pitcher_id as zx_pitcher_id, -- 投手ID
 | 
	
		
			
				|  |  | +                		d.zx_pitcher_name , -- 投手名
 | 
	
		
			
				|  |  | +                		a.game_id as order_game_id, -- 玩家充值游戏ID
 | 
	
		
			
				|  |  | +                		f.game_name as order_game_name,-- 玩家充值游戏名
 | 
	
		
			
				|  |  | +                		f.classify as order_game_classify,-- 玩家充值游戏类型
 | 
	
		
			
				|  |  | +                		a.product_id , -- 充值商品ID
 | 
	
		
			
				|  |  | +                		a.product_name , -- 充值商品名称
 | 
	
		
			
				|  |  | +                		a.amount , -- 订单金额
 | 
	
		
			
				|  |  | +                		a.real_amount , -- 订单实付金额
 | 
	
		
			
				|  |  | +                		a.payway , -- 支付方式ID、支付方式名
 | 
	
		
			
				|  |  | +                		a.pay_device as pay_scene,-- 支付场景ID、支付场景名
 | 
	
		
			
				|  |  | +                		a.status as order_status, -- 支付状态
 | 
	
		
			
				|  |  | +                		a.cp_status , -- cp通知状态
 | 
	
		
			
				|  |  | +                		a.last_notify_time as last_cp_notify_time , -- cp最后通知时间
 | 
	
		
			
				|  |  | +                		a.merchant_no as pay_account_id, -- 收款账户
 | 
	
		
			
				|  |  | +                		a.server_id , -- 角色所属游戏区服ID
 | 
	
		
			
				|  |  | +                		IFNULL(h.server_name, a.server_name) as source_server_name , -- 原始区服名
 | 
	
		
			
				|  |  | +                		a.server_name , -- 角色所属游戏区服名
 | 
	
		
			
				|  |  | +                		a.role_id , -- 角色ID
 | 
	
		
			
				|  |  | +                		a.role_name , -- 角色名
 | 
	
		
			
				|  |  | +                		a.role_level , -- 角色等级
 | 
	
		
			
				|  |  | +                		a.role_vip , -- 角色VIP等级
 | 
	
		
			
				|  |  | +                		a.os , -- 操作系统
 | 
	
		
			
				|  |  | +                		a.is_switch as order_is_switch, -- 是否切量
 | 
	
		
			
				|  |  | +                		a.create_time as order_create_time, -- 下单时间
 | 
	
		
			
				|  |  | +                		a.pay_time,  -- 支付时间
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, b.create_time, a.pay_time) as reg_until_pay, -- 注册充值时间差
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, a.pay_time, NOW()) as pay_until_now, -- 最近充值时间距今(秒)
 | 
	
		
			
				|  |  | +                		IF(a.status = 2, IF(a.create_time = i.create_time, 1, 0), 0) as is_first_recharge -- 是否首充
 | 
	
		
			
				|  |  | +                	FROM dm_game_order.t_game_order 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 a.source_system = c.source_system AND a.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_cp e on a.source_system = e.source_system AND a.cp_id = e.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game f on a.source_system = f.source_system AND a.game_id = f.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game g on b.source_system = g.source_system AND b.game_id = g.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game_server_merge h on a.source_system = h.source_system AND a.server_id = h.server_id AND g.super_game_id = h.game_id
 | 
	
		
			
				|  |  | +                	LEFT JOIN (
 | 
	
		
			
				|  |  | +                		SELECT
 | 
	
		
			
				|  |  | +                			source_system ,
 | 
	
		
			
				|  |  | +                			user_id ,
 | 
	
		
			
				|  |  | +                			order_id ,
 | 
	
		
			
				|  |  | +                			create_time ,
 | 
	
		
			
				|  |  | +                			ROW_NUMBER()over(partition by source_system , user_id order by create_time ASC) as num
 | 
	
		
			
				|  |  | +                		FROM dm_game_order.t_game_order
 | 
	
		
			
				|  |  | +                		WHERE status = 2
 | 
	
		
			
				|  |  | +                	) i on a.source_system = i.source_system AND a.user_id = i.user_id AND i.num = 1
 | 
	
		
			
				|  |  | +                ) a
 | 
	
		
			
				|  |  | +                """;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询订单列表记录数sql
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String getCountSql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                	COUNT(1)
 | 
	
		
			
				|  |  | +                FROM (
 | 
	
		
			
				|  |  | +                	SELECT
 | 
	
		
			
				|  |  | +                		a.id, -- 主键id
 | 
	
		
			
				|  |  | +                		a.source_system , -- SDK来源
 | 
	
		
			
				|  |  | +                		DATE(a.create_time) as `day`, -- 订单创建日期
 | 
	
		
			
				|  |  | +                		a.order_id , -- 商户订单号ID
 | 
	
		
			
				|  |  | +                		a.cp_order_id , -- cp订单号
 | 
	
		
			
				|  |  | +                		a.merchant_order_no , -- 第三方支付订单号
 | 
	
		
			
				|  |  | +                		a.user_id as game_user_id, -- 玩家ID
 | 
	
		
			
				|  |  | +                		b.username , -- 玩家账号
 | 
	
		
			
				|  |  | +                		b.nickname , -- 玩家昵称
 | 
	
		
			
				|  |  | +                		b.create_time as reg_time, -- 玩家注册时间
 | 
	
		
			
				|  |  | +                		a.agent_id , -- 玩家注册渠道ID
 | 
	
		
			
				|  |  | +                		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
 | 
	
		
			
				|  |  | +                		b.game_id , -- 玩家注册游戏ID
 | 
	
		
			
				|  |  | +                		g.game_name , -- 玩家注册游戏名
 | 
	
		
			
				|  |  | +                		g.classify , -- 玩家注册游戏类型
 | 
	
		
			
				|  |  | +                		a.cp_id , -- CPID
 | 
	
		
			
				|  |  | +                		e.cp_name ,-- cp名
 | 
	
		
			
				|  |  | +                		c.pitcher_id as zx_pitcher_id, -- 投手ID
 | 
	
		
			
				|  |  | +                		d.zx_pitcher_name , -- 投手名
 | 
	
		
			
				|  |  | +                		a.game_id as order_game_id, -- 玩家充值游戏ID
 | 
	
		
			
				|  |  | +                		f.game_name as order_game_name,-- 玩家充值游戏名
 | 
	
		
			
				|  |  | +                		f.classify as order_game_classify,-- 玩家充值游戏类型
 | 
	
		
			
				|  |  | +                		a.product_id , -- 充值商品ID
 | 
	
		
			
				|  |  | +                		a.product_name , -- 充值商品名称
 | 
	
		
			
				|  |  | +                		a.amount , -- 订单金额
 | 
	
		
			
				|  |  | +                		a.real_amount , -- 订单实付金额
 | 
	
		
			
				|  |  | +                		a.payway , -- 支付方式ID、支付方式名
 | 
	
		
			
				|  |  | +                		a.pay_device as pay_scene,-- 支付场景ID、支付场景名
 | 
	
		
			
				|  |  | +                		a.status as order_status, -- 支付状态
 | 
	
		
			
				|  |  | +                		a.cp_status , -- cp通知状态
 | 
	
		
			
				|  |  | +                		a.last_notify_time as last_cp_notify_time , -- cp最后通知时间
 | 
	
		
			
				|  |  | +                		a.merchant_no as pay_account_id, -- 收款账户
 | 
	
		
			
				|  |  | +                		a.server_id , -- 角色所属游戏区服ID
 | 
	
		
			
				|  |  | +                		IFNULL(h.server_name, a.server_name) as source_server_name , -- 原始区服名
 | 
	
		
			
				|  |  | +                		a.server_name , -- 角色所属游戏区服名
 | 
	
		
			
				|  |  | +                		a.role_id , -- 角色ID
 | 
	
		
			
				|  |  | +                		a.role_name , -- 角色名
 | 
	
		
			
				|  |  | +                		a.role_level , -- 角色等级
 | 
	
		
			
				|  |  | +                		a.role_vip , -- 角色VIP等级
 | 
	
		
			
				|  |  | +                		a.os , -- 操作系统
 | 
	
		
			
				|  |  | +                		a.is_switch as order_is_switch, -- 是否切量
 | 
	
		
			
				|  |  | +                		a.create_time as order_create_time, -- 下单时间
 | 
	
		
			
				|  |  | +                		a.pay_time,  -- 支付时间
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, b.create_time, a.pay_time) as reg_until_pay, -- 注册充值时间差
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, a.pay_time, NOW()) as pay_until_now, -- 最近充值时间距今(秒)
 | 
	
		
			
				|  |  | +                		IF(a.status = 2, IF(a.create_time = i.create_time, 1, 0), 0) as is_first_recharge -- 是否首充
 | 
	
		
			
				|  |  | +                	FROM dm_game_order.t_game_order 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 a.source_system = c.source_system AND a.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_cp e on a.source_system = e.source_system AND a.cp_id = e.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game f on a.source_system = f.source_system AND a.game_id = f.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game g on b.source_system = g.source_system AND b.game_id = g.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game_server_merge h on a.source_system = h.source_system AND a.server_id = h.server_id AND g.super_game_id = h.game_id
 | 
	
		
			
				|  |  | +                	LEFT JOIN (
 | 
	
		
			
				|  |  | +                		SELECT
 | 
	
		
			
				|  |  | +                			source_system ,
 | 
	
		
			
				|  |  | +                			user_id ,
 | 
	
		
			
				|  |  | +                			order_id ,
 | 
	
		
			
				|  |  | +                			create_time ,
 | 
	
		
			
				|  |  | +                			ROW_NUMBER()over(partition by source_system , user_id order by create_time ASC) as num
 | 
	
		
			
				|  |  | +                		FROM dm_game_order.t_game_order
 | 
	
		
			
				|  |  | +                		WHERE status = 2
 | 
	
		
			
				|  |  | +                	) i on a.source_system = i.source_system AND a.user_id = i.user_id AND i.num = 1
 | 
	
		
			
				|  |  | +                ) a
 | 
	
		
			
				|  |  | +                """;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    /**
 | 
	
		
			
				|  |  | +     * 查询订单总计
 | 
	
		
			
				|  |  | +     * @return String
 | 
	
		
			
				|  |  | +     */
 | 
	
		
			
				|  |  | +    private String getOrderDetailTotalSql() {
 | 
	
		
			
				|  |  | +        return """
 | 
	
		
			
				|  |  | +                SELECT
 | 
	
		
			
				|  |  | +                	SUM(amount) as amount,
 | 
	
		
			
				|  |  | +                	SUM(real_amount) as real_amount
 | 
	
		
			
				|  |  | +                FROM (
 | 
	
		
			
				|  |  | +                	SELECT
 | 
	
		
			
				|  |  | +                		a.id, -- 主键id
 | 
	
		
			
				|  |  | +                		a.source_system , -- SDK来源
 | 
	
		
			
				|  |  | +                		DATE(a.create_time) as `day`, -- 订单创建日期
 | 
	
		
			
				|  |  | +                		a.order_id , -- 商户订单号ID
 | 
	
		
			
				|  |  | +                		a.cp_order_id , -- cp订单号
 | 
	
		
			
				|  |  | +                		a.merchant_order_no , -- 第三方支付订单号
 | 
	
		
			
				|  |  | +                		a.user_id as game_user_id, -- 玩家ID
 | 
	
		
			
				|  |  | +                		b.username , -- 玩家账号
 | 
	
		
			
				|  |  | +                		b.nickname , -- 玩家昵称
 | 
	
		
			
				|  |  | +                		b.create_time as reg_time, -- 玩家注册时间
 | 
	
		
			
				|  |  | +                		a.agent_id , -- 玩家注册渠道ID
 | 
	
		
			
				|  |  | +                		IF(a.agent_id = 0, '自然量', c.agent_name) as agent_name,-- 注册渠道名
 | 
	
		
			
				|  |  | +                		b.game_id , -- 玩家注册游戏ID
 | 
	
		
			
				|  |  | +                		g.game_name , -- 玩家注册游戏名
 | 
	
		
			
				|  |  | +                		g.classify , -- 玩家注册游戏类型
 | 
	
		
			
				|  |  | +                		a.cp_id , -- CPID
 | 
	
		
			
				|  |  | +                		e.cp_name ,-- cp名
 | 
	
		
			
				|  |  | +                		c.pitcher_id as zx_pitcher_id, -- 投手ID
 | 
	
		
			
				|  |  | +                		d.zx_pitcher_name , -- 投手名
 | 
	
		
			
				|  |  | +                		a.game_id as order_game_id, -- 玩家充值游戏ID
 | 
	
		
			
				|  |  | +                		f.game_name as order_game_name,-- 玩家充值游戏名
 | 
	
		
			
				|  |  | +                		f.classify as order_game_classify,-- 玩家充值游戏类型
 | 
	
		
			
				|  |  | +                		a.product_id , -- 充值商品ID
 | 
	
		
			
				|  |  | +                		a.product_name , -- 充值商品名称
 | 
	
		
			
				|  |  | +                		a.amount , -- 订单金额
 | 
	
		
			
				|  |  | +                		a.real_amount , -- 订单实付金额
 | 
	
		
			
				|  |  | +                		a.payway , -- 支付方式ID、支付方式名
 | 
	
		
			
				|  |  | +                		a.pay_device as pay_scene,-- 支付场景ID、支付场景名
 | 
	
		
			
				|  |  | +                		a.status as order_status, -- 支付状态
 | 
	
		
			
				|  |  | +                		a.cp_status , -- cp通知状态
 | 
	
		
			
				|  |  | +                		a.last_notify_time as last_cp_notify_time , -- cp最后通知时间
 | 
	
		
			
				|  |  | +                		a.merchant_no as pay_account_id, -- 收款账户
 | 
	
		
			
				|  |  | +                		a.server_id , -- 角色所属游戏区服ID
 | 
	
		
			
				|  |  | +                		IFNULL(h.server_name, a.server_name) as source_server_name , -- 原始区服名
 | 
	
		
			
				|  |  | +                		a.server_name , -- 角色所属游戏区服名
 | 
	
		
			
				|  |  | +                		a.role_id , -- 角色ID
 | 
	
		
			
				|  |  | +                		a.role_name , -- 角色名
 | 
	
		
			
				|  |  | +                		a.role_level , -- 角色等级
 | 
	
		
			
				|  |  | +                		a.role_vip , -- 角色VIP等级
 | 
	
		
			
				|  |  | +                		a.os , -- 操作系统
 | 
	
		
			
				|  |  | +                		a.is_switch as order_is_switch, -- 是否切量
 | 
	
		
			
				|  |  | +                		a.create_time as order_create_time, -- 下单时间
 | 
	
		
			
				|  |  | +                		a.pay_time,  -- 支付时间
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, b.create_time, a.pay_time) as reg_until_pay, -- 注册充值时间差
 | 
	
		
			
				|  |  | +                		TIMESTAMPDIFF(SECOND, a.pay_time, NOW()) as pay_until_now, -- 最近充值时间距今(秒)
 | 
	
		
			
				|  |  | +                		IF(a.status = 2, IF(a.create_time = i.create_time, 1, 0), 0) as is_first_recharge -- 是否首充
 | 
	
		
			
				|  |  | +                	FROM dm_game_order.t_game_order 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 a.source_system = c.source_system AND a.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_cp e on a.source_system = e.source_system AND a.cp_id = e.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game f on a.source_system = f.source_system AND a.game_id = f.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game g on b.source_system = g.source_system AND b.game_id = g.id
 | 
	
		
			
				|  |  | +                	LEFT JOIN dm_game_order.t_game_server_merge h on a.source_system = h.source_system AND a.server_id = h.server_id AND g.super_game_id = h.game_id
 | 
	
		
			
				|  |  | +                	LEFT JOIN (
 | 
	
		
			
				|  |  | +                		SELECT
 | 
	
		
			
				|  |  | +                			source_system ,
 | 
	
		
			
				|  |  | +                			user_id ,
 | 
	
		
			
				|  |  | +                			order_id ,
 | 
	
		
			
				|  |  | +                			create_time ,
 | 
	
		
			
				|  |  | +                			ROW_NUMBER()over(partition by source_system , user_id order by create_time ASC) as num
 | 
	
		
			
				|  |  | +                		FROM dm_game_order.t_game_order
 | 
	
		
			
				|  |  | +                		WHERE status = 2
 | 
	
		
			
				|  |  | +                	) i on a.source_system = i.source_system AND a.user_id = i.user_id AND i.num = 1
 | 
	
		
			
				|  |  | +                ) a
 | 
	
		
			
				|  |  | +                """;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  }
 |