|
@@ -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,238 @@ 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 ,-- 支付场景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 ,-- 支付场景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 ,-- 支付场景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
|
|
|
+ """;
|
|
|
+ }
|
|
|
}
|