VM暫存
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

273 рядки
8.3KB

  1. <?php
  2. /*
  3. file: cars.php 車輛進出場處理
  4. */
  5. class Cars extends CC_Controller
  6. {
  7. function __construct()
  8. {
  9. parent::__construct('cars');
  10. //ignore_user_abort(); // 接受client斷線, 繼續run
  11. if(in_array($this->router->fetch_method(), array(
  12. 'ipcam', 'ipcam_meta',
  13. 'check_lpr_etag',
  14. 'opendoor',
  15. 'temp_opendoors', 'member_opendoors'
  16. )))
  17. {
  18. ob_end_clean();
  19. ignore_user_abort();
  20. ob_start();
  21. echo 'ok';
  22. header('Connection: close');
  23. header('Content-Length: ' . ob_get_length());
  24. ob_end_flush();
  25. flush();
  26. }
  27. else if(in_array($this->router->fetch_method(), array('post_ipcam')))
  28. {
  29. ob_end_clean();
  30. ignore_user_abort();
  31. ob_start();
  32. echo 'OK'; // 痾
  33. header('Connection: close');
  34. header('Content-Length: ' . ob_get_length());
  35. ob_end_flush();
  36. flush();
  37. }
  38. }
  39. // ------------------------------------
  40. // 廠商對接 START
  41. // ------------------------------------
  42. // [API]
  43. public function get_opendoor()
  44. {
  45. // 初始 mqtt
  46. $this->init_mqtt();
  47. // 執行
  48. $parms = $this->uri->uri_to_assoc(3);
  49. $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌
  50. $return_msg = $this->app_model()->opendoor_lprio($parms);
  51. trigger_error(__FUNCTION__ . "|{$parms['sno']}|{$parms['ivsno']}|{$parms['io']}|{$parms['lpr']}|return_msg|" . $return_msg);
  52. echo $return_msg;
  53. exit;
  54. }
  55. // [API]
  56. public function post_ipcam()
  57. {
  58. // 執行
  59. $parms = $this->uri->uri_to_assoc(3);
  60. $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌
  61. // 同步並送出一次出入口 888
  62. $this->data_model()->sync_888($parms);
  63. $pic_folder = CAR_PIC.$this->vars['date_num'].'/'; // 今日資料夾名(yyyymmdd)
  64. if (!file_exists($pic_folder)) mkdir($pic_folder); // 如果資料夾不存在, 建立日期資料夾
  65. $config['upload_path'] = $pic_folder;
  66. $config['allowed_types'] = 'jpg';
  67. $config['file_name'] = "lpr-{$parms['lpr']}-{$parms['io']}-{$parms['ivsno']}-{$parms['sq']}-C-1-{$this->vars['time_num']}.jpg";
  68. trigger_error(__FUNCTION__ . '..' . print_r($_FILES, true));
  69. if (!isset($_FILES['cars']))
  70. {
  71. $status = 'error'; // 顯示上傳錯誤
  72. trigger_error('[ERROR] cars not found: ' . print_r($_FILES, true));
  73. }
  74. else
  75. {
  76. $this->load->library('upload', $config);
  77. if(!$this->upload->do_upload('cars')){
  78. $status = 'error'; // 顯示上傳錯誤
  79. trigger_error($this->upload->display_errors());
  80. }
  81. else
  82. {
  83. // 若無錯誤,則上傳檔案
  84. $file = $this->upload->data('cars');
  85. $status = 'ok';
  86. }
  87. }
  88. $parms['obj_type'] = 1; // 車牌類
  89. $parms['curr_time_str'] = $this->vars['date_time']; // 現在時間, 例2015-09-21 15:36:47
  90. $parms['pic_name'] = $config['file_name']; // 圖片檔名
  91. // 免費時間設定
  92. $parms['free_time'] = $this->get_free_time();
  93. $return_msg = $this->app_model()->lprio($parms);
  94. trigger_error(__FUNCTION__ . "|{$parms['sno']}|{$parms['ivsno']}|{$parms['io']}|{$parms['lpr']}|return_msg|" . $return_msg);
  95. }
  96. // ------------------------------------
  97. // 廠商對接 END
  98. // ------------------------------------
  99. /*
  100. 出入口
  101. 說明: 與ipcam相同判斷邏輯, 但不做任何資料更改
  102. */
  103. public function opendoor()
  104. {
  105. // 初始 mqtt
  106. $this->init_mqtt();
  107. // 執行
  108. $parms = $this->uri->uri_to_assoc(3);
  109. $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌
  110. $data = array('Command' => "VM_opendoor", 'Data' => $parms);
  111. //傳送進出資料給新後台
  112. $this->app_model()->mq_send('AltobParkingServer_Local',json_encode($data,true));
  113. $return_msg = $this->app_model()->opendoor_lprio($parms);
  114. trigger_error(__FUNCTION__ . "|{$parms['sno']}|{$parms['ivsno']}|{$parms['io']}|{$parms['lpr']}|return_msg|" . $return_msg);
  115. }
  116. // IVS -> 車號, 影像
  117. /*
  118. 鼎高IVS傳送車號及影像檔
  119. http://192.168.10.201/cars.html/ipcam/sno/12119/ivsno/0/io/O/type/C/lpr/4750YC/color/NULL/sq/0/ts/1441051995/sq2/0/etag/ABCD123456789/ant/1
  120. sno: 場站編號(光興國小:12119)
  121. ivsno: ivs編號, 每一支都是獨立編號(序號)
  122. io: i:進場, o:出場
  123. type: C:汽車, H:重機, M:機車
  124. lpr: ABC-1234(車號)
  125. color: red(紅色), 若無請用NULL(4個字)
  126. sq: 序號(參考用)
  127. sq2: 暫不用
  128. etag: eTag ID
  129. ant: eTag
  130. http設定說明:
  131. method: POST
  132. 上傳圖檔名英數字, 副檔名為gif/jpg/png均可
  133. 上傳圖檔欄位名稱為cars
  134. */
  135. public function ipcam()
  136. {
  137. // 執行
  138. $parms = $this->uri->uri_to_assoc(3);
  139. $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌
  140. // 同步並送出一次出入口 888
  141. $this->data_model()->sync_888($parms);
  142. $pic_folder = CAR_PIC.$this->vars['date_num'].'/'; // 今日資料夾名(yyyymmdd)
  143. if (!file_exists($pic_folder)) mkdir($pic_folder); // 如果資料夾不存在, 建立日期資料夾
  144. $config['upload_path'] = $pic_folder;
  145. // $config['allowed_types'] = 'gif|jpg|png';
  146. $config['allowed_types'] = '*';
  147. // ex. lpr_1625AB_I_1_152_C_1_2015080526.jpg -> car_交易序號_進出_順序_車號_時間.jpg
  148. $config['file_name'] = "lpr-{$parms['lpr']}-{$parms['io']}-{$parms['ivsno']}-{$parms['sq']}-{$parms['type']}-{$parms['sq2']}-{$this->vars['time_num']}.jpg";
  149. if (!isset($_FILES['cars']))
  150. {
  151. $status = 'error'; // 顯示上傳錯誤
  152. trigger_error('[ERROR] cars not found: ' . print_r($_FILES, true));
  153. }
  154. else
  155. {
  156. $this->load->library('upload', $config);
  157. if(!$this->upload->do_upload('cars')){
  158. $status = 'error'; // 顯示上傳錯誤
  159. trigger_error($this->upload->display_errors());
  160. }
  161. else
  162. {
  163. // 若無錯誤,則上傳檔案
  164. $file = $this->upload->data('cars');
  165. $status = 'ok';
  166. }
  167. }
  168. $parms['obj_type'] = 1; // 車牌類
  169. $parms['curr_time_str'] = $this->vars['date_time']; // 現在時間, 例2015-09-21 15:36:47
  170. $parms['pic_name'] = $config['file_name']; // 圖片檔名
  171. // 免費時間設定
  172. $parms['free_time'] = $this->get_free_time();
  173. $return_msg = $this->app_model()->lprio($parms); // 測試eTag
  174. trigger_error(__FUNCTION__ . "|{$parms['sno']}|{$parms['ivsno']}|{$parms['io']}|{$parms['lpr']}|return_msg|" . $return_msg);
  175. }
  176. /*
  177. 出入口
  178. 說明: 特殊方式進出註記 (ex. 悠遊卡)
  179. */
  180. public function ipcam_meta()
  181. {
  182. $parms = $this->uri->uri_to_assoc(3);
  183. $parms['lpr'] = urldecode($parms['lpr']); // 中文車牌
  184. // 執行
  185. $this->app_model()->ipcam_meta($parms);
  186. }
  187. // 用車牌與eTag, 檢查資料庫
  188. public function check_lpr_etag()
  189. {
  190. $lpr = $this->uri->segment(3);
  191. $etag = $this->uri->segment(4);
  192. // 執行
  193. $this->app_model()->check_lpr_etag($lpr, $etag);
  194. exit;
  195. }
  196. // 開門 (臨停)
  197. public function temp_opendoors()
  198. {
  199. $parms['ivsno'] = $this->uri->segment(3);
  200. $parms['lpr'] = $this->uri->segment(4);
  201. $parms['ck'] = $this->uri->segment(5);
  202. // 初始 mqtt
  203. $this->init_mqtt();
  204. // 執行
  205. $result = $this->app_model()->do_temp_opendoor($parms);
  206. trigger_error(__FUNCTION__ . "..{$result}.." . print_r($parms, true));
  207. exit;
  208. }
  209. // 開門 (臨停)
  210. public function member_opendoors()
  211. {
  212. $parms['ivsno'] = $this->uri->segment(3);
  213. $parms['lpr'] = $this->uri->segment(4);
  214. $parms['ck'] = $this->uri->segment(5);
  215. // 初始 mqtt
  216. $this->init_mqtt();
  217. // 執行
  218. $result = $this->app_model()->do_member_opendoor($parms);
  219. trigger_error(__FUNCTION__ . "..{$result}.." . print_r($parms, true));
  220. exit;
  221. }
  222. }