RebateController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. namespace backend\modules\ib\controllers;
  3. use common\helpers\ExcelHelper;
  4. use Yii;
  5. use backend\models\MemberApi;
  6. use backend\models\RebateApi;
  7. use yii\helpers\Url;
  8. use common\helpers\UserAgentHelper;
  9. /**
  10. * 返佣报表
  11. */
  12. class RebateController extends BaseController
  13. {
  14. public function actionIndex()
  15. {
  16. $request = Yii::$app->request;
  17. $ibId = (int) $request->get('ibId');
  18. $sTime = $request->get('sTime', ''); // 开始时间
  19. $eTime = $request->get('eTime', ''); // 结束时间
  20. $api = new MemberApi();
  21. $ibs = $api->getIbs()['data'];
  22. return $this->render('index', [
  23. 'ibId' => $ibId,
  24. 'sTime' => $sTime,
  25. 'eTime' => $eTime,
  26. 'ibs' => $ibs,
  27. 'isHaveAdmin' => Yii::$app->user->identity->isHaveAdmin(),
  28. ]);
  29. }
  30. /**
  31. * 列表数据
  32. */
  33. public function actionList()
  34. {
  35. $get = Yii::$app->request->get();
  36. $orderInt = isset($get['order'][0]['column']) ? (int) $get['order'][0]['column'] : 1;
  37. $order = isset($get['columns'][$orderInt]['data']) ? $get['columns'][$orderInt]['data'] : '';
  38. $orderBy = isset($get['order'][0]['dir']) ? $get['order'][0]['dir'] : 'desc';
  39. $search = isset($get['search']['value']) ? $get['search']['value'] : '';
  40. $start = isset($get['start']) ? (int) $get['start'] : 0;
  41. $length = isset($get['length']) ? (int) $get['length'] : 20;
  42. $sTime = isset($get['sTime']) ? $get['sTime'] : '';
  43. $eTime = isset($get['eTime']) ? $get['eTime'] : '';
  44. $ibId = isset($get['ibId']) ? $get['ibId'] : 0;
  45. $draw = isset($get['draw']) ? $get['draw'] : 1;
  46. $params = [
  47. 'order' => $order,
  48. 'orderBy' => $orderBy,
  49. 'search' => $search,
  50. 'start' => $start,
  51. 'length' => $length,
  52. 'sTime' => $sTime,
  53. 'eTime' => $eTime,
  54. 'ibId' => $ibId,
  55. 'draw' => $draw,
  56. ];
  57. if ($params['length'] > 5000) {
  58. if (Yii::$app->getRequest()->getIsAjax()) {
  59. Yii::$app->getResponse()->redirect(Url::current(), UserAgentHelper::isIE() ? 200 : 302);
  60. } else {
  61. $this->exportXls($params);
  62. }
  63. Yii::$app->end();
  64. }
  65. $api = new RebateApi();
  66. $result = $api->getList($params);
  67. echo json_encode($result['data']);
  68. }
  69. /**
  70. * @param array $params
  71. */
  72. protected function exportXls($params)
  73. {
  74. ExcelHelper::init();
  75. $attachmentName = Yii::$app->user->identity->name . "_返佣报表_" . date('Y-m-d') . '.xlsx';
  76. $header = ['订单号', '姓名', '账户', '类型', '手数', '规则', '佣金', '时间'];
  77. $source = [];
  78. $summaryRow = [];
  79. $api = new RebateApi();
  80. $tradeTypeMap = [
  81. 0 => 'FOREX',
  82. 1 => 'CFD',
  83. 2 => 'XAU',
  84. 3 => 'XAG',
  85. ];
  86. $params['length'] = 5000;
  87. while (true) {
  88. $result = $api->getList($params);
  89. if ($result['code'] == 1 && !empty($result['data']['data'])) {
  90. foreach ((array)$result['data']['data'] as $key => $row) {
  91. $tradeType = isset($tradeTypeMap[$row['trade_type']]) ? $tradeTypeMap[$row['trade_type']] : '';
  92. $inTime = $row['in_time'] ? date('m/d H:i', $row['in_time'] / 1000) : '';
  93. $arr = [];
  94. $arr[] = $row['trade_ticket'];
  95. $arr[] = $row['name'];
  96. $arr[] = $row['user_login'];
  97. $arr[] = $tradeType;
  98. $arr[] = $row['trade_volume'];
  99. $arr[] = $row['commission_rule'];
  100. $arr[] = $row['commission'];
  101. $arr[] = $inTime;
  102. $source[] = $arr;
  103. }
  104. $summaryRow = array_pop($source);
  105. } else {
  106. break;
  107. }
  108. $params['start'] += $params['length'];
  109. if ($params['start'] >= $result['data']['recordsTotal']) {
  110. break;
  111. }
  112. }
  113. $source[] = $summaryRow;
  114. ExcelHelper::output($source, $header, $attachmentName);
  115. }
  116. }