SdkOrderRankLogic.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. // | Author: your name
  6. // +----------------------------------------------------------------------
  7. namespace app\v1\logic\gameLog;
  8. use plugin\saiadmin\basic\BaseLogic;
  9. use plugin\saiadmin\exception\ApiException;
  10. use plugin\saiadmin\utils\Helper;
  11. use app\v1\model\gameLog\SdkOrderRank;
  12. use support\think\Db;
  13. /**
  14. * 充值排行逻辑层
  15. */
  16. class SdkOrderRankLogic extends BaseLogic
  17. {
  18. /**
  19. * 构造函数
  20. */
  21. public function __construct()
  22. {
  23. $this->model = new SdkOrderRank();
  24. }
  25. public function getList($query): mixed
  26. {
  27. $saiType = request()->input('saiType', 'list');
  28. $page = request()->input('page', 1);
  29. $limit = request()->input('limit', 10);
  30. $orderBy = request()->input('orderBy', '');
  31. $orderType = request()->input('orderType', $this->orderType);
  32. if(empty($orderBy)) {
  33. $orderBy = 'searchTotalMoney';
  34. }
  35. // 先分组,再分页
  36. $query = $query->field('user_name,sum(money) as searchTotalMoney,
  37. orderid,
  38. game_id,
  39. media_id,
  40. agent_id,
  41. site_id,
  42. uid,
  43. pay_channel_id,
  44. auth_id,
  45. server_id,
  46. server_name,
  47. pay_date,
  48. reg_date,
  49. role_name,
  50. role_id');
  51. if ($saiType === 'all') {
  52. return $query->select()->toArray();
  53. }
  54. $query->group('uid, game_id,site_id,server_id,media_id,auth_id,agent_id,server_id,auth_id,role_id');
  55. $query->order($orderBy, $orderType);
  56. $data = $query->paginate($limit, false, ['page' => $page])->toArray();
  57. $data['data'] = $this->trandformListColumn($data['data'], ['game','auth', 'agent', 'pay_channel']);
  58. // // 告警提示,查询最近登录时间,查询最近充值时间,和现在时间对比,如果超过3天,则告警,并提示
  59. foreach($data['data'] as &$item){
  60. // 最后登录时间
  61. $item['login_time'] = Db::connect('db_origin')->table('user_'.$item['uid']%10)->where('uid', $item['uid'])->value('login_time');
  62. // 最近注册时间
  63. $item['pay_time'] = Db::connect('db_origin')->table('user_'.$item['uid']%10)->where('uid', $item['uid'])->value('pay_time');
  64. // 现在时间
  65. $item['now_time'] = time();
  66. // 最近登录时间与现在时间对比,如果超过3天,则告警,并提示
  67. if($item['login_time'] < $item['now_time'] - 3 * 24 * 60 * 60){
  68. $item['login_alert'] = 1;
  69. }else{
  70. $item['login_alert'] = 0;
  71. }
  72. // 最近充值时间与现在时间对比,如果超过3天,则告警,并提示
  73. if($item['pay_time'] < $item['now_time'] - 3 * 24 * 60 * 60){
  74. $item['pay_alert'] = 1;
  75. }else{
  76. $item['pay_alert'] = 0;
  77. }
  78. }
  79. $where = $query->getOptions();
  80. $totalWhere = [];
  81. if(!empty($where['game_id'])){
  82. $totalWhere[] = ['game_id', 'in', $where['game_id']];
  83. }
  84. if(!empty($where['auth_id'])){
  85. $totalWhere[] = ['auth_id', 'in', $where['auth_id']];
  86. }
  87. if(!empty($where['agent_id'])){
  88. $totalWhere['agent_id'] = $where['agent_id'];
  89. }
  90. if(!empty($where['site_id'])){
  91. $totalWhere['site_id'] = $where['site_id'];
  92. }
  93. if(!empty($where['server_id'])){
  94. $totalWhere['server_id'] = $where['server_id'];
  95. }
  96. if(!empty($where['user_name'])){
  97. $totalWhere['user_name'] = $where['user_name'];
  98. }
  99. if(!empty($where['server_name'])){
  100. $totalWhere['server_name'] = $where['server_name'];
  101. }
  102. if(!empty($where['reg_date'])){
  103. $totalWhere['reg_date'] = $where['reg_date'];
  104. }
  105. $totalList = Db::connect('db_game_log')->table('sdk_order_success')
  106. ->where($totalWhere)
  107. ->field('game_id,uid,sum(money) as totalMoney')
  108. ->group('uid,game_id,site_id,server_id,media_id,auth_id,agent_id,server_id,auth_id,role_id')
  109. ->select()->toArray();
  110. // 查询累计充值金额(对每一行数据单独查询历史充值金额)
  111. $totalMoneyMap = [];
  112. if (!empty($data['data']) && !empty($totalList)) {
  113. foreach ($totalList as $totalItem) {
  114. $key = $totalItem['uid'] . '_' . $totalItem['game_id'];
  115. $totalMoneyMap[$key] = $totalItem['totalMoney'] ?? 0;
  116. }
  117. }
  118. // 为搜索结果添加累计充值金额
  119. foreach($data['data'] as &$item){
  120. $key = $item['uid'] . '_' . $item['game_id'];
  121. $item['totalMoney'] = $totalMoneyMap[$key] ?? 0;
  122. }
  123. return $data;
  124. }
  125. }