VM暫存
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

266 wiersze
14KB

  1. <?php
  2. /*
  3. file: Excel_model.php 匯出報表專用
  4. */
  5. class Excel_model extends CI_Model
  6. {
  7. function __construct()
  8. {
  9. parent::__construct();
  10. $this->load->database();
  11. $this->now_str = date('Y-m-d H:i:s');
  12. ini_set('max_execution_time','300');
  13. ini_set('memory_limit','512M');
  14. }
  15. public function init($vars)
  16. {
  17. $this->vars = $vars;
  18. }
  19. // 會員名單報表
  20. public function export_members()
  21. {
  22. trigger_error(EXPORT_LOG_TITLE. '..start..' . __FUNCTION__);
  23. // 讀入廠站資料
  24. $sql = "
  25. select
  26. members.member_name as member_name,
  27. members.lpr as lpr,
  28. members.contract_no as contract_no,
  29. members.start_date as start_date,
  30. members.end_date as end_date,
  31. members.amt as amt,
  32. members.update_time as update_time,
  33. members.member_attr,
  34. members.fee_period,
  35. members.mobile_no,
  36. members.deposit,
  37. members.suspended,
  38. members.locked,
  39. members.valid_time
  40. from members
  41. ORDER BY update_time DESC
  42. ";
  43. $results = $this->db->query($sql)->result_array();
  44. if(empty($results))
  45. {
  46. trigger_error(EXPORT_LOG_TITLE.'..no data..' . $this->db->last_query());
  47. return false;
  48. }
  49. //$total_count = $this->db->query($sql)->num_rows();
  50. // 產生 Excel
  51. $this->load->library('excel');
  52. $objPHPExcel = new PHPExcel();
  53. $objPHPExcel->setActiveSheetIndex(0);
  54. $col_A_mapping = array('col_name' => 'A', 'col_title' => '會員名稱', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  55. $col_B_mapping = array('col_name' => 'B', 'col_title' => '車牌號碼', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  56. $col_C_mapping = array('col_name' => 'C', 'col_title' => '合約代碼', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  57. $col_D_mapping = array('col_name' => 'D', 'col_title' => '開始時間', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  58. $col_E_mapping = array('col_name' => 'E', 'col_title' => '結束時間', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  59. $col_F_mapping = array('col_name' => 'F', 'col_title' => '租金', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  60. $col_G_mapping = array('col_name' => 'G', 'col_title' => '最後更新時間', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  61. $col_H_mapping = array('col_name' => 'H', 'col_title' => '身份', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  62. $col_I_mapping = array('col_name' => 'I', 'col_title' => '繳期', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  63. $col_J_mapping = array('col_name' => 'J', 'col_title' => '電話', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  64. $col_K_mapping = array('col_name' => 'K', 'col_title' => '押金', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  65. $col_L_mapping = array('col_name' => 'L', 'col_title' => '停權 (營管操作)', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  66. $col_M_mapping = array('col_name' => 'M', 'col_title' => '鎖車 (會員操作)', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  67. $col_N_mapping = array('col_name' => 'N', 'col_title' => '有效期限 (審核後更新)', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  68. $raw_index = 1;
  69. $objPHPExcel->getActiveSheet()->setTitle('下載');
  70. $objPHPExcel->getActiveSheet()->setCellValue($col_A_mapping['col_name'].$raw_index, $col_A_mapping['col_title']);
  71. $objPHPExcel->getActiveSheet()->setCellValue($col_B_mapping['col_name'].$raw_index, $col_B_mapping['col_title']);
  72. $objPHPExcel->getActiveSheet()->setCellValue($col_C_mapping['col_name'].$raw_index, $col_C_mapping['col_title']);
  73. $objPHPExcel->getActiveSheet()->setCellValue($col_D_mapping['col_name'].$raw_index, $col_D_mapping['col_title']);
  74. $objPHPExcel->getActiveSheet()->setCellValue($col_E_mapping['col_name'].$raw_index, $col_E_mapping['col_title']);
  75. $objPHPExcel->getActiveSheet()->setCellValue($col_F_mapping['col_name'].$raw_index, $col_F_mapping['col_title']);
  76. $objPHPExcel->getActiveSheet()->setCellValue($col_G_mapping['col_name'].$raw_index, $col_G_mapping['col_title']);
  77. $objPHPExcel->getActiveSheet()->setCellValue($col_H_mapping['col_name'].$raw_index, $col_H_mapping['col_title']);
  78. $objPHPExcel->getActiveSheet()->setCellValue($col_I_mapping['col_name'].$raw_index, $col_I_mapping['col_title']);
  79. $objPHPExcel->getActiveSheet()->setCellValue($col_J_mapping['col_name'].$raw_index, $col_J_mapping['col_title']);
  80. $objPHPExcel->getActiveSheet()->setCellValue($col_K_mapping['col_name'].$raw_index, $col_K_mapping['col_title']);
  81. $objPHPExcel->getActiveSheet()->setCellValue($col_L_mapping['col_name'].$raw_index, $col_L_mapping['col_title']);
  82. $objPHPExcel->getActiveSheet()->setCellValue($col_M_mapping['col_name'].$raw_index, $col_M_mapping['col_title']);
  83. $objPHPExcel->getActiveSheet()->setCellValue($col_N_mapping['col_name'].$raw_index, $col_N_mapping['col_title']);
  84. $warning_style = array(
  85. //'alignment' => array('horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER),
  86. 'font' => array(
  87. 'bold' => true,
  88. 'color' => array('rgb' => 'FF0000'),
  89. 'size' => 16,
  90. 'name' => 'Verdana'
  91. )
  92. );
  93. $hq_info = $this->vars['mcache']->get('info');
  94. $count = 0;
  95. foreach($results as $rows)
  96. {
  97. $raw_index += 1;
  98. $member_name = $rows['member_name'];
  99. $lpr = $rows['lpr'];
  100. $contract_no = $rows['contract_no'] ? $rows['contract_no'] : '';
  101. $start_date = $rows['start_date'];
  102. $end_date = $rows['end_date'];
  103. $amt = $rows['amt'] ? $rows['amt'] : '0';
  104. $update_time = $rows['update_time'];
  105. $member_attr = ( empty($hq_info['member_attr']) || empty($rows['member_attr']) || empty($hq_info['member_attr'][$rows['member_attr']]) ) ? '無' : $hq_info['member_attr'][$rows['member_attr']];
  106. $fee_period = ( empty($hq_info['period_name']) || empty($rows['fee_period']) || empty($hq_info['period_name'][$rows['fee_period']]) ) ? '無' : $hq_info['period_name'][$rows['fee_period']];
  107. $mobile_no = $rows['mobile_no'];
  108. $deposit = $rows['deposit'];
  109. $suspended = (empty($rows['suspended'])) ? '無' : '已停權';
  110. $locked = (empty($rows['locked'])) ? '無' : '已鎖車';
  111. $valid_time = $rows['valid_time'];
  112. $count++;
  113. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_A_mapping['col_name'].$raw_index, $member_name, $col_A_mapping['col_type']);
  114. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_B_mapping['col_name'].$raw_index, $lpr, $col_B_mapping['col_type']);
  115. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_C_mapping['col_name'].$raw_index, $contract_no, $col_C_mapping['col_type']);
  116. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_D_mapping['col_name'].$raw_index, $start_date, $col_D_mapping['col_type']);
  117. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_E_mapping['col_name'].$raw_index, $end_date, $col_E_mapping['col_type']);
  118. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_F_mapping['col_name'].$raw_index, $amt, $col_F_mapping['col_type']);
  119. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_G_mapping['col_name'].$raw_index, $update_time, $col_G_mapping['col_type']);
  120. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_H_mapping['col_name'].$raw_index, $member_attr, $col_H_mapping['col_type']);
  121. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_I_mapping['col_name'].$raw_index, $fee_period, $col_I_mapping['col_type']);
  122. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_J_mapping['col_name'].$raw_index, $mobile_no, $col_J_mapping['col_type']);
  123. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_K_mapping['col_name'].$raw_index, $deposit, $col_K_mapping['col_type']);
  124. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_L_mapping['col_name'].$raw_index, $suspended, $col_L_mapping['col_type']);
  125. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_M_mapping['col_name'].$raw_index, $locked, $col_M_mapping['col_type']);
  126. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_N_mapping['col_name'].$raw_index, $valid_time, $col_N_mapping['col_type']);
  127. // 設定 style
  128. if($valid_time != $end_date)
  129. {
  130. $objPHPExcel->getActiveSheet()->getStyle($col_N_mapping['col_name'].$raw_index)->applyFromArray($warning_style);
  131. }
  132. }
  133. // 網站下載
  134. $filename_prefix = iconv('UTF-8', 'Big5', '會員資料 - '. STATION_NAME);
  135. $filename_postfix = iconv('UTF-8', 'Big5', '(現況)');
  136. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  137. header('Content-Type: application/vnd.ms-excel');
  138. header('Content-Disposition: attachment;filename="' . $filename_prefix. ' - ' . $filename_postfix . '.xlsx');
  139. header('Cache-Control: max-age=0');
  140. $objWriter->save('php://output');
  141. trigger_error(EXPORT_LOG_TITLE . '..completed..' . __FUNCTION__ . '|count:' . $count);
  142. return true;
  143. }
  144. // 進出記錄報表
  145. public function export_cario_data($query_year, $query_month)
  146. {
  147. ini_set('max_execution_time','300');
  148. ini_set('memory_limit','512M');
  149. trigger_error(EXPORT_LOG_TITLE. '..start..' . __FUNCTION__ . "|{$query_year},{$query_month}");
  150. // 讀入廠站資料
  151. $sql = "
  152. SELECT
  153. cario.obj_id AS plate_no,
  154. cario.in_time as in_time,
  155. cario.out_time as out_time,
  156. members.member_name as member_name,
  157. CONCAT( FLOOR(HOUR(TIMEDIFF(cario.in_time, cario.out_time)) / 24), ' 日 ',
  158. MOD(HOUR(TIMEDIFF(cario.in_time, cario.out_time)), 24), ' 時 ',
  159. MINUTE(TIMEDIFF(cario.in_time, cario.out_time)), ' 分') as time_period
  160. FROM cario
  161. left join members on cario.member_no = members.member_no
  162. WHERE cario.err = 0 and cario.obj_id != 'NONE'
  163. and YEAR(cario.in_time) = {$query_year} and MONTH(cario.in_time) = {$query_month}
  164. and cario.out_time is not null
  165. ORDER BY cario.in_time ASC
  166. ";
  167. $results = $this->db->query($sql)->result_array();
  168. if(empty($results))
  169. {
  170. trigger_error(EXPORT_LOG_TITLE.'..no data..' . $this->db->last_query());
  171. return false;
  172. }
  173. //$total_count = $this->db->query($sql)->num_rows();
  174. // 產生 Excel
  175. $this->load->library('excel');
  176. $objPHPExcel = new PHPExcel();
  177. $objPHPExcel->setActiveSheetIndex(0);
  178. $col_A_mapping = array('col_name' => 'A', 'col_title' => '車牌號碼', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  179. $col_B_mapping = array('col_name' => 'B', 'col_title' => '進場時間', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  180. $col_C_mapping = array('col_name' => 'C', 'col_title' => '離場日期', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  181. $col_D_mapping = array('col_name' => 'D', 'col_title' => '停車時數', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  182. $col_E_mapping = array('col_name' => 'E', 'col_title' => '場站名稱', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  183. $col_F_mapping = array('col_name' => 'F', 'col_title' => '會員名稱', 'col_type' => PHPExcel_Cell_DataType::TYPE_STRING);
  184. $raw_index = 1;
  185. $objPHPExcel->getActiveSheet()->setTitle('下載');
  186. $objPHPExcel->getActiveSheet()->setCellValue($col_A_mapping['col_name'].$raw_index, $col_A_mapping['col_title']);
  187. $objPHPExcel->getActiveSheet()->setCellValue($col_B_mapping['col_name'].$raw_index, $col_B_mapping['col_title']);
  188. $objPHPExcel->getActiveSheet()->setCellValue($col_C_mapping['col_name'].$raw_index, $col_C_mapping['col_title']);
  189. $objPHPExcel->getActiveSheet()->setCellValue($col_D_mapping['col_name'].$raw_index, $col_D_mapping['col_title']);
  190. $objPHPExcel->getActiveSheet()->setCellValue($col_E_mapping['col_name'].$raw_index, $col_E_mapping['col_title']);
  191. $objPHPExcel->getActiveSheet()->setCellValue($col_F_mapping['col_name'].$raw_index, $col_F_mapping['col_title']);
  192. $count = 0;
  193. foreach($results as $rows)
  194. {
  195. $raw_index += 1;
  196. $plate_no = $rows['plate_no'];
  197. $in_time = $rows['in_time'];
  198. $out_time = $rows['out_time'];
  199. $time_period = $rows['time_period'];
  200. $member_name = $rows['member_name'] ? $rows['member_name'] : '臨停';
  201. $count++;
  202. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_A_mapping['col_name'].$raw_index, $plate_no, $col_A_mapping['col_type']);
  203. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_B_mapping['col_name'].$raw_index, $in_time, $col_B_mapping['col_type']);
  204. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_C_mapping['col_name'].$raw_index, $out_time, $col_C_mapping['col_type']);
  205. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_D_mapping['col_name'].$raw_index, $time_period, $col_D_mapping['col_type']);
  206. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_E_mapping['col_name'].$raw_index, STATION_NAME, $col_E_mapping['col_type']);
  207. $objPHPExcel->getActiveSheet()->setCellValueExplicit($col_F_mapping['col_name'].$raw_index, $member_name, $col_F_mapping['col_type']);
  208. }
  209. // 儲存檔案
  210. /*
  211. $filename_prefix = iconv('UTF-8', 'Big5', '車牌號碼進出記錄 - '. STATION_NAME);
  212. $filename_postfix = iconv('UTF-8', 'Big5', $query_year . '年' .$query_month.'月份');
  213. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  214. $objWriter->save(EXPORT_BASE.$filename_prefix.' - '.$filename_postfix.'.xlsx');
  215. */
  216. // 網站下載
  217. $filename_prefix = iconv('UTF-8', 'Big5', '車牌號碼進出記錄 - '. STATION_NAME);
  218. $filename_postfix = iconv('UTF-8', 'Big5', $query_year . '年' .$query_month.'月份');
  219. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  220. header('Content-Type: application/vnd.ms-excel');
  221. header('Content-Disposition: attachment;filename="' . $filename_prefix. ' - ' . $filename_postfix . '.xlsx');
  222. header('Cache-Control: max-age=0');
  223. $objWriter->save('php://output');
  224. trigger_error(EXPORT_LOG_TITLE . '..completed..' . __FUNCTION__ . '|count:' . $count);
  225. return true;
  226. }
  227. }