Forráskód Böngészése

修改内容:订单修改

lth 1 éve
szülő
commit
5b9cc0f7be

+ 9 - 0
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/pojo/vo/AdsOrderDetailVO.java

@@ -157,4 +157,13 @@ public class AdsOrderDetailVO {
     @ApiModelProperty(notes = "cp最后通知时间")
     private LocalDateTime lastCpNotifyTime;
 
+    @ApiModelProperty(notes = "原始服务器名")
+    private String sourceServerName;
+
+    @ApiModelProperty(notes = "注册充值时间差(秒)")
+    private Long regUntilPay;
+
+    @ApiModelProperty(notes = "最近充值时间距今(秒)")
+    private Long payUntilNow;
+
 }

+ 257 - 14
game-data/game-data-serve/src/main/java/com/zanxiang/game/data/serve/service/impl/AdsOrderDetailService.java

@@ -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
+                """;
+    }
 }