ReconciliationLogic.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace app\v1\logic\customer;
  3. use plugin\saiadmin\basic\BaseLogic;
  4. use support\think\Db;
  5. class ReconciliationLogic extends BaseLogic
  6. {
  7. // 充值渠道收入
  8. public function getChannelIncome($where)
  9. {
  10. $params = $this->searchByAuth($where);
  11. $channelIncomeQuery = Db::connect('db_game_log')->table('sdk_order_success');
  12. if(!empty($params['pay_date'])){
  13. $channelIncomeQuery = $channelIncomeQuery
  14. ->where('pay_date', '>=', $params['pay_date'][0] . ' 00:00:00')
  15. ->where('pay_date', '<=', $params['pay_date'][1] . ' 23:59:59');
  16. }
  17. if(!empty($params['pay_channel_id'])){
  18. $channelIncomeQuery->where('pay_channel_id', 'in', is_array($params['pay_channel_id']) ? implode(',', $params['pay_channel_id']) : $params['pay_channel_id']);
  19. }
  20. if(!empty($params['game_id'])){
  21. $channelIncomeQuery->where('game_id', 'in', is_array($params['game_id']) ? implode(',', $params['game_id']) : $params['game_id']);
  22. }
  23. if(!empty($params['pay_date'])){
  24. $channelIncomeQuery
  25. ->where('pay_date', '>=', $params['pay_date'][0] . ' 00:00:00')
  26. ->where('pay_date', '<=', $params['pay_date'][1] . ' 23:59:59');
  27. }
  28. $channelIncomeQuery->field('game_id,pay_channel_id,sum(money) as money');
  29. $channelIncomeQuery->group('pay_channel_id');
  30. $columns = [
  31. [
  32. 'title' => '游戏ID',
  33. 'dataIndex' => 'game_id',
  34. 'width' => 180,
  35. ],
  36. [
  37. 'title' => '游戏名称',
  38. 'dataIndex' => 'game_name',
  39. 'width' => 180,
  40. ],
  41. [
  42. 'title' => '合计',
  43. 'dataIndex' => 'money',
  44. 'width' => 180,
  45. ],
  46. ];
  47. $payChannelList = Db::connect('db_center')->table('pay_channel')
  48. ->where('status',1);
  49. if(!empty($params['pay_channel_id'])){
  50. $payChannelList = $payChannelList->where('id', 'in', $params['pay_channel_id']);
  51. }
  52. $payChannelList = $payChannelList->select()->toArray();
  53. foreach($payChannelList as $payChannel){
  54. $title = $payChannel['name'];
  55. $payChannelId = $payChannel['id'];
  56. $columns[] = [
  57. 'title' => $title,
  58. 'dataIndex' => 'pay_channel_id_' . $payChannelId,
  59. 'width' => 180,
  60. ];
  61. }
  62. $data = $channelIncomeQuery->select()->toArray();
  63. $data = $this->trandformListColumn($data, ['game','pay_channel']);
  64. foreach($data as $key => $value){
  65. $data[$key]['pay_channel_id_' . $value['pay_channel_id']] = $value['money'];
  66. }
  67. // 按game_id分组合并数据
  68. $mergedData = [];
  69. foreach($data as $item) {
  70. $gameId = $item['game_id'];
  71. if(!isset($mergedData[$gameId])) {
  72. $mergedData[$gameId] = [
  73. 'game_id' => $gameId,
  74. 'game_name' => $item['game_name'],
  75. 'money' => 0
  76. ];
  77. // 初始化所有pay_channel_id金额为0
  78. foreach($payChannelList as $channel) {
  79. $mergedData[$gameId]['pay_channel_id_'.$channel['id']] = 0;
  80. }
  81. }
  82. // 累加合计金额
  83. $mergedData[$gameId]['money'] += floatval($item['money']);
  84. // 设置对应渠道金额
  85. $channelKey = 'pay_channel_id_'.$item['pay_channel_id'];
  86. $mergedData[$gameId][$channelKey] = $item[$channelKey];
  87. }
  88. // 添加合计行
  89. $totalRow = [
  90. 'game_id' => '合计',
  91. 'game_name' => '',
  92. 'money' => 0
  93. ];
  94. // 初始化所有渠道金额为0
  95. foreach($payChannelList as $channel) {
  96. $totalRow['pay_channel_id_'.$channel['id']] = 0;
  97. }
  98. // 计算合计数据
  99. foreach($mergedData as $row) {
  100. $totalRow['money'] += floatval($row['money']);
  101. foreach($payChannelList as $channel) {
  102. $channelKey = 'pay_channel_id_'.$channel['id'];
  103. $totalRow[$channelKey] += floatval($row[$channelKey]);
  104. }
  105. }
  106. // 将合计行插入到数组最前面
  107. array_unshift($mergedData, $totalRow);
  108. // 转为数组格式
  109. $data = array_values($mergedData);
  110. return [
  111. 'columns' => $columns,
  112. 'data' => $data,
  113. ];
  114. }
  115. }