添加react火车数据接口

mobile-first
cyc 5 years ago
parent 6f515d6f8a
commit f5448f6c72

@ -174,7 +174,7 @@ class innerTrainSearch extends CI_Controller{
return json_encode($return_data); 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){ if(!$date && !$from && !$to){
$date = $this->input->get_post('date'); $date = $this->input->get_post('date');
@ -362,7 +362,12 @@ class innerTrainSearch extends CI_Controller{
} }
//print_r($ResponseData);die(); //print_r($ResponseData);die();
$ReturnData->data->map = (object)$obj; $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));
}
} }

@ -16,6 +16,105 @@ class intelTrainSearch extends CI_Controller{
$this->load->model("BIZ_intel_train_model");//国际火车模型 $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(){ public function get_all_inteltrain(){
$obj = $this->BIZ_intel_train_model->get_allinteltrain(); $obj = $this->BIZ_intel_train_model->get_allinteltrain();

@ -265,5 +265,54 @@ function checkDateRule($strDate, $jsonDate){
return $result; 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';
}
}
}
?> ?>

@ -0,0 +1,187 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
/*
* 自动加载语种标签
*/
class Currency {
var $USD_Rate; //人民币兑美元汇率
var $EUR_Rate; //人民币兑欧元汇率
var $RUB_Rate; //人民币兑卢布汇率
public function __construct() {
$this->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 . '<br/>';
// echo $this->EUR_Rate . '<br/>';
// echo $this->RUB_Rate . '<br/>';
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 货币代号usdeur
* @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;
}
}
Loading…
Cancel
Save