ReconciliationLogic.php 4.3 KB

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