RemitDetailSearch.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2018/1/3/003
  6. * Time: 19:49
  7. */
  8. namespace backend\models\searches;
  9. use backend\models\RemitApi;
  10. use common\helpers\ExcelHelper;
  11. use common\helpers\UserAgentHelper;
  12. use yii\data\ArrayDataProvider;
  13. use yii\data\Pagination;
  14. use yii\helpers\Url;
  15. class RemitDetailSearch extends DataTable
  16. {
  17. public $remit_no;
  18. /**
  19. * @return array
  20. */
  21. public function rules()
  22. {
  23. $rules = parent::rules();
  24. $rules[] = [['remit_no'], 'safe'];
  25. return $rules;
  26. }
  27. public function search($params)
  28. {
  29. $this->setAttributes($params);
  30. $this->initSearchParams();
  31. $pagination = new Pagination();
  32. $pagination->setPageSize($this->pageSize);
  33. $data['page'] = $this->page;
  34. $data['pageSize'] = $pagination->getPageSize();
  35. if ($this->orderBy) {
  36. $data['orderBy'] = $this->orderBy;
  37. }
  38. if (!empty($this->search['value']) && trim($this->search['value']) !== '') {
  39. $data['search'] = trim($this->search['value']);
  40. }
  41. $data['remit_no'] = $this->remit_no;
  42. $data['batch_no'] = $params['batch_no'];
  43. if ($this->pageSize > 1000) {
  44. if (\Yii::$app->getRequest()->isAjax) {
  45. \Yii::$app->getResponse()->redirect(Url::current(), UserAgentHelper::isIE() ? 200 : 302);
  46. } else {
  47. $this->exportXls($data);
  48. }
  49. \Yii::$app->end();
  50. }
  51. $api = new RemitApi();
  52. $result = $api->financeRemitDetail($data);
  53. // $result = $this->multiQuery($api, 'financeRemitDetail', $data);
  54. $models = [];
  55. if ($result['code'] == 1) {
  56. $models = (array)$result['data']['dataList'];
  57. $pagination->totalCount = (int)$result['data']['totalCount'];
  58. }
  59. $dataProvider = new ArrayDataProvider([
  60. 'models' => $models,
  61. 'pagination' => $pagination,
  62. 'totalCount' => $pagination->totalCount,
  63. ]);
  64. return $dataProvider;
  65. }
  66. /**
  67. * @param array $params
  68. */
  69. protected function exportXls($params)
  70. {
  71. ExcelHelper::init();
  72. $attachmentName = "财务打款审核记录_" . date('Y-m-d') . '.xls';
  73. $header = ['打款批次号', '打款单号', '打款方式', '出金单号', '收款人名字', '打款金额', '银行名称', '银行支行', '银行卡号', '开户行所在省', '开户行所在市', '银行代码', '备注', '打款信息'];
  74. $source = [];
  75. $api = new RemitApi();
  76. $leftSize = $this->pageSize;
  77. while ($leftSize > 0) {
  78. // 重新计算页数和分页大小 start
  79. $pageSize = $leftSize > 1000 ? 1000 : $leftSize;
  80. $params['pageSize'] = $pageSize;
  81. $params['page'] = ceil($this->start / $pageSize) + 1;
  82. $result = $api->financeRemitDetail($params);
  83. if ($result['code'] == 1 && !empty($result['data']['dataList'])) {
  84. foreach ((array)$result['data']['dataList'] as $key => $row) {
  85. $arr = [];
  86. $arr[] = ' '.$row['batch_no'];
  87. $arr[] = ' '.$row['remit_no'];
  88. $pay_type = '';
  89. if ((int)$row['pay_type'] == 1) {
  90. $pay_type = '爱农';
  91. } elseif ((int)$row['pay_type'] == 2) {
  92. $pay_type = '汇道';
  93. } elseif ((int)$row['pay_type'] == 3) {
  94. $pay_type = '';
  95. } elseif ((int)$row['pay_type'] == 4) {
  96. $pay_type = '华银';
  97. } elseif ((int)$row['pay_type'] == 5) {
  98. $pay_type = '奥凸';
  99. }
  100. $arr[] = $pay_type;
  101. $arr[] = ' '.$row['biz_no'];
  102. $arr[] = $row['payee_name'];
  103. $arr[] = $row['amount'];
  104. $arr[] = $row['bank_name'];
  105. $arr[] = $row['bank_branch'];
  106. $arr[] = ' '.$row['bank_card_no'];
  107. $arr[] = $row['bank_province'];
  108. $arr[] = $row['bank_city'];
  109. $arr[] = $row['bank_code'];
  110. $arr[] = $row['memo'];
  111. $arr[] = $row['ret_msg'];
  112. $source[] = $arr;
  113. }
  114. } else {
  115. break;
  116. }
  117. $this->start += $pageSize;
  118. $leftSize -= $pageSize;
  119. if ($this->start >= $result['data']['totalCount']) {
  120. break;
  121. }
  122. }
  123. ExcelHelper::output($source, $header, $attachmentName);
  124. }
  125. private function exportXlsx($data)
  126. {
  127. \Yii::$app->getResponse()->setDownloadHeaders("财务打款审核记录_" . date('Y-m-d') . '.xls')->send();
  128. if (!ob_get_level()) {
  129. ob_start();
  130. }
  131. echo '<style>.num{mso-number-format:General;} .text{mso-number-format:"\@";/*force text*/}</style>';
  132. echo '<table border="1" cellpadding="0" cellspacing="0">';
  133. echo '<tr><th>打款批次号</th><th>打款单号</th><th>打款方式</th><th>出金单号</th><th>收款人名字</th><th>打款金额</th><th>银行名称</th><th>银行支行</th><th>银行卡号</th><th>开户行所在省</th><th>开户行所在市</th><th>银行代码</th><th>备注</th><th>打款信息</th></tr>';
  134. $api = new RemitApi();
  135. $leftSize = $this->pageSize;
  136. while ($leftSize > 0) {
  137. // 重新计算页数和分页大小 start
  138. $pageSize = $leftSize > 1000 ? 1000 : $leftSize;
  139. $data['pageSize'] = $pageSize;
  140. $data['page'] = ceil($this->start / $pageSize) + 1;
  141. // 重新计算页数和分页大小 end
  142. $result = $api->financeRemitDetail($data);
  143. if ($result['code'] == 1 && $result['data']['dataList']) {
  144. foreach ((array)$result['data']['dataList'] as $key => $row) {
  145. $str = '<tr>';
  146. $str .= "<td class='text'>{$row['batch_no']}</td>";
  147. $str .= "<td class='text'>{$row['remit_no']}</td>";
  148. if ((int)$row['pay_type'] == 1) {
  149. $str .= "<td class='text'>爱农</td>";
  150. } elseif ((int)$row['pay_type'] == 2) {
  151. $str .= "<td class='text'>汇道</td>";
  152. } elseif ((int)$row['pay_type'] == 3) {
  153. $str .= "<td class='text'></td>";
  154. } elseif ((int)$row['pay_type'] == 4) {
  155. $str .= "<td class='text'>华银</td>";
  156. } elseif ((int)$row['pay_type'] == 5) {
  157. $str .= "<td class='text'>奥凸</td>";
  158. }
  159. $str .= "<td class='text'>{$row['biz_no']}</td>";
  160. $str .= "<td class='text'>{$row['payee_name']}</td>";
  161. $str .= "<td class='text'>{$row['amount']}</td>";
  162. $str .= "<td class='text'>{$row['bank_name']}</td>";
  163. $str .= "<td class='text'>{$row['bank_branch']}</td>";
  164. $str .= "<td class='text'>{$row['bank_card_no']}</td>";
  165. $str .= "<td class='text'>{$row['bank_province']}</td>";
  166. $str .= "<td class='text'>{$row['bank_city']}</td>";
  167. $str .= "<td class='text'>{$row['bank_code']}</td>";
  168. $str .= "<td class='text'>{$row['memo']}</td>";
  169. $str .= "<td class='text'>{$row['ret_msg']}</td>";
  170. $str .= "</tr>";
  171. echo $str;
  172. }
  173. ob_flush();
  174. flush();
  175. } else {
  176. break;
  177. }
  178. $this->start += $pageSize;
  179. $leftSize -= $pageSize;
  180. if ($this->start >= $result['data']['totalCount']) {
  181. break;
  182. }
  183. }
  184. echo "</table>";
  185. if (ob_get_level()) {
  186. ob_end_flush();
  187. }
  188. }
  189. }