VM暫存
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Cars.php 8.3KB

8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
7年前
8年前
8年前
8年前
8年前
8年前
8年前
7年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
8年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  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. }