RemitSearch.php 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2018/1/3/003
  6. * Time: 14:30
  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 RemitSearch extends DataTable
  16. {
  17. public $status;
  18. public $batch_no;
  19. public $start_time;
  20. public $end_time;
  21. /**
  22. * @return array
  23. */
  24. public function rules()
  25. {
  26. $rules = parent::rules();
  27. $rules[] = [['status', 'batch_no', 'start_time', 'end_time'], 'safe'];
  28. return $rules;
  29. }
  30. /**
  31. * @param array $params
  32. * @return ArrayDataProvider
  33. */
  34. public function search($params)
  35. {
  36. $this->setAttributes($params);
  37. $this->initSearchParams();
  38. $pagination = new Pagination();
  39. $pagination->setPageSize($this->pageSize);
  40. $data['page'] = $this->page;
  41. $data['pageSize'] = $pagination->getPageSize();
  42. if ($this->orderBy) {
  43. $data['orderBy'] = $this->orderBy;
  44. }
  45. if (!empty($this->search['value']) && trim($this->search['value']) !== '') {
  46. $data['search'] = trim($this->search['value']);
  47. }
  48. if ($this->start_time && ($inStartTime = strtotime($this->start_time))) {
  49. $data['inStartTime'] = $inStartTime;
  50. }
  51. if ($this->end_time && ($inEndTime = strtotime($this->end_time))) {
  52. $data['inEndTime'] = $inEndTime;
  53. }
  54. $data['status'] = $this->status;
  55. $data['batch_no'] = $this->batch_no;
  56. if ($this->pageSize > 1000) {
  57. if (\Yii::$app->getRequest()->isAjax) {
  58. \Yii::$app->getResponse()->redirect(Url::current(), UserAgentHelper::isIE() ? 200 : 302);
  59. } else {
  60. $this->exportXls($data);
  61. }
  62. \Yii::$app->end();
  63. }
  64. $api = new RemitApi();
  65. $result = $api->getFinanceRemitList($data);
  66. // $result = $this->multiQuery($api, 'getFinanceRemitList', $data);
  67. $models = [];
  68. if ($result['code'] == 1) {
  69. $models = (array)$result['data']['dataList'];
  70. $pagination->totalCount = (int)$result['data']['totalCount'];
  71. }
  72. $dataProvider = new ArrayDataProvider([
  73. 'models' => $models,
  74. 'pagination' => $pagination,
  75. 'totalCount' => $pagination->totalCount,
  76. ]);
  77. return $dataProvider;
  78. }
  79. /**
  80. * @param array $params
  81. */
  82. protected function exportXls($params)
  83. {
  84. ExcelHelper::init();
  85. $attachmentName = "财务打款审核记录_" . date('Y-m-d') . '.xls';
  86. $header = ['打款批次号', '打款笔数', '打款总额(CNY)', '创建时间', '审核状态', '初审时间', '初审不通过原因', '初审人员', '复审时间', '复审不通过原因', '复审人员'];
  87. $source = [];
  88. $api = new RemitApi();
  89. $leftSize = $this->pageSize;
  90. while ($leftSize > 0) {
  91. // 重新计算页数和分页大小 start
  92. $pageSize = $leftSize > 1000 ? 1000 : $leftSize;
  93. $params['pageSize'] = $pageSize;
  94. $params['page'] = ceil($this->start / $pageSize) + 1;
  95. $result = $api->getFinanceRemitList($params);
  96. if ($result['code'] == 1 && !empty($result['data']['dataList'])) {
  97. foreach ((array)$result['data']['dataList'] as $key => $row) {
  98. $arr = [];
  99. $arr[] = ' '.$row['batch_no'];
  100. $arr[] = $row['batch_count'];
  101. $arr[] = $row['cny_amount'];
  102. $arr[] = !empty($row['create_time']) ? date('Y-m-d H:i:s', intval($row['create_time'])) : '';
  103. $audit_status = '';
  104. if (isset($row['audit_status']) && (int)$row['audit_status'] == 0) {
  105. $audit_status = '未审核';
  106. } elseif ((int)$row['audit_status'] == 1) {
  107. $audit_status = '初审通过';
  108. } elseif ((int)$row['audit_status'] == 2) {
  109. $audit_status = '复审通过';
  110. } elseif ((int)$row['audit_status'] == 3) {
  111. $audit_status = '初审未通过';
  112. } elseif ((int)$row['audit_status'] == 4) {
  113. $audit_status = '复审未通过';
  114. }
  115. $arr[] = $audit_status;
  116. $arr[] = !empty($row['audit_time']) ? date('Y-m-d H:i:s', intval($row['audit_time'])) : '';
  117. $arr[] = $row['audit_reason'];
  118. $arr[] = $row['audit_name'];
  119. $arr[] = !empty($row['reaudit_time']) ? date('Y-m-d H:i:s', intval($row['reaudit_time'])) : '';
  120. $arr[] = $row['reaudit_reason'];
  121. $arr[] = $row['reaudit_name'];
  122. $source[] = $arr;
  123. }
  124. } else {
  125. break;
  126. }
  127. $this->start += $pageSize;
  128. $leftSize -= $pageSize;
  129. if ($this->start >= $result['data']['totalCount']) {
  130. break;
  131. }
  132. }
  133. ExcelHelper::output($source, $header, $attachmentName);
  134. }
  135. /**
  136. * @param $data
  137. */
  138. private function exportXlsx($data)
  139. {
  140. \Yii::$app->getResponse()->setDownloadHeaders("财务打款审核记录_" . date('Y-m-d') . '.xls')->send();
  141. if (!ob_get_level()) {
  142. ob_start();
  143. }
  144. echo '<style>.num{mso-number-format:General;} .text{mso-number-format:"\@";/*force text*/}</style>';
  145. echo '<table border="1" cellpadding="0" cellspacing="0">';
  146. echo '<tr><th>打款批次号</th><th>打款笔数</th><th>打款总额(CNY)</th><th>创建时间</th><th>审核状态</th><th>初审时间</th><th>初审不通过原因</th><th>初审人员</th><th>复审时间</th><th>复审不通过原因</th><th>复审人员</th></tr>';
  147. $api = new RemitApi();
  148. $leftSize = $this->pageSize;
  149. while ($leftSize > 0) {
  150. // 重新计算页数和分页大小 start
  151. $pageSize = $leftSize > 1000 ? 1000 : $leftSize;
  152. $data['pageSize'] = $pageSize;
  153. $data['page'] = ceil($this->start / $pageSize) + 1;
  154. // 重新计算页数和分页大小 end
  155. $result = $api->getFinanceRemitList($data);
  156. if ($result['code'] == 1 && $result['data']['dataList']) {
  157. foreach ((array)$result['data']['dataList'] as $key => $row) {
  158. $str = '<tr>';
  159. $str .= "<td class='text'>{$row['batch_no']}</td>";
  160. $str .= "<td class='text'>{$row['batch_count']}</td>";
  161. $str .= "<td class='text'>{$row['cny_amount']}</td>";
  162. $str .= "<td class='text'>".date('Y-m-d H:i:s', intval($row['create_time']))."</td>";
  163. if ((int)$row['audit_status'] == 0) {
  164. $str .= "<td class='text'>未审核</td>";
  165. } elseif ((int)$row['audit_status'] == 1) {
  166. $str .= "<td class='text'>初审通过</td>";
  167. } elseif ((int)$row['audit_status'] == 2) {
  168. $str .= "<td class='text'>复审通过</td>";
  169. } elseif ((int)$row['audit_status'] == 3) {
  170. $str .= "<td class='text'>初审未通过</td>";
  171. } elseif ((int)$row['audit_status'] == 4) {
  172. $str .= "<td class='text'>复审未通过</td>";
  173. }
  174. $str .= "<td class='text'>".date('Y-m-d H:i:s', intval($row['audit_time']))."</td>";
  175. $str .= "<td class='text'>{$row['audit_reason']}</td>";
  176. $str .= "<td class='text'>{$row['audit_name']}</td>";
  177. $str .= "<td class='text'>".date('Y-m-d H:i:s', intval($row['reaudit_time']))."</td>";
  178. $str .= "<td class='text'>{$row['reaudit_reason']}</td>";
  179. $str .= "<td class='text'>{$row['reaudit_name']}</td>";
  180. $str .= "</tr>";
  181. echo $str;
  182. }
  183. ob_flush();
  184. flush();
  185. } else {
  186. break;
  187. }
  188. $this->start += $pageSize;
  189. $leftSize -= $pageSize;
  190. if ($this->start >= $result['data']['totalCount']) {
  191. break;
  192. }
  193. }
  194. echo "</table>";
  195. if (ob_get_level()) {
  196. ob_end_flush();
  197. }
  198. }
  199. }