VolumeController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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\VolumeApi;
  7. use yii\helpers\Url;
  8. use common\helpers\UserAgentHelper;
  9. class VolumeController extends BaseController
  10. {
  11. public function actionIndex()
  12. {
  13. $request = Yii::$app->request;
  14. $ibId = (int) $request->get('ibId');
  15. $sTime = $request->get('sTime', $this->defaultStartTime()); // 开始时间,默认从上个星期天开始
  16. $eTime = $request->get('eTime', $this->defaultEndTime()); // 结束时间
  17. $api = new MemberApi();
  18. $ibs = $api->getIbs()['data'];
  19. return $this->render('index', [
  20. 'ibId' => $ibId,
  21. 'sTime' => $sTime,
  22. 'eTime' => $eTime,
  23. 'ibs' => $ibs,
  24. 'isHaveAdmin' => Yii::$app->user->identity->isHaveAdmin(),
  25. ]);
  26. }
  27. /**
  28. * 列表数据
  29. */
  30. public function actionList()
  31. {
  32. $get = Yii::$app->request->get();
  33. $orderInt = isset($get['order'][0]['column']) ? (int) $get['order'][0]['column'] : 1;
  34. $order = isset($get['columns'][$orderInt]['data']) ? $get['columns'][$orderInt]['data'] : '';
  35. $orderBy = isset($get['order'][0]['dir']) ? $get['order'][0]['dir'] : 'desc';
  36. $search = isset($get['search']['value']) ? $get['search']['value'] : '';
  37. $start = isset($get['start']) ? (int) $get['start'] : 0;
  38. $length = isset($get['length']) ? (int) $get['length'] : 20;
  39. $sTime = isset($get['sTime']) ? $get['sTime'] : $this->defaultStartTime();
  40. $eTime = isset($get['eTime']) ? $get['eTime'] : $this->defaultEndTime();
  41. $ibId = isset($get['ibId']) ? $get['ibId'] : 0;
  42. $draw = isset($get['draw']) ? $get['draw'] : 1;
  43. $params = [
  44. 'order' => $order,
  45. 'orderBy' => $orderBy,
  46. 'search' => $search,
  47. 'start' => $start,
  48. 'length' => $length,
  49. 'sTime' => $sTime,
  50. 'eTime' => $eTime,
  51. 'ibId' => $ibId,
  52. 'draw' => $draw,
  53. ];
  54. if ($params['length'] > 5000) {
  55. if (Yii::$app->getRequest()->getIsAjax()) {
  56. Yii::$app->getResponse()->redirect(Url::current(), UserAgentHelper::isIE() ? 200 : 302);
  57. } else {
  58. $this->exportXls($params);
  59. }
  60. Yii::$app->end();
  61. }
  62. $api = new VolumeApi();
  63. $result = $api->getList($params);
  64. echo json_encode($result['data']);
  65. }
  66. /**
  67. * 计算总数
  68. */
  69. public function actionCal()
  70. {
  71. $get = Yii::$app->request->get();
  72. $sTime = isset($get['sTime']) ? $get['sTime'] : $this->defaultStartTime();
  73. $eTime = isset($get['eTime']) ? $get['eTime'] : $this->defaultEndTime();
  74. $ibId = isset($get['ibId']) ? $get['ibId'] : 0;
  75. $params = [
  76. 'sTime' => $sTime,
  77. 'eTime' => $eTime,
  78. 'ibId' => $ibId,
  79. ];
  80. $api = new VolumeApi();
  81. $result = $api->cal($params);
  82. echo json_encode($result['data']);
  83. }
  84. /**
  85. * 导出到Excel
  86. */
  87. public function actionExport()
  88. {
  89. $get = Yii::$app->request->get();
  90. $sTime = isset($get['sTime']) ? $get['sTime'] : $this->defaultStartTime();
  91. $eTime = isset($get['eTime']) ? $get['eTime'] : $this->defaultEndTime();
  92. $ibId = isset($get['ibId']) ? $get['ibId'] : 0;
  93. $length = 10000;
  94. $params = [
  95. 'sTime' => $sTime,
  96. 'eTime' => $eTime,
  97. 'ibId' => $ibId,
  98. 'length' => $length,
  99. ];
  100. $api = new VolumeApi();
  101. $result = $api->getList($params);
  102. if (empty($result['data']['data'])) {
  103. echo '没有数据';
  104. exit;
  105. }
  106. $list = $result['data']['data'];
  107. $cal = $api->cal($params)['data'];
  108. require Yii::$app->vendorPath . '/phpoffice/phpexcel/Classes/PHPExcel.php';
  109. require Yii::$app->vendorPath . '/phpoffice/phpexcel/Classes/PHPExcel/IOFactory.php';
  110. $filename = 'Data volume report';
  111. $objExcel = new \PHPExcel();
  112. $objProps = $objExcel->getProperties();
  113. $objProps->setCreator('AIKE');
  114. $objProps->setTitle($filename);
  115. $objExcel->setActiveSheetIndex(0);
  116. $objActSheet = $objExcel->getActiveSheet();
  117. $objActSheet->setTitle('交易量报表');
  118. // 表头
  119. $ExcelKey = array(
  120. 'A' => '代理商',
  121. 'B' => '账户',
  122. 'C' => '姓名',
  123. 'D' => '外汇',
  124. 'E' => '佣金',
  125. 'F' => '黄金',
  126. 'G' => '佣金',
  127. 'H' => '白银',
  128. 'I' => '佣金',
  129. 'J' => 'CFD',
  130. 'K' => '佣金',
  131. 'L' => '股指',
  132. 'M' => '佣金',
  133. 'N' => 'BTC',
  134. 'O' => '佣金',
  135. 'P' => '总外佣',
  136. 'Q' => '总佣金',
  137. );
  138. foreach ($ExcelKey as $key => $val) {
  139. $objActSheet->setCellValue($key . '1', $val);
  140. }
  141. $rowNum = 2; // 行号
  142. foreach ($list as $k => $v) {
  143. $objActSheet->setCellValue('A' . $rowNum, $v['name']);
  144. $objActSheet->setCellValue('B' . $rowNum, $v['LOGIN']);
  145. $objActSheet->setCellValue('C' . $rowNum, $v['NAME']);
  146. $objActSheet->setCellValue('D' . $rowNum, $v['fv'] / 100); // 外汇
  147. $objActSheet->setCellValue('E' . $rowNum, $v['fvc'] / 100); // 外汇佣金
  148. $objActSheet->setCellValue('F' . $rowNum, $v['mvGold'] / 100); // 黄金
  149. $objActSheet->setCellValue('G' . $rowNum, $v['gvc'] / 100); // 黄金佣金
  150. $objActSheet->setCellValue('H' . $rowNum, $v['mvSilver'] / 100); // 白银
  151. $objActSheet->setCellValue('I' . $rowNum, $v['svc'] / 100); // 白银佣金
  152. $objActSheet->setCellValue('J' . $rowNum, $v['cv'] / 100); // CFD
  153. $objActSheet->setCellValue('K' . $rowNum, $v['cvc'] / 100); // CFD佣金
  154. $objActSheet->setCellValue('L' . $rowNum, $v['stv'] / 100); // 股指
  155. $objActSheet->setCellValue('M' . $rowNum, $v['stvc'] / 100); // 股指佣金
  156. $objActSheet->setCellValue('N' . $rowNum, $v['btv'] / 100); // BTC
  157. $objActSheet->setCellValue('O' . $rowNum, $v['btvc'] / 100); // BTC佣金
  158. $objActSheet->setCellValue('P' . $rowNum, $v['wvc'] / 100); // 外佣
  159. $objActSheet->setCellValue('Q' . $rowNum, $v['tvc'] / 100); // 总佣金
  160. $rowNum++;
  161. }
  162. // 在最后一行加上统计数据
  163. $objActSheet->setCellValue('D' . $rowNum, $cal['fvSum'] / 100);
  164. $objActSheet->setCellValue('E' . $rowNum, $cal['fvcSum'] / 100);
  165. $objActSheet->setCellValue('F' . $rowNum, $cal['mvGoldSum'] / 100);
  166. $objActSheet->setCellValue('G' . $rowNum, $cal['gvcSum'] / 100);
  167. $objActSheet->setCellValue('H' . $rowNum, $cal['mvSilverSum'] / 100);
  168. $objActSheet->setCellValue('I' . $rowNum, $cal['svcSum'] / 100);
  169. $objActSheet->setCellValue('J' . $rowNum, $cal['cvSum'] / 100);
  170. $objActSheet->setCellValue('K' . $rowNum, $cal['cvcSum'] / 100);
  171. $objActSheet->setCellValue('L' . $rowNum, $cal['stvSum'] / 100);
  172. $objActSheet->setCellValue('M' . $rowNum, $cal['stvcSum'] / 100);
  173. $objActSheet->setCellValue('N' . $rowNum, $cal['btvSum'] / 100);
  174. $objActSheet->setCellValue('O' . $rowNum, $cal['btvcSum'] / 100);
  175. $objActSheet->setCellValue('P' . $rowNum, $cal['wvcSum'] / 100);
  176. $objActSheet->setCellValue('Q' . $rowNum, $cal['tvcSum'] / 100);
  177. header('Pragma:public');
  178. header('Content-Type:application/x-msexecl;name="' . $filename . '.xls');
  179. header("Content-Disposition:inline;filename=" . $filename . '.xls');
  180. $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
  181. $objWriter->save('php://output');
  182. }
  183. /**
  184. * 默认开始时间,默认从上个星期天开始
  185. * @return string
  186. */
  187. protected function defaultStartTime()
  188. {
  189. return date('Y-m-d', strtotime('last sunday'));
  190. }
  191. /**
  192. * 默认结束时间,默认今天
  193. * @return string
  194. */
  195. protected function defaultEndTime()
  196. {
  197. return date('Y-m-d');
  198. }
  199. /**
  200. * @param array $params
  201. */
  202. protected function exportXls($params)
  203. {
  204. ExcelHelper::init();
  205. $attachmentName = Yii::$app->user->identity->name . "_交易量报表_" . date('Y-m-d') . '.xlsx';
  206. $header = ['代理商', '账户', '姓名', '外汇', '佣金', '黄金', '佣金', '白银', '佣金', 'CFD', '佣金', '股指', '佣金', '总外佣', '总佣金'];
  207. $source = [];
  208. $api = new VolumeApi();
  209. $params['length'] = 5000;
  210. while (true) {
  211. $result = $api->getList($params);
  212. if ($result['code'] == 1 && !empty($result['data']['data'])) {
  213. foreach ((array)$result['data']['data'] as $key => $row) {
  214. $row['fv'] = $row['fv'] / 100;
  215. $row['fvc'] = $row['fvc'] / 100;
  216. $row['mvGold'] = $row['mvGold'] / 100;
  217. $row['gvc'] = $row['gvc'] / 100;
  218. $row['mvSilver'] = $row['mvSilver'] / 100;
  219. $row['svc'] = $row['svc'] / 100;
  220. $row['cv'] = $row['cv'] / 100;
  221. $row['cvc'] = $row['cvc'] / 100;
  222. $row['stv'] = $row['stv'] / 100;
  223. $row['stvc'] = $row['stvc'] / 100;
  224. $row['wvc'] = $row['wvc'] / 100;
  225. $row['tvc'] = $row['tvc'] / 100;
  226. $arr = [];
  227. $arr[] = $row['name'];
  228. $arr[] = $row['LOGIN'];
  229. $arr[] = $row['NAME'];
  230. $arr[] = $row['fv'];
  231. $arr[] = $row['fvc'];
  232. $arr[] = $row['mvGold'];
  233. $arr[] = $row['gvc'];
  234. $arr[] = $row['mvSilver'];
  235. $arr[] = $row['svc'];
  236. $arr[] = $row['cv'];
  237. $arr[] = $row['cvc'];
  238. $arr[] = $row['stv'];
  239. $arr[] = $row['stvc'];
  240. $arr[] = $row['wvc'];
  241. $arr[] = $row['tvc'];
  242. $source[] = $arr;
  243. }
  244. } else {
  245. break;
  246. }
  247. $params['start'] += $params['length'];
  248. if ($params['start'] >= $result['data']['recordsTotal']) {
  249. break;
  250. }
  251. }
  252. $sum = $api->cal($params)['data'];
  253. foreach ($sum as $k => $v) {
  254. $sum[$k] = $v / 100;
  255. }
  256. $summaryRow = [];
  257. $summaryRow[] = '合计';
  258. $summaryRow[] = '';
  259. $summaryRow[] = '';
  260. $summaryRow[] = $sum['fvSum'];
  261. $summaryRow[] = $sum['fvcSum'];
  262. $summaryRow[] = $sum['mvGoldSum'];
  263. $summaryRow[] = $sum['gvcSum'];
  264. $summaryRow[] = $sum['mvSilverSum'];
  265. $summaryRow[] = $sum['svcSum'];
  266. $summaryRow[] = $sum['cvSum'];
  267. $summaryRow[] = $sum['cvcSum'];
  268. $summaryRow[] = $sum['stvSum'];
  269. $summaryRow[] = $sum['stvcSum'];
  270. $summaryRow[] = $sum['wvcSum'];
  271. $summaryRow[] = $sum['tvcSum'];
  272. $source[] = $summaryRow;
  273. ExcelHelper::output($source, $header, $attachmentName);
  274. }
  275. }