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; } }