|
|
<?php
|
|
|
if (!defined('BASEPATH'))
|
|
|
exit('No direct script access allowed');
|
|
|
|
|
|
class intelTrainSearch extends CI_Controller{
|
|
|
|
|
|
public function __construct(){
|
|
|
parent::__construct();
|
|
|
header('Access-Control-Allow-Origin:*');
|
|
|
header('Access-Control-Allow-Methods:POST, GET');
|
|
|
header('Access-Control-Max-Age:0');
|
|
|
header('Access-Control-Allow-Headers:x-requested-with, Content-Type');
|
|
|
header('Access-Control-Allow-Credentials:true');
|
|
|
$this->load->helper('train');
|
|
|
$this->start_time = microtime(true);
|
|
|
$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();
|
|
|
|
|
|
print_r(json_encode($obj));
|
|
|
}
|
|
|
|
|
|
//查询某一趟列车的途径站
|
|
|
public function search_train_station($train_no){
|
|
|
if(!$train_no){
|
|
|
header("HTTP/1.1 404 Not Found");
|
|
|
exit('{"status":"404","reason":"列车编号为空"}');
|
|
|
}
|
|
|
|
|
|
$arr = $this->BIZ_intel_train_model->get_train_station($train_no);
|
|
|
if(!empty($arr)){
|
|
|
echo json_encode($arr);
|
|
|
}else{
|
|
|
header("HTTP/1.1 404 Not Found");
|
|
|
exit('{"status":"404","reason":"途径站为空"}');
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//获取国际火车出发规则
|
|
|
public function get_station_rules(){
|
|
|
//获取所有站点的列表
|
|
|
$return_json = array();
|
|
|
$return_json['TrainList'] = array();
|
|
|
$all_stations = $this->BIZ_intel_train_model->get_allstations();
|
|
|
$i = 0;
|
|
|
|
|
|
foreach($all_stations as $item){
|
|
|
$rule_arr = $this->BIZ_intel_train_model->get_train_rules($item->station_id);
|
|
|
if(!empty($rule_arr)){
|
|
|
|
|
|
|
|
|
$return_json['TrainList'][$i]['FromStation'] = $item->s_ename;
|
|
|
$return_json['TrainList'][$i]['FromCountry'] = $item->s_country;
|
|
|
$return_json['TrainList'][$i]['ToStations'] = array();
|
|
|
|
|
|
$j = 0;
|
|
|
foreach($rule_arr as $rule_info){
|
|
|
$return_json['TrainList'][$i]['ToStations'][$j]['Message'] = $rule_info->tsi_Message;
|
|
|
$return_json['TrainList'][$i]['ToStations'][$j]['Station'] = $rule_info->S_ename;
|
|
|
$return_json['TrainList'][$i]['ToStations'][$j]['StationCountry'] = $rule_info->s_country;
|
|
|
$j++;
|
|
|
}
|
|
|
$i++;
|
|
|
}
|
|
|
}
|
|
|
//print_r($return_json);
|
|
|
header('Content-type: application/json');
|
|
|
print_r(json_encode($return_json));
|
|
|
}
|
|
|
|
|
|
//获取国际火车出发规则
|
|
|
public function ch_station_rules(){
|
|
|
//获取所有站点的列表
|
|
|
$return_json = array();
|
|
|
$return_json['TrainList'] = array();
|
|
|
$all_stations = $this->BIZ_intel_train_model->ch_allstations();
|
|
|
$i = 0;
|
|
|
//print_r($all_stations);
|
|
|
$data = array();
|
|
|
|
|
|
foreach($all_stations as $item){
|
|
|
$todata = new stdClass();
|
|
|
if($item->fromStationName == 'Beijing West'){
|
|
|
$item->fromStationName = 'Beijing';
|
|
|
}
|
|
|
if(isset($data[$item->fromStationName])){
|
|
|
$todata->Message = $item->tsi_Message;
|
|
|
$todata->Station = $item->toStationName;
|
|
|
$todata->StationCountry = $item->toStationCountry;
|
|
|
array_push($data[$item->fromStationName]->ToStations,$todata);
|
|
|
}else{
|
|
|
$data[$item->fromStationName] = new stdClass();
|
|
|
$data[$item->fromStationName]->FromCountry = $item->fromStationCountry;
|
|
|
$data[$item->fromStationName]->FromStation = $item->fromStationName;
|
|
|
$data[$item->fromStationName]->ToStations = array();
|
|
|
$todata->Message = $item->tsi_Message;
|
|
|
$todata->Station = $item->toStationName;
|
|
|
$todata->StationCountry = $item->toStationCountry;
|
|
|
array_push($data[$item->fromStationName]->ToStations,$todata);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
foreach ($data as $rules){
|
|
|
array_push($return_json['TrainList'],$rules);
|
|
|
}
|
|
|
|
|
|
header('Content-type: application/json');
|
|
|
print_r(json_encode($return_json));
|
|
|
}
|
|
|
|
|
|
function checkDateRule($strDate, $jsonDate){
|
|
|
if (!strtotime($strDate)) {
|
|
|
return false;
|
|
|
}
|
|
|
$strDate_t = strtotime($strDate);
|
|
|
$strDate = date("Y-m-d", $strDate_t);
|
|
|
$dYear = date("Y", $strDate_t);
|
|
|
$dMonth = date("m", $strDate_t);
|
|
|
$dDay = date("d", $strDate_t);
|
|
|
$dWeek = date("w", $strDate_t); //星期的第几天数组(0-6)
|
|
|
|
|
|
//单双日
|
|
|
if ($dDay % 2 == 0) {
|
|
|
$dSingle = 2;
|
|
|
} else {
|
|
|
$dSingle = 1;
|
|
|
}
|
|
|
|
|
|
$jObject = json_decode($jsonDate);
|
|
|
$result = false;
|
|
|
|
|
|
//先判断排除规则,有一条符合就返回false
|
|
|
if (isset($jObject->DateRule->exclusive) ) {
|
|
|
$jObject_exclusive = $jObject->DateRule->exclusive;
|
|
|
|
|
|
foreach ($jObject_exclusive as $key => $val) {
|
|
|
if ($val->dateType=="EveryDay" ) { //每天,这个基本不会出现,设置每天排除和关闭没区别
|
|
|
return false;
|
|
|
} elseif ($val->dateType=="WeekDay" ) { //按星期
|
|
|
//先判断是否在日期范围内,再判断星期是否对应
|
|
|
$bw_CheckRange = false; //是否需要判断星期几
|
|
|
if ($val->dateRange == "*") { //每天
|
|
|
$bw_CheckRange = true;
|
|
|
} else {
|
|
|
$dateRange = explode("|", $val->dateRange); //日期范围
|
|
|
if (count($dateRange) == 2) {
|
|
|
if ($strDate_t >= strtotime($dateRange[0]) and $strDate_t <= strtotime($dateRange[1])) {
|
|
|
$bw_CheckRange = true; //在范围内
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($bw_CheckRange) {
|
|
|
if ($dWeek==0) {
|
|
|
$dWeek=7; //星期0为星期天,我们保存的星期天是7
|
|
|
}
|
|
|
$weekArr = explode(",", $val->dateData); //星期数据1,2,3,4,5,6,7这种
|
|
|
foreach ($weekArr as $week) {
|
|
|
if ($week == $dWeek) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} elseif ($val->dateType == "SelectDay") { //固定日期
|
|
|
if ($val->dateRange=="*") {
|
|
|
$SelectDayArr = explode(",", $val->dateData);
|
|
|
foreach ($SelectDayArr as $sDay) {
|
|
|
if (strtotime($sDay) == $strDate_t) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} elseif ($val->dateType == "RangeDay") { //连续日期
|
|
|
if ($val->dateRange == "*") {
|
|
|
$RangeDateArr = explode("|", $val->dateData);
|
|
|
if (count($RangeDateArr)==2) {
|
|
|
if ($strDate_t >= strtotime($RangeDateArr[0]) and $strDate_t <= strtotime($RangeDateArr[1])) {
|
|
|
return false ; //在范围内
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//再判断包含规则,有一条符合就为true
|
|
|
if (isset($jObject->DateRule->include)) {
|
|
|
$jObject_include = $jObject->DateRule->include;
|
|
|
|
|
|
foreach ($jObject_include as $key => $val) {
|
|
|
if ($val->dateType == "EveryDay") { //每天
|
|
|
return true;
|
|
|
} elseif ($val->dateType == "WeekDay") { //按星期
|
|
|
//先判断是否在日期范围内,再判断星期是否对应
|
|
|
$bw_CheckRange = false; //是否需要判断星期几
|
|
|
if ($val->dateRange == "*") { //每天
|
|
|
$bw_CheckRange = true;
|
|
|
} else {
|
|
|
$dateRange = explode("|", $val->dateRange); //日期范围
|
|
|
if (count($dateRange) == 2) {
|
|
|
if ($strDate_t >= strtotime($dateRange[0]) and $strDate_t <= strtotime($dateRange[1])) {
|
|
|
$bw_CheckRange = true; //在范围内
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if ($bw_CheckRange) {
|
|
|
if ($dWeek == 0) {
|
|
|
$dWeek = 7; //星期0为星期天,我们保存的星期天是7
|
|
|
}
|
|
|
$weekArr = explode(",", $val->dateData); //星期数据1,2,3,4,5,6,7这种
|
|
|
foreach ($weekArr as $week) {
|
|
|
if ($week == $dWeek) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} elseif ($val->dateType=="MonthDay") { //每月单双
|
|
|
if ($val->dateRange=="*") {
|
|
|
$MonthDayArr = explode(",", rtrim($val->dateData, ',')); //月单双数据m3:2,m4:1
|
|
|
foreach ($MonthDayArr as $MonthKey) {
|
|
|
$MonthArr = explode(":", $MonthKey);
|
|
|
$Month = str_pad(str_replace("m", "", $MonthArr[0]), 2, "0", STR_PAD_LEFT); //存储的月份补0,好比较
|
|
|
if ($dMonth == $Month) { //月份相同比较
|
|
|
if ($dSingle == $MonthArr[1]) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} elseif ($val->dateType == "SelectDay") { //固定日期
|
|
|
if ($val->dateRange=="*") {
|
|
|
$SelectDayArr = explode(",", $val->dateData);
|
|
|
foreach ($SelectDayArr as $sDay) {
|
|
|
if (strtotime($sDay) == $strDate_t) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} elseif ($val->dateType == "RangeDay") { //连续日期
|
|
|
if ($val->dateRange == "*") {
|
|
|
$RangeDateArr = explode("|", $val->dateData);
|
|
|
if (count($RangeDateArr)==2) {
|
|
|
if ($strDate_t >= strtotime($RangeDateArr[0]) and $strDate_t <= strtotime($RangeDateArr[1])) {
|
|
|
return true ; //在范围内
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
|
|
|
} |