diff --git a/coworker/parktron2server_2017.php b/coworker/parktron2server_2017.php new file mode 100644 index 0000000..a029585 --- /dev/null +++ b/coworker/parktron2server_2017.php @@ -0,0 +1,178 @@ +count = 6; + +$tcp_worker->onConnect = function($connection) +{ + echo "New Connection\n"; +}; + +$tcp_worker->onClose = function($connection) +{ + echo "Connection closed\n"; +}; + +// 當用戶端發來數據(主程式) +$tcp_worker->onMessage = function($connection, $tcp_in) +{ + global $ch, $last_lpr; + + // echo 'start time:'.date('Y-m-d H:i:s'); + + list(, $seq, $cmd, $data) = explode(chr(28), $tcp_in); // 0x1C tcp欄位分隔 + // echo "data_in:[{$seq}|{$cmd}|{$data}|]\n"; + + switch($cmd) + { + case '001': // 車輛入場 + list($devno, $token, $lpr, $in_time, $last_field) = explode(chr(31), $data); // 0x1F data欄位分隔 + $type = substr($last_field, 0, -2); + echo "{$devno}|{$token}|{$lpr}|{$in_time}|{$type}|\n"; + $connection->send('OK'); + break; + + case '002': // APS詢問車牌入場時間 + list($token, $lpr, $last_field) = explode(chr(31), $data); // 0x1F data欄位分隔 + $lpr = str_replace('%', '', $lpr); + $last_lpr = $lpr; + $in_time = substr($last_field, 0, -2); + // echo "cmd_002:[{$token}|{$lpr}|{$in_time}|]/n"; + + $data = array('lpr' => $lpr); + curl_setopt($ch, CURLOPT_URL, 'http://localhost/carpayment.html/query_in_fuzzy/'); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); + $jdata = curl_exec($ch); + $results = json_decode($jdata, true); + + $connection->send(tcp_data_fuzzy($results['count'], $results['results'], '001', '002')); + break; + + case '003': // 繳費完成 + list($ticket_no, $lpr, $in_time, $pay_time, $last_field) = explode(chr(31), $data); // 0x1F data欄位分隔 + $pay_type = substr($last_field, 0, -2); + // echo "{$ticket_no}|{$lpr}|{$in_time}|{$pay_time}|{$pay_type}|/n"; + $connection->send('OK'); + + if ($lpr == '*******') {$err_lpr = '***';} + else + { $err_lpr = '+++';} + + // 傳送繳費資料 + $data = array + ( + 'ticket_no' => $ticket_no, // 票卡號碼 + 'lpr' => $lpr, // 車號 + 'in_time' => $in_time, // 入場時間 + 'pay_time' => $pay_time, // 繳款時間 + 'pay_type' => $pay_type // 繳款方式(0:現金, 1:月票, 2:多卡通) + ); + + curl_setopt($ch, CURLOPT_URL, 'http://localhost/carpayment.html/p2payed/'); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); + $results = curl_exec($ch); + + file_put_contents('/tmp/aps.log.txt', date('Y-m-d H:i:s').":{$err_lpr}\n".print_r($data, true)."\n\n", FILE_APPEND); + + break; + } + + // echo 'end_time:'.date('Y-m-d H:i:s'); +}; + +function tcp_data_fuzzy($records_count, $records, $seq, $cmdid) +{ + $STX = 0x02; // STX:封包起始碼(0x02) + $ETX = 0x03; // ETX:封包結束碼(0x03) + $CRC = 0x80; // CRC:封包檢查碼 + $S1 = 0x1c; // 分隔碼 + $D1 = 0x1f; // 資料每個欄位分隔碼為0x1F + $seq = '00001'; + $cmdid = '002'; + + // 0 筆 + if($records_count == 0) + { + $count = 0; + $data = pack('aC', "{$count}", $D1); // 20170928 為了和舊版一致尾巴都補上 0x1f + + $data_len = strlen($data); + $socket_len = $data_len + 16; + + $send_data = + pack("CCCCa5Ca3C", + $STX, + $socket_len / 0x0100, + $socket_len % 0x0100, $S1, + $seq, $S1, + $cmdid, $S1). + + $data. + + pack("CC", $CRC, $ETX); + + return $send_data; + } + + // 1. create data + $packcontent_arr = array(); + foreach ($records as $idx => $rows) + { + $pathlen = strlen($rows['in_pic_name']); + array_push($packcontent_arr, pack('A7', $records[$idx]['lpr'])); + array_push($packcontent_arr, pack('a7', $records[$idx]['seat_no'])); + array_push($packcontent_arr, pack('a', $records[$idx]['ticket'])); + array_push($packcontent_arr, pack('a19', $records[$idx]['in_time'])); + array_push($packcontent_arr, pack("a{$pathlen}" , $records[$idx]['in_pic_name'])); + array_push($packcontent_arr, pack('a19', $records[$idx]['pay_time'])); + array_push($packcontent_arr, pack('a10', $records[$idx]['start_date'])); + array_push($packcontent_arr, pack('a10', $records[$idx]['end_date'])); + array_push($packcontent_arr, pack('a5', $records[$idx]['start_time'])); + array_push($packcontent_arr, pack('a5', $records[$idx]['end_time'])); + array_push($packcontent_arr, pack('a1', $records[$idx]['area_code'])); + } + + // gen packcontent + $packcontent = implode(pack('C', $D1), $packcontent_arr); + + // gen data + $data = pack("aC", count($records), $D1) . $packcontent . pack("C", $D1); // 20170928 為了和舊版一致尾巴都補上 0x1f + + // get data length + $data_len = strlen($data); + $socket_len = $data_len + 16; + + // gen send_data + $send_data = + pack("CCCCa5Ca3C", + $STX, + $socket_len / 0x0100, + $socket_len % 0x0100, $S1, + $seq, $S1, + $cmdid, $S1). + + $data. + + pack("CC", $CRC, $ETX); + + return $send_data; +} + +// 執行worker +Worker::runAll(); diff --git a/models/Parkingquery_model.php b/models/Parkingquery_model.php index b6f9a0f..6f3cdfa 100644 --- a/models/Parkingquery_model.php +++ b/models/Parkingquery_model.php @@ -126,8 +126,6 @@ class Parkingquery_model extends CI_Model */ // 空車位導引 - // http://203.75.167.89/parkingquery.html/get_valid_seat - // 註記現在時間, 並保留10分鐘 public function get_valid_seat($pksno, $group_type=1) { $data = array(); diff --git a/models/Sync_data_model.php b/models/Sync_data_model.php index beb0ad6..e012917 100644 --- a/models/Sync_data_model.php +++ b/models/Sync_data_model.php @@ -643,6 +643,7 @@ class Sync_data_model extends CI_Model $settings[$station_no]['station_888'] = empty($data['station_888']) ? 1 : $data['station_888']; $settings[$station_no]['mqtt_ip'] = empty($data['mqtt_ip']) ? MQ_HOST : $data['mqtt_ip']; $settings[$station_no]['mqtt_port'] = empty($data['mqtt_port']) ? MQ_PORT : $data['mqtt_port']; + $settings[$station_no]['local_ip'] = empty($data['local_ip']) ? MQ_HOST : $data['local_ip']; } $station_no_str = implode(SYNC_DELIMITER_ST_NO, $station_no_arr); // 取值時會用到 $station_name_str = implode(SYNC_DELIMITER_ST_NAME, $station_name_arr); // 純顯示