diff --git a/application/third_party/trainsystem/controllers/innerTrainSearch.php b/application/third_party/trainsystem/controllers/innerTrainSearch.php
index 9e8d417a..d5284af7 100644
--- a/application/third_party/trainsystem/controllers/innerTrainSearch.php
+++ b/application/third_party/trainsystem/controllers/innerTrainSearch.php
@@ -174,7 +174,7 @@ class innerTrainSearch extends CI_Controller{
return json_encode($return_data);
}
- public function ctripApi($date=null,$from=null,$to=null){
+ public function ctripApi($date=null,$from=null,$to=null,$return=false){
//接收参数
if(!$date && !$from && !$to){
$date = $this->input->get_post('date');
@@ -362,7 +362,12 @@ class innerTrainSearch extends CI_Controller{
}
//print_r($ResponseData);die();
$ReturnData->data->map = (object)$obj;
- print_r(json_encode($ReturnData));
+ if($return){
+ return json_encode($ReturnData);
+ }else{
+ echo json_encode($ReturnData);
+ }
+
}
}
@@ -474,5 +479,140 @@ class innerTrainSearch extends CI_Controller{
}
}
-
+ public function get_train(){
+ $train_date = $this->input->get('date');
+ $fromStation = $this->input->get('from');
+ $toStation = $this->input->get('to');
+ if(!$train_date || !$fromStation || !$toStation){
+ exit('传参错误!');
+ }
+
+ $back_json = $this->ctripApi($train_date,$fromStation,$toStation,true);
+
+ $train_info = new stdClass();
+ $train_info = json_decode($back_json);
+
+ $return_data = new stdClass();
+ $return_data->status = 200;
+ $return_data->search = new stdClass();
+ $return_data->search->FromStationCode = $fromStation;
+ $return_data->search->ToStationCode = $toStation;
+ $return_data->search->StartDate = $train_date;
+
+ $return_data->CardFee = 3;
+ //MainlandChina:大陆内地寄送费用
+ //HMT:港澳台寄送费用
+ //寄送费按订单收,无论多少张票,没有取票费
+ //$return_data->MainlandChina = 6;
+ //$return_data->HMT = 15;
+ $this->load->library('Currency');
+ define("CONST_SITE_CURRENCY","USD");
+ $return_data->ExRate = $this->currency->get_site_currencyrate();
+ $return_data->result = array();
+ $i = 0;
+
+ foreach ($train_info->data->result as $value){
+ $return_data->result[$i] = new StdClass();
+ $data = explode('|', $value);
+ $return_data->result[$i]->TrainNo = $data[2];
+ $return_data->result[$i]->TrainCode = $data[3];
+ $return_data->result[$i]->TrainType = substr(ucwords($data[3]), 0, 1);
+ $return_data->result[$i]->StartStationCode = $data[4];
+ $return_data->result[$i]->EndStationCode = $data[5];
+ $return_data->result[$i]->DepartStation = '';
+ $return_data->result[$i]->DepartStationCode = $data[6];
+ $return_data->result[$i]->DepartStationNo = '';
+ $return_data->result[$i]->ArriveStation = '';
+ $return_data->result[$i]->ArriveStationCode = $data[7];
+ $return_data->result[$i]->ArriveStationNo = '';
+ $return_data->result[$i]->DepartTime = $data[8];
+ $return_data->result[$i]->ArriveTime = $data[9];
+ $return_data->result[$i]->RunTime = $data[10];
+ $return_data->result[$i]->IsBookable = true;
+ //$return_data->result[$i]->SeatType = '123456789OMPA';
+ $return_data->result[$i]->cached = 1;
+ //$return_data->result[$i]->CheapSeat = new stdClass();
+ $price = json_decode($train_info->data->price[$i]);
+
+ $return_data->result[$i]->CheapSeat = null;
+ $return_data->result[$i]->SeatList = array();
+ //做一个数据存储所有的座位类型的余票
+ $seat_yp_map = array(
+ 'A' => $data[21], //高级软卧
+ 'A6' => $data[21], //高级软卧
+ 'H' => $data[22], //其他
+ 'A4' => $data[23], //软卧
+ 'A2' => $data[24], //软座
+ 'P' => $data[25], //特等座
+ 'WZ' => $data[26],//无座
+ 'X' => $data[26], //无座
+ 'A3' => $data[28], //硬卧
+ 'A1' => $data[29], //硬座
+ 'O' => $data[30], //二等座
+ 'A8' => $data[30], //二等座
+ 'A7' => $data[31], //一等座
+ 'M' => $data[31], //一等座
+ 'A9' => $data[32], //商务座
+ 'F' => $data[33], //动卧
+ 'YDW' => $data[36], //一等卧
+ 'EDW' => $data[37], //二等卧
+ );
+ $j=0;
+ $soldoutnums = 0;
+ foreach($price->data as $key=>$value){
+ if($key != 'train_no'){
+ if(!is_numeric($key)){
+ $return_data->result[$i]->SeatList[$j] = new StdClass();
+ $return_data->result[$i]->SeatList[$j]->SeatCode = $key;
+ $return_data->result[$i]->SeatList[$j]->SeatName = get_name($key);
+ $value = str_replace('¥','',$value);
+
+ if(in_array($key, array('A3', 'A4', 'A5', 'A6', '3', '4', '5', '6', 'A', 'F', 'S','YDW','EDW'))){
+ if (stripos($return_data->result[$i]->TrainNo, "D") !== false || stripos($return_data->result[$i]->TrainNo, "G") !== false) {
+ $value = $value * 1.2;
+ $return_data->result[$i]->SeatList[$j]->ChildDiscut = 1;
+ }else{
+ $value = $value * 1.15;
+ $return_data->result[$i]->SeatList[$j]->ChildDiscut = 0.75;
+ }
+ }else{
+ $return_data->result[$i]->SeatList[$j]->ChildDiscut = 0.5;
+ }
+ /*
+ if (stripos($value, ".")) {//判断是否是整数,避免类似ecil(9.9*10)=100
+ $value = ceil($value);
+ }*/
+ $return_data->result[$i]->SeatList[$j]->SeatPrice = $this->currency->GetSiteMoney($value);
+ $return_data->result[$i]->SeatList[$j]->SeatPriceRMB = $value;
+ if($fromStation == 'LSO' || $toStation == 'LSO'){
+ $return_data->result[$i]->SeatList[$j]->ServiceCharge = 33;
+ }else{
+ $return_data->result[$i]->SeatList[$j]->ServiceCharge = 6;
+ }
+ if($fromStation == 'XJA' && stripos($return_data->result[$i]->TrainNo, "G") && $value > 500){
+ $return_data->result[$i]->SeatList[$j]->ServiceCharge = 10;
+ }
+ $return_data->result[$i]->SeatList[$j]->ServiceChargeRMB = $return_data->result[$i]->SeatList[$j]->ServiceCharge * $return_data->ExRate;
+
+ $return_data->result[$i]->SeatList[$j]->SeatInventory = $seat_yp_map[$key];
+ if($return_data->result[$i]->SeatList[$j]->SeatInventory == '有'){
+ $return_data->result[$i]->SeatList[$j]->SeatInventory = 99;
+ }elseif($return_data->result[$i]->SeatList[$j]->SeatInventory == '无'){
+ $return_data->result[$i]->SeatList[$j]->SeatInventory = 0;
+ $soldoutnums++;
+ }
+
+ $j++;
+ }
+ }
+ }
+ if($soldoutnums >= $j){
+ $return_data->result[$i]->soldout = true;
+ }else{
+ $return_data->result[$i]->soldout = false;
+ }
+ $i++;
+ }
+ print_r(json_encode($return_data));
+ }
}
diff --git a/application/third_party/trainsystem/controllers/intelTrainSearch.php b/application/third_party/trainsystem/controllers/intelTrainSearch.php
index cfe4d2d8..6acfb58e 100644
--- a/application/third_party/trainsystem/controllers/intelTrainSearch.php
+++ b/application/third_party/trainsystem/controllers/intelTrainSearch.php
@@ -16,6 +16,105 @@ class intelTrainSearch extends CI_Controller{
$this->load->model("BIZ_intel_train_model");//国际火车模型
}
+ //国际火车获取
+ public function search_international_train(){
+ $trainFrom = $this->input->get_post('trainFrom');
+ $trainTo = $this->input->get_post('trainTo');
+ $trainDate = $this->input->get_post('trainDate');
+
+ if(empty($trainFrom) || empty($trainTo)){
+ header("HTTP/1.1 404 Not Found");
+ exit('{"status":"201","reason":"车站查询失败","data":""}');
+ }
+
+ //根据传过来的城市名称获取城市代码
+ $trainFromCode = $this->BIZ_intel_train_model->get_code_by_name($trainFrom);
+ $trainToCode = $this->BIZ_intel_train_model->get_code_by_name($trainTo);
+
+ if(empty($trainFromCode) || empty($trainToCode)){
+ header("HTTP/1.1 404 Not Found");
+ exit('{"status":"202","reason":"站点名转换失败","data":""}');
+ }
+
+ //获取车次信息
+ $obj = $this->BIZ_intel_train_model->get_train_info($trainFromCode->s_code,$trainToCode->s_code);
+
+ //如果结果为空则直接返回为空的结果
+ if(empty($obj)){
+ header("HTTP/1.1 404 Not Found");
+ exit('{"status":"203","reason":"无车次信息!","data":""}');
+ }
+
+ //处理返回的字符串
+ $return_json = new StdClass();
+ $return_json->status = '200';
+ $return_json->reason = '成功的返回';
+ $return_json->rate = $this->GetCurrencyRate();
+ $return_json->mainland_deliver = 9;
+ $return_json->others_deliver = 12;
+ $return_json->data = array();
+ $return_json->endata = array();
+
+ //如果有结果则进行字符串处理
+ foreach($obj as $key=>$item){
+ //发车规则处理
+ $item->trainrule = array();
+ $item->trainrule['include'] = array();
+ $item->trainrule['exclusive'] = array();
+ foreach(json_decode($item->DateRule)->DateRule as $key_rule=>$rules){
+ if(!empty($rules)){
+ if($key_rule == 'include'){
+ $item->trainrule['include'] = $rules;
+ }else if($key_rule == 'exclusive'){
+ $item->trainrule['exclusive'] = $rules;
+ }
+ }
+ }
+
+ //价格处理
+ $item->adult_seat = array();
+ $item->child_seat = array();
+
+ $price_arr = json_decode($item->seatPriceInfo2);
+ $audlt = $price_arr->price;
+ $child = $price_arr->cprice;
+
+ if(!empty($audlt)){
+ $i=0;
+ foreach($audlt as $key_adult=>$value){
+ $seat_name = $this->BIZ_intel_train_model->get_seatname($key_adult)->Seat_EName1;
+ $item->adult_seat[$i]['name'] = $seat_name;
+ $item->adult_seat[$i]['code'] = $key_adult;
+ $item->adult_seat[$i]['price'] = $value;
+ $item->adult_seat[$i]['pic'] = $this->BIZ_intel_train_model->get_seatname($key_adult)->Seat_Pic;
+ $i++;
+ }
+ }
+
+ if(!empty($child)){
+ $j=0;
+ foreach($child as $key_child=>$value){
+ $seat_name = $this->BIZ_intel_train_model->get_seatname($key_child)->Seat_EName1;
+ $item->child_seat[$j]['name'] = $seat_name;
+ $item->child_seat[$j]['code'] = $key_child;
+ $item->child_seat[$j]['price'] = $value;
+ $j++;
+ }
+ }
+
+
+ //最后进行当前日期判断,对数据进行分组
+ $flag = $this->checkDateRule($trainDate,$item->DateRule);
+ if(!$flag){
+ //将不符合发车日期的列车放入到另外一个数组中存储起来
+ array_push($return_json->endata,$obj[$key]);
+ }else{
+ array_push($return_json->data,$obj[$key]);
+ }
+ }
+ print_r(json_encode($return_json));
+ }
+
//获取所有的列车信息
public function get_all_inteltrain(){
$obj = $this->BIZ_intel_train_model->get_allinteltrain();
diff --git a/application/third_party/trainsystem/helpers/train_helper.php b/application/third_party/trainsystem/helpers/train_helper.php
index fc9d25a8..026a8741 100644
--- a/application/third_party/trainsystem/helpers/train_helper.php
+++ b/application/third_party/trainsystem/helpers/train_helper.php
@@ -265,5 +265,54 @@ function checkDateRule($strDate, $jsonDate){
return $result;
}
+function get_name($seat_code){
+ if($seat_code){
+ switch($seat_code){
+ case 'O' :
+ return 'Second Class Seat';
+ case 'A8' :
+ return 'Second Class Seat';
+ case 'A9' :
+ return 'Business Class Seat';
+ case 'P' :
+ return 'Superior';
+ case 'M' :
+ return 'First Class Seat';
+ case 'A7' :
+ return 'First Class Seat';
+ case 'A6' :
+ return 'Superior Soft Sleeper';
+ case 'A' :
+ return 'Superior Soft Sleeper';
+ case '5' :
+ return 'Hard Sleeper';
+ case 'S' :
+ return 'Soft Sleeper';
+ case 'A4' :
+ return 'Soft Sleeper';
+ case 'F' :
+ return 'New Soft Sleeper';
+ case 'A3' :
+ return 'Hard Sleeper';
+ case 'A2' :
+ return 'Soft Seat';
+ case 'A1' :
+ return 'Hard Seat';
+ case 'Q' :
+ return 'Tour Seat';
+ case 'H' :
+ return 'Other';
+ case 'WZ' :
+ return 'Standing-room Only';
+ case '13' :
+ return 'Standing-room Only';
+ case 'YDW' :
+ return 'Soft Sleeper';
+ case 'EDW' :
+ return 'Hard Sleeper';
+ }
+ }
+}
+
?>
\ No newline at end of file
diff --git a/application/third_party/trainsystem/libraries/Currency.php b/application/third_party/trainsystem/libraries/Currency.php
new file mode 100644
index 00000000..3442d30b
--- /dev/null
+++ b/application/third_party/trainsystem/libraries/Currency.php
@@ -0,0 +1,187 @@
+CI = & get_instance();
+ log_message('debug', "Language Tags Class Initialized");
+ $this->GetCurrencyRate();
+ }
+
+ function GetCurrencyRate() {
+ $this->HT = $this->CI->load->database('HT', TRUE);
+ $sql = "SELECT CRI_BuyIn / 100.00 AS tmpExRate, \n"
+ . " CRI_Code \n"
+ . "FROM tourmanager.dbo.CurrencyRateInfo \n"
+ . "WHERE CRI_Code IN ('USD', 'EUR', 'RUB') \n"
+ . " AND GETDATE() BETWEEN CRI_Start AND CRI_Stop";
+ $query = $this->HT->query($sql);
+ foreach ($query->result() as $item) {
+ switch ($item->CRI_Code) {
+ case 'USD':
+ $this->USD_Rate = $item->tmpExRate;
+ break;
+ case 'EUR':
+ $this->EUR_Rate = $item->tmpExRate;
+ break;
+ case 'RUB':
+ $this->RUB_Rate = $item->tmpExRate;
+ break;
+ }
+ }
+// echo $this->USD_Rate . '
';
+// echo $this->EUR_Rate . '
';
+// echo $this->RUB_Rate . '
';
+ return $query->result();
+ }
+
+ //根据人民币转换成站点对应的货币
+ public function GetSiteMoney($RMB) {
+ if (!is_numeric($RMB))
+ {
+ return $RMB;
+ }
+
+ $result = $RMB;
+ if (is_numeric($RMB)) {
+ switch (CONST_SITE_CURRENCY) {
+ case 'USD':
+ $result = $RMB / $this->USD_Rate;
+ break;
+ case 'EUR':
+ $result = $RMB / $this->EUR_Rate;
+ break;
+ case 'RUB':
+ $result = $RMB / $this->RUB_Rate;
+ break;
+ }
+ }
+ return ceil($result);
+ }
+
+ //把美金转换为人民币
+ public function get_USD_RMB_SUM($USD) {
+
+ if (!is_numeric($USD))return $USD;
+ $result = $USD;
+ $result = $USD * $this->USD_Rate;
+ return ceil($result);
+ }
+
+ /**
+ * 返回站点的汇率。
+ *
+ * @author lmr
+ */
+ public function get_site_currencyrate() {
+ switch (CONST_SITE_CURRENCY) {
+ case 'USD':
+ return $this->USD_Rate;
+ case 'EUR':
+ return $this->EUR_Rate;
+ case 'RUB':
+ return $this->RUB_Rate;
+ default:
+ return 1;
+ }
+ }
+
+ /**
+ * 返回带money_char的价格。
+ *
+ * @param $money Int 价格.
+ * @return String 带货币符号的价格。
+ */
+ public function get_money_char($money='') {
+
+ switch (CONST_SITE_CODE) {
+ case 'JP':
+ return $money.'元';
+ case 'GM':
+ return '€'.$money;
+ case 'VC':
+ return $money.'€';
+ case 'VAC':
+ return '$'.$money;
+ case 'RU':
+ return '$'.$money;
+ case 'IT':
+ return '€'.$money;
+ case 'SHT':
+ return '$'.$money;
+ default:
+ return '$'.$money;
+ }
+ }
+
+ /**
+ * 返回带money_char的价格。
+ *
+ * @param $money Int 价格.
+ * @return String 带货币符号的价格。
+ */
+ public function get_site_money_with_char($money='') {
+ return $this->get_money_char($this->GetSiteMoney($money));
+ }
+
+
+ /**
+ * RMB换算成指定货币。
+ * @param int money RMB
+ * @param string char 货币代号:usd,eur
+ * @return int 换算价格
+ */
+ public function convert_moneny_by_char($money,$char='')
+ {
+ switch (strtolower($char))
+ {
+ case 'usd':
+ return ceil($money/$this->USD_Rate);
+ case 'eur':
+ return ceil($money/$this->EUR_Rate);
+ }
+ return $money;
+ }
+
+ /**
+ * 尾数取"9"的定价规则
+ * 在正负误差值小于或等于16的前提下,
+ * 保证展示价格的个位数和十位数统一取"99"
+ * 当展示价格的个位数和十位数取"99"的正负误差大于16时,
+ * 通过四舍五入加价实现个位数取"9"
+ * 详细规则见GitLab issue #12 统一网前展示价格的标准
+ */
+ public function calc_show_price($value=0) {
+ if (empty($value)) return 0;
+ if (!is_numeric($value)) return $value;
+
+ $val_len = strlen($value);
+
+ if ($val_len == 1) return 9;
+
+ $discount = 16;
+ $val_pow = pow(10, $val_len - 1);
+
+ $min_val = $val_pow - 1;
+ $max_val = $min_val + $val_pow;
+ $max_diff = abs($value - $max_val);
+ $min_diff = abs($value - $min_val);
+
+ if (min($max_diff, $min_diff) > $discount) {
+ $calc_val = floor($value / 10) * 10 + 9;
+ } else {
+ $calc_val = $max_diff > $min_diff ? $min_val : $max_val;
+ }
+ return $calc_val;
+ }
+}