From 498af8440b331fe500e749ab0c60da5b7754959e Mon Sep 17 00:00:00 2001 From: "altob.rd" Date: Wed, 15 Nov 2017 18:41:15 +0800 Subject: [PATCH] allpa upd --- controllers/Allpa_service.php | 48 +++++++++++++++++-- controllers/Carpark.php | 7 ++- models/Cars_model.php | 94 +++++++++++++++++++++----------------- models/Sync_data_model.php | 32 +++++++++++++ phplibs/Altob.Sync.Integration.php | 55 ++++++++++++++++++++-- 5 files changed, 187 insertions(+), 49 deletions(-) diff --git a/controllers/Allpa_service.php b/controllers/Allpa_service.php index 84be17f..efd33f8 100644 --- a/controllers/Allpa_service.php +++ b/controllers/Allpa_service.php @@ -522,6 +522,44 @@ class Allpa_service extends CI_Controller file_get_contents(APP_URL."allpa_consume_handler/{$data["order_no"]}"); } } + + // 遠端歐PA卡流程 + public function allpa_go_remote() + { + $in_time = $this->uri->segment(3); // 進場時間 + $lpr = $this->uri->segment(4); // 車牌號碼 + $station_no = $this->uri->segment(5); // 場站編號 + $check_mac = $this->uri->segment(6); // 驗証欄位 + + // 驗証欄位 + if($check_mac != md5($in_time. $lpr . $station_no)) + { + echo 'ck_error'; + exit; + } + + // 先檢查本地端是否為歐PA會員 + $valid_user_ck = md5($lpr); + $valid_user_result = $this->allpa_service_model->get_allpa_valid_user($lpr, $valid_user_ck); // check user + if(!isset($valid_user_result['result_code']) || $valid_user_result['result_code'] != 0) + { + echo json_encode($valid_user_result, JSON_UNESCAPED_UNICODE); + } + else + { + $out_time = strtotime(date('Y-m-d H:i:s')); // 結帳時間 + require_once(ALTOB_SYNC_FILE); + $sync_agent = new AltobSyncAgent(); + $sync_agent->init($station_no, $out_time); + $sync_agent->in_time = $in_time; // 入場時間 + $allpa_go_result = $sync_agent->allpa_go($lpr); + trigger_error(__FUNCTION__ . "..$lpr|$in_time|$out_time.." . print_r($allpa_go_result, true)); + echo $allpa_go_result; + } + } + + + // L.2 歐Pa卡 - 非同步扣款 (限制存取) public function allpa_consume_handler() @@ -555,13 +593,15 @@ class Allpa_service extends CI_Controller // only test public function gen_test_link() { - $in_time = strtotime("2016-03-29 16:50:00"); - $lpr = "SAYLXXX"; - $station_no = "12112"; + $in_time = strtotime("2017-11-14 16:50:00"); + $lpr = "TEST123"; + $station_no = "12302"; echo "TEST: ".APP_URL."allpa_go/{$in_time}/{$lpr}/{$station_no}/".md5($in_time.$lpr.$station_no); - echo "
"; + echo "\n"; echo "TEST: ".APP_URL."get_allpa_valid_user/{$lpr}/".md5($lpr); + echo "\n"; + echo "TEST: ".APP_URL."allpa_go_remote/{$in_time}/{$lpr}/{$station_no}/".md5($in_time.$lpr.$station_no); header('Connection: close'); header('Content-Length: ' . ob_get_length()); diff --git a/controllers/Carpark.php b/controllers/Carpark.php index dd7af1e..83fd6a3 100644 --- a/controllers/Carpark.php +++ b/controllers/Carpark.php @@ -365,6 +365,12 @@ class Carpark extends CI_Controller usleep(300000); // 0.3 sec delay + // 歐pa卡同步 + $result = $this->sync_data_model->sync_allpa_user($info); + trigger_error(__FUNCTION__ . '..sync_allpa_user: '. $result); + + usleep(300000); // 0.3 sec delay + // 在席資料同步 $result = $this->sync_data_model->sync_pks_groups_reload($station_setting); trigger_error(__FUNCTION__ . '..sync_pks_groups_reload: '. $result); @@ -425,7 +431,6 @@ class Carpark extends CI_Controller { $this->sync_data_model->sync_switch_lpr($switch_lpr_arr); } - } // [API] 取得最新未結清 diff --git a/models/Cars_model.php b/models/Cars_model.php index 72901d6..259f39d 100644 --- a/models/Cars_model.php +++ b/models/Cars_model.php @@ -560,50 +560,62 @@ class Cars_model extends CI_Model { $in_time = strtotime($rows_cario['out_before_time']); $ck = md5($in_time. $parms['lpr'] . $parms['sno']); - $jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); + //$jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); + $jdata = file_get_contents("http://localhost/allpa_service.html/allpa_go_remote/{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); trigger_error("allpa回傳:{$jdata}|{$in_time}/{$parms['lpr']}/{$parms['sno']}/{$ck}"); $results = json_decode($jdata, true); - trigger_error("+++".print_r($results, true)); - if ($results['result_code'] == 0) // 歐pa卡, 點數足夠扣 + if (isset($results['result_code'])) // 歐pa卡, 點數足夠扣 { - // 臨停開門 - $this->temp_opendoors($parms); - // 歐pa卡, 字幕 - $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",7,{$parms['ivsno']},{$parms['lpr']},{$results['amt']}".MQ_ALTOB_MSG_END_TAG); - // // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}扣{$results['amt']}點請離場"); - // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}請離場歐pa卡扣:{$results['amt']}點謝謝光臨"); - // updated 2016/09/01 - $data = array( - 'out_before_time' => date('Y-m-d H:i:s', strtotime(" + 15 minutes")), - 'pay_time' => $this->now_str, - 'pay_type' => 9, // 歐pa卡 - 'payed' => 1 - ); - $this->db->update('cario', $data, array('cario_no' => $rows_cario['cario_no'])); // 記錄出場 - - // [acer] cmd:102 離場車辨成功流程 START - $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 7)); - // [acer] cmd:102 離場車辨成功流程 END - } - else if ($results['result_code'] == 12) // 歐pa卡, 餘額不足 - { - // 臨停字幕 - $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",12,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); - - // [acer] cmd:102 離場車辨成功流程 START - $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 12)); - // [acer] cmd:102 離場車辨成功流程 END - } - else if ($results['result_code'] == 11) // 歐pa卡, 查無會員 - { - // 臨停字幕 - $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); - //// $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}其它付款方式"); - // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}臨時車請投票卡或刷卡出場"); - - // [acer] cmd:102 離場車辨成功流程 START - $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); - // [acer] cmd:102 離場車辨成功流程 END + if($results['result_code'] == 0) + { + // 臨停開門 + $this->temp_opendoors($parms); + // 歐pa卡, 字幕 + $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",7,{$parms['ivsno']},{$parms['lpr']},{$results['amt']}".MQ_ALTOB_MSG_END_TAG); + // // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}扣{$results['amt']}點請離場"); + // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}請離場歐pa卡扣:{$results['amt']}點謝謝光臨"); + // updated 2016/09/01 + $data = array( + 'out_before_time' => date('Y-m-d H:i:s', strtotime(" + 15 minutes")), + 'pay_time' => $this->now_str, + 'pay_type' => 9, // 歐pa卡 + 'payed' => 1 + ); + $this->db->update('cario', $data, array('cario_no' => $rows_cario['cario_no'])); // 記錄出場 + + // [acer] cmd:102 離場車辨成功流程 START + $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 7)); + // [acer] cmd:102 離場車辨成功流程 END + } + else if ($results['result_code'] == 12) // 歐pa卡, 餘額不足 + { + // 臨停字幕 + $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",12,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); + + // [acer] cmd:102 離場車辨成功流程 START + $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 12)); + // [acer] cmd:102 離場車辨成功流程 END + } + else if ($results['result_code'] == 11) // 歐pa卡, 查無會員 + { + // 臨停字幕 + $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); + //// $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}其它付款方式"); + // $this->mq_send(MQ_TOPIC_SUBTEXT, "{$parms['ivsno']},{$msg}臨時車請投票卡或刷卡出場"); + + // [acer] cmd:102 離場車辨成功流程 START + $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); + // [acer] cmd:102 離場車辨成功流程 END + } + else + { + // 臨停字幕 + $this->mq_send(MQ_TOPIC_ALTOB, MQ_ALTOB_MSG.",9,{$parms['ivsno']},{$parms['lpr']}".MQ_ALTOB_MSG_END_TAG); + + // [acer] cmd:102 離場車辨成功流程 START + $this->call_acer('102', array('cario_no' => $rows_cario['cario_no'], 'ivs_no' => $parms['ivsno'], 'msg_code' => 9)); + // [acer] cmd:102 離場車辨成功流程 END + } } else { diff --git a/models/Sync_data_model.php b/models/Sync_data_model.php index fc92207..8b5e8b3 100644 --- a/models/Sync_data_model.php +++ b/models/Sync_data_model.php @@ -286,6 +286,37 @@ class Sync_data_model extends CI_Model // // ------------------------------------------------ + // 同步歐pa卡 (功能: 歐pa卡同步) + public function sync_allpa_user($info_arr=array('station_no_arr' => STATION_NO)) + { + require_once(ALTOB_SYNC_FILE); + $sync_agent = new AltobSyncAgent(); + $data = $sync_agent->query_allpa_users(); + $data_allpa_user_arr = json_decode($data, true); + + if (sizeof($data_allpa_user_arr) <= 0) + { + trigger_error(SYNC_DATA_LOG_TITLE . '.. allpa_user empty ..'); // 忽略完全沒會員的情況 + return 'empty'; + } + + $this->db->trans_start(); + // 清空 + $this->db->empty_table('allpa_user'); + // 建立 members + $this->db->insert_batch('allpa_user', $data_allpa_user_arr); + + $this->db->trans_complete(); + if ($this->db->trans_status() === FALSE) + { + trigger_error(SYNC_DATA_LOG_TITLE . '.. sync allpa_user fail ..'. '| last_query: ' . $this->db->last_query()); + return 'fail'; + } + + trigger_error(SYNC_DATA_LOG_TITLE . '.. sync allpa_user completed ..'); + return 'ok'; + } + // 同步場站會員 (功能: 會員同步) public function sync_members($info_arr=array('station_no_arr' => STATION_NO)) { @@ -580,6 +611,7 @@ class Sync_data_model extends CI_Model $sync_agent->init(STATION_NO); // 已帶上的資料場站編號為主 $sync_result = $sync_agent->upd_pks_groups(json_encode($pks_group_query_data, JSON_UNESCAPED_UNICODE)); trigger_error( SYNC_DATA_LOG_TITLE . '..'. __FUNCTION__ . "..upd_pks_groups.." . $sync_result); + return $sync_result; } // 重新載入場站設定 diff --git a/phplibs/Altob.Sync.Integration.php b/phplibs/Altob.Sync.Integration.php index 3f1e18f..ae77168 100644 --- a/phplibs/Altob.Sync.Integration.php +++ b/phplibs/Altob.Sync.Integration.php @@ -12,6 +12,7 @@ class AltobSyncAgent const SYNC_CARS_URL = 'http://61.219.172.12/parkings/cars.html/'; // 進出記錄 const SYNC_ST_URL = 'http://61.219.172.11:60123/admins_station.html/'; // 場站記錄 const API_URL = 'http://parks.altob.com.tw:60123/parkingquery.html/'; // 場站 API + const ALLPA_URL = 'http://61.219.172.11:60123/allpa_service.html/'; // 歐pa卡 public $io = ''; public $etag = ''; @@ -188,7 +189,7 @@ class AltobSyncAgent // 初始化網路服務物件。 $oService = new AltobSyncService(); $oService->ServiceURL = AltobSyncAgent::API_URL; - $oService->ServiceCMD = "sync_security_action/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}"; + $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$action}/{$ck}/{$station_no}"; // 傳遞參數至遠端。 return $oService->ServerPost($this->post_parms); @@ -206,7 +207,7 @@ class AltobSyncAgent // 初始化網路服務物件。 $oService = new AltobSyncService(); $oService->ServiceURL = AltobSyncAgent::API_URL; - $oService->ServiceCMD = "sync_change_pwd/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}"; + $oService->ServiceCMD = __FUNCTION__ . "/{$lpr}/{$pswd}/{$new_pwd}/{$ck}/{$station_no}"; // 傳遞參數至遠端。 return $oService->ServerPost($this->post_parms); @@ -227,7 +228,55 @@ class AltobSyncAgent // 初始化網路服務物件。 $oService = new AltobSyncService(); $oService->ServiceURL = AltobSyncAgent::SYNC_PKS_URL; - $oService->ServiceCMD = 'upd_pks_groups'; + $oService->ServiceCMD = __FUNCTION__; + + // 傳遞參數至遠端。 + return $oService->ServerPost($this->post_parms); + } + + // =============================================== + // 歐Pa卡 + // =============================================== + + // 歐Pa卡 - 開門 + public function allpa_go($lpr) + { + $error_parms_msg = $this->check_init_parms(); + if(!empty($error_parms_msg)) { return $error_parms_msg; } + + if(empty($this->in_time)) + return 'in_time not found'; // 需設定 + + if(empty($lpr)) + return 'lpr not found'; // 需設定 + + $this->post_parms['in_time'] = $this->in_time; + $this->post_parms['lpr'] = $lpr; + $this->post_parms['ck'] = md5( + $this->post_parms['lpr']. 'a' . date('dmh') . 'lt' . + $this->post_parms['in_time'] . 'o' . // timestamp + $this->post_parms['station_no'] . 'b' . __FUNCTION__ . + $this->post_parms['io_time'] // timestamp + ); + + // 初始化網路服務物件。 + $oService = new AltobSyncService(); + $oService->ServiceURL = AltobSyncAgent::ALLPA_URL; + $oService->ServiceCMD = __FUNCTION__; + + // 傳遞參數至遠端。 + return $oService->ServerPost($this->post_parms); + } + + // 歐Pa卡 - 取得場站會員 + public function query_allpa_users() + { + $this->post_parms['ck'] = md5('a' . date('dmh') . 'lt' . __FUNCTION__ . 'ob'); + + // 初始化網路服務物件。 + $oService = new AltobSyncService(); + $oService->ServiceURL = AltobSyncAgent::ALLPA_URL; + $oService->ServiceCMD = __FUNCTION__; // 傳遞參數至遠端。 return $oService->ServerPost($this->post_parms);