搬迁123上面的代码到信息平台

feature/pay
cyc 7 years ago
parent 5e1274f69f
commit 83460c7eea

@ -0,0 +1,107 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//途牛apiurl (测试)
//define("TUNIU_URL","218.94.82.118:13532");
//define("TUNIU_KEY","Te56CBQmorzJGeYIIK");
//途牛apiurl (正式)
define("TUNIU_URL","https://open.tuniu.cn");
define("TUNIU_KEY","AILvoDj8El7KCSMe25");
define("ORDERUSER","guilintravel");
define("ORDERKEY","07f811fe29f04008a8fcc86e81c012b9");
//聚合火车订票API key
define("JUHE_TRAIN_API_KEY","79f03107b921ef31310bd40a1415c1cb");
//聚合火车订票---查询api
define("JUHE_TRAIN_CX_API","http://op.juhe.cn/trainTickets/ticketsAvailable");
//聚合火车订票---订票api
define("JUHE_TRAIN_DP_API","http://op.juhe.cn/trainTickets/submit");
//聚合火车订票---状态查询api
define("JUHE_TRAIN_STATUS_API","http://op.juhe.cn/trainTickets/orderStatus");
//聚合火车订票---取消订单api
define("JUHE_TRAIN_CANCEL_API","http://op.juhe.cn/trainTickets/cancel");
//聚合火车订票---请求出票支付api
define("JUHE_TRAIN_PAY_API","http://op.juhe.cn/trainTickets/pay");
//聚合火车订票---线上退票api
define("JUHE_TRAIN_REFUND_API","http://op.juhe.cn/trainTickets/refund");
//聚合火车订票---导出记录api
define("JUHE_TRAIN_EXPORT_API","http://op.juhe.cn/trainTickets/exportAccountChange");
//http://op.juhe.cn/trainTickets/exportAccountChange?key=79f03107b921ef31310bd40a1415c1cb&since=2016-10-01 00:00&before=2016-10-30 00:00
//订单状态说明
$config["train_order_status_msg"]=array(
"0"=>"待处理",
"1"=>"失效订单",
"2"=>"待支付",
"3"=>"已支付,待出票",
"4"=>"出票成功",
"5"=>"出票失败",
"6"=>"线上退票处理中",
"7"=>"有乘客退票(改签)成功",
"8"=>"乘客退票失败",
"e"=>"数据错误,提交失败"
);
//座次配对
$config["train_zw"]=array(
"O"=>"二等座",
"9"=>"商务座",
"P"=>"特等座",
"6"=>"高级软卧",
"M"=>"一等座",
"4"=>"软卧",
"2"=>"软座",
"3"=>"硬卧",
"1"=>"硬座",
"F"=>"动卧"
);
//数据库座次配对,包厢硬卧(5),无座(WZ),聚合没有
$config["db_train_zw"]=array(
"9"=>"9",
"P"=>"P",
"M"=>"M",
"7"=>"M",
"O"=>"O",
"8"=>"O",
"6"=>"6",
"A"=>"6",
"S"=>"4",
"4"=>"4",
"F"=>"F",
"3"=>"3",
"2"=>"2",
"1"=>"1"
);
//票种配对
$config["train_piaotype"]=array(
"1"=>"成人票",
"2"=>"儿童票",
"3"=>"学生票",
"4"=>"残军票"
);
//证件类型配对
$config["train_passportty"]=array(
"B"=>"护照",
"1"=>"二代身份证",
"2"=>"一代身份证",
"C"=>"港澳通行证",
"G"=>"台湾通行证"
);
//黑名单用户
$config['black_list'] = array('209582910','539152642','506157109','E66735489','E66735492','E80377215','G23001338','E95287649','345276546','PA4286015','G09382769','G26113116','G25996274','572309763','506620366','505897939','E71156367','E21961674','v716898','561669436','EL657289','533300106','482225223','514815909','592108236','370682199509218814','130924199003161572','410728199011287038','372324199503253215','ED6234008');
//设置session 2592000
$config['sess_cookie_name'] = 'trainsystem';
$config['sess_expiration'] = 2592000;

@ -0,0 +1,4 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
define("JUHE_API_KEY","123");

@ -0,0 +1,676 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class addorders extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->model("BIZ_train_model");
$this->load->model("train_system_model");
$this->load->helper('train');
$this->db_train_zw = $this->config->item('db_train_zw');
$this->train_zw = $this->config->item('train_zw');
$this->black_list = $this->config->item('black_list');
$this->isauto = 0;
}
public function index(){
echo 'api manager';
}
//自动出票
public function auto_pay_ticket(){
//log_message('error','auto ticket');
date_default_timezone_set('Asia/Shanghai');
//判断账户余额如果小于1000自动退出。
$post_data = array("key"=>JUHE_TRAIN_API_KEY);
$back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php",$post_data);
$price = json_decode($back_data)->result;
print_r('账户余额:'.$price);
if($price < 1000){
exit('账户余额不足');
}
//筛选出能自动出票的订单
$auto_pool = $this->BIZ_train_model->auto_check_ticket();
//创建一个不允许自动出票的国际火车票数组
$nation_train = array('K19', 'K23', 'Z8701', 'Z8702', 'Z97', 'Z98', 'Z99', 'Z100', 'K9795');
//创建黑名单
$black_list = $this->config->item('black_list');
$string = '';
foreach($auto_pool as $item){
$this->isauto = 1;
$bpe_sn = '';
$back_message = '';
$cold_sn = $item->COLD_SN;
$coli_id = $item->coli_id;
$back_data = 1;
$people_arr = $this->BIZ_train_model->biz_people($cold_sn);
$train_info = $this->BIZ_train_model->get_biz_foi($cold_sn);
if($item->COLD_SPFS > 1){
//寄送票
$back_data = 0;
$back_message .= '-邮寄不自动出票';
}
//乘客人数大于5人不出票
if(count($people_arr) > 5){
$back_data = 0;
$back_message .= '-乘客人数大于5不自动出票';
}
//护照号如果在黑名单的就不自动出票
foreach($people_arr as $people_info){
if(in_array($people_info->BPE_Passport,$black_list)){
$back_data = 0;
$back_message .= '-此用户为黑名单用户,不自动出票';
}
if(strlen($people_info->BPE_Passport) >= 18){
$back_data = 0;
$back_message .= '-护照位数大于18不自动出票';
}
$bpe_sn .= $people_info->BPE_SN.',';
}
$bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1);
//单张票价不能大于1000人民币
if($train_info[0]->adultcost > 1000){
$back_data = 0;
$back_message .= '-单价大于1000不自动出票';
}
//如果为国际火车票就不出票
if(in_array($train_info[0]->FlightsNo, $nation_train)){
$back_data = 0;
$back_message .= '-国际火车票不自动出票';
}
//无座的订单不做出票
if($train_info[0]->Aircraft == 'WZ'){
$back_data = 0;
$back_message .= '-无座不自动出票';
}
//香港火车不自动出票
if($train_info[0]->DepartAirport == 'XJA'){
$back_data = 0;
$back_message .= '-香港火车不自动出票';
}
$DepartureDate = strtotime($train_info[0]->DepartureDate);
$time = time();
$depart_diff = ($DepartureDate - $time) / 86400;
if($train_info[0]->ArrivalAirport == 'XJA' && $train_info[0]->adultcost > 500 && $depart_diff > 5){
$back_data = 0;
$back_message .= '-内地香港火车金额大于500超过五天不自动出票';
}
//print_r($train_info);
//如果刚好是第三十天的订单
echo $item->COLI_State;
if(($item->COLI_State == '8' || $item->COLI_State == '63')){
$this->isauto = 3;
$time_obj = $this->BIZ_train_model->get_saletime($train_info['0']->DepartAirport_cn);
//print_r($time_obj);
if(!empty($time_obj)){
$saletime = strtotime($time_obj->TST_saletime);
//echo $saletime;
$sale_diff = (time() - $saletime) / 3600;
if($sale_diff > 1){
$back_data = 0;
$back_message .= '-超过抢票时间';
}else if($sale_diff <0){
$back_data = 0;
$back_message .= '-未到抢票时间';
}
}
}
if($back_data == 0){
$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.'</td></tr>';
}else{
//单个订单提交
echo $cold_sn.'<br>';
$this->booktickets($cold_sn,$bpe_sn,'','juhe');
//$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票</td></tr>';
}
}
print_r('<table border="1">'.$string.'</table>');
}
//创建一个方法用于接收所有的出票请求
public function booktickets($cold_sn=null,$bpe_sn=null,$selectseat=null,$type=null){
if(empty($cold_sn) && empty($bpe_sn)){
//接收子表订单号
$cold_sn = $this->input->get_post('order');
//接收客人表sn
$bpe_sn = $this->input->get_post("people");
//接收选座字符串
$selectseat = $this->input->get_post("selectseat");
//接收出票接口
$type = $this->input->get_post("type");
}
//测试数据
/*$cold_sn = '488121613';
$bpe_sn = '473183645,473183646,473183647';
$selectseat = '';
$type = 'juhe';*/
if(!is_numeric($cold_sn)){
$reback["mes"]="订单号是数字";
echo json_encode($reback);
return false;
}
if(empty($bpe_sn)){
$reback["mes"]="请选择乘客";
echo json_encode($reback);
return false;
}
$data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn);
$data['people_list']=$this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
if($selectseat == ''){
$selectseat = '';
$train_select = $data['train']->FOI_SelectedSeat;
$obj = explode(',',$train_select);
foreach($obj as $value){
$selectseat .= $value;
}
}
if (empty($data['train'])) {
//显示错误,找不到车次
$reback["mes"]="找不到车次";
echo json_encode($reback);
return false;
}
if (empty($data['people_list'])) {
//显示错误,找不到用户信息
$reback["mes"]="找不到乘客信息";
echo json_encode($reback);
return false;
}
if (count($data['people_list']) > 5) {
//显示错误,用户超过五个
$reback["mes"]="乘客不能超过五个";
echo json_encode($reback);
return false;
}
switch ($type){
case 'juhe':
$this->juheModel($data,$selectseat,$cold_sn);
break;
case 'tuniu':
$this->tuniuModel($data,$selectseat,$cold_sn);
break;
case 'ctrip':
$this->ctripModel($data,$selectseat,$cold_sn);
break;
}
}
function juheModel($data=null,$selectseat=null,$cold_sn=null){
$zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码
$zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称
//进行提交字符串的拼接
$passengers = "";
foreach ($data['people_list'] as $key => $item) {
//乘客姓名
$passengersename = $item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName;
//将特殊字符转换为正常字符以便于出票
$passengersename = chk_sp_name($passengersename);
//乘客类型
switch ($item->BPE_GuestType) {
case 1:
$piaotype = 1;
$piaotypename = "成人票";
break;
case 2:
$piaotype = 2;
$piaotypename = "儿童票";
break;
default://外国人应该就两种票吧
$piaotype = 1;
$piaotypename = "成人票";
break;
}
//证件类型
switch ($item->BPE_PassportType){
case 'Chinese ID':
$passporttypeseid = "1";
$passporttypeseidname = "二代身份证";
break;
case 'Travel Permit from Hong Kong / Macau':
$passporttypeseid = "C";
$passporttypeseidname = "港澳通行证";
break;
case 'Travel Permit from Taiwan':
$passporttypeseid = "G";
$passporttypeseidname = "台湾通行证";
break;
default :
$passporttypeseid = "B";
$passporttypeseidname = "护照";
break;
}
switch ($item->BPE_SEX){
case '100003':
$sex = 'F';
break;
case '100001':
$sex = 'M';
break;
}
$passportseno = str_replace(' ','',$item->BPE_Passport);
//添加一个判断护照号是否在黑名单
if(in_array($passportseno,$this->black_list)){
$reback["mes"] = "乘客为黑名单用户";
echo json_encode($reback);
return false;
}
if($passporttypeseid == 'G'){
$passengers .= ',{"passengerid":' . (++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","gatValidDateEnd":"'.$item->BPE_PassExpdate.'","gatBornDate":"'.$item->BPE_BirthDate.'","sexCode":"'.$sex.'"}';
}else{
$passengers .= ',{"passengerid":' . ( ++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '"}';
}
}
$passengers .= "]";
$passengers = substr($passengers, 1);
$passengers = "[" . $passengers;
if(empty($selectseat)){
$post_data=array(
"key"=>JUHE_TRAIN_API_KEY,
"user_orderid"=>$cold_sn,//自定义订单号
"train_date"=>substr($data["train"]->DepartureDate, 0, 10),
"is_accept_standing"=>"no",
"from_station_name"=>$data["train"]->DepartAirport_cn,
"from_station_code"=>$data["train"]->DepartAirport,
"to_station_code"=>$data["train"]->ArrivalAirport,
"to_station_name"=>$data["train"]->ArrivalAirport_cn,
"passengers"=>$passengers,
"checi"=>$data["train"]->FlightsNo
);
}else{
$post_data=array(
"key"=>JUHE_TRAIN_API_KEY,
"user_orderid"=>$cold_sn,//自定义订单号
"train_date"=>substr($data["train"]->DepartureDate, 0, 10),
"is_accept_standing"=>"no",
"choose_seats"=>$selectseat,
"from_station_name"=>$data["train"]->DepartAirport_cn,
"from_station_code"=>$data["train"]->DepartAirport,
"to_station_code"=>$data["train"]->ArrivalAirport,
"to_station_name"=>$data["train"]->ArrivalAirport_cn,
"passengers"=>$passengers,
"checi"=>$data["train"]->FlightsNo
);
}
//发起请求
$add_data = new stdClass();
$back_json = GetPost_http('http://op.juhe.cn/trainTickets/submit',$post_data);
$back_data = json_decode($back_json);
if(!$back_data->error_code){
$add_data->ordernumber = $back_data->result->orderid;
$reback["status"] = 1;
$reback["order"] = $back_data->result->orderid;
$reback["mes"] = "订单提交成功,等待回调";
}else{
$add_data->ordernumber=null;
$reback["mes"] = $back_json;
$add_data->status = "e";
}
//本地订单入库
$add_data->cold_sn = $cold_sn;
$add_data->returncode = $back_data->error_code;
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = $data['train']->FlightsNo;
$add_data->fromstationame = $data['train']->DepartAirport_cn;
$add_data->fromstationcode = $data['train']->DepartAirport;
$add_data->tostationame = $data['train']->ArrivalAirport_cn;
$add_data->tostationcode = $data['train']->ArrivalAirport;
$add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate));
$add_data->startime = date('H:i',strtotime($data['train']->DepartureTime));
$add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime));
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'juhe';
$add_data->isauto = $this->isauto;
$this->train_system_model->add_orders($add_data);
echo json_encode($reback);
return false;
}
function tuniuModel($data,$selectseat,$cold_sn){
$this->load->library('Des');
$zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码
$zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称
$passengers="";
//$cold_sn = $cold_sn.'_'.time();
//拼接车次信息
$tuniu_data = '{';
$tuniu_data .= '"retailOrderId":"'.$cold_sn.'",';
$tuniu_data .= '"cheCi": "'.$data['train']->FlightsNo.'", ';
$tuniu_data .= '"fromStationCode": "'.$data['train']->DepartAirport.'", ';
$tuniu_data .= '"fromStationName": "'.$data['train']->DepartAirport_cn.'", ';
$tuniu_data .= '"toStationCode": "'.$data['train']->ArrivalAirport.'", ';
$tuniu_data .= '"toStationName": "'.$data['train']->ArrivalAirport_cn.'", ';
$tuniu_data .= '"trainDate": "'.substr($data["train"]->DepartureDate, 0, 10).'", ';
$tuniu_data .= '"callBackUrl": "http://www.mycht.cn/info.php/apps/train/tuniu_callback/book",';
$tuniu_data .= '"hasSeat": true,';
$tuniu_data .= '"contact": "陈宇超",';
$tuniu_data .= '"phone": "18877381547",';
$tuniu_data .= '"isChooseSeats": true,';
$tuniu_data .= '"chooseSeats":"'.$selectseat.'",';
//循环乘客
$passengers = '';
foreach ($data['people_list'] as $key => $item) {
$passengers .= '{';
$passengers .= '"passengerId":'.$key.',';
$passengers .= '"ticketNo":"null",';
//乘客姓名
$passengersename = str_replace(' ','',$item->BPE_FirstName) . str_replace(' ','',$item->BPE_MiddleName) . str_replace(' ','',$item->BPE_LastName);
//将特殊字符转换为正常字符以便于出票
$passengersename = chk_sp_name($passengersename);
$passengers .= '"passengerName":"'.$passengersename.'",';
$passportseno = str_replace(' ','',$item->BPE_Passport);
$passengers .= '"passportNo":"'.$passportseno.'",';
//证件类型
switch ($item->BPE_PassportType){
case 'Chinese ID':
$passporttypeseid = "1";
$passporttypeseidname = "二代身份证";
break;
case 'Travel Permit from Hong Kong / Macau':
$passporttypeseid = "C";
$passporttypeseidname = "港澳通行证";
break;
case 'Travel Permit from Taiwan':
$passporttypeseid = "G";
$passporttypeseidname = "台湾通行证";
break;
default :
$passporttypeseid = "B";
$passporttypeseidname = "护照";
break;
}
//乘客类型
switch ($item->BPE_GuestType) {
case 1:
$piaotype = 1;
$piaotypename = "成人票";
break;
case 2:
$piaotype = 2;
$piaotypename = "儿童票";
break;
default://外国人应该就两种票吧
$piaotype = 1;
$piaotypename = "成人票";
break;
}
$passengers .= '"passportTypeId":"'.$passporttypeseid.'",';
$passengers .= '"passportTypeName":"'.$passporttypeseidname.'",';
//票类型
$passengers .= '"piaoType":"'.$item->BPE_GuestType.'",';
$passengers .= '"piaoTypeName":"'.$piaotypename.'",';
//座位类型piaoTypeName
$passengers .= '"zwCode":"'.$zwcode.'",';
$passengers .= '"zwName":"'.$zwname.'",';
$passengers .= '"cxin":"null",';
$passengers .= '"price":"'.$data['train']->adultcost.'",';
$passengers .= '"reason": 0';
$passengers .= '},';
}
$passengers = substr($passengers,0,strlen($passengers)-1);
$passengers = '['.$passengers.']';
$tuniu_data .= '"passengers": '.$passengers.'}';
//print_r($tuniu_data);
$crypt = new DES();
$mstr = $crypt->encrypt($tuniu_data,TUNIU_KEY);
$post_data = '{
"apiKey": "'.TUNIU_KEY.'",
"sign": "'.create_sign().'",
"timestamp": "'.date('Y-m-d H:i:s',time()).'",
"data": "'.$mstr.'"
}';
$url = TUNIU_URL.'/train/book';
$book_back_json = GetPost_http($url,$post_data,'POST','json');
$book_back_data = json_decode($book_back_json);
$orderId = $book_back_data->data->orderId;
$retailOrderId = $book_back_data->data->retailOrderId;
if($book_back_data->success == 1){
$confirm_url = TUNIU_URL.'/train/confirm';
$sign = create_sign();
$time = date('Y-m-d H:i:s',time());
$post_data = '{
"apiKey": "'.TUNIU_KEY.'",
"sign": "'.$sign.'",
"timestamp": "'.$time.'",
"data": {
"retailOrderId":"'.$retailOrderId.'",
"orderId":"'.$orderId.'",
"callBackUrl":"http://www.mycht.cn/info.php/apps/train/tuniu_callback/confirm"
}
}';
//请求出票
$confirm_back_json = GetPost_http($confirm_url,$post_data,'POST','json');
$confirm_back_data = json_decode($confirm_back_json);
$reback["status"] = 1;
$reback["order"] = $orderId;
$reback["mes"] = "订单提交成功,等待回调";
}else{
$reback["mes"] = $confirm_back_json;
$add_data->status = "e";
}
//本地订单入库
$add_data = new stdClass();
$add_data->cold_sn = $retailOrderId;
$add_data->ordernumber = $orderId;
$add_data->returncode = $confirm_back_data->returnCode;
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = $data['train']->FlightsNo;
$add_data->fromstationame = $data['train']->DepartAirport_cn;
$add_data->fromstationcode = $data['train']->DepartAirport;
$add_data->tostationame = $data['train']->ArrivalAirport_cn;
$add_data->tostationcode = $data['train']->ArrivalAirport;
$add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate));
$add_data->startime = date('H:i',strtotime($data['train']->DepartureTime));
$add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime));
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'tuniu';
$add_data->isauto = 0;
$this->train_system_model->add_orders($add_data);
echo json_encode($reback);
return false;
}
function ctripModel($data,$selectseat,$cold_sn){
$zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码
$zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称
$OrderNumber = ORDERUSER.time();
//拼接发送的报文
$PostData = array();
$TimeStamp = time();
$time = date('Y-m-d H:i:s',$TimeStamp);
$PostData['Authentication']->TimeStamp = $time;
$PostData['Authentication']->ServiceName = 'order.PartnerAddOrder';
$PostData['Authentication']->PartnerName = ORDERUSER;
$MessageIdentity = md5($time.'order.PartnerAddOrder'.ORDERKEY);
$PostData['Authentication']->MessageIdentity = $MessageIdentity;
$PostData['TrainOrderService']->PartnerName = ORDERUSER;
$PostData['TrainOrderService']->Operation = '';
$PostData['TrainOrderService']->OrderType = '电子';
$PostData['TrainOrderService']->OrderTicketType = '0';
$PostData['TrainOrderService']->OrderNumber = $OrderNumber;
$PostData['TrainOrderService']->ChannelName = ORDERUSER;
$PostData['TrainOrderService']->Order->OrderTime = $time;
$PostData['TrainOrderService']->Order->OrderMedia = 'pc';
$PostData['TrainOrderService']->Order->Insurance = 'N';
$PostData['TrainOrderService']->Order->Invoice = 'N';
$PostData['TrainOrderService']->Order->PrivateCustomization = '0';
$PostData['TrainOrderService']->Order->TicketItem->FromStationName = $data['train']->DepartAirport_cn;
$PostData['TrainOrderService']->Order->TicketItem->ToStationName = $data['train']->ArrivalAirport_cn;
$PostData['TrainOrderService']->Order->TicketItem->TicketTime = date('Y-m-d H:i:s',strtotime($data['train']->DepartureTime));
$PostData['TrainOrderService']->Order->TicketItem->TrainNumber = $data['train']->FlightsNo;
$PostData['TrainOrderService']->Order->TicketItem->ArrivalDateTime = date('Y-m-d H:i:s',strtotime($data['train']->ArrivalTime));
$PostData['TrainOrderService']->Order->TicketItem->TicketPrice = $data['train']->adultcost;
$PostData['TrainOrderService']->Order->TicketItem->TicketCount = count($data['people_list']);
$AdultNum = 0;
$ChildNum = 0;
$Passport = '';
foreach ($data['people_list'] as $PassagerInfo){
//乘客类型
switch ($PassagerInfo->BPE_GuestType) {
case 1:
$PiaoType = 1;
$PiaoTypeName = "成人票";
$AdultNum++;
break;
case 2:
$PiaoType = 2;
$PiaoTypeName = "儿童票";
$ChildNum++;
break;
default://外国人应该就两种票吧
$PiaoType = 1;
$PiaoTypeName = "成人票";
break;
}
//证件类型
switch ($PassagerInfo->BPE_PassportType){
case 'Chinese ID':
$PassportTypeseId = "1";
$PassportTypeseidName = "二代身份证";
break;
case 'Travel Permit from Hong Kong / Macau':
$PassportTypeseidName = "港澳通行证";
break;
case 'Travel Permit from Taiwan':
$PassportTypeseId = "G";
$PassportTypeseidName = "台湾通行证";
break;
default :
$PassportTypeseId = "B";
$PassportTypeseidName = "护照";
break;
}
//$Passport .= chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName).','.$PassportTypeseidName.','.$PassagerInfo->BPE_Passport.','.$PiaoTypeName.','.''.',0|';
if($PiaoType == 1){
$RelatioNme = chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName);
$Passport .= chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName).','.$PassportTypeseidName.','.$PassagerInfo->BPE_Passport.','.$PiaoTypeName.','.''.',0|';
}elseif($PiaoType == 2){
$Passport .= $RelatioNme.','.$PassportTypeseidName.','.$PassagerInfo->BPE_Passport.','.$PiaoTypeName.','.''.',0,'.chk_sp_name($PassagerInfo->BPE_FirstName.$PassagerInfo->BPE_MiddleName.$PassagerInfo->BPE_LastName).'|';
}
}
$PostData['TrainOrderService']->Order->TicketItem->AuditTicketCount = $AdultNum;
$PostData['TrainOrderService']->Order->TicketItem->ChildTicketCount = $ChildNum;
$PostData['TrainOrderService']->Order->TicketItem->SeatName = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]];
$PostData['TrainOrderService']->Order->TicketItem->SelectedSeat = $selectseat;
$PostData['TrainOrderService']->Order->TicketItem->AcceptSeat = '';
$PostData['TrainOrderService']->Order->TicketItem->passport = substr($Passport,0,strlen($Passport)-1);
$PostData['TrainOrderService']->Order->TicketItem->OrderPrice = $data['train']->adultcost * $AdultNum + $data['train']->childcost * $ChildNum;
$PostData['TrainOrderService']->Order->FrontSeatFlag = '0';
$PostData['TrainOrderService']->Order->User->UserID = '';
$PostData['TrainOrderService']->Order->User->UserName = 'guilintravel';
$PostData['TrainOrderService']->Order->User->userLoginName = 'guilintravel';
$PostData['TrainOrderService']->Order->User->UserMobile = '18877381547';
//print_r($PostData);die();
//本地添加记录
$add_data = new stdClass();
$add_data->cold_sn = $cold_sn;
$add_data->ordernumber = $OrderNumber;
$add_data->returncode = '';
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = $data['train']->FlightsNo;
$add_data->fromstationame = $data['train']->DepartAirport_cn;
$add_data->fromstationcode = $data['train']->DepartAirport;
$add_data->tostationame = $data['train']->ArrivalAirport_cn;
$add_data->tostationcode = $data['train']->ArrivalAirport;
$add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate));
$add_data->startime = date('H:i',strtotime($data['train']->DepartureTime));
$add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime));
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'ctrip';
$add_data->isauto = 0;
//存储到数据库
$this->train_system_model->add_orders($add_data);
$Url = 'http://m.ctrip.com/restapi/soa2/11009/json/PartnerAddOrder';
$ResponseJson = GetPost_http($Url,json_encode($PostData),'POST');
$ResponseData = json_decode($ResponseJson);
//echo '预定';
//print_r($ResponseData);
//预定请求成功后执行支付
if($ResponseData->Status == 'SUCCESS'){
//计算订单总价,进行支付
$total_price = $AdultNum * $data['train']->adultcost + $ChildNum * $data['train']->childcost;
$this->payorders($OrderNumber,$total_price);
$reback["status"] = 1;
$reback["order"] = $OrderNumber;
$reback["mes"] = "订单提交成功,等待回调";
}else{
$reback["mes"] = $ResponseJson;
$add_data->status = "e";
}
echo json_encode($reback);
}
}

@ -0,0 +1,342 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class api extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->helper('train');
$this->load->model("BIZ_train_model");
$this->load->model("train_system_model");
$this->load->model("Sendmail_model");
}
public function index(){
echo 'api manager';
}
//获取订单出票状态
public function isbooktickets(){
$cold_sn = $this->input->get('cold_sn');
$tickets_info = $this->train_system_model->get_tickets_info($cold_sn);
//print_r($tickets_info);
if(!empty($tickets_info)){
$return_data = array();
$i = 0;
foreach($tickets_info as $items){
$return_data[$i]->cold_sn = (int) $items->ts_cold_sn;
$return_data[$i]->ordernumber = $items->ts_ordernumber;
$return_data[$i]->status = $items->tst_status;
$return_data[$i]->passengersename = $items->tst_realname;
$return_data[$i]->passportseno = $items->tst_numberid;
$i++;
}
print_r(json_encode($return_data));
}else{
return null;
}
}
//用于自动发送确认信
public function send_confirmmail(){
//log_message('error','auto sendmail');
$mailarr = $this->BIZ_train_model->auto_sendmail();
foreach($mailarr as $obj){
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($obj->ts_cold_sn);
$coli_id = $coli_id[0]->COLI_ID;
$juhe_order = $obj->ts_ordernumber;
$this->send_mail_to_guest($coli_id,$juhe_order);
}
}
//发邮件给客人
function send_mail_to_guest($coli_id,$jh_order){
$info = $this->BIZ_train_model->get_user_info($jh_order);
$guest = $this->BIZ_train_model->get_guest_info($coli_id);
//print_r($guest);
$operator_info = $this->BIZ_train_model->get_operatorInfo($coli_id);
$fromName = $operator_info[0]->Name;
$fromEmail = $operator_info[0]->OPI_Email;
$toName = $guest[0]->GUT_LastName.$guest[0]->GUT_FirstName;
$toEmail = $guest[0]->GUT_Email;//
$data['coli_id'] = $coli_id;
$data['toname'] = $toName;
$data['adult'] = $info->COLD_PersonNum;
$data['chlid'] = $info->COLD_ChildNum;
$data['baby'] = $info->COLD_BabyNum;
$data['price'] = $this->BIZ_train_model->get_paypal($coli_id);
$data['allpeople'] = $this->BIZ_train_model->biz_people($info->COLD_SN);
$data['train_info'] = $this->BIZ_train_model->get_biz_foi($info->COLD_SN);
$differtime = (strtotime($data['train_info'][0]->DepartureTime) - time()) / 3600;
$obj = $this->BIZ_train_model->get_biz_jol_info($info->COLD_SN,$jh_order);
$data['ordernumber'] = $obj->ts_elecnumber;
$status = $obj->ts_status;
$data['operator'] = $operator_info;
$data['emailarr'] = explode(';',$operator_info[0]->Email);
$data['seatinfo'] = $obj->ts_seatsinfo;
if($status == '4' && $differtime > 0){
$subject = "Got payment and issued train ticket(s), Order No $coli_id";
$body = $this->load->view('email',$data,true);
$this->send_mail_to_wl("订单:{$coli_id} 出票成功","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id);
//发送邮件给客人
$flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
$this->BIZ_train_model->update_biz_jol(array("ts_ordernumber"=>$jh_order),array("ts_sendmail"=>1,"ts_m_sn"=>$flag));
}else if($status == '1' && $differtime < 18 && $differtime > 0){
$subject = "The train ticket(s) will be issued manually, Order No $coli_id";
$body = $this->load->view('email_fault',$data,true);
$this->send_mail_to_wl("订单:{$coli_id} 出票失败","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id);
//测试阶段,将失败邮件发送一份给操作外联。
$flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$fromName,$fromEmail,$subject,$body);
//测试阶段,将失败邮件发送一份给操作外联。
$this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
$this->BIZ_train_model->update_biz_jol(array("ts_ordernumber"=>$jh_order),array("ts_sendmail"=>1,"ts_m_sn"=>$flag));
}else{
echo $jh_order.'不需要发邮件<br>';
$this->BIZ_train_model->update_biz_jol(array("ts_ordernumber"=>$jh_order),array("ts_sendmail"=>2));
$flag = false;
}
}
//发邮件给外联
function send_mail_to_wl($subject,$body,$coli_id){
$fromName = "cyc";
$fromEmail = "cyc@hainatravel.com";
//获取该订单的操作员的邮箱以及姓名
$info = $this->BIZ_train_model->get_operatorInfo($coli_id);
$toName = $info[0]->OPI_Name;
$toEmail = $info[0]->OPI_Email;
$this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
}
//导出账单api
public function export_excel(){
set_time_limit(0);
//创建跟踪号
$trackcode = $this->BIZ_train_model->getTrackingCode();
$from_date = $this->input->post("from_date");
$to_date = $this->input->post("to_date");
$examine = $this->input->post("examine");
//$operator=$this->input->post("operator");
$reback=array();//返回的数据
$reback["from_date"] = $from_date;
$reback["to_date"] = $to_date;
$reback["examine"] = $examine;
$group = array();
if(!empty($from_date) && !empty($to_date)){
$from_date = date("Y-m-d H:i",strtotime($from_date));
$to_date = date("Y-m-d H:i",strtotime($to_date));
$r = "";//聚合返回的数据
$string_r = "";//输出
$coli_id = "";
$wl_name = "";
$arr = array();//整合完成的数组,写进excel表的数据
$url = JUHE_TRAIN_EXPORT_API;//请求的url
$url .= "?key=".JUHE_TRAIN_API_KEY;
$url .= "&since=".$from_date;
$url .= "&before=".$to_date;
$r = GetPost_http($url);
$r = explode("\n",$r);
//print_r($r);
//die();
for($i=1;$i<count($r)-1;$i++){
$r_info=explode(",",$r[$i]);
$juhe_order=substr($r_info[4], 1,strlen($r_info[4])-2);
$obj = $this->BIZ_train_model->jh_order_get_coli_id($juhe_order);
//print_r($obj);
if(!empty($obj)){
$coli_id = $obj[0]->COLI_ID;
$coli_sn = $obj[0]->COLI_SN;
}else{
echo $juhe_order;
}
$this->BIZ_train_model->linkTrackingCode($coli_sn,$trackcode);
/*if(empty($coli_sn) || empty($coli_sn)){
print_r($juhe_order);
}*/
/*
$flag = $this->BIZ_train_model->islink($coli_sn);
if($flag){
$this->BIZ_train_model->linkTrackingCode($coli_sn,$trackcode);
}else{
echo $coli_sn.'该订单还未关联财务表,不能导出账单。<br>';
die();
}
*/
//去掉数据两边的双引号
$r_info[2]=substr($r_info[2], stripos($r_info[2],'"')+1,strrpos($r_info[2],'"')-1);
$r_info[1]=substr($r_info[1], stripos($r_info[1],'"')+1,strrpos($r_info[1],'"')-1);
$r_info[5]=substr($r_info[5], stripos($r_info[5],'"')+1,strrpos($r_info[5],'"')-1);
$r_info[6]="";//储存团名
$r_info[7] = "";//储存外联名
$r_info[8] = "";//储存coli_id
if($coli_id){
$r_info[8] = $coli_id;
$gri_no=$this->BIZ_train_model->get_gri_no($r_info[8]);//团名
$wl_name = $this->BIZ_train_model->get_operatorInfo($r_info[8]);
if($gri_no){
$r_info[6] = $gri_no[0]->GRI_No;
}
if($wl_name){
$r_info[7] = $wl_name[0]->OPI_Name;
}
}
//$r_info[3]=mb_convert_encoding($r_info[3],"utf-8","gbk");
if(is_numeric(mb_strpos($r_info[3],"充值"))){
if(is_numeric(mb_strpos($r_info[3],"扣款"))){
$r_info[3]="票款(有充值)";
}
if(is_numeric(mb_strpos($r_info[3],"扣手续费"))){
$r_info[3]="手续费(有充值)";
}
if(is_numeric(mb_strpos($r_info[3],"线上退票成功"))){
$r_info[3]="退票费(有充值)";
}
}
if(is_numeric(mb_strpos($r_info[3],"扣款"))){
$r_info[3]="票款";
}
if(is_numeric(mb_strpos($r_info[3],"扣手续费"))){
$r_info[3]="手续费";
}
if(is_numeric(mb_strpos($r_info[3],"线上退票成功"))){
$r_info[3]="退票费";
}
// $r_info[3]=mb_convert_encoding($r_info[3],"gbk","utf-8");
$r_info['trackcode'] = $trackcode;
$arr[]=$r_info;
/*
//根据外联的名字创建数组来存储对应外联的订单信息
if(!empty($r_info[7])){
if(!isset($group[$r_info[7]])){
$group[$r_info[7]] = array();
}
array_push($group[$r_info[7]],$r_info);
}*/
}
/*
//将存储好的分组重新循环出来。
foreach($group as $item){
foreach ($item as $value){
array_push($arr,$value);
}
}
*/
//die();
if(empty($examine)){
header("Content-type:application/vnd.ms-excel;charset=utf-8");
header("Content-Disposition:attachment;filename=juhe_train.xls");
$string_r= $this->load->view("train_transaction_excel",array("arr"=>$arr),TRUE);
echo $string_r;die;
}else{
krsort($arr);//数组倒序
$reback["data"]=$arr;
}
}
}
//登录验证
public function check_login(){
$code = $this->input->get('code');
$signature = getDingSignature();
$urlencode_signature = urlencode($signature);
$personInfoUrl = 'https://oapi.dingtalk.com/sns/getuserinfo_bycode?signature='.$urlencode_signature.'&timestamp='.time().'&accessKey=dingoaystremzlahfew1tb';
$post_data = '{"tmp_auth_code":"'.$code.'"}';
$returnJson = GetPost_http($personInfoUrl,$post_data,'json');
$returnData = json_decode($returnJson);
if(!empty($returnData->user_info)){
//创建session
$this->session->set_userdata('dingname', $returnData->user_info->nick);
$this->session->set_userdata('dingunionid', $returnData->user_info->unionid);
redirect('http://www.mycht.cn/info.php/apps/trainsystem/pages/');
}else{
redirect('http://www.mycht.cn/info.php/apps/trainsystem/pages/login');
}
}
public function check_session(){
print_r($this->session->userdata('dingunionid'));
}
//订单同步到trainsystem
public function sync_orders(){
die();
//获取聚合订单
$juhe_orders = $this->train_system_model->getallorders();
$add_data = new stdClass();
foreach ($juhe_orders as $items){
$add_data->ordernumber = $items->JOL_JuheOrder;
$add_data->cold_sn = $items->JOL_COLD_SN;
$add_data->status = $items->JOL_Status;
$add_data->returncode = '';
$add_data->errormsg = $items->JOL_RebackMsg;
$add_data->checi = $items->JOL_TrainCode;
$add_data->fromstationame = $items->JOL_FromStation;
$add_data->fromstationcode = $items->JOL_FromStationCode;
$add_data->tostationame = $items->JOL_ToStation;
$add_data->tostationcode = $items->JOL_ToStationCode;
$trains = json_decode($items->JOL_BackTxt);
//print_r($trains->passengers);
if(isset($trains->train_date)){
$add_data->startdate = $trains->train_date;
}else{
$add_data->startdate = '';
}
foreach ($trains->passengers as $passengers){
//对订票乘客进行存储
$data_passager->ordernumber = $items->JOL_JuheOrder;
$data_passager->realname = $passengers->passengersename;
$data_passager->identitytype = $passengers->passporttypeseidname;
$data_passager->numberid = $passengers->passportseno;
$data_passager->ticketype = $passengers->piaotypename;
$data_passager->ticketprice = $passengers->price;
$data_passager->seatype = $passengers->zwname;
$data_passager->seatdetail = $passengers->cxin;
$data_passager->status = $items->JOL_Status;
//print_r($data_passager);
$this->train_system_model->add_passagers($data_passager);
}
$add_data->startime = '';
$add_data->endtime = '';
$add_data->runtime = '';
$add_data->channel = 'juhe';
$add_data->isauto = $items->JOL_IsAuto;
$this->train_system_model->add_orders($add_data);
//print_r($add_data);
}
}
public function update_order(){
$juhe_orders = $this->train_system_model->getallorders();
foreach ($juhe_orders as $tickets_info){
$ordernumber = $tickets_info->JOL_JuheOrder;
$subtime = $tickets_info->JOL_SubTime;
$price = $tickets_info->JOL_Price;
$this->train_system_model->update_juheorder($ordernumber,$subtime,$price);
}
}
}

@ -0,0 +1,320 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class callback extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->helper('train');
$this->load->model("train_system_model");
$this->load->model("BIZ_train_model");
}
public function juhecallback(){
$data_post = $this->input->post();
if(empty($data_post)){
header("HTTP/1.1 404 Not Found");
exit('{"reason":"empty infos","status":"404"}');
}
//调试代码
/*$test_post = '{"data":"{\"from_station_name\":\"\u6b66\u6c49\",\"from_station_code\":\"WHN\",\"to_station_name\":\"\u897f\u5b89\u5317\",\"to_station_code\":\"EAY\",\"train_date\":\"2019-04-13\",\"orderid\":\"JH155317715892154\",\"user_orderid\":\"488123754\",\"orderamount\":\"1363.50\",\"ordernumber\":\"E946949845\",\"checi\":\"G856\",\"msg\":\"\u51fa\u7968\u6210\u529f\",\"status\":\"4\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"VENOSLEONARDA\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"086925694\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006A\",\"cxin\":\"02\u8f66\u53a2,06A\u5ea7\",\"reason\":0},{\"passengerid\":2,\"passengersename\":\"WAGENSTALLERSANDRA\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CF7NR17M7\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006B\",\"cxin\":\"02\u8f66\u53a2,06B\u5ea7\",\"reason\":0},{\"passengerid\":3,\"passengersename\":\"WALDMANNSOPHIE\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CF26Y6FVK\",\"price\":\"454.5\",\"zwcode\":\"O\",\"zwname\":\"\u4e8c\u7b49\u5ea7\",\"ticket_no\":\"E946949845102006C\",\"cxin\":\"02\u8f66\u53a2,06C\u5ea7\",\"reason\":0}],\"refund_money\":null,\"sign\":\"f74013fa24115eeb9a807aa237054920\"}"}';
$data_post["data"] = json_decode($test_post)->data;*/
log_message('error','聚合回调:'.json_encode($data_post));
$data = json_decode($data_post["data"]);
$update_data = new StdClass();
$update_data->OrderStatus = $data->status;
$update_data->ordernumber = $data->orderid;
$update_data->OrderTotleFee = $data->orderamount;
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->ElectronicOrderNumber = $data->ordernumber;
$update_data->reschedulecallback = '';
$update_data->ErrorMsg = $data->msg;
//如果返回2则发送出票请求
if($data->status == "1"){
$update_data->bookcallback = $data_post["data"];
}elseif($data->status == "2"){
$coach = array();
$seats = array();
$string = '';
$passagers = $data->passengers;
foreach($passagers as $item){
foreach(explode(',',$item->cxin) as $item_seat){
if(strpos($item_seat,'车厢')){
$item_seat = str_replace('车厢','',$item_seat);
array_push($coach,$item_seat);
}else{
$find = array('座上铺','座中铺','座下铺','座');
$replace = array(' upper',' middle',' lower','');
$item_seat = str_replace($find,$replace,$item_seat);
array_push($seats,$item_seat);
}
}
//对订票乘客进行存储
$data_passager->ordernumber = $data->orderid;
$data_passager->realname = $item->passengersename;
$data_passager->identitytype = $item->passporttypeseidname;
$data_passager->numberid = $item->passportseno;
$data_passager->ticketype = $item->piaotypename;
$data_passager->ticketprice = $item->price;
$data_passager->seatype = $item->zwname;
$data_passager->seatdetail = $item->cxin;
$data_passager->status = '4';
$this->train_system_model->add_passagers($data_passager);
}
//判断车厢是否唯一,如果不唯一的话,分成两个车厢
if(count(array_unique($coach)) == 1){
$onlycoach = array_unique($coach);
$string .= 'Coach '.$onlycoach[0].',';
}else{
foreach (array_unique($coach) as $item_coach){
$string .= 'Coach '.$item_coach.',';
}
}
$string .= 'Seat ';
foreach($seats as $item_seat){
$string .= $item_seat.',';
}
$seatinfo = substr($string,0,strlen($string)-1);
$update_data->seatsinfo = $seatinfo;
$post_data = array(
"key"=>JUHE_TRAIN_API_KEY,
"orderid"=>$data->orderid
);
$back_json = GetPost_http(JUHE_TRAIN_PAY_API,$post_data);
$update_data->bookcallback = $data_post["data"];
}elseif($data->status == "4"){
$add_train_order_data->TOC_Memo = $data->orderid." 聚合出票";
$add_train_order_data->TOC_COLD_SN = $data->user_orderid;
$add_train_order_data->TOC_TrainNumber = $data->checi;
$add_train_order_data->TOC_DepartureDate = $data->train_date;
$add_train_order_data->TOC_TicketCost = $data->orderamount;
$add_train_order_data->poundage = (count($data->passengers)*2)."";//手续费,每人两块,转换成字符串
$add_train_order_data->FOI_TrainNetOrderNo = $data->ordernumber;
$this->BIZ_train_model->add_train_payment($add_train_order_data);
$update_data->confirmcallback = $data_post["data"];
$this->BIZ_train_model->update_cold_planvei_sn($data->user_orderid);
}elseif($data->status=="7"){
//退票成功 写入TOC表
$newtime = "";//记录最新操作时间
$refund_passportseno = "";//退票人护照号
$refund_money = "";//退票金额
foreach ($data->passengers as $p) {
if(isset($p->returntickets)){
$refund_passportseno = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passportseno;
$refund_money = $p->refundTimeline[count($p->refundTimeline)-1]->detail->returnmoney;
//退票时还需要单独对对每个乘客存储回调信息
$passpager_info = new stdClass();
$passpager_info->returncallback = $data_post["data"];
$passpager_info->status = '7';
$passpager_info->ordernumber = $data->orderid;
$passpager_info->realname = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passengername;
$passpager_info->numberid = $refund_passportseno;
print_r($passpager_info);
$this->train_system_model->update_passpager_info($passpager_info);
//添加退款记录
$add_train_order_data->TOC_COLD_SN = $data->user_orderid;
$add_train_order_data->TOC_Memo = $data->orderid." ".$refund_passportseno;
$add_train_order_data->ordernumber = $data->user_orderid;
$add_train_order_data->TOC_TrainNumber = $data->checi;
$add_train_order_data->TOC_DepartureDate = $data->train_date;
$add_train_order_data->TOC_TicketCost = -$refund_money;
$add_train_order_data->FOI_TrainNetOrderNo = null;//退票不用更新取票号,以此在模型里面判断是否为退票消息
$this->BIZ_train_model->add_train_payment($add_train_order_data);
}else{
//有可能提交了退票或者还没有退票
}
}
$update_data->returncallback = $data_post["data"];
}
//print_r($update_data);die();
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}
public function ctripcallback(){
$back_json = file_get_contents('php://input');
log_message('error','携程回调信息:'.$back_json);
/*$back_json = '{"Authentication":{"ServiceName":"web.order.returnTicketNotice","PartnerName":"tieyou","TimeStamp":"2019-1-18 11:35:22","MessageIdentity":"93F2BA3253829E8FAD29B5DEB7646A59"},"TrainOrderService":{"contactName":{},"contactMobile":{},"OrderNumber":"guilintravel1547778269","refundTicket":{"childBillId":{},"orderId":"8360041214","eOrderNumber":"EB59937931","eOrderType":"1","seatNumber":"01D\u53f7","passport":"544712454","passportName":"YANGFRANCISCHENG","realName":"YANGFRANCISCHENG","status":"1","reason":"\u9000\u7968\u6210\u529f\uff0c\u9000\u6b3e\u91d1\u989d:218.50\u5143"}}}';*/
$ctrip_backdata = json_decode($back_json);
//print_r($ctrip_backdata);
if(!empty($ctrip_backdata)){
$update_data = new stdClass();
$update_data->ServiceName = $ctrip_backdata->Authentication->ServiceName;
$update_data->ordernumber = '';
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->OrderTotleFee = 0;
$update_data->ElectronicOrderNumber = '';
$update_data->reschedulecallback = '';
if($update_data->ServiceName == 'web.order.notifyTicket'){
$update_data->OrderStatus = '4';
$update_data->ErrorMsg = '出票成功';
$update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber;
$update_data->OrderTotleFee = $ctrip_backdata->TrainOrderService->OrderInfo->OrderTotleFee;
$update_data->ElectronicOrderNumber = $ctrip_backdata->TrainOrderService->OrderInfo->ElectronicOrderNumber;
//新添加检票口信息
if(isset($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck)){
if(!is_object($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck)){
$update_data->TicketCheck = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->TicketCheck;
}
}
//获取总票数,由于携程接口单人和多人返回的数据结构不一致
$person_num = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->TicketCount;
//存储座位信息 转换为英文
$coach_arr = array();
$seats_arr = array();
$data_passager = new stdClass();
$string = '';
$i = 0;
if($person_num > 1){
foreach ($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo as $items){
if(strpos($items->SeatNo,'车厢')){
$coach = mb_substr($items->SeatNo,0,strpos($items->SeatNo,'车厢'));
array_push($coach_arr,$coach);
$seat = mb_substr($items->SeatNo,strpos($items->SeatNo,'车厢')+2,mb_strlen($items->SeatNo,'UTF8'));
$find = array('号');
$replace = array('');
$seat = str_replace($find,$replace,$seat);
array_push($seats_arr,$seat);
}
//对订票乘客进行存储
$data_passager->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber;
$data_passager->realname = $items->PassengerName;
$data_passager->identitytype = $items->IdentityType;
$data_passager->numberid = $items->NumberID;
$data_passager->ticketype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->TicketType;
$data_passager->ticketprice = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketPrice;
$data_passager->seatype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketSeat;
$data_passager->seatdetail = $items->SeatNo;
$this->train_system_model->add_passagers($data_passager);
$i++;
}
}else{
$seatinfo_html = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->SeatNo;
if(strpos($seatinfo_html,'车厢')){
$coach = mb_substr($seatinfo_html,0,strpos($seatinfo_html,'车厢'));
array_push($coach_arr,$coach);
$seat = mb_substr($seatinfo_html,strpos($seatinfo_html,'车厢')+2,mb_strlen($seatinfo_html,'UTF8'));
$find = array('号');
$replace = array('');
$seat = str_replace($find,$replace,$seat);
array_push($seats_arr,$seat);
}
//对订票乘客进行存储
$data_passager->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber;
$data_passager->realname = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->PassengerName;
$data_passager->identitytype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->IdentityType;
$data_passager->numberid = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->NumberID;
$data_passager->ticketype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->TicketType;
$data_passager->ticketprice = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketPrice;
$data_passager->seatype = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->OrderTicketSeat;
$data_passager->seatdetail = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfoFinal->Tickets->Ticket->DetailInfos->DetailInfo->SeatNo;
$this->train_system_model->add_passagers($data_passager);
}
if(count(array_unique($coach_arr)) == 1){
$onlycoach = array_unique($coach_arr);
$update_data->seatsinfo .= 'Coach '.$onlycoach[0].',';
}else{
foreach (array_unique($coach_arr) as $item_coach){
$update_data->seatsinfo .= 'Coach '.$item_coach.',';
}
}
$update_data->seatsinfo .= 'Seat ';
foreach($seats_arr as $item_seat){
$update_data->seatsinfo .= $item_seat.',';
}
$update_data->seatsinfo = substr($update_data->seatsinfo,0,strlen($update_data->seatsinfo)-1);
$update_data->bookcallback = $back_json;
//添加支付记录
$add_train_payment_data->TOC_Memo = $update_data->ordernumber;
//根据订单号获取cold_sn
$order_info = $this->train_system_model->get_order_info($update_data->ordernumber);
$cold_sn = $order_info->ts_cold_sn;
$add_train_payment_data->TOC_COLD_SN = $cold_sn;
$add_train_payment_data->TOC_TrainNumber = $ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketCheci;
$add_train_payment_data->TOC_DepartureDate = date('Y-m-d',strtotime($ctrip_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketYMD));
$add_train_payment_data->TOC_TicketCost = $update_data->OrderTotleFee;
$add_train_payment_data->poundage = ($person_num*5)."";//手续费,每人五块,转换成字符串
$add_train_payment_data->FOI_TrainNetOrderNo = $update_data->ElectronicOrderNumber;
//print_r($add_train_order_data);die();
$this->BIZ_train_model->add_train_payment($add_train_payment_data);
//记录供应商(瀚特)
$this->BIZ_train_model->update_cold_planvei_sn($cold_sn);
}else if($update_data->ServiceName == 'web.order.notifyNoTicket'){
$update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber;
$update_data->OrderStatus = '1';
$update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->OrderInfo->NoTicketReasons;
$update_data->confirmcallback = $back_json;
}else if($update_data->ServiceName == 'web.order.returnTicketNotice'){
$update_data->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber;
$update_data->OrderStatus = '7';
$update_data->ErrorMsg = $ctrip_backdata->TrainOrderService->refundTicket->reason;
$update_data->returncallback = $back_json;
//退票时还需要单独对对每个乘客存储回调信息
$passpager_info = new stdClass();
$passpager_info->returncallback = $back_json;
$passpager_info->status = '7';
$passpager_info->ordernumber = $ctrip_backdata->TrainOrderService->OrderNumber;
$passpager_info->realname = $ctrip_backdata->TrainOrderService->refundTicket->realName;
$passpager_info->numberid = $ctrip_backdata->TrainOrderService->refundTicket->passport;
$this->train_system_model->update_passpager_info($passpager_info);
}else if($update_data->ServiceName == 'web.order.requestRefund'){
$return_order = $ctrip_backdata->TrainOrderService->OrderInfo->OrderNumber;
$return_money = $ctrip_backdata->TrainOrderService->TotalRefundAmount;
//根据订单号获取cold_sn
$order_info = $this->train_system_model->get_order_info($return_order);
$cold_sn = $order_info->ts_cold_sn;
//print_r($order_info);
$add_train_payment_data->TOC_Memo = $return_order.'_'.$ctrip_backdata->TrainOrderService->OrderInfo->OrderTid;
$add_train_payment_data->TOC_COLD_SN = $cold_sn;
$add_train_payment_data->TOC_TrainNumber = $order_info->ts_checi;
$add_train_payment_data->TOC_DepartureDate = $order_info->ts_startdate;
$add_train_payment_data->TOC_TicketCost = -$ctrip_backdata->TrainOrderService->TotalRefundAmount;
$add_train_payment_data->FOI_TrainNetOrderNo=null;
//print_r($add_train_payment_data);die();
$this->BIZ_train_model->add_train_payment($add_train_payment_data);
return false;
}
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}
}
}

@ -0,0 +1,528 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class check extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->model("BIZ_train_model");
$this->load->model("train_system_model");
$this->load->helper('train');
$this->db_train_zw = $this->config->item('db_train_zw');
$this->train_zw = $this->config->item('train_zw');
$this->black_list = $this->config->item('black_list');
$this->isauto = 0;
}
public function index(){
//$this->BIZ_train_model->delete_other();
}
//1903241050
public function check_autotickets(){
log_message('error','auto ticket');
date_default_timezone_set('Asia/Shanghai');
//判断账户余额如果小于1000自动退出。
$post_data = array("key"=>JUHE_TRAIN_API_KEY);
$back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php",$post_data);
$price = json_decode($back_data)->result;
print_r('账户余额:'.$price);
if($price < 1000){
exit('账户余额不足');
}
//筛选出能自动出票的订单
$auto_pool = $this->BIZ_train_model->auto_check_ticket();
//创建一个不允许自动出票的国际火车票数组
$nation_train = array('K19', 'K23', 'Z8701', 'Z8702', 'Z97', 'Z98', 'Z99', 'Z100', 'K9795');
//创建黑名单
$black_list = $this->config->item('black_list');
$string = '';
foreach($auto_pool as $item){
$this->isauto = 1;
$bpe_sn = '';
$back_message = '';
$cold_sn = $item->COLD_SN;
$coli_id = $item->coli_id;
$back_data = 1;
$people_arr = $this->BIZ_train_model->biz_people($cold_sn);
$train_info = $this->BIZ_train_model->get_biz_foi($cold_sn);
if($item->COLD_SPFS > 1){
//寄送票
$back_data = 0;
$back_message .= '-邮寄不自动出票';
}
//乘客人数大于5人不出票
if(count($people_arr) > 5){
$back_data = 0;
$back_message .= '-乘客人数大于5不自动出票';
}
//护照号如果在黑名单的就不自动出票
foreach($people_arr as $people_info){
if(in_array($people_info->BPE_Passport,$black_list)){
$back_data = 0;
$back_message .= '-此用户为黑名单用户,不自动出票';
}
if(strlen($people_info->BPE_Passport) >= 18){
$back_data = 0;
$back_message .= '-护照位数大于18不自动出票';
}
$bpe_sn .= $people_info->BPE_SN.',';
}
$bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1);
//单张票价不能大于1000人民币
if($train_info[0]->adultcost > 1000){
$back_data = 0;
$back_message .= '-单价大于1000不自动出票';
}
//如果为国际火车票就不出票
if(in_array($train_info[0]->FlightsNo, $nation_train)){
$back_data = 0;
$back_message .= '-国际火车票不自动出票';
}
//无座的订单不做出票
if($train_info[0]->Aircraft == 'WZ'){
$back_data = 0;
$back_message .= '-无座不自动出票';
}
//香港火车不自动出票
if($train_info[0]->DepartAirport == 'XJA'){
$back_data = 0;
$back_message .= '-香港火车不自动出票';
}
$DepartureDate = strtotime($train_info[0]->DepartureDate);
$time = time();
$depart_diff = ($DepartureDate - $time) / 86400;
if($train_info[0]->ArrivalAirport == 'XJA' && $train_info[0]->adultcost > 500 && $depart_diff > 5){
$back_data = 0;
$back_message .= '-内地香港火车金额大于500超过五天不自动出票';
}
//print_r($train_info);
//如果刚好是第三十天的订单
if(($item->COLI_State == '8' || $item->COLI_State == '63')){
$this->isauto = 3;
$time_obj = $this->BIZ_train_model->get_saletime($train_info['0']->DepartAirport_cn);
if(!empty($time_obj)){
$saletime = strtotime(date('Y-m-d').' '.$time_obj->TST_saletime);
//echo $saletime;
$sale_diff = (time() - $saletime) / 3600;
echo $cold_sn.'_'.date('Y-m-d').' '.$time_obj->TST_saletime.'/'.$saletime.'<br>';
if($sale_diff > 1){
$back_data = 0;
$back_message .= '-超过抢票时间';
}else if($sale_diff <0){
$back_data = 0;
$back_message .= '-未到抢票时间';
}
}
}
if($back_data == 0){
$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.'/'.$this->isauto.')'.$back_message.'</td></tr>';
}else{
//单个订单提交
echo $cold_sn.'<br>';
//$this->booktickets($cold_sn,$bpe_sn,'','juhe');
//$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票</td></tr>';
}
}
print_r('<table border="1">'.$string.'</table>');
}
//创建一个方法用于接收所有的出票请求
public function booktickets($cold_sn=null,$bpe_sn=null,$selectseat=null,$type=null){
if(empty($cold_sn) && empty($bpe_sn)){
//接收子表订单号
$cold_sn = $this->input->get_post('order');
//接收客人表sn
$bpe_sn = $this->input->get_post("people");
//接收选座字符串
$selectseat = $this->input->get_post("selectseat");
//接收出票接口
$type = $this->input->get_post("type");
}
//测试数据
/*$cold_sn = '488121613';
$bpe_sn = '473183645,473183646,473183647';
$selectseat = '';
$type = 'juhe';*/
if(!is_numeric($cold_sn)){
$reback["mes"]="订单号是数字";
echo json_encode($reback);
return false;
}
if(empty($bpe_sn)){
$reback["mes"]="请选择乘客";
echo json_encode($reback);
return false;
}
$data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn);
$data['people_list']=$this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
if($selectseat == ''){
$selectseat = '';
$train_select = $data['train']->FOI_SelectedSeat;
$obj = explode(',',$train_select);
foreach($obj as $value){
$selectseat .= $value;
}
}
if (empty($data['train'])) {
//显示错误,找不到车次
$reback["mes"]="找不到车次";
echo json_encode($reback);
return false;
}
if (empty($data['people_list'])) {
//显示错误,找不到用户信息
$reback["mes"]="找不到乘客信息";
echo json_encode($reback);
return false;
}
if (count($data['people_list']) > 5) {
//显示错误,用户超过五个
$reback["mes"]="乘客不能超过五个";
echo json_encode($reback);
return false;
}
switch ($type){
case 'juhe':
$this->juheModel($data,$selectseat,$cold_sn);
break;
case 'tuniu':
$this->tuniuModel($data,$selectseat,$cold_sn);
break;
case 'ctrip':
$this->ctripModel($data,$selectseat,$cold_sn);
break;
}
}
function juheModel($data=null,$selectseat=null,$cold_sn=null){
$zwcode = $this->db_train_zw[$data['train']->Aircraft]; //座位简码
$zwname = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称
//进行提交字符串的拼接
$passengers = "";
foreach ($data['people_list'] as $key => $item) {
//乘客姓名
$passengersename = $item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName;
//将特殊字符转换为正常字符以便于出票
$passengersename = chk_sp_name($passengersename);
//乘客类型
switch ($item->BPE_GuestType) {
case 1:
$piaotype = 1;
$piaotypename = "成人票";
break;
case 2:
$piaotype = 2;
$piaotypename = "儿童票";
break;
default://外国人应该就两种票吧
$piaotype = 1;
$piaotypename = "成人票";
break;
}
//证件类型
switch ($item->BPE_PassportType){
case 'Chinese ID':
$passporttypeseid = "1";
$passporttypeseidname = "二代身份证";
break;
case 'Travel Permit from Hong Kong / Macau':
$passporttypeseid = "C";
$passporttypeseidname = "港澳通行证";
break;
case 'Travel Permit from Taiwan':
$passporttypeseid = "G";
$passporttypeseidname = "台湾通行证";
break;
default :
$passporttypeseid = "B";
$passporttypeseidname = "护照";
break;
}
switch ($item->BPE_SEX){
case '100003':
$sex = 'F';
break;
case '100001':
$sex = 'M';
break;
}
$passportseno = str_replace(' ','',$item->BPE_Passport);
//添加一个判断护照号是否在黑名单
if(in_array($passportseno,$this->black_list)){
$reback["mes"] = "乘客为黑名单用户";
echo json_encode($reback);
return false;
}
if($passporttypeseid == 'G'){
$passengers .= ',{"passengerid":' . (++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '","gatValidDateEnd":"'.$item->BPE_PassExpdate.'","gatBornDate":"'.$item->BPE_BirthDate.'","sexCode":"'.$sex.'"}';
}else{
$passengers .= ',{"passengerid":' . ( ++$key) . ',"passengersename":"' . $passengersename . '","piaotype":"' . $piaotype . '","piaotypename":"' . $piaotypename . '","passporttypeseid":"' . $passporttypeseid . '","passporttypeseidname":"' . $passporttypeseidname . '","passportseno":"' . $passportseno . '","price":"1","zwcode":"' . $zwcode . '","zwname":"' . $zwname . '"}';
}
}
$passengers .= "]";
$passengers = substr($passengers, 1);
$passengers = "[" . $passengers;
if(empty($selectseat)){
$post_data=array(
"key"=>JUHE_TRAIN_API_KEY,
"user_orderid"=>$cold_sn,//自定义订单号
"train_date"=>substr($data["train"]->DepartureDate, 0, 10),
"is_accept_standing"=>"no",
"from_station_name"=>$data["train"]->DepartAirport_cn,
"from_station_code"=>$data["train"]->DepartAirport,
"to_station_code"=>$data["train"]->ArrivalAirport,
"to_station_name"=>$data["train"]->ArrivalAirport_cn,
"passengers"=>$passengers,
"checi"=>$data["train"]->FlightsNo
);
}else{
$post_data=array(
"key"=>JUHE_TRAIN_API_KEY,
"user_orderid"=>$cold_sn,//自定义订单号
"train_date"=>substr($data["train"]->DepartureDate, 0, 10),
"is_accept_standing"=>"no",
"choose_seats"=>$selectseat,
"from_station_name"=>$data["train"]->DepartAirport_cn,
"from_station_code"=>$data["train"]->DepartAirport,
"to_station_code"=>$data["train"]->ArrivalAirport,
"to_station_name"=>$data["train"]->ArrivalAirport_cn,
"passengers"=>$passengers,
"checi"=>$data["train"]->FlightsNo
);
}
//发起请求
/*$add_data = new stdClass();
$back_json = GetPost_http('http://op.juhe.cn/trainTickets/submit',$post_data);
$back_data = json_decode($back_json);
if(!$back_data->error_code){
$add_data->ordernumber = $back_data->result->orderid;
$reback["status"] = 1;
$reback["order"] = $back_data->result->orderid;
$reback["mes"] = "订单提交成功,等待回调";
}else{
$add_data->ordernumber=null;
$reback["mes"] = $back_json;
$add_data->status = "e";
}*/
//本地订单入库
$add_data->cold_sn = $cold_sn;
$add_data->returncode = $back_data->error_code;
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = $data['train']->FlightsNo;
$add_data->fromstationame = $data['train']->DepartAirport_cn;
$add_data->fromstationcode = $data['train']->DepartAirport;
$add_data->tostationame = $data['train']->ArrivalAirport_cn;
$add_data->tostationcode = $data['train']->ArrivalAirport;
$add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate));
$add_data->startime = date('H:i',strtotime($data['train']->DepartureTime));
$add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime));
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'juhe';
$add_data->isauto = $this->isauto;
print_r($add_data);
/*$this->train_system_model->add_orders($add_data);
echo json_encode($reback);
return false;*/
}
public function test_add(){
$add_data->cold_sn = '123123';
$add_data->returncode = '123123';
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = 'G89';
$add_data->fromstationame = '北京';
$add_data->fromstationcode = 'BJP';
$add_data->tostationame = '上海';
$add_data->tostationcode = 'SHH';
$add_data->startdate = '2019-02-09';
$add_data->startime = '14:00';
$add_data->endtime = '19:00';
$add_data->runtime = '300';
$add_data->channel = 'juhe';
$add_data->isauto = 3;
print_r($add_data);
$this->train_system_model->add_orders($add_data);
}
public function juhecallback(){
/*$data_post = $this->input->post();
if(empty($data_post)){
header("HTTP/1.1 404 Not Found");
exit('{"reason":"empty infos","status":"404"}');
}*/
//调试代码
$test_post = '{"data":"{\"from_station_name\":\"\u5317\u4eac\u5357\",\"from_station_code\":\"VNP\",\"to_station_name\":\"\u4e0a\u6d77\u8679\u6865\",\"to_station_code\":\"AOH\",\"train_date\":\"2019-05-08\",\"orderid\":\"JH155489661120411\",\"user_orderid\":\"488128168\",\"orderamount\":\"3496.00\",\"ordernumber\":\"EE79032518\",\"checi\":\"G43\",\"msg\":\"\u7ebf\u4e0a\u9000\u7968\u6210\u529f\",\"status\":\"7\",\"passengers\":[{\"passengerid\":1,\"passengersename\":\"WEISIGKOLIVER\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CAYLW9WTT\",\"price\":\"1748.0\",\"zwcode\":\"9\",\"zwname\":\"\u5546\u52a1\u5ea7\",\"ticket_no\":\"EE79032518103005A\",\"cxin\":\"03\u8f66\u53a2,05A\u5ea7\",\"reason\":0,\"refundTimeline\":[{\"time\":\"2019-04-11 11:46:10\",\"msg\":\"\u7ebf\u4e0a\u7533\u8bf7\u9000\u7968\"},{\"time\":\"2019-04-11 11:46:41\",\"msg\":\"\u7ebf\u4e0a\u9000\u7968\u6210\u529f\",\"detail\":{\"returnsuccess\":true,\"returnmoney\":\"1748\",\"returnfailid\":\"\",\"returnfailmsg\":\"\",\"returntype\":\"1\",\"ticket_no\":\"EE79032518103005A\",\"passengername\":\"WEISIGKOLIVER\",\"passporttypeseid\":\"B\",\"passportseno\":\"CAYLW9WTT\"}}],\"returntickets\":{\"returnsuccess\":true,\"returnmoney\":\"1748\",\"returntime\":\"2019-04-11 11:46:39\",\"returnfailid\":\"\",\"returnfailmsg\":\"\",\"returntype\":\"1\"}},{\"passengerid\":2,\"passengersename\":\"ALBERTSTEFANIECAROLINDOROTHEE\",\"piaotype\":\"1\",\"piaotypename\":\"\u6210\u4eba\u7968\",\"passporttypeseid\":\"B\",\"passporttypeseidname\":\"\u62a4\u7167\",\"passportseno\":\"CAYLM2751\",\"price\":\"1748.0\",\"zwcode\":\"9\",\"zwname\":\"\u5546\u52a1\u5ea7\",\"ticket_no\":\"EE79032518103005C\",\"cxin\":\"03\u8f66\u53a2,05C\u5ea7\",\"reason\":0,\"refundTimeline\":[{\"time\":\"2019-04-11 11:46:12\",\"msg\":\"\u7ebf\u4e0a\u7533\u8bf7\u9000\u7968\"}]}],\"refund_money\":\"1748.00\",\"sign\":\"f077215579ecd5c130d39b502c9bd055\"}"}';
$data_post["data"] = json_decode($test_post)->data;
log_message('error','聚合回调:'.json_encode($data_post));
$data = json_decode($data_post["data"]);
$update_data = new StdClass();
$update_data->OrderStatus = $data->status;
$update_data->ordernumber = $data->orderid;
$update_data->OrderTotleFee = $data->orderamount;
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->ElectronicOrderNumber = $data->ordernumber;
$update_data->reschedulecallback = '';
$update_data->ErrorMsg = $data->msg;
//如果返回2则发送出票请求
if($data->status == "1"){
$update_data->bookcallback = $data_post["data"];
}elseif($data->status == "2"){
$coach = array();
$seats = array();
$string = '';
$passagers = $data->passengers;
foreach($passagers as $item){
foreach(explode(',',$item->cxin) as $item_seat){
if(strpos($item_seat,'车厢')){
$item_seat = str_replace('车厢','',$item_seat);
array_push($coach,$item_seat);
}else{
$find = array('座上铺','座中铺','座下铺','座');
$replace = array(' upper',' middle',' lower','');
$item_seat = str_replace($find,$replace,$item_seat);
array_push($seats,$item_seat);
}
}
//对订票乘客进行存储
$data_passager->ordernumber = $data->orderid;
$data_passager->realname = $item->passengersename;
$data_passager->identitytype = $item->passporttypeseidname;
$data_passager->numberid = $item->passportseno;
$data_passager->ticketype = $item->piaotypename;
$data_passager->ticketprice = $item->price;
$data_passager->seatype = $item->zwname;
$data_passager->seatdetail = $item->cxin;
$data_passager->status = '4';
$this->train_system_model->add_passagers($data_passager);
}
//判断车厢是否唯一,如果不唯一的话,分成两个车厢
if(count(array_unique($coach)) == 1){
$onlycoach = array_unique($coach);
$string .= 'Coach '.$onlycoach[0].',';
}else{
foreach (array_unique($coach) as $item_coach){
$string .= 'Coach '.$item_coach.',';
}
}
$string .= 'Seat ';
foreach($seats as $item_seat){
$string .= $item_seat.',';
}
$seatinfo = substr($string,0,strlen($string)-1);
$update_data->seatsinfo = $seatinfo;
$post_data = array(
"key"=>JUHE_TRAIN_API_KEY,
"orderid"=>$data->orderid
);
$back_json = GetPost_http(JUHE_TRAIN_PAY_API,$post_data);
$update_data->bookcallback = $data_post["data"];
}elseif($data->status == "4"){
$add_train_order_data->TOC_Memo = $data->orderid." 聚合出票";
$add_train_order_data->TOC_COLD_SN = $data->user_orderid;
$add_train_order_data->TOC_TrainNumber = $data->checi;
$add_train_order_data->TOC_DepartureDate = $data->train_date;
$add_train_order_data->TOC_TicketCost = $data->orderamount;
$add_train_order_data->poundage = (count($data->passengers)*2)."";//手续费,每人两块,转换成字符串
$add_train_order_data->FOI_TrainNetOrderNo = $data->ordernumber;
$this->BIZ_train_model->add_train_payment($add_train_order_data);
$update_data->confirmcallback = $data_post["data"];
$this->BIZ_train_model->update_cold_planvei_sn($data->user_orderid);
}elseif($data->status=="7"){
//退票成功 写入TOC表
$newtime = "";//记录最新操作时间
$refund_passportseno = "";//退票人护照号
$refund_money = "";//退票金额
foreach ($data->passengers as $p) {
if(isset($p->returntickets)){
$refund_passportseno = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passportseno;
$refund_money = $p->refundTimeline[count($p->refundTimeline)-1]->detail->returnmoney;
//退票时还需要单独对对每个乘客存储回调信息
$passpager_info = new stdClass();
$passpager_info->returncallback = $data_post["data"];
$passpager_info->status = '7';
$passpager_info->ordernumber = $data->orderid;
$passpager_info->realname = $p->refundTimeline[count($p->refundTimeline)-1]->detail->passengername;
$passpager_info->numberid = $refund_passportseno;
print_r($passpager_info);
$this->train_system_model->update_passpager_info($passpager_info);
//添加退款记录
$add_train_order_data->TOC_COLD_SN = $data->user_orderid;
$add_train_order_data->TOC_Memo = $data->orderid." ".$refund_passportseno;
$add_train_order_data->ordernumber = $data->user_orderid;
$add_train_order_data->TOC_TrainNumber = $data->checi;
$add_train_order_data->TOC_DepartureDate = $data->train_date;
$add_train_order_data->TOC_TicketCost = -$refund_money;
$add_train_order_data->FOI_TrainNetOrderNo = null;//退票不用更新取票号,以此在模型里面判断是否为退票消息
$this->BIZ_train_model->add_train_payment($add_train_order_data);
}else{
//有可能提交了退票或者还没有退票
}
}
$update_data->returncallback = $data_post["data"];
}
//print_r($update_data);die();
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}
}

@ -0,0 +1,18 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class orders extends CI_Controller{
public function __construct(){
parent::__construct();
}
public function index(){
echo 'orders manager';
}
}

@ -0,0 +1,208 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class pages extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->model("train_system_model");
$this->load->model("BIZ_train_model");
$this->load->helper('train');
$this->order_status_msg = $this->config->item('train_order_status_msg');
}
public function index($coli_id = null){
if($this->session->userdata('dingname') == '' && $this->session->userdata('dingunionid') == ''){
dingLogin();
}
if($coli_id == null){
$cols_id = $this->input->post("ht_order");
}else{
$cols_id = $coli_id;
}
$list=new StdClass;
if(!empty($cols_id)){
$cold_sn = $this->BIZ_train_model->get_biz_cold($cols_id);
$list->wl = $this->BIZ_train_model->get_operatorInfo($cols_id);
$i=0;
$list->info=array();
foreach ($cold_sn as $v) {
$list->info[$i] = new StdClass;
$list->info[$i]->people = $this->BIZ_train_model->biz_people($v->COLD_SN);
$list->info[$i]->train = $this->BIZ_train_model->get_biz_foi($v->COLD_SN);
$list->info[$i]->status = $this->BIZ_train_model->get_biz_jol($v->COLD_SN);
$i++;
}
$list->cols_id=$cols_id;
}
//查询聚合余额
$back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php?key=79f03107b921ef31310bd40a1415c1cb");
$back_data = json_decode($back_data);
if(!empty($back_data->result)){
$list->balance = $back_data->result;
}else{
$list->balance = "NULL";
}
//print_r($list);
$this->load->view('common/header');
$this->load->view('homepage',$list);
$this->load->view('common/footer');
}
//系统列表页面
public function order_list(){
if($this->session->userdata('dingname') == '' && $this->session->userdata('dingunionid') == ''){
dingLogin();
}
$page_size = 10;
$page = $this->input->get("page");
$order = $this->input->get("order");
$web_code = $this->input->get("web_code");
$where = "1=1";//搜索条件
$page_parameter = "";//返回的分页条件参数
if(empty($page) or !is_numeric($page)){
$page=0;
}
if(!empty($order)){
$where = "BIZ_ConfirmLineInfo.COLI_ID='{$order}' OR InfoManager.dbo.trainsystem.ts_ordernumber='{$order}'";
//$where2 = "where BIZ_ConfirmLineInfo.COLI_ID='{$order}' OR JOL_JuheOrder='{$order}'";
$list["order"] = $order;
$page_parameter = "order=".$order;
}
if(!empty($web_code)){
$where = "BIZ_ConfirmLineInfo.COLI_WebCode='{$web_code}'";
$page_parameter = "web_code=".$web_code;
}
//获取订单数据
$data = $this->train_system_model->get_order($page_size,$page,$where);
//print_r($data);die();
$list["data"]=$data->list;
$this->load->library('pagination');
$config['base_url'] = site_url("/apps/trainsystem/pages/order_list?{$page_parameter}");
$config['total_rows'] = $data->count;
$config['per_page'] = $page_size;
$config['page_query_string']=TRUE;
$config['query_string_segment']="page";
$config['cur_tag_open'] = '<li class="active"><a href="#">';
$config['cur_tag_close'] = '</a></li>';
$config['first_tag_open']=$config['last_tag_open']=$config['next_tag_open']=$config['prev_tag_open']=$config['num_tag_open']="<li>";
$config['first_tag_close']=$config['last_tag_close']=$config['next_tag_close']=$config['prev_tag_close']=$config['num_tag_close']="</li>";
$this->pagination->initialize($config);
$list["page_link"]=$this->pagination->create_links();
foreach ($list["data"] as $key => $value) {
$value->info = $this->order_status_msg[$value->ts_status];//自定义说明信息;
}
$this->load->view('header');
$this->load->view('order_list',$list);
$this->load->view('footer');
}
//订单详情页面
public function order(){
if($this->session->userdata('dingname') == '' && $this->session->userdata('dingunionid') == ''){
dingLogin();
}
$ordernumber = $order=$this->input->get("order");
if(empty($ordernumber)){
exit('参数错误');
}
//根据订单号查询订单信息
$data = array();
$train_infos = $this->train_system_model->get_train_infos($ordernumber);
$passpager_detail = $this->train_system_model->get_passager_details($ordernumber);
//构造详情数组
$data['status'] = $train_infos->ts_status;
$data['ordernumber'] = $train_infos->ts_ordernumber;
$data['train_date'] = $train_infos->ts_startdate;
$data['checi'] = $train_infos->ts_checi;
$data['elecnumber'] = $train_infos->ts_elecnumber;
$data['from_station_name'] = $train_infos->ts_fromstationame;
$data['from_station_code'] = $train_infos->ts_fromstationcode;
$data['to_station_name'] = $train_infos->ts_tostationame;
$data['to_station_code'] = $train_infos->ts_tostationcode;
$data['start_time'] = $train_infos->ts_startime;
$data['arrive_time'] = $train_infos->ts_endtime;
$data['channel'] = $train_infos->ts_channel;
$data['msg'] = $train_infos->ts_errormsg;
$data['passengers'] = $passpager_detail;
//聚合订单可以查询实时数据
if($train_infos->ts_channel == 'juhe'){
$post_data=array(
"key"=>"79f03107b921ef31310bd40a1415c1cb",
"orderid"=>$train_infos->ts_ordernumber
);
$back_data = GetPost_http("http://op.juhe.cn/trainTickets/orderStatus",$post_data);
$data['train_date'] = '';
$data['start_time'] = json_decode($back_data)->result->start_time;
$data['arrive_time'] = json_decode($back_data)->result->arrive_time;
}
$this->load->view('bootstrap3/header');
$this->load->view('order',$data);
$this->load->view('bootstrap3/footer');
}
//退票页面
public function refund(){
if($this->session->userdata('dingname') == '' && $this->session->userdata('dingunionid') == ''){
dingLogin();
}
$ordernumber = $order=$this->input->get("order");
if(empty($ordernumber)){
exit('参数错误');
}
//根据订单号查询订单信息
$data = array();
$train_infos = $this->train_system_model->get_train_infos($ordernumber);
$passpager_detail = $this->train_system_model->get_passager_details($ordernumber);
//构造详情数组
$data['ordernumber'] = $train_infos->ts_ordernumber;
$data['cold_sn'] = $train_infos->ts_cold_sn;
$data['train_date'] = $train_infos->ts_startdate;
$data['checi'] = $train_infos->ts_checi;
$data['elecnumber'] = $train_infos->ts_elecnumber;
$data['from_station_name'] = $train_infos->ts_fromstationame;
$data['from_station_code'] = $train_infos->ts_fromstationcode;
$data['to_station_name'] = $train_infos->ts_tostationame;
$data['to_station_code'] = $train_infos->ts_tostationcode;
$data['start_time'] = $train_infos->ts_startime;
$data['arrive_time'] = $train_infos->ts_endtime;
$data['channel'] = $train_infos->ts_channel;
$data['msg'] = $train_infos->ts_errormsg;
$data['return_json'] = $train_infos->ts_returncallback;
$data['passengers'] = $passpager_detail;
//print_r($data);
$this->load->view('header');
$this->load->view('refund',$data);
$this->load->view('footer');
}
public function export(){
if($this->session->userdata('dingname') == '' && $this->session->userdata('dingunionid') == ''){
dingLogin();
}
$this->load->view('header');
$this->load->view('export');
$this->load->view('footer');
}
}

@ -0,0 +1,153 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class returnorders extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->helper('train');
$this->load->model("train_system_model");
$this->load->model("Sendmail_model");
$this->load->model('BIZ_train_model');
}
public function index(){
echo 'return tickets';
}
public function returntickets(){
//第三方订单号(为了避免一个子订单乘客分开出票而产生错误)
$ordernumber = $this->input->get_post('ordernumber');
//护照姓名
$passportname = $this->input->get_post('passportname');
//护照号
$passportno = $this->input->get_post('passportno');
if(!$ordernumber || !$passportname || !$passportno){
header("HTTP/1.1 404 Not Found");
exit('{"reason":"传参错误","status":"404"}');
}
//网前提交的姓名没有做处理
$passportname = chk_sp_name($passportname);
$ticket_data = $this->train_system_model->ticketfrom($ordernumber);
$passenger_data = $this->train_system_model->get_passenger_info($ordernumber,$passportname,$passportno);
$channel = $ticket_data->ts_channel;
if(empty($passenger_data)){
exit('乘客信息为空无法退票');
}
switch ($channel){
case 'juhe':
$this->juheModel($ticket_data,$passenger_data);
break;
case 'ctrip':
$this->ctripModel($ticket_data,$passenger_data);
break;
}
}
function juheModel($ticket_data,$data){
$post_data = array(
"key"=>JUHE_TRAIN_API_KEY,
"orderid"=>$ticket_data->ts_ordernumber
);
$back_json = GetPost_http(JUHE_TRAIN_STATUS_API,$post_data);
$back_detail_data = json_decode($back_json);
//print_r($back_data);die();
foreach($back_detail_data->result->passengers as $items){
if($items->passengersename == $data->tst_realname && $items->passportseno == $data->tst_numberid){
$ticket_no = $items->ticket_no;
}
}
//发起退票
$post_data1 = array(
"key"=>JUHE_TRAIN_API_KEY,
"orderid"=>$ticket_data->ts_ordernumber,
"tickets"=>'[{"ticket_no":"'.$ticket_no.'","passengername":"'.$data->tst_realname.'","passporttypeseid":"'.strexchangeid($data->tst_ticketype).'","passportseno":"'.$data->tst_numberid.'"}]',
);
//print_r($post_data1);die();
$back_json = GetPost_http(JUHE_TRAIN_REFUND_API,$post_data1);
//print_r($post_data1);
log_message('error','聚合退票:'.$ticket_data->ts_ordernumber.'|'.$back_json);
$back_data = json_decode($back_json);
if($back_data->error_code == '0'){
//退票成功后发送一封邮件
$fromName = 'trainsystem';
$fromEmail = 'cyc@hainatravel.com';
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($ticket_data->ts_cold_sn);
$coli_id = $coli_id['0']->COLI_ID;
$info = $this->BIZ_train_model->get_operatorInfo($coli_id);
$toName = $info[0]->OPI_Name;
$toEmail = $info[0]->OPI_Email;
$subject = '退票请求';
$body = $back_detail_data->result->ordernumber.' 提出退票,乘客:'.$data->tst_realname.', '.$back_detail_data->result->start_time.' '.$back_detail_data->result->checi;
$this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
echo '{"reason":"退票成功","status":"200"}';
}else{
header("HTTP/1.1 404 Not Found");
echo '{"reason":"退票失败","status":"404"}';
}
}
function ctripModel($ticket_data,$passenger_data){
$PostData = array();
$TimeStamp = time();
$time = date('Y-m-d H:i:s',$TimeStamp);
$PostData['Authentication']->TimeStamp = $time;
$PostData['Authentication']->ServiceName = 'order.ticketReturn';
$PostData['Authentication']->PartnerName = ORDERUSER;
$MessageIdentity = md5($time.'order.ticketReturn'.ORDERKEY);
$PostData['Authentication']->MessageIdentity = $MessageIdentity;
$PostData['TrainOrderService']->contactName = '陈宇超';
$PostData['TrainOrderService']->contactMobile = '18877381547';
$PostData['TrainOrderService']->OrderNumber = $ticket_data->ts_ordernumber;
$PostData['TrainOrderService']->OperatorType = '0';
$PostData['TrainOrderService']->TicketInfo = '';
$PostData['TrainOrderService']->TicketInfo = array();
$i = 0;
$PostData['TrainOrderService']->TicketInfo[$i]['eOrderNumber'] = $passenger_data->ts_elecnumber;
if($passenger_data->tst_ticketype == '儿童票'){
$PostData['TrainOrderService']->TicketInfo[$i]['eOrderType'] = '2';
}else{
$PostData['TrainOrderService']->TicketInfo[$i]['eOrderType'] = '1';
}
$PostData['TrainOrderService']->TicketInfo[$i]['seatNumber'] = $passenger_data->tst_seatdetail;
$PostData['TrainOrderService']->TicketInfo[$i]['passportName'] = $passenger_data->tst_realname;
$PostData['TrainOrderService']->TicketInfo[$i]['passport'] = $passenger_data->tst_numberid;
$PostData['TrainOrderService']->TicketInfo[$i]['realName'] = $passenger_data->tst_realname;
//发起退票请求
$Url = 'http://m.ctrip.com/restapi/soa2/11009/json/PartnerReturnTicket';
$ResponseJson = GetPost_http($Url,json_encode($PostData),'POST');
$ResponseData = json_decode($ResponseJson);
if($ResponseData->Status == 'SUCCESS'){
$fromName = 'trainsystem';
$fromEmail = 'cyc@hainatravel.com';
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($ticket_data->ts_cold_sn);
$coli_id = $coli_id['0']->COLI_ID;
$info = $this->BIZ_train_model->get_operatorInfo($coli_id);
$toName = $info[0]->OPI_Name;
$toEmail = $info[0]->OPI_Email;
$subject = '退票请求';
$body = '乘客:'.$data->tst_realname.' 对订单:'.$data->ts_ordernumber.'发起退票请求!!!';
$this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
echo '{"reason":"退票成功","status":"200"}';
}else{
header("HTTP/1.1 404 Not Found");
echo '{"reason":"退票失败","status":"404"}';
}
}
}

@ -0,0 +1,89 @@
<?php
//途牛接口创建请求签名
function create_sign(){
$time = date('Y-m-d H:i:s',time());
$secretKey = 'qvHMJVywEQqsd4EneHQl';
$id = 'retailId25';
$timeStamp = 'timestamp'.$time;
$sign = $secretKey.$id.'apiKey'.TUNIU_KEY.$timeStamp.$secretKey;
return strtoupper(md5($sign));
}
//证件名称转id
function strexchangeid($name){
if($name != ''){
switch ($name){
case '二代身份证':
return '1';
break;
case '护照':
return 'B';
break;
case '台湾通行证':
return 'G';
break;
case '港澳通行证':
return 'C';
break;
default :
return 'B';
break;
}
}
}
//特殊字符转换
function chk_sp_name($name){
$name = str_replace(
array('á', 'é', 'è', 'í', 'ó', 'ú', '?', 'á', 'é', 'í', 'ó', 'ú', '?',' ','/',' ',','),
array('a', 'e', 'e', 'i', 'o', 'u', 'n', 'A', 'E', 'I', 'O', 'U', 'N','','','',''),
$name
);
return substr(strtoupper($name),0,30);
}
//发送请求函数
function GetPost_http($url, $data = '',$format='') {
if(!isset($_SERVER['HTTP_USER_AGENT'])){
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400';
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
if($format == 'json'){
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
}
}
curl_setopt($curl, CURLOPT_TIMEOUT, 40); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 40000); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
$errno = curl_errno($curl);
if ($errno !== 0) {
log_message('error', 'ctripost'.$errno.curl_error($curl));
}
curl_close($curl); //关闭CURL会话
return $tmpInfo; //返回数据
}
function getDingSignature(){
$timestamp = time();
$signature = hash_hmac('sha256',$timestamp,'emCK5vYFJc-HtMNNgbyGpmbYaNyPkNXn_ayoFd6q2m6rpljhxBn2JQEx9gy8H6DQ',true);
$signature = base64_encode($signature);
return $signature;
}
function dingLogin(){
redirect('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=dingoaystremzlahfew1tb&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=http://www.mycht.cn/info.php/apps/trainsystem/api/check_login');
}
?>

@ -0,0 +1,59 @@
<?php
class Des
{
function encrypt($string,$key)
{
$size = mcrypt_get_block_size('des','ecb');
//$string = mb_convert_encoding($string, 'GBK', 'UTF-8');
$string = $this->pkcs5_pad($string, $size);
$td = mcrypt_module_open('des', '', 'ecb', '');
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $string);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function decrypt($string,$key)
{
$string = base64_decode($string);
$td = mcrypt_module_open('des', '', 'ecb', '');
//使用MCRYPT_DES算法,cbc模式
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
@mcrypt_generic_init($td, $key, $iv);
//初始处理
$decrypted = mdecrypt_generic($td, $string);
//解密
mcrypt_generic_deinit($td);
//结束
mcrypt_module_close($td);
$result = $this->pkcs5_unpad($decrypted);
//$result = mb_convert_encoding($result, 'UTF-8', 'GBK');
return $result;
}
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
}
?>

@ -0,0 +1,492 @@
<?php
class BIZ_train_model extends CI_Model {
function __construct() {
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
$this->INFO = $this->load->database('INFO', TRUE);
}
//获取订单信息
function biz_order_detail($cold_sn) {
$sql = "
SELECT TOP 1 bfoi.FOI_SN
,bfoi.FOI_COLD_SN
,bfoi.DepartAirport
,bfoi.ArrivalAirport
,bfoi.FlightsNo
,bfoi.Aircraft
,bfoi.DepartureDate
,bfoi.FOI_SelectedSeat
,(
SELECT TOP 1 TRS_StationCN
FROM TrainStation
WHERE TRS_Code = DepartAirport
and ISNULL(TRS_StationCN,'')<>''
) AS DepartAirport_cn
,(
SELECT TOP 1 TRS_StationCN
FROM TrainStation
WHERE TRS_Code = ArrivalAirport
and ISNULL(TRS_StationCN,'')<>''
) AS ArrivalAirport_cn,
FOI_TrainNetOrderNo,
bfoi.adultcost,
bfoi.childcost,
ArrivalTime,
DepartureTime
FROM BIZ_FlightsOrderInfo bfoi
WHERE bfoi.FOI_COLD_SN = ?
";
$query = $this->HT->query($sql, $cold_sn);
if ($query->num_rows() > 0) {
return $query->row();
} else {
return false;
}
}
//传入一组BPE_SN获取乘客信息
function in_bpesn_people_info($bpe_sn){
$sql = "
SELECT bbp.BPE_SN
,bbp.BPE_FirstName
,bbp.BPE_MiddleName
,bbp.BPE_LastName
,bbp.BPE_GuestType
,bbp.BPE_Passport
,bbp.BPE_PassportType
,bbp.BPE_SEX
,bbp.BPE_BirthDate
,bbp.BPE_PassExpdate
FROM BIZ_BookPeople bbp
WHERE BPE_SN in(".$bpe_sn.")
";
$query = $this->HT->query($sql);
return $query->result();
}
//传入主订单翰特订单号COLI_ID161014006M获取子订单中火车订单的COLD_SN
function get_biz_cold($cols_id) {
$sql = "SELECT COLD_SN
FROM BIZ_ConfirmLineDetail bcld
WHERE bcld.COLD_COLI_SN=(
SELECT COLI_SN FROM BIZ_ConfirmLineInfo bcli WHERE bcli.COLI_ID=?)
AND bcld.DeleteFlag=0 AND bcld.COLD_ServiceType='2'";
$query = $this->HT->query($sql, $cols_id);
return $query->result();
}
//传入子订单COLD_SN获取子订单对应的乘客信息
function biz_people($cold_sn) {
$sql = "
SELECT bbp.BPE_SN
,bbp.BPE_FirstName
,bbp.BPE_MiddleName
,bbp.BPE_LastName
,bbp.BPE_GuestType
,bbp.BPE_Passport
,bbp.BPE_PassportType
FROM BIZ_BookPeople bbp
WHERE EXISTS(
SELECT TOP 1 1
FROM BIZ_BookPeopleList bbpl
WHERE bbpl.BPL_BPE_SN = bbp.BPE_SN
AND bbpl.BPL_COLD_SN = ?
)
";
$query = $this->HT->query($sql, $cold_sn);
return $query->result();
}
//传入COLD_SN获取火车车次等信息
function get_biz_foi($cold_sn) {
$sql = "
SELECT FOI_COLD_SN,
FlightsNo,
Cabin,
Aircraft,
DepartureCity,
DepartAirport,
ArrivalAirport,
ArrivalCity,
DepartureDate,
DepartureTime,
ArrivalTime,
adultcost,
FOI_SelectedSeat,
FOI_TrainNetOrderNo,
FOI_SaleDate,
(
SELECT TOP 1 TRS_StationCN
FROM TrainStation
WHERE TRS_Code = DepartAirport
) AS DepartAirport_cn
,(
SELECT TOP 1 TRS_StationCN
FROM TrainStation
WHERE TRS_Code = ArrivalAirport
) AS ArrivalAirport_cn
FROM BIZ_FlightsOrderInfo
WHERE FOI_COLD_SN = ?
";
$query = $this->HT->query($sql, $cold_sn);
return $query->result();
}
//传入COLD_SN获取BIZ_JuheOrderList是否存在此子订单用来判断是否提交过给聚合
function get_biz_jol($cold_sn) {
$sql = "SELECT top 1 JOL_SN FROM BIZ_JuheOrderList WHERE JOL_COLD_SN= ?";
$query = $this->HT->query($sql, $cold_sn);
if($query->num_rows() == 0){
return true;
}else{
return false;
}
}
//传入COLI_ID获取外联名
function get_operatorInfo($cols_id) {
$sql = "
SELECT
Name,
OPI_Name,
case when OPI_SN=375 then OPI_EmailBak else OPI_Email end as OPI_Email,
tel,
Mobile,
Email
FROM OperatorInfo
left join agenter_user
on AU_OPI_SN = OPI_SN
WHERE OPI_SN = (
SELECT COLI_OPI_ID
FROM BIZ_ConfirmLineInfo bcli
WHERE bcli.COLI_ID = ?
)
and agenter in ('cht', 'train_vac', 'jp', 'train_it', 'vc', 'ru')
";
$query = $this->HT->query($sql, $cols_id);
return $query->result();
}
//新增支付记录
public function add_train_payment($data){
//主表ID下面两个地方用到所以先筛选出来不知道能不能通过合并提高效率
$sql="SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail WHERE COLD_SN=?";
$query=$this->HT->query($sql,$data->TOC_COLD_SN);
$query=$query->result();
$CCSN=$query[0]->COLD_COLI_SN;
//删除多余支付记录
$sql = "delete from BIZ_TrainOrderCost where TOC_COLI_SN = '{$CCSN}' and TOC_TicketCost is null";
$query=$this->HT->query($sql);
if(empty($data->FOI_TrainNetOrderNo)){
//退票
$sql="IF NOT EXISTS(
SELECT TOP 1 1 FROM BIZ_TrainOrderCost
WHERE TOC_COLD_SN = ? AND TOC_Memo like ?
)
INSERT INTO BIZ_TrainOrderCost(
TOC_Memo,
TOC_CreateDate,
TOC_COLI_SN,
TOC_COLD_SN,
TOC_TrainNumber,
TOC_DepartureDate,
TOC_TicketCost,
TOC_WL
)
VALUES(?,getdate(),{$CCSN},?,?,?,?,(SELECT COLI_OPI_ID FROM BIZ_ConfirmLineInfo WHERE COLI_SN={$CCSN}))";
$query = $this->HT->query($sql,array($data->TOC_COLD_SN,"%".$data->TOC_Memo."%","退票费 ".$data->TOC_Memo,$data->TOC_COLD_SN,$data->TOC_TrainNumber,$data->TOC_DepartureDate,$data->TOC_TicketCost));
}else{
//出票
//BIZ_FlightsOrderInfo.FOI_TrainNetOrderNo,更新取票号
/*
UPDATE BIZ_FlightsOrderInfo
SET
FOI_TrainNetOrderNo=?
WHERE
FOI_COLD_SN=?
*/
$sql="IF EXISTS(
select * from BIZ_FlightsOrderInfo where FOI_COLD_SN = '$data->TOC_COLD_SN' and (FOI_TrainNetOrderNo is null or FOI_TrainNetOrderNo = '' or FOI_TrainNetOrderNo = '$data->FOI_TrainNetOrderNo'))
UPDATE BIZ_FlightsOrderInfo
SET
FOI_TrainNetOrderNo='$data->FOI_TrainNetOrderNo'
WHERE
FOI_COLD_SN='$data->TOC_COLD_SN'
ELSE
IF NOT EXISTS(select * from BIZ_FlightsOrderInfo where FOI_COLD_SN = '$data->TOC_COLD_SN' and FOI_TrainNetOrderNo LIKE '%$data->FOI_TrainNetOrderNo%')
UPDATE BIZ_FlightsOrderInfo
SET
FOI_TrainNetOrderNo=(select FOI_TrainNetOrderNo from BIZ_FlightsOrderInfo where FOI_COLD_SN = '$data->TOC_COLD_SN') + '&' + '$data->FOI_TrainNetOrderNo'
WHERE
FOI_COLD_SN='$data->TOC_COLD_SN'";
$this->HT->query($sql);
$sql="IF NOT EXISTS(
SELECT TOP 1 1 FROM BIZ_TrainOrderCost
WHERE TOC_COLD_SN = ? AND TOC_Memo like ?
)
INSERT INTO BIZ_TrainOrderCost(
TOC_Memo,
TOC_CreateDate,
TOC_COLI_SN,
TOC_COLD_SN,
TOC_TrainNumber,
TOC_DepartureDate,
TOC_TicketCost,
TOC_WL,
TOC_OtherCost
)
VALUES(?,getdate(),{$CCSN},?,?,?,?,(SELECT COLI_OPI_ID FROM BIZ_ConfirmLineInfo WHERE COLI_SN={$CCSN}),null),(?,getdate(),{$CCSN},?,?,?,?,(SELECT isnull(COLI_OPI_ID,29) FROM BIZ_ConfirmLineInfo WHERE COLI_SN={$CCSN}),1)";
$query = $this->HT->query($sql,array($data->TOC_COLD_SN,"%".$data->TOC_Memo."%",$data->TOC_Memo,$data->TOC_COLD_SN,$data->TOC_TrainNumber,$data->TOC_DepartureDate,$data->TOC_TicketCost,$data->TOC_Memo." 手续费",$data->TOC_COLD_SN,$data->TOC_TrainNumber,$data->TOC_DepartureDate,$data->poundage));
}
return $query;
}
public function update_cold_planvei_sn($cold_sn){
$sql = "update BIZ_ConfirmLineDetail set COLD_PlanVEI_SN=30427 where COLD_SN = ?";
$query = $this->HT->query($sql,$cold_sn);
}
//自动获取符合自动出票要求的订单的coli_sn
function auto_check_ticket(){
$sql = "SELECT distinct top 20 COLD_SN ,coli_id,COLD_SPFS,COLI_State
FROM BIZ_ConfirmLineInfo bcli
inner join BIZ_ConfirmLineDetail bcld on COLD_COLI_SN=COLI_SN
LEFT JOIN BIZ_GroupAccountInfo bgai
ON bcli.COLI_SN = bgai.GAI_COLI_SN
WHERE bcli.COLI_ServiceType = '2'
AND bcli.COLI_State in ('11','13','8','63')
AND bcli.COLI_WebCode in ('cht', 'JP', 'train_it', 'VC', 'train_ru','GM-Train','SHT','CT')
AND (bcli.COLI_Price - bgai.GAI_SQJE) <= 20
AND (bcli.COLI_Price - bgai.GAI_SQJE) >= 0
AND bcli.DeleteFlag = 0
AND bgai.DeleteFlag = 0
AND bcld.DeleteFlag = 0
--AND COLD_SPFS<=2
AND NOT EXISTS (
SELECT TOP 1 1
FROM InfoManager.dbo.trainsystem
WHERE ts_cold_sn = COLD_SN
)
and (((COLI_State<>8 and COLI_State<>63) and COLD_StartDate < CONVERT(varchar(100),GETDATE()+29,23)) or ((COLI_State=8 or COLI_State=63) and COLD_StartDate between CONVERT(varchar(100),GETDATE()+29,23) and CONVERT(varchar(100),GETDATE()+29,23)+' 23:59'))
";
$query = $this->HT->query($sql);
return $query->result();
}
public function get_saletime($station){
$sql = 'select TST_saletime from TrainSaleTime where TST_station_cn = ?';
$query = $this->HT->query($sql,$station);
return $query->row();
}
//筛选符合发送邮件的订单
public function auto_sendmail(){
$sql = "SELECT
ts_cold_sn,
ts_ordernumber,
ts_status,
ts_isauto
FROM
trainsystem
left join
Tourmanager.dbo.BIZ_ConfirmLineDetail bcld
on
bcld.COLD_SN = ts_cold_sn
left join
Tourmanager.dbo.BIZ_ConfirmLineInfo bcli
on
bcld.COLD_COLI_SN = bcli.COLI_SN
WHERE
ts_sendmail is null
AND
ts_isauto = 1
AND
ts_status != '0'
AND
ts_status != 'e'
AND
ts_status != '2'
AND
bcli.COLI_WebCode = 'cht'
";
$query = $this->INFO->query($sql);
return $query->result();
}
// 传入 cold_sn 获取订单号
public function cold_sn_get_coli_id($cold_sn){
$sql="SELECT COLI_ID FROM BIZ_ConfirmLineInfo
WHERE COLI_SN = (
SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail WHERE COLD_SN = ?
)
";
$query = $this->HT->query($sql,array($cold_sn));
return $query->result();
}
//邮件使用
function get_user_info($jh_order){
$sql = "select
*
from
Tourmanager.dbo.BIZ_ConfirmLineDetail
where
COLD_SN = (
select
top 1 ts_cold_sn
from
trainsystem
where
ts_ordernumber = ?
)";
$query = $query = $this->INFO->query($sql, $jh_order);
if ($query->num_rows() > 0) {
return $query->row();
} else {
return false;
}
}
//用于自动出票,传入主订单翰特订单号 COLI_ID ,获取客人的姓名和邮箱
public function get_guest_info($COLI_ID){
$sql = "SELECT GUT_FirstName,GUT_LastName,GUT_Email FROM BIZ_GUEST bg WHERE bg.GUT_SN =
( SELECT COLI_GUT_SN FROM BIZ_ConfirmLineInfo bcli WHERE bcli.COLI_ID = ?)
";
$query = $this->HT->query($sql,$COLI_ID);
return $query->result();
}
//获取paypal付款记录
function get_paypal($coli_id){
$sql = "select top 1 GAI_SQJE from BIZ_GroupAccountInfo where GAI_COLI_ID = ?";
$query = $query = $this->HT->query($sql, $coli_id);
if ($query->num_rows() > 0) {
return $query->row();
} else {
return false;
}
}
//通过 JOL_JuheOrder 获取 BIZ_JuheOrderList 获取聚合订单详情
public function get_biz_jol_info($cold_sn,$jol_jo){
$sql = "SELECT top 1
*
FROM trainsystem
WHERE ts_cold_sn = ? AND ts_ordernumber = ?
";
$query = $this->INFO->query($sql,array($cold_sn,$jol_jo));
return $query->row();
}
//获取跟踪号
public function getTrackingCode(){
include('c:/database_conn.php');
$connection = array(
'UID' => $db['HT']['username'],
'PWD' => $db['HT']['password'],
'Database' => 'tourmanager',
'ConnectionPooling' => 1,
'CharacterSet' => 'utf-8',
'ReturnDatesAsStrings' => 1
);
$conn = sqlsrv_connect($db['HT']['hostname'], $connection);
$stmt = sqlsrv_query($conn, "exec dbo.SP_getTrackingCode;");
if ($stmt === false) {
echo "Error in executing statement 3.\n";
die(print_r(sqlsrv_errors(), true));
}else{
//存储过程中每一个select都会产生一个结果集取某个结果集就需要从第一个移动到需要的那个结果集
//如果结果集为空就移到下一个
while (sqlsrv_has_rows($stmt) !== TRUE) {
sqlsrv_next_result($stmt);
}
$result_object = array();
while ($row = sqlsrv_fetch_object($stmt)) {
$result_object[] = $row;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
return($result_object[0]->TrackingCode);
}
}
//接收聚合订单号获取翰特订单号即BIZ_ConfirmLineInfo的COLI_ID
function jh_order_get_coli_id($ordernumber){
$sql="SELECT
COLI_ID,COLI_SN,COLI_OPI_ID
FROM
BIZ_ConfirmLineInfo bcli
WHERE
bcli.COLI_SN=
(SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail bcld WHERE bcld.COLD_SN=
(SELECT ts_cold_sn FROM InfoManager.dbo.trainsystem WHERE ts_ordernumber = ? and ts_channel = 'juhe'))
";
$query = $this->HT->query($sql, $ordernumber);
return $query->result();
}
//跟踪号与订单关联
public function linkTrackingCode($coli_sn,$TrackCode){
include('c:/database_conn.php');
$connection = array(
'UID' => $db['HT']['username'],
'PWD' => $db['HT']['password'],
'Database' => 'tourmanager',
'ConnectionPooling' => 1,
'CharacterSet' => 'utf-8',
'ReturnDatesAsStrings' => 1
);
$conn = sqlsrv_connect($db['HT']['hostname'], $connection);
$stmt = sqlsrv_query($conn, "exec dbo.SP_recordTrackingCode '$coli_sn', '$TrackCode'");
if ($stmt === false) {
echo "Error in executing statement 3.\n";
die(print_r(sqlsrv_errors(), true));
}else{
//存储过程中每一个select都会产生一个结果集取某个结果集就需要从第一个移动到需要的那个结果集
//如果结果集为空就移到下一个
/*
while (sqlsrv_has_rows($stmt) !== TRUE) {
sqlsrv_next_result($stmt);
}
$result_object = array();
while ($row = sqlsrv_fetch_object($stmt)) {
$result_object[] = $row;
}
*/
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
}
}
//通过COLI_ID获取团名 即 GroupInfo的GRI_No
function get_gri_no($coli_id){
$sql="SELECT GRI_No FROM GroupInfo
WHERE GRI_SN=(
SELECT COLI_GRI_SN FROM BIZ_ConfirmLineInfo WHERE COLI_ID=?
)
";
$query = $this->HT->query($sql, $coli_id);
return $query->result();
}
//修改
function update_biz_jol($where,$data){
return $this->INFO->where($where)->update("trainsystem", $data);
}
function delete_other(){
$sql = "delete from trainsystem where ts_id = '860'";
$query = $this->INFO->query($sql);
}
}

@ -0,0 +1,157 @@
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Sendmail_model extends CI_Model {
function __construct()
{
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
}
function SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body)
{
$time = date('Y-m-d H:i:s',time());
if($this->validEmail($toEmail))
{
$data = array(
"M_ReplyToName" => $fromName, //回复人
"M_ReplyToEmail" => $fromEmail, //回复地址
"M_ToName" => $toName, //收件人名
"M_ToEmail" => $toEmail, //收件邮件地址
"M_Title" => $subject, //主题
"M_Body" => $body, //邮件正文
"M_Web" => "CHT", //所属站点
"M_FromName" => "Chinahighlights.com", //站点名称
"M_State" => 0,
"M_AddTime" => $time
);
$this->HT->insert('Email_AutomaticSend',$data);
$m_sn = $this->HT->insert_id('Email_AutomaticSend');
return $m_sn;
}else{
return FALSE;
}
}
function SendMailToTabletest($fromName,$fromEmail,$toName,$toEmail,$subject,$body)
{
$time = date('Y-m-d H:i:s',time());
if($this->validEmail($toEmail))
{
$data = array(
"M_ReplyToName" => $fromName, //回复人
"M_ReplyToEmail" => $fromEmail, //回复地址
"M_ToName" => $toName, //收件人名
"M_ToEmail" => $toEmail, //收件邮件地址
"M_Title" => $subject, //主题
"M_Body" => $body, //邮件正文
"M_Web" => "CHT", //所属站点
"M_FromName" => "Chinahighlights.com", //站点名称
"M_State" => 0,
"M_AddTime" => $time,
);
$this->HT->insert('Email_AutomaticSend',$data);
$m_sn = $this->HT->insert_id('Email_AutomaticSend');
return $m_sn;
}else{
return FALSE;
}
}
public function validEmail($email){
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex){
$isValid = false;
}else{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
$domain = str_replace(' ','',$domain);
if ($localLen < 1 || $localLen > 64){
// local part length exceeded
$isValid = false;
}else if ($domainLen < 1 || $domainLen > 255){
// domain part length exceeded
$isValid = false;
}else if ($local[0] == '.' || $local[$localLen-1] == '.'){
// local part starts or ends with '.'
$isValid = false;
}else if (preg_match('/\\.\\./', $local)){
// local part has two consecutive dots
$isValid = false;
}else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)){
// character not valid in domain part
$isValid = false;
}else if (preg_match('/\\.\\./', $domain)){
// domain part has two consecutive dots
$isValid = false;
}else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',str_replace("\\\\","",$local))){
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/',str_replace("\\\\","",$local))){
$isValid = false;
}
}
/*
不检查是否有DNS解析
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))){
// domain not found in DNS
$isValid = false;
}
*/
}
return $isValid;
}
public function validEmailtest($email){
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex){
$isValid = false;
}else{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
$domain = str_replace(' ','',$domain);
print_r(preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain));
if ($localLen < 1 || $localLen > 64){
// local part length exceeded
$isValid = false;
}else if ($domainLen < 1 || $domainLen > 255){
// domain part length exceeded
$isValid = false;
}else if ($local[0] == '.' || $local[$localLen-1] == '.'){
// local part starts or ends with '.'
$isValid = false;
}else if (preg_match('/\\.\\./', $local)){
// local part has two consecutive dots
$isValid = false;
}else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)){
// character not valid in domain part
$isValid = false;
}else if (preg_match('/\\.\\./', $domain)){
// domain part has two consecutive dots
$isValid = false;
}else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',str_replace("\\\\","",$local))){
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(\\\\"|[^"])+"$/',str_replace("\\\\","",$local))){
$isValid = false;
}
}
/*
不检查是否有DNS解析
if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))){
// domain not found in DNS
$isValid = false;
}
*/
}
return $isValid;
}
}

@ -0,0 +1,267 @@
<?php
class train_system_model extends CI_Model {
private $order="";//订单号
function __construct() {
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
$this->INFO = $this->load->database('INFO', TRUE);
}
public function get_order($pagesize=2,$page=0,$where="1=1"){
$data=new StdClass();
//获取总条数
$sql="SELECT COUNT(*) AS count FROM InfoManager.dbo.trainsystem
LEFT JOIN
BIZ_ConfirmLineInfo
ON
BIZ_ConfirmLineInfo.COLI_SN=(SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail WHERE COLD_SN = InfoManager.dbo.trainsystem.ts_cold_sn)
WHERE
{$where}
";
$query = $this->HT->query($sql);
$count=$query->result();
$data->count=$count[0]->count;
$sql="SELECT TOP {$pagesize} InfoManager.dbo.trainsystem.ts_subtime,
InfoManager.dbo.trainsystem.ts_cold_sn,
InfoManager.dbo.trainsystem.ts_ordernumber,
InfoManager.dbo.trainsystem.ts_status,
InfoManager.dbo.trainsystem.ts_errormsg,
InfoManager.dbo.trainsystem.ts_fromstationame,
InfoManager.dbo.trainsystem.ts_tostationame,
InfoManager.dbo.trainsystem.ts_checi,
InfoManager.dbo.trainsystem.ts_orderamount,
InfoManager.dbo.trainsystem.ts_isauto,
InfoManager.dbo.trainsystem.ts_sendmail,
InfoManager.dbo.trainsystem.ts_m_sn,
InfoManager.dbo.trainsystem.ts_channel,
BIZ_ConfirmLineInfo.COLI_ID,
BIZ_ConfirmLineInfo.COLI_WebCode
FROM
InfoManager.dbo.trainsystem
LEFT JOIN
BIZ_ConfirmLineInfo
ON
BIZ_ConfirmLineInfo.COLI_SN=(SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail WHERE COLD_SN = InfoManager.dbo.trainsystem.ts_cold_sn)
WHERE
InfoManager.dbo.trainsystem.ts_id NOT IN(
SELECT
TOP {$page} ts_id
FROM
InfoManager.dbo.trainsystem
LEFT JOIN
BIZ_ConfirmLineInfo
ON
BIZ_ConfirmLineInfo.COLI_SN=(SELECT COLD_COLI_SN FROM BIZ_ConfirmLineDetail WHERE COLD_SN = InfoManager.dbo.trainsystem.ts_cold_sn)
where {$where}
ORDER BY ts_subtime DESC)
AND
{$where}
ORDER BY InfoManager.dbo.trainsystem.ts_subtime DESC";
$query = $this->HT->query($sql);
$data->list=$query->result();
return $data;
}
//获取指定订单信息
public function get_passager_details($ordernumber){
$sql = "select * from trainsystem_tickets where tst_ordernumber = '{$ordernumber}'";
$query = $this->INFO->query($sql);
return $query->result();
}
//获取火车信息
public function get_train_infos($ordernumber){
$sql = "select * from trainsystem where ts_ordernumber = '{$ordernumber}'";
$query = $this->INFO->query($sql);
return $query->row();
}
public function update_passpager_status($status,$passagerid){
$sql = "update trainsystem_tickets set tst_status = '{$status}' where tst_id = '{$passagerid}'";
$query = $this->INFO->query($sql);
}
//添加订单
function add_orders($data){
$sql="
INSERT INTO trainsystem(
ts_cold_sn,
ts_ordernumber,
ts_subtime,
ts_returncode,
ts_status,
ts_errormsg,
ts_fromstationame,
ts_fromstationcode,
ts_tostationame,
ts_tostationcode,
ts_startdate,
ts_startime,
ts_endtime,
ts_runtime,
ts_checi,
ts_channel,
ts_isauto
)
VALUES(
'{$data->cold_sn}',
'{$data->ordernumber}',
getdate(),
'{$data->returncode}',
'{$data->status}',
'{$data->errormsg}',
'{$data->fromstationame}',
'{$data->fromstationcode}',
'{$data->tostationame}',
'{$data->tostationcode}',
'{$data->startdate}',
'{$data->startime}',
'{$data->endtime}',
'{$data->runtime}',
'{$data->checi}',
'{$data->channel}',
'{$data->isauto}'
)
";
//echo $sql;
$query = $this->INFO->query($sql);
}
public function ticketfrom($ts_ordernumber){
$sql = "select ts_channel,ts_cold_sn,ts_ordernumber from trainsystem where ts_ordernumber = ?";
$query = $this->INFO->query($sql,array($ts_ordernumber));
return $query->row();
}
public function get_passenger_info($ordernumber,$passportname,$passportno){
$sql = "select * from trainsystem_tickets left join trainsystem on tst_ordernumber = ts_ordernumber where tst_realname = ? and tst_numberid = ? and tst_ordernumber = ?";
$query = $this->INFO->query($sql,array($passportname,$passportno,$ordernumber));
return $query->row();
}
function add_passagers($data){
$sql = "IF EXISTS (select * from trainsystem_tickets where tst_ordernumber = '{$data->ordernumber}' and tst_numberid = '{$data->numberid}')
update
trainsystem_tickets
set
tst_identitytype = '{$data->identitytype}',
tst_numberid = '{$data->numberid}',
tst_ticketype = '{$data->ticketype}',
tst_ticketprice = '{$data->ticketprice}',
tst_seatstype = '{$data->seatype}',
tst_seatdetail = '{$data->seatdetail}',
tst_status = '{$data->status}'
where
tst_ordernumber = '{$data->ordernumber}'
and
tst_numberid = '{$data->numberid}'
else
INSERT INTO trainsystem_tickets (
tst_ordernumber,
tst_status,
tst_realname,
tst_identitytype,
tst_numberid,
tst_ticketype,
tst_ticketprice,
tst_seatstype,
tst_seatdetail
)VALUES(
'{$data->ordernumber}',
'{$data->status}',
'{$data->realname}',
'{$data->identitytype}',
'{$data->numberid}',
'{$data->ticketype}',
'{$data->ticketprice}',
'{$data->seatype}',
'{$data->seatdetail}'
)
";
$query =$this->INFO->query($sql);
}
public function update_orders($data){
$where = '';
if(!empty($data->bookcallback)){
$where .= "
ts_seatsinfo = '{$data->seatsinfo}',
ts_checkdoor = '{$data->TicketCheck}',
ts_elecnumber = '{$data->ElectronicOrderNumber}',
ts_orderamount = '{$data->OrderTotleFee}',
ts_bookcallback = '{$data->bookcallback}',";
}else if(!empty($data->confirmcallback)){
$where .= "ts_confirmcallback = '{$data->confirmcallback}',";
}else if(!empty($data->returncallback)){
$where .= "ts_returncallback = '{$data->returncallback}',";
}else if(!empty($data->reschedulecallback)){
$where .= "ts_reschedulecallback = '{$data->reschedulecallback}',";
}
$sql ="
update trainsystem
set
ts_status = '{$data->OrderStatus}',
ts_errormsg = '{$data->ErrorMsg}',
".substr($where,0,strlen($where)-1)."
where
ts_ordernumber = '{$data->ordernumber}'
";
//echo $sql;die();
$query = $this->INFO->query($sql);
}
//更新乘客表信息
public function update_passpager_info($data){
$sql = "update
trainsystem_tickets
set
tst_status = '{$data->status}',
tst_returncallback = '{$data->returncallback}',
tst_lasteditdate = getdate()
where
tst_ordernumber = '{$data->ordernumber}'
and
tst_realname = '{$data->realname}'
and
tst_numberid = '{$data->numberid}'
";
$query = $this->INFO->query($sql);
}
public function get_tickets_info($cold_sn){
$sql = "select ts_cold_sn,ts_ordernumber,tst_realname,tst_numberid,tst_status from trainsystem left join trainsystem_tickets on ts_ordernumber = tst_ordernumber where ts_cold_sn = ? and ts_status = '4'";
$query = $this->INFO->query($sql,array($cold_sn));
//$sql = "select * from BIZ_JuheOrderList where JOL_COLD_SN = ? and jol_status = '4'";
//$query = $this->HT->query($sql,array($cold_sn));
return $query->result();
}
public function getallorders(){
$sql = "select * from Tourmanager.dbo.BIZ_JuheOrderList where JOL_SubTime > '2019-03-01' and (JOL_Status = '4' or JOL_Status = '7')";
$query = $this->HT->query($sql);
return $query->result();
}
public function update_juheorder($ordernumber,$subtime,$price){
$sql = "update trainsystem set ts_subtime = ? , ts_orderamount = ? where ts_ordernumber = ?";
$query = $this->INFO->query($sql,array($subtime,$price,$ordernumber));
}
//根据cold_sn 获取出票情况
public function get_ticketinfos($cold_sn){
$sql = "select * from trainsystem where ts_cold_sn = ? and ts_status = '4'";
$query = $this->INFO->query($sql,array($cold_sn));
return $query->row();
}
public function test(){
$sql = "delete from trainsystem where ts_cold_sn = '488121613_1552637689'";
$query = $this->INFO->query($sql);
}
}

@ -0,0 +1,43 @@
<?php // 代码各服务器已经同步 2016.06.01 ycc ?>
<div class="container-fluid footer">
<div class="row">
<div class="col-xs-5"></div>
<div class="col-xs-17">
<legend></legend>
<p class="muted pull-right"><strong>{elapsed_time}</strong> seconds , <strong>{memory_usage}</strong> memory ,技术支持:YCC 08987705</p>
</div>
<div class="col-xs-2"></div>
</div>
</div>
<!-- 静态化更新窗口 -->
<div class="modal fade" id="cache_refresh_modal" tabindex="-1" role="dialog" data-backdrop="false">
<div class="modal-dialog" role="document">
<div class="modal-content" >
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 style="margin:0;">静态化更新-系列站专用</h3>
</div>
<div class="modal-body">
<label>需要更新的页面</label>
<input type="text" class="form-control" name="static_html_url" id="static_html_url" placeholder="如http://www.voyageschine.com/shanghai-voyage/" />
<input type="hidden" name="updatecdn_byhand" id="updatecdn_byhand" value="">
<p class="text-danger" id="cache_refresh_modal_msg" name="cache_refresh_modal_msg"></p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">关闭</button>
<a class="btn btn-primary" href="javascript:void(0);" onclick="$('#updatecdn_byhand').val('1');
updateCache($('#static_html_url').val(), 'cache_refresh_modal_msg');" >更新</a>
</div>
</div>
</div>
</div>
<!-- 静态化更新窗口 -->
</body>
</html>

@ -0,0 +1,131 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>出票系统</title>
<link rel="stylesheet" href="/css/information-system3.css?v=201508112" type="text/css" />
<script type="text/javascript" src="/min/?f=/js/information-system3.min.js,/js/common.js"></script>
<link rel="shortcut icon" href="/bootstrap/img/glyphicons_290_skull.png">
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><span class="glyphicon glyphicon-home text-white"></span></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
<ul class="nav navbar-nav">
<li><a href="<?php echo site_url(''); ?>">信息管理</a></li>
<li><a href="<?php echo site_url('product') ?>">产品管理</a></li>
<li><a href="<?php echo site_url('author'); ?>">作者平台</a></li>
<li><a href="<?php echo site_url('keyworlds') ?>">关键词</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
更多<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="<?php echo site_url('seo') ?>">SEO管理</a></li>
<li> <a href="<?php echo site_url('thirdparty/public/infopayauthor') ?>">打赏统计</a></li>
<li> <a href="<?php echo site_url('thirdparty/form') ?>">表单管理</a></li>
<li><a href="<?php echo site_url('thirdparty/advertise') ?>">广告管理</a></li>
<li><a href="<?php echo site_url('setting') ?>">系统设置</a></li>
</ul>
</li>
</ul>
<form id="form_information_search" name="form_information_search" method="post" action="<?php echo $this->router->class == 'infoshare' ? site_url('infoshare/search/') : site_url('welcome/search/'); ?>" class="navbar-form navbar-left" >
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" title="全文搜索" name="all_text_search" id="all_text_search" value="true" >
</span>
<input type="text" class="form-control input-sm" name="keywords" id="keywords" value="<?php echo isset($keywords) ? $keywords : false; ?>" style="min-width:450px;">
<span class="input-group-btn">
<button class="btn btn-default btn-sm" type="submit">搜索</button>
<a href="#" onclick="openKCFinder_fast();" class="btn btn-default btn-sm" title="快速上传图片" ><span class="glyphicon glyphicon-picture"></span></a>
<a href="#" title="静态化更新" class="btn btn-default btn-sm" data-toggle="modal" data-target="#cache_refresh_modal" ><span class="glyphicon glyphicon-repeat"></span></a>
</span>
</div>
</form>
<ul class="nav navbar-nav navbar-right">
<?php
$all_unread_sms = get_all_unread_sms();
$info_unread_sms = get_all_unread_sms('info');
if (isset($information->ic_id))
$current_msg = $information->ic_id;
if (isset($task->t_id))
$current_msg = $task->t_id;
$total_count = $all_unread_sms['sms_count'] + $info_unread_sms['sms_count']; //计算未读消息总数
$unread_sms_ic_id = 0; //用于设置所有收录消息为已读
if ($total_count != 0) {
?>
<!-- 如果当前页面存在未读消息,则消息数减一 -->
<?php
if (isset($current_msg) && isset($all_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($all_unread_sms['sms'][$current_msg]);
unset($all_unread_sms['sms'][$current_msg]);
}
?>
<?php
if (isset($current_msg) && isset($info_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($info_unread_sms['sms'][$current_msg]);
unset($info_unread_sms['sms'][$current_msg]);
}
?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-envelope icon-white pull-left" style="margin-top:3px;"></i> <span class="badge badge-important pull-right"><?php echo $total_count; ?></span>
</a>
<ul class="dropdown-menu">
<!-- 信息平台的消息 -->
<?php if (isset($info_unread_sms['sms']) && !empty($info_unread_sms['sms'])) { ?>
<a style="padding-left:20px;" href="javascript:void(0);" onclick="set_allmsg_to_read($('#unreadinfomsg').val());">标记全部收录信息为已读</a>
<li class="divider"></li>
<?php foreach ($info_unread_sms['sms'] as $m) { ?>
<li><a href="<?php echo site_url('information/edit/' . $m[0]->is_id); ?>"><?php
$t_title = get_text_short($m[0]->t_title, 15);
echo '[' . $m[0]->ic_sitecode . '] ' . $t_title['content'] . ' (' . $m[0]->m_content . ')';
?></a></li>
<?php $unread_sms_ic_id.=',' . $m[0]->m_object_id; ?>
<?php } ?>
<li class="divider"></li>
<input type="hidden" name="unreadinfomsg" id="unreadinfomsg" value="<?php echo $unread_sms_ic_id; ?>">
<?php } ?>
<!--作者平台的消息-->
<?php foreach ($all_unread_sms['sms'] as $am) { ?>
<li><a href="<?php echo site_url('author/edit_task/' . $am[0]->m_object_id); ?>"><?php
$t_title = get_text_short($am[0]->t_title, 15);
echo $t_title['content'] . ' (' . count($am) . ')';
?></a></li>
<?php } ?>
</ul>
</li>
<?php } ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php
echo $this->config->item('site_code');
echo ' -';
$admin_info = $this->session->userdata('session_admin');
echo $admin_info['OPI_Name'];
?>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<?php foreach ($this->config->item('site') as $site_item) { ?>
<li> <a href="<?php echo site_url('login/change_site/' . $site_item['site_code']); ?>" ><?php echo $site_item['site_code'] ?></a></li>
<?php } ?>
<li><a href="<?php echo site_url('login/out'); ?>" >退出</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>

@ -0,0 +1,33 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>China train ticket(s) confirmed, Booking Number <?php echo $coli_id;?></title><style>*{ font-family:Verdana, Geneva, sans-serif; color:#545454;}</style></head><body style="font-family:Verdana, Geneva, sans-serif; border-left:1px solid #d1d1d1; border-right:1px solid #d1d1d1;"><h1 style="font-size:20px; text-align:center;">China Highlights Booking Confirmation</h1><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Dear <?php echo $toname?>,</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Thank you for your payment of US$<?php echo $price->GAI_SQJE?> . The train tickets have already been issued. </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> You can collect the paper ticket(s) from now on at any train station in mainland China.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"><strong>Please note:</strong></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">1.Please present the <strong>original passport(s) of all the passenger(s)</strong> and the ticket pick-up number(s) <span style="color:#33F"><?php echo $ordernumber;?></span> at ticket collection counters. The counter will then issue your paper train ticket(s). </p>
<p>See the <a style="color:#33F" href="https://www.chinahighlights.com/travelguide/transportation/how-to-board-train.htm">video</a> about how to collect the ticket(s) in China.
</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">2.Please double check the train(s) information and passport information. Let us know AT ONCE if you see any mistakes below. We can try to cancel tickets to minimize your loss. A 20% cancellation fee is charged by China Railway.</p><table border="0" cellpadding="0" cellspacing="0" style="width:100%; border-top:3px solid #a31022; border-left:1px solid #d1d1d1; margin-bottom:15px;"><tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;width: 293px;">Ticket collection sentences</th><td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;"><p>The bilingual note below might help you pick up tickets at the ticket collection counter more easily.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 1.Please show me which window for picking up the train ticket. 你好,请问哪个是取票窗?</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">2.Please issue the paper tickets for me. The following is the pick up numbers.请帮我出票,电子取票号如下.</p></td></tr></table>
<?php
$j = 0;
foreach($train_info as $item){
echo '<table border="0" cellpadding="0" cellspacing="0" style="width:100%; border-top:3px solid #a31022; border-left:1px solid #d1d1d1; margin-bottom:15px;">
<tr>
<th style="width: 293px;text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Pick up number</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;"><span style="color:#33F">'.$item->FOI_TrainNetOrderNo.'</span></td>';
echo '</tr><tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Train No.</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->FlightsNo.'</td></tr><tr>';
echo '<th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Departure</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->DepartureTime.' '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站)</td></tr>';
echo '<tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Arrival</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->ArrivalTime.' '.$item->ArrivalCity.' Station(in Chinese '.$item->ArrivalAirport_cn.'火车站)</td></tr>';
echo '<tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Class</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->Cabin.' ('.$seatinfo.')</td></tr></table>';
}
?>
<table border="0" cellpadding="0" cellspacing="0" style="width:100%; border-top:3px solid #a31022; border-left:1px solid #d1d1d1; margin-bottom:15px;"><tr><th style="width: 293px;text-align:left; padding:10px; font-size:14px; background:#f1f1f1;">Passenger(s)</th><td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;"><p><?php
if($adult>0){echo $adult.' adult(s) ';}
if($chlid>0){echo $chlid.' chlid(s) ';}
if($baby>0){echo $baby.' baby(s) ';}
?></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> <?php
$i=0;
foreach($allpeople as $item){
echo ++$i.'.'.$item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'<br>';
}
?></p></td></tr></table>
<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 3.On your departure day, please time your arrival at the station wisely. If you are going to collect your train ticket(s) on the departure day, allow enough time waiting in the queue of the ticket collection counter, for the security x-ray check of your luggage, and for the ticket check before entering the passenger lounge. Tickets will stop being issued 30 minutes prior to departure. We suggest you be at the station at least 1.5 hours ahead of the stated departure time. Please leave at least 2.5 hours during public holidays.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 4.If youve already collected your ticket before the departure day, we recommend that you be at the station at least 40 minutes ahead of time. Please be at the station at least 1.5 hours during a public holiday. </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 5.Please don't throw your ticket(s) away because you'll need it to exit the station.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">6.If you cancel the ticket(s) at a train station yourself, the money will be refunded to our account. Please cancel the tickets before the train departure. And email us then we will refund you accordingly.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">7.<a style="color:#33F" href="https://www.chinahighlights.com/china-trains/booking-policy.htm">China Highlights train ticket booking policy </a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Should you have any questions about your train ticket bookings, please do not hesitate to contact me.</p>
<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Best Regards!</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"><?php echo $operator[0]->Name?>, Travel Advisor</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Tel: <?php echo $operator[0]->tel;?> Mobile: <?php echo $operator[0]->Mobile;?> </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Fax: 86-773-2827424, 86-773-2885308 </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> E-mail: <a href="mailto:<?php echo $emailarr[0]?>"><?php echo $emailarr[0]?>;</a><a href="mailto:<?php echo $emailarr[1]?>"><?php echo $emailarr[1]?>;</a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">WeChat: CH_train<p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"><a href="http://www.chinahighlights.com">www.chinahighlights.com</a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Address: Building 6, Chuangyi Business Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> If you wish to share anything with my supervisor (Ms. ethel), please feel free to send your email to <a href="mailto:ethel@chinahighlights.net">ethel@chinahighlights.net</a>.</p></body></html>

@ -0,0 +1,48 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>China Highlights Booking Confirmation</title><style>*{ font-family:Verdana, Geneva, sans-serif; color:#545454;}</style></head><body style="font-family:Verdana, Geneva, sans-serif; border-left:1px solid #d1d1d1; border-right:1px solid #d1d1d1;"><h1 style="font-size:20px; text-align:center;">China Highlights Booking Confirmation</h1><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Dear <?php echo $toname?>,</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Thanks for payment US$<?php echo $price->GAI_SQJE?> . The train tickets have already been issued. </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> You can collect the paper ticket(s) from now at any train station in mainland China.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> The same passport that was used for booking should also be used for ticket collection. A renewed passport won't be acceptable even if the holder is the same person. The system does not allow us to change passport number or passenger name after issue ticket. Have to issue new ticket if wrong passport number or name.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Please collect your paper tickets from a ticket counter in the train station. Tickets will stop being printed 30 minutes prior to departure. On departure day, please time your arrival wisely. If you are going to collect your tickets on departure day, allow for time waiting in queue at the ticket-counter, for security checks and for ticket checks. We suggest you be at the station at least 1.5 hours ahead of the stated departure time.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">If youve already collected before the departure day, it is also wise to be at the station at least 40 minutes ahead. </p><table border="0" cellpadding="0" cellspacing="0" style="width:100%; border-top:3px solid #a31022; border-left:1px solid #d1d1d1; margin-bottom:15px;"><tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;">Passenger(s)</th><td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;"><p><?php
if($adult>0){echo $adult.' adult(s) ';}
if($chlid>0){echo $chlid.' chlid(s) ';}
if($baby>0){echo $baby.' baby(s) ';}
?></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> <?php
$i=0;
foreach($allpeople as $item){
echo ++$i.'.'.$item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'<br>';
}
?></p></td></tr></table>
<?php
$j = 0;
foreach($train_info as $item){
echo '<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Train'.++$j.':</p>';
echo '<table border="0" cellpadding="0" cellspacing="0" style="width:100%; border-top:3px solid #a31022; border-left:1px solid #d1d1d1; margin-bottom:15px;">
<tr>
<th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Ticket Pick Up No.</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;"><span style="color:#33F">'.$item->FOI_TrainNetOrderNo.'</span></td>';
echo '</tr><tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Train No.</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->FlightsNo.'</td></tr><tr>';
echo '<th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Departure</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->DepartureTime.' '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站)</td></tr>';
echo '<tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Arrival</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->ArrivalTime.' '.$item->ArrivalCity.' Station(in Chinese '.$item->ArrivalAirport_cn.'火车站)</td></tr>';
echo '<tr><th style="text-align:left; padding:10px; font-size:14px; background:#f1f1f1;"><strong>Class</strong></th>';
echo '<td style="border-bottom:1px solid #d1d1d1; border-right:1px solid #d1d1d1; font-size:14px; line-height:22px; padding:10px;">'.$item->Cabin.'</td></tr></table>';
}
?>
<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">Kindly note below:</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">1.Please present all passenger(s) original passport(s) and Ticket Pick Up No.<span style="color:#33F"><?php echo $item->FOI_TrainNetOrderNo?></span>at any ticket counters of any railway stations. They will then issue your paper train ticket(s). You can find more instruction of collecting tickets enclosure.
</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 2.You can show screenshot of the paper tickets to the railway station counter. It helps get paper tickets easily.</p>
<?php
foreach($train_info as $obj){
echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
echo '<tr style="background:#f0f0f0; color:#545454; font-weight:100; font-size:20px; ">';
echo ' <th style="font-weight:100; font-size:18px; text-align:left;padding:8px 10px; border-top:3px solid #ad1818;">'.substr($obj->DepartureDate,0,10).'&nbsp;&nbsp;&nbsp;'.$obj->FlightsNo.'&nbsp;&nbsp;&nbsp;'.$obj->FOI_TrainNetOrderNo.'</th></tr><tr>';
echo '<td style=" padding:8px 10px; font-size:15px; color:#545454; border-bottom:1px solid #d1d1d1;"><p>'.$obj->DepartAirport_cn.'('.$obj->DepartureCity.')<span style=" font-size:12px;">'.$obj->DepartureTime.'</span> To '.$obj->ArrivalAirport_cn.'('.$obj->ArrivalCity.')<span style=" font-size:12px;">'.$obj->ArrivalTime.'</span></p></td></tr>';
foreach($juhe_info->passengers as $people){
echo '<tr><td style=" padding:8px 10px; font-size:15px; color:#545454; border-bottom:1px solid #d1d1d1;">';
echo '<p>'.$people->passengersename.'('.$people->piaotypename.') ';
echo $people->cxin.' 票价:¥'.$people->price.'</p>';
echo '</td></tr>';
}
echo '<tr><td style=" padding:8px 10px; font-size:15px; color:#545454; border-bottom:1px solid #d1d1d1;"><p>出票成功</p></td></tr></table>';
}
?>
<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 3. There is no further fee if collect train ticket(s) at the DEPARTURE station shown on your ticket(s). RMB 5 per ticket will be charged at the ticket counter at other stations. Return tickets are treated separately. E.g. if you have booked Beijing-Shanghai and Shanghai-Beijing ticket(s), and you collect them all at Beijing, you will be charged RMB 5 per ticket for the Shanghai-Beijing ticket(s), but if you pick up the return leg ticket(s) separately in Shanghai you will avoid the charge.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 4. Please keep your ticket(s) and don't throw your ticket(s) away once you've boarded your train, you'll need it to exit the station.</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> 5.Download railway station instructions, maps and tips at <a href="https://www.chinahighlights.com/china-trains/station-map.htm">https://www.chinahighlights.com/china-trains/station-map.htm</a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;">6.Terms & Conditions. <a href="https://www.chinahighlights.com/china-trains/booking-policy.htm">https://www.chinahighlights.com/china-trains/booking-policy.htm</a></p><p>&nbsp;</p>
<p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Best Regards!</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"><?php echo $operator[0]->Name?>, Travel Advisor</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Tel: <?php echo $operator[0]->tel;?> Mobile: <?php echo $operator[0]->Mobile;?> </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Fax: 86-773-2827424, 86-773-2885308 </p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> E-mail: <a href="mailto:<?php echo $emailarr[0]?>"><?php echo $emailarr[0]?>;</a><a href="mailto:<?php echo $emailarr[1]?>"><?php echo $emailarr[1]?>;</a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"><a href="http://www.chinahighlights.com">www.chinahighlights.com</a></p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> Address: Building 6, Chuangyi Business Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China</p><p style="font-size:14px; margin:0 0 18px 0; line-height:22px;"> If you wish to share anything with my supervisor (Ms. Alex Yang), please feel free to send your email to <a href="mailto:alex@chinahighlights.net">alex@chinahighlights.net</a>.</p></body></html>

@ -0,0 +1,26 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title></head><body><p style="font-family:Verdana, Geneva, sans-serif; font-size:14px; line-height:24px; margin-bottom:12px;">Dear <?php echo $toname?>,</p><p style="font-family:Verdana, Geneva, sans-serif; font-size:14px; line-height:24px; margin-bottom:12px;"> Thank you for your booking (order number <?php echo $coli_id?>), we have received your payment of USD<?php echo $price->GAI_SQJE?>.&nbsp;</p><p style="font-family:Verdana, Geneva, sans-serif; font-size:14px; line-height:24px; margin-bottom:12px;"> Due to the heavy traffic flow of data, the system failed to automatically issue your ticket(s).</p><p style="font-family:Verdana, Geneva, sans-serif; font-size:14px; line-height:24px; margin-bottom:12px;">Your travel advisor will purchase your train ticket(s) manually. &nbsp;You will receive an email within half a working day (Our time now:&nbsp;<strong><?php echo date('H:i').' '.date('a');?></strong>, <?php echo date('D');?>,<?php echo date('F').' '.date('d').','.date('Y');?> GMT+8).Should you have any questions or concerns with regards to your train booking, please do not hesitate to contact me at <a href="mailto:<?php echo $emailarr[0]?>"><?php echo $emailarr[0]?></a>;<a href="mailto:<?php echo $emailarr[1]?>"><?php echo $emailarr[1]?></a> or telephone <?php echo $operator[0]->tel;?>. </p>
<?php foreach($train_info as $item){
echo '<table border="0" cellspacing="0" cellpadding="0" width="60%">';
echo '<tr><th width="17%" style="font-family:Verdana, Geneva, sans-serif;font-size:14px; color:#a31022; background:#e6e6e6; text-align:left; padding:10px;">Train No. </th>';
echo '<td width="83%" style="font-family:Verdana, Geneva, sans-serif;font-size:14px; text-align:left; padding:10px; border-bottom:1px solid #d1d1d1;">'.$item->FlightsNo.'</td></tr>';
echo '<tr><th style="font-family:Verdana, Geneva, sans-serif; font-size:14px; color:#a31022; background:#e6e6e6; text-align:left; padding:10px;">Departure </th>';
echo '<td style="font-family:Verdana, Geneva, sans-serif; font-size:14px; text-align:left; padding:10px; border-bottom:1px solid #d1d1d1;">'.$item->DepartureTime.', '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站)&nbsp;</td></tr>';
echo '<tr><th style="font-family:Verdana, Geneva, sans-serif; font-size:14px; color:#a31022; background:#e6e6e6; text-align:left; padding:10px;">Arrival </th><td style="font-family:Verdana, Geneva, sans-serif; font-size:14px; text-align:left; padding:10px; border-bottom:1px solid #d1d1d1;">'.$item->ArrivalTime.', '.$item->ArrivalCity.'(in Chinese'. $item->ArrivalAirport_cn.'火车站)&nbsp; </td></tr>';
echo '<tr><th style="font-family:Verdana, Geneva, sans-serif; font-size:14px; color:#a31022; background:#e6e6e6; text-align:left; padding:10px;">Class </th><td style="font-family:Verdana, Geneva, sans-serif; font-size:14px; text-align:left; padding:10px; border-bottom:1px solid #d1d1d1;">'.$item->Cabin.'</td></tr>';
echo '<tr><th style="font-family:Verdana, Geneva, sans-serif; font-size:14px; color:#a31022; background:#e6e6e6; text-align:left; padding:10px;">Passenger(s) </th>';
echo '<td style="font-family:Verdana, Geneva, sans-serif; font-size:14px; text-align:left; padding:10px; border-bottom:1px solid #d1d1d1;">';
if($adult>0){echo $adult.' adult(s)<br/> ';}
if($chlid>0){echo $chlid.' chlid(s)<br/> ';}
if($baby>0){echo $baby.' baby(s)<br/> ';}
$i=0;
foreach($allpeople as $item){
echo ++$i.'.'.$item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'<br>';
}
echo '</tr></table>';
echo '<p style="font-family:Verdana, Geneva, sans-serif; font-size:14px; line-height:24px; margin-bottom:12px;">Regards <br />';
echo $operator[0]->Name.'<br/>Travel Advisor<br/>';
echo 'Telephone:&nbsp;(Office)'.$operator[0]->tel.', M: '.$operator[0]->Mobile.',';
echo 'Email: <a href="mailto:'.$emailarr[0].'">'.$emailarr[0].'</a>;<a href="mailto:'.$emailarr[1].'">'.$emailarr[1].'</a>;&nbsp</p>';
}?>
</body>
</html>

@ -0,0 +1,110 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">交易记录导出&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/train/index/ht_order_list');?>">订单列表>></a> </h3>
</div>
<div class="panel-body">
<form style="width: 80%;" action="http://www.mycht.cn/info.php/apps/trainsystem/api/export_excel/" method="post">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off">
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off">
审核状态:<input type="checkbox" <?php echo empty($examine)?"":"checked";?> name="examine" />&nbsp;&nbsp;&nbsp;
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> Download</button>
</form>
<p style="margin: 0 0 10px; width: 200px; float: left; line-height: 30px;">
<!-- <table class="table table-hover" >
<thead>
<tr><th>时间</th><th>信息</th><th>变化值</th><th>团名</th><th>外联</th></tr>
</thead>
<tbody>
<tr data-id="161130252" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td>2016-12-01 11:18:28</td>
<td> 票款(有充值)</td>
<td>-1106.00</td>
<td>R161228-BYW161130252</td>
<td>李毅文</td>
</tr>
</tbody>
</table> -->
<div class="row <?php echo empty($examine)?"hidden":"";?>" style="width:90%;margin:0 auto;">
<div class="">
<table class="table table-hover" id="list_table">
<thead>
<tr><th>时间</th><th>信息</th><th>变化值</th><th>团名</th><th>外联</th></tr>
</thead>
<tbody>
<?php foreach ($data as $key => $value) {?>
<tr data-id="<?php echo $value[8];?>" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td><?php echo $value[2];?></td><td><?php echo $value[3];?></td><td><?php echo $value[1];?></td><td><?php echo $value[6];?></td><td><?php echo $value[7];?></td>
</tr>
<?php }?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="popover fade top in" role="tooltip" id="popover" style="width:auto;max-width: 100% !important;top: 139.6px; left: 50%; display: none;">
<div class="arrow"></div>
<h3 class="popover-title">我的支付</h3>
<div class="popover-content">
<table class="table" id="my_pay_data">
<thead>
<tr>
<td>序号</td><td>车次</td><td>出发日期</td><td>价格</td><td>备注</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<script>
$(".date").datepicker({
'format': 'yyyy-m-d',
'autoclose': true
});
$("body").click(function(){
$("#popover").css("display","none");
});
$("#popover").click(function(e){
e.stopPropagation();//阻止事件冒泡防止点击这个div也被隐藏
});
var popover_top=0;
var tr="";
$("#list_table>tbody>tr").click(function(e){
e.stopPropagation();
popover_top=$(this).offset().top-$("#popover").height();
var this_id=$(this).attr("data-id");
var THIS=$(this);
url="<?php echo site_url('apps/train/index/get_ht_my_pay?').'id=';?>"+this_id;
$.ajax({
url:url,
beforeSend:function(data){
// $("#popover").css("top",popover_top);
// $("#popover").css("display","block");
},
success:function(data){
tr="";
if(data.status==1){
$.each(data.datas,function(n,value){
tr+="<tr><td>"+(n+1)+"</td><td>"+value["TOC_TrainNumber"]+"</td><td>"+value["TOC_DepartureDate"]+"</td><td>"+value["TOC_TicketCost"]+"</td><td>"+value["TOC_Memo"]+"</td></tr>";
});
}
$("#my_pay_data>tbody").html(tr);
popover_top=THIS.offset().top-$("#popover").height();
$("#popover").css("top",popover_top);
$("#popover").css("display","block");
},
dataType: "json",
});
});
</script>

@ -0,0 +1,43 @@
<?php // 代码各服务器已经同步 2016.06.01 ycc ?>
<div class="container-fluid footer">
<div class="row">
<div class="col-xs-5"></div>
<div class="col-xs-17">
<legend></legend>
<p class="muted pull-right"><strong>{elapsed_time}</strong> seconds , <strong>{memory_usage}</strong> memory ,技术支持:YCC 08987705</p>
</div>
<div class="col-xs-2"></div>
</div>
</div>
<!-- 静态化更新窗口 -->
<div class="modal fade" id="cache_refresh_modal" tabindex="-1" role="dialog" data-backdrop="false">
<div class="modal-dialog" role="document">
<div class="modal-content" >
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 style="margin:0;">静态化更新-系列站专用</h3>
</div>
<div class="modal-body">
<label>需要更新的页面</label>
<input type="text" class="form-control" name="static_html_url" id="static_html_url" placeholder="如http://www.voyageschine.com/shanghai-voyage/" />
<input type="hidden" name="updatecdn_byhand" id="updatecdn_byhand" value="">
<p class="text-danger" id="cache_refresh_modal_msg" name="cache_refresh_modal_msg"></p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">关闭</button>
<a class="btn btn-primary" href="javascript:void(0);" onclick="$('#updatecdn_byhand').val('1');
updateCache($('#static_html_url').val(), 'cache_refresh_modal_msg');" >更新</a>
</div>
</div>
</div>
</div>
<!-- 静态化更新窗口 -->
</body>
</html>

@ -0,0 +1,156 @@
<?php // 代码各服务器已经同步 2016.06.01 ycc ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>信息平台</title>
<link rel="stylesheet" href="/css/information-system3.css?v=201508112" type="text/css" />
<script type="text/javascript" src="/min/?f=/js/information-system3.min.js,/js/common.js"></script>
<script type="text/javascript" src="/js/kindeditor/kindeditor.js?v=20160601"></script>
<link rel="shortcut icon" href="/bootstrap/img/glyphicons_290_skull.png">
<script language="javascript">
//快速图片上传
function openKCFinder_fast() {
window.CallBack = oopenKCFinder_fast_callback;
window.open('/media/popselectpicture.php?site_code=<?php echo $this->config->item('site_code'); ?>&site_lgc=<?php echo $this->config->item('site_lgc'); ?>', 'kcfinder_textbox', 'status=0, toolbar=0, location=0, menubar=0, directories=0,resizable=1, scrollbars=0, width=800, height=600');
}
function oopenKCFinder_fast_callback(result) {
var site_image_url = '<?php echo $this->config->item('site_image_url') ?>';
if (result != null && result.Pinfo[0]) {
$.modaldialog.success("图片地址:<br/>" + site_image_url + result.Pinfo[0].PUrl);
}
}
//标识所有信息未已读
function set_allmsg_to_read(ic_ids) {
var url = '<?php echo site_url("author/set_msg_to_read"); ?>';
$.post(url, {'msg_ids': ic_ids}, function(result) {
window.location.href = window.location.href;
});
}
</script>
</head>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-9" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/"><span class="glyphicon glyphicon-home text-white"></span></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
<ul class="nav navbar-nav">
<li><a href="<?php echo site_url(''); ?>">信息管理</a></li>
<li><a href="<?php echo site_url('product') ?>">产品管理</a></li>
<li><a href="<?php echo site_url('author'); ?>">作者平台</a></li>
<li><a href="<?php echo site_url('keyworlds') ?>">关键词</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
更多<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="<?php echo site_url('seo') ?>">SEO管理</a></li>
<li> <a href="<?php echo site_url('thirdparty/public/infopayauthor') ?>">打赏统计</a></li>
<li> <a href="<?php echo site_url('thirdparty/form') ?>">表单管理</a></li>
<li><a href="<?php echo site_url('thirdparty/advertise') ?>">广告管理</a></li>
<li><a href="<?php echo site_url('setting') ?>">系统设置</a></li>
</ul>
</li>
</ul>
<form id="form_information_search" name="form_information_search" method="post" action="<?php echo $this->router->class == 'infoshare' ? site_url('infoshare/search/') : site_url('welcome/search/'); ?>" class="navbar-form navbar-left" >
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" title="全文搜索" name="all_text_search" id="all_text_search" value="true" >
</span>
<input type="text" class="form-control input-sm" name="keywords" id="keywords" value="<?php echo isset($keywords) ? $keywords : false; ?>" style="min-width:450px;">
<span class="input-group-btn">
<button class="btn btn-default btn-sm" type="submit">搜索</button>
<a href="#" onclick="openKCFinder_fast();" class="btn btn-default btn-sm" title="快速上传图片" ><span class="glyphicon glyphicon-picture"></span></a>
<a href="#" title="静态化更新" class="btn btn-default btn-sm" data-toggle="modal" data-target="#cache_refresh_modal" ><span class="glyphicon glyphicon-repeat"></span></a>
</span>
</div>
</form>
<ul class="nav navbar-nav navbar-right">
<?php
$all_unread_sms = get_all_unread_sms();
$info_unread_sms = get_all_unread_sms('info');
if (isset($information->ic_id))
$current_msg = $information->ic_id;
if (isset($task->t_id))
$current_msg = $task->t_id;
$total_count = $all_unread_sms['sms_count'] + $info_unread_sms['sms_count']; //计算未读消息总数
$unread_sms_ic_id = 0; //用于设置所有收录消息为已读
if ($total_count != 0) {
?>
<!-- 如果当前页面存在未读消息,则消息数减一 -->
<?php
if (isset($current_msg) && isset($all_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($all_unread_sms['sms'][$current_msg]);
unset($all_unread_sms['sms'][$current_msg]);
}
?>
<?php
if (isset($current_msg) && isset($info_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($info_unread_sms['sms'][$current_msg]);
unset($info_unread_sms['sms'][$current_msg]);
}
?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-envelope icon-white pull-left" style="margin-top:3px;"></i> <span class="badge badge-important pull-right"><?php echo $total_count; ?></span>
</a>
<ul class="dropdown-menu">
<!-- 信息平台的消息 -->
<?php if (isset($info_unread_sms['sms']) && !empty($info_unread_sms['sms'])) { ?>
<a style="padding-left:20px;" href="javascript:void(0);" onclick="set_allmsg_to_read($('#unreadinfomsg').val());">标记全部收录信息为已读</a>
<li class="divider"></li>
<?php foreach ($info_unread_sms['sms'] as $m) { ?>
<li><a href="<?php echo site_url('information/edit/' . $m[0]->is_id); ?>"><?php
$t_title = get_text_short($m[0]->t_title, 15);
echo '[' . $m[0]->ic_sitecode . '] ' . $t_title['content'] . ' (' . $m[0]->m_content . ')';
?></a></li>
<?php $unread_sms_ic_id.=',' . $m[0]->m_object_id; ?>
<?php } ?>
<li class="divider"></li>
<input type="hidden" name="unreadinfomsg" id="unreadinfomsg" value="<?php echo $unread_sms_ic_id; ?>">
<?php } ?>
<!--作者平台的消息-->
<?php foreach ($all_unread_sms['sms'] as $am) { ?>
<li><a href="<?php echo site_url('author/edit_task/' . $am[0]->m_object_id); ?>"><?php
$t_title = get_text_short($am[0]->t_title, 15);
echo $t_title['content'] . ' (' . count($am) . ')';
?></a></li>
<?php } ?>
</ul>
</li>
<?php } ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php
echo $this->config->item('site_code');
echo ' -';
$admin_info = $this->session->userdata('session_admin');
echo $admin_info['OPI_Name'];
?>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<?php foreach ($this->config->item('site') as $site_item) { ?>
<li> <a href="<?php echo site_url('login/change_site/' . $site_item['site_code']); ?>" ><?php echo $site_item['site_code'] ?></a></li>
<?php } ?>
<li><a href="<?php echo site_url('login/out'); ?>" >退出</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>

@ -0,0 +1,511 @@
<style>
.clear {clear: both;}
.train-summary{ font-size:12px; margin-bottom:10px;}
.train-summary span{ color:#9a0918;}
a:link.seat-a{background-image:url(/css/images/train/a-seat.jpg); background-repeat:no-repeat; width:131px; display:block; height:42px; float:left;}
a:hover.seat-a{background-image:url(/css/images/train/a-seath.jpg);}
.selected_seat-a{background-image:url(/css/images/train/a-seata.jpg)!important; background-repeat:no-repeat; width:55px; display:block; height:42px; float:left;}
a:link.seat-b{background-image:url(/css/images/train/b-seat.jpg); background-repeat:no-repeat; text-decoration:none; width:55px; display:block; height:42px; float:left;}
a:hover.seat-b{background-image:url(/css/images/train/b-seath.jpg);}
.selected_seat-b{background-image:url(/css/images/train/b-seata.jpg)!important; background-repeat:no-repeat; width:55px; display:block; height:42px; float:left;}
a:link.seat-c{background-image:url(/css/images/train/c-seat.jpg); background-repeat:no-repeat; width:131px; display:block; height:42px; float:left;}
a:hover.seat-c{background-image:url(/css/images/train/c-seath.jpg);}
.selected_seat-c{background-image:url(/css/images/train/c-seata.jpg)!important; background-repeat:no-repeat; width:55px; display:block; height:42px; float:left;}
a:link.seat-d{background-image:url(/css/images/train/d-seat.jpg); background-repeat:no-repeat; width:55px; display:block; height:42px; float:left;}
a:hover.seat-d{background-image:url(/css/images/train/d-seath.jpg);}
.selected_seat-d{background-image:url(/css/images/train/d-seata.jpg)!important; background-repeat:no-repeat; width:136px; display:block; height:42px; float:left;}
a:link.seat-f{background-image:url(/css/images/train/f-seat.jpg); background-repeat:no-repeat; width:136px; display:block; height:42px; float:left;}
a:hover.seat-f{background-image:url(/css/images/train/f-seath.jpg);}
.selected_seat-f{background-image:url(/css/images/train/f-seata.jpg)!important; background-repeat:no-repeat; width:136px; display:block; height:42px; float:left;}
a:link.sleep-a {background-image:url(/css/images/train/l-up.jpg); background-repeat:no-repeat; width:163px; display:block; height:38px; float:left; }
a:hover.sleep-a { background-image:url(/css/images/train/l-upa.jpg); }
.selected_sleep-a { background-image:url(/css/images/train/l-upa.jpg)!important; width:163px; display:block; height:38px; float:left; }
a:link.sleep-b {background-image:url(/css/images/train/r-up.jpg); background-repeat:no-repeat; width:104px; display:block; height:38px; float:left; }
a:hover.sleep-b { background-image:url(/css/images/train/r-upa.jpg); }
.selected_sleep-b { background-image:url(/css/images/train/r-upa.jpg)!important; width:163px; display:block; height:38px; float:left; }
a:link.sleep-c {background-image:url(/css/images/train/l-mid.jpg); background-repeat:no-repeat; width:163px; display:block; height:38px; float:left; }
a:hover.sleep-c { background-image:url(/css/images/train/l-mida.jpg); }
.selected_sleep-c { background-image:url(/css/images/train/l-mida.jpg)!important; width:163px; display:block; height:38px; float:left; }
a:link.sleep-d {background-image:url(/css/images/train/r-mid.jpg); background-repeat:no-repeat; width:104px; display:block; height:38px; float:left; }
a:hover.sleep-d { background-image:url(/css/images/train/r-mida.jpg); }
.selected_sleep-d { background-image:url(/css/images/train/r-mida.jpg)!important; width:163px; display:block; height:38px; float:left; }
a:link.sleep-e {background-image:url(/css/images/train/l-low.jpg); background-repeat:no-repeat; width:163px; display:block; height:38px; float:left; }
a:hover.sleep-e { background-image:url(/css/images/train/l-lowa.jpg); }
.selected_sleep-e { background-image:url(/css/images/train/l-lowa.jpg)!important; width:163px; display:block; height:38px; float:left; }
a:link.sleep-f {background-image:url(/css/images/train/r-low.jpg); background-repeat:no-repeat; width:104px; display:block; height:38px; float:left; }
a:hover.sleep-f { background-image:url(/css/images/train/r-lowa.jpg); }
.selected_sleep-f { background-image:url(/css/images/train/r-lowa.jpg)!important; width:104px; display:block; height:38px; float:left; }
</style>
<script>
$(function(){
//var selected = $('.selectticket').find('.selected').length;
//$('.selected_People').html(selected);
});
function selseat(seat){
var type = $(seat).attr('type');
var total = $(seat).parent().parent().find('.train-summary .seat_TotalPeople').html();
if(total>=5){
total = 5;
$('.seat_TotalPeople').html(total);
}
var count = $(seat).parent().parent().find('.selected').length;
console.log('执行之前的数量'+count);
//处理选座事件
if($(seat).hasClass('selected_'+type)){
$(seat).removeClass('selected');
$(seat).removeClass('selected_'+type);
count = $(seat).parent().parent().find('.selected').length;
$('.selected_People').html(count);
console.log('减掉之后'+count);
}else{
if(count >= total){
alert('You already chose seats for all the passengers.');
}else{
$(seat).addClass('selected_'+type);
$(seat).addClass('selected');
count = $(seat).parent().parent().find('.selected').length;
$('.selected_People').html(count);
console.log('增加之后'+count);
}
}
}
</script>
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">翰特订单号&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/order_list');?>">订单列表>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/export');?>">导出交易记录>></a> <span style="margin-left:200px;">版本V2.0</span><span class="pull-right">聚合余额(RMB)<?php echo $balance;?></span></h3>
</div>
<div class="panel-body">
<form style="width: 300px;float: left;" action="http://www.mycht.cn/info.php/apps/trainsystem/pages/index/" method="post">
<input type="text" name="ht_order" value="<?php echo isset($cols_id)?$cols_id:""; ?>">
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> 获取信息</button>
</form>
<p style="margin: 0 0 10px; width: 200px; float: left; line-height: 30px;">外联:<span><?php if(!empty($wl)){echo $wl[0]->OPI_Name;}?></span></p>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">火车订单信息</h3>
</div>
<div class="panel-body">
<?php if(!empty($info)):?>
<?php $num=1; foreach($info as $v):?>
<table class="table table-bordered table-hover" style="text-align:center;">
<thead>
<tr>
<th style="text-align:center;">序号</th>
<th style="text-align:center;">车次</th>
<th style="text-align:center;">座位</th>
<th style="text-align:center;">出发城市</th>
<th style="text-align:center;">抵达城市</th>
<th style="text-align:center;">发车日期</th>
<th style="text-align:center;">发车时间</th>
<th style="text-align:center;">抵达时间</th>
<th style="text-align:center;">票价</th>
<th style="text-align:center;">是否提交过</th>
</tr>
</thead>
<tbody>
<tr>
<td><?php echo $num++;?></td>
<td><?php echo $v->train[0]->FlightsNo;?></td>
<td><?php echo $v->train[0]->Cabin;?></td>
<td><?php echo $v->train[0]->DepartureCity;?></td>
<td><?php echo $v->train[0]->ArrivalCity;?></td>
<td><?php echo $v->train[0]->DepartureDate;?></td>
<td><?php echo $v->train[0]->DepartureTime;?></td>
<td><?php echo $v->train[0]->ArrivalTime;?></td>
<td><?php echo $v->train[0]->adultcost;?></td>
<td><?php echo !empty($v->status)?"否":"<span style='color:green;'>是</span>";?></td>
<!--<td><button type="button" class="btn btn-success pay_api" data-order="<?php echo $v->train[0]->FOI_COLD_SN;?>" title="超过五个乘客不可用" >快捷订票</button></td>-->
</tr>
<tr>
<td colspan="11">
<table class="table table-condensed table-bordered">
<thead>
<tr>
<th style="text-align:center;"><input class="check_people" type="checkbox" /></th>
<th style="text-align:center;">序号</th>
<th style="text-align:center;">姓名</th>
<th style="text-align:center;">护照</th>
<th style="text-align:center;">年龄类型</th>
</tr>
</thead>
<tbody>
<?php foreach($v->people as $key=>$p): ?>
<tr>
<?php if ($key < 5){?>
<td><input name="" type="checkbox" checked="checked" value="<?php echo $p->BPE_SN;?>" num="<?php echo $key;?>"/></td>
<?php }else{ ?>
<td><input name="" type="checkbox" value="<?php echo $p->BPE_SN;?>" /></td>
<?php } ?>
<td><?php echo $key+1;?></td>
<td class="people_name"><?php echo $p->BPE_FirstName." ".$p->BPE_MiddleName." ".$p->BPE_LastName;?></td>
<td><?php echo $p->BPE_Passport;?></td>
<td><?php echo $p->BPE_GuestType==1?"成人":($p->BPE_GuestType==2?"儿童":"婴儿");?></td>
</tr>
<?php endforeach;?>
<tr style="text-align:;">
<td colspan="11" class="selectticket">
<?php
$traintype = substr($v->train[0]->FlightsNo,0,1);
$arr = array('C','D','G');
$sel_count = 0;
if(in_array($traintype,$arr)){
$selectseat = '';
$train_select = $v->train[0]->FOI_SelectedSeat;
$a1=$b1=$c1=$d1=$f1=$a2=$b2=$c2=$d2=$f2=false;
if($train_select){
$obj = explode(',',$train_select);
foreach($obj as $value){
switch($value){
case '1A':
$a1 = true;
$sel_count++;
break;
case '1B':
$b1 = true;
$sel_count++;
break;
case '1C':
$c1 = true;
$sel_count++;
break;
case '1D':
$d1 = true;
$sel_count++;
break;
case '1F':
$f1 = true;
$sel_count++;
break;
case '2A':
$a2 = true;
$sel_count++;
break;
case '2B':
$b2 = true;
$sel_count++;
break;
case '2C':
$c2 = true;
$sel_count++;
break;
case '2D':
$d2 = true;
$sel_count++;
break;
case '2F':
$f2 = true;
$sel_count++;
break;
}
}
}
$html = '';
$html .= '<div class="train-summary">'.$v->train[0]->Cabin.' for '.$v->train[0]->FlightsNo.' <span>(<span class="selected_People">'.$sel_count.'</span> of <span class="seat_TotalPeople">'.count($v->people).'</span> Seats)</span></div>';
$html .= '<div class="seatPick">';
if($a1){
$html .= '<a class="seat-a selected_seat-a selected" type="seat-a" href="javascript:void(0);" data="1A" onclick ="selseat(this)";></a>';
}else{
$html .= '<a class="seat-a" type="seat-a" href="javascript:void(0);" data="1A" onclick ="selseat(this)";></a>';
}
if($v->train[0]->Aircraft == 'O' || $v->train[0]->Aircraft == '8'){
if($b1){
$html .= '<a class="seat-b selected_seat-b selected" type="seat-b" href="javascript:void(0);" data="1B" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-b" type="seat-b" href="javascript:void(0);" data="1B" onclick ="selseat(this);"></a>';
}
}
if($c1){
$html .= '<a class="seat-c selected_seat-c selected" type="seat-c" href="javascript:void(0);" data="1C" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-c" type="seat-c" href="javascript:void(0);" data="1C" onclick ="selseat(this);"></a>';
}
if($v->train[0]->Aircraft != '9'){
if($d1){
$html .= '<a class="seat-d selected_seat-d selected" type="seat-d" href="javascript:void(0);" data="1D" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-d" type="seat-d" href="javascript:void(0);" data="1D" onclick ="selseat(this);"></a>';
}
}
if($f1){
$html .= '<a class="seat-f selected_seat-f selected" type="seat-f" href="javascript:void(0);" data="1F" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-f" type="seat-f" href="javascript:void(0);" data="1F" onclick ="selseat(this);"></a>';
}
$html .= '<div class="clear"></div></div>';
$html .= '<div class="seatPick">';
if($a2){
$html .= '<a class="seat-a selected_seat-a selected" type="seat-a" href="javascript:void(0);" data="2A" onclick ="selseat(this)";></a>';
}else{
$html .= '<a class="seat-a" type="seat-a" href="javascript:void(0);" data="2A" onclick ="selseat(this)";></a>';
}
if($v->train[0]->Aircraft == 'O' || $v->train[0]->Aircraft == '8'){
if($b2){
$html .= '<a class="seat-b selected_seat-b selected" type="seat-b" href="javascript:void(0);" data="2B" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-b" type="seat-b" href="javascript:void(0);" data="2B" onclick ="selseat(this);"></a>';
}
}
if($c2){
$html .= '<a class="seat-c selected_seat-c selected" type="seat-c" href="javascript:void(0);" data="2C" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-c" type="seat-c" href="javascript:void(0);" data="2C" onclick ="selseat(this);"></a>';
}
if($v->train[0]->Aircraft != '9'){
if($d2){
$html .= '<a class="seat-d selected_seat-d selected" type="seat-d" href="javascript:void(0);" data="2D" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-d" type="seat-d" href="javascript:void(0);" data="2D" onclick ="selseat(this);"></a>';
}
}
if($f2){
$html .= '<a class="seat-f selected_seat-f selected" type="seat-f" href="javascript:void(0);" data="2F" onclick ="selseat(this);"></a>';
}else{
$html .= '<a class="seat-f" type="seat-f" href="javascript:void(0);" data="2F" onclick ="selseat(this);"></a>';
}
$html .= '<div class="clear"></div></div>';
if($v->train[0]->Aircraft != 'F'){
echo $html;
}
}
?>
</td>
</tr>
<tr style="text-align:;">
<td>
<button type="button" class="btn btn-success checked_pay" data-order="<?php echo $v->train[0]->FOI_COLD_SN;?>">聚合订票</button>
</td>
<td colspan="4" class="biaoqian"><span class="back_mes" style="color:red;line-height: 30px;"></span>
</td>
</tr>
<tr style="text-align:;">
<td>
<button type="button" class="btn btn-success ctrip_pay" data-order="<?php echo $v->train[0]->FOI_COLD_SN;?>">携程订票</button>
</td>
<td colspan="4" class="biaoqian"><span class="ctrip_back_mes" style="color:red;line-height: 30px;"></span>
</td>
</tr>
<tr style="text-align:;">
<td>
<button type="button" class="btn btn-success grab_ticket" data-order="<?php echo $v->train[0]->FOI_COLD_SN;?>">抢票</button>
</td>
<td colspan="4">
<span class="grab_config"><a style="text-decoration:none;cursor:pointer;">点击打开配置清单</a></span>
<p class="grab_mes" style="color:red;line-height: 30px;"></p>
<table class="table table-condensed table-bordered grab_config_table hidden">
<tbody>
<tr>
<td colspan="2"><span style="float:left">截止时间 : <input type="text" name="deadline" class="date"/> 示例2018-03-22 17:00:00(必填)</span></td>
<td colspan="2"><span style="float:left">备选车次 : <input type="text" name="alternate_train"/> 示例:["k10","G10"]</span></td>
<td colspan="2"><span style="float:left">备选座位 : <input type="text" name="alternate_seat"/> 示例:["1","2"]</span></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr id="back_<?php echo $v->train[0]->FOI_COLD_SN;?>" style="display:none;">
<td colspan="5">
快捷订票处理结果:<span style="color:red;"></span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<?php endforeach;endif;?>
</div>
</div>
</div>
<script>
var url="<?php echo site_url('apps/train/index/submit_juhe_order?').'order=';?>";
var order_ul="<?php echo site_url('apps/train/index/order?').'order=';?>";//订单详情页面
$(".pay_api").click(function(){
// alert(url+$(this).attr("data-order"));
var THIS=$(this);
var order=$(this).attr("data-order");
var selectseat = '';
$(this).parent().parent().next().find('.selected').each(function(){
if($(this).hasClass('selected')){
selectseat += $(this).attr('data');
}
});
$.ajax({
url:url+$(this).attr("data-order")+'&selectseat='+selectseat,
beforeSend:function(data){
THIS.html("处理中...");
THIS.attr("disabled","disabled")
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("快捷订票");
if(data.status==1){
THIS.parent().html("<a href='"+order_ul+data.order+"' target='_blank'>订单详情</a>");
}
$("#back_"+order+" span").html(data.mes);
$("#back_"+order).show();
},
dataType: "json",
});
return false;
});
$(".check_people").click(function(){
if($(this).is(":checked")){
$(this).parent().parent().parent().parent().find("input[type=checkbox]").attr("checked","checked");
}else{
$(this).parent().parent().parent().parent().find("input[type=checkbox]").removeAttr("checked");
}
});
//聚合出票
$(".checked_pay").click(function(){
var url2="<?php echo site_url('apps/trainsystem/addorders/booktickets?').'order=';?>";
var checkbox=$(this).parent().parent().parent().find(":checked");
var people_sn="";
checkbox.each(function(i){
people_sn+=","+$(this).val();
});
var selectseat = '';
$(this).parent().parent().prev().find('.selected').each(function(){
if($(this).hasClass('selected')){
selectseat += $(this).attr('data');
}
});
people_sn=people_sn.substring(1);
url2+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=juhe";
var THIS=$(this);
THIS.parent().parent().find(".back_mes").html(" ");//清空提示
$.ajax({
url:url2,
beforeSend:function(data){
THIS.html("处理中...");
THIS.attr("disabled","disabled");
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("聚合订票");
var str = "<a href='http://www.mycht.cn/info.php/apps/trainsystem/pages/order?order="+data.order+"' target='_blank'>"+data.mes+"</a>";
THIS.parent().parent().find(".back_mes").html(str);
},
dataType: "json",
});
return false;
});
//携程出票
$(".ctrip_pay").click(function(){
var ctrip_url="<?php echo site_url('apps/trainsystem/addorders/booktickets?').'order=';?>";
var checkbox=$(this).parent().parent().parent().find(":checked");
var people_sn="";
checkbox.each(function(i){
people_sn+=","+$(this).val();
});
var selectseat = '';
$(this).parent().parent().prev().prev().find('.selected').each(function(){
if($(this).hasClass('selected')){
selectseat += $(this).attr('data')+',';
}
});
selectseat=selectseat.substr(0,selectseat.length-1);
people_sn=people_sn.substring(1);
ctrip_url+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=ctrip";
var THIS=$(this);
THIS.parent().parent().find(".ctrip_back_mes").html(" ");//清空提示
$.ajax({
url:ctrip_url,
beforeSend:function(data){
THIS.html("处理中...");
THIS.attr("disabled","disabled")
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("携程订票");
var str = "<a href='http://www.mycht.cn/info.php/apps/trainsystem/pages/order?order="+data.order+"' target='_blank'>"+data.mes+"</a>";
THIS.parent().parent().find(".ctrip_back_mes").html(str);
},
dataType: "json",
});
return false;
});
//抢票清单
$('.grab_config').click(function(){
var table = $(this).next().next('.grab_config_table');
if(table.hasClass('hidden')){
table.removeClass('hidden');
}else{
table.addClass('hidden');
}
});
//开始抢票
$('.grab_ticket').click(function(){
var url2="<?php echo site_url('apps/train/tuniu_train/grabTicketBook?').'order=';?>";
var checkbox=$(this).parent().parent().parent().find(":checked");
var people_sn="";
checkbox.each(function(i){
people_sn+=","+$(this).val();
});
people_sn=people_sn.substring(1);
// var coli_id = $('input[name="ht_order"]').val();
var deadline = $(this).parent().next().find('.date').val();
var alternate_train = $('input[name="alternate_train"]').val();
var alternate_seat = $('input[name="alternate_seat"]').val();
url2+=$(this).attr("data-order")+"&people="+people_sn+"&deadline="+deadline+"&alternate_train="+alternate_train+"&alternate_seat="+alternate_seat;
var THIS=$(this);
THIS.parent().parent().find(".back_mes").html(" ");//清空提示
$.ajax({
url:url2,
beforeSend:function(data){
THIS.html("处理中...");
THIS.attr("disabled","disabled");
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("抢票");
THIS.parent().next().find(".grab_mes").html(data.mes);
},
dataType: "json",
});
return false;
});
</script>

@ -0,0 +1,64 @@
<script type="text/javascript" src="https://data.chinahighlights.com/js/train/StationInfo.js"></script>
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary" style="width:60%;margin:0 auto;">
<div class="panel-heading">
<h3 class="panel-title"><?php echo $train_date;?>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $checi;?>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo isset($elecnumber)?$elecnumber:"";?></h3>
</div>
<div class="panel-body">
<?php if((int)$status>1):?>
<p style="display:inline-block"><?php echo $from_station_name;?><span class="from_station_en"> </span><br><span class="start_time"></span></p><span class="glyphicon glyphicon-arrow-right"> </span><p style="display:inline-block"> <?php echo $to_station_name;?><span class="to_station_en"> </span><br><span class="arrive_time"></span></p>
<?php foreach ($passengers as $v):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p><?php echo @$v->tst_realname."({$v->tst_identitytype})&nbsp;&nbsp;&nbsp;&nbsp;{$v->tst_seatstype}&nbsp;&nbsp;{$v->tst_seatdetail}&nbsp;&nbsp;&nbsp;&nbsp;票价:¥{$v->tst_ticketprice}";?></p>
<?php endforeach;?>
<?php if((int)$status === 4):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p>出票成功</p>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">前往退票 <span class="glyphicon glyphicon-forward"></span></a></p>
<?php endif;?>
<?php if((int)$status === 6):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p>正在处理退票</p>
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>
<?php endif;?>
<?php if((int)$status === 7):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p><?php echo $msg;?></p>
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>
<?php endif;?>
<?php else:?>
<p><?php echo $msg;?></p>
<?php endif;?>
</div>
</div>
</div>
<script>
var StationInfoArr = StationInfo.split("@");
var StationNameArr = new Array();
var code_name = new Array();
var station_cn_en = new Array();
var form_data = {};
for (var i = 0; i < StationInfoArr.length; ++i) {
StationNameArr.push(StationInfoArr[i].split("|"));
code_name[StationNameArr[i][1]] = [StationNameArr[i][2]];
station_cn_en[StationNameArr[i][3]] = StationNameArr[i][2];
}
console.log(station_cn_en);
$(function(){
var from_station_en = code_name['<?php echo $from_station_code?>'];
var to_station_en = code_name['<?php echo $to_station_code?>'];
var start_date = '<?php echo $train_date?>';
var start_time = '<?php echo $start_time?>';
var arrive_time = '<?php echo $arrive_time?>';
//console.log(code_name);
$('.from_station_en').html('('+from_station_en+') ');
$('.to_station_en').html('('+to_station_en+')');
$('.start_time').html('('+start_date+' '+start_time+')');
$('.arrive_time').html('('+start_date+' '+arrive_time+')');
});
</script>

@ -0,0 +1,101 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">订单搜索</h3>
</div>
<div class="panel-body">
<div class="row">
<form style="" action="" method="get">
<div class="col-md-6">
<input class="form-control" type="text" placeholder="汉特订单号或聚合订单号" name="order" value="<?php echo !empty($order)?"$order":"";?>" autocomplete="off">
</div>
<div class="col-md-4">
<select class="form-control" name="web_code">
<option value ="分站点查询,默认商旅" disabled="disabled" selected>分站点查询,默认全站</option>
<option value ="CHT">商旅</option>
<option value ="jp">日本</option>
<option value="train_vac">西班牙</option>
<option value="train_it">意大利</option>
<option value="train_ru">俄罗斯</option>
<option value="train_vc">法国</option>
</select>
</div>
<!--<div class="col-md-5">
<input type="text" name="from_date" class="date" value="" class="">
<input type="text" name="to_date" class="date" value="">
</div>-->
<div class="col-md-5">
<button type="submit" id="sub" class="btn btn-success btn-sm"><span class="glyphicon glyphicon-search"></span> 搜索</button>
</div>
</form>
</div>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">订单列表</h3>
</div>
<div class="panel-body">
<table class="table table-striped" style="text-align:center;">
<thead>
<tr>
<th style="text-align:center;">序号</th>
<th style="text-align:center;">汉特订单号(商家订单号)</th>
<th style="text-align:center;">聚合订单号</th>
<th style="text-align:center;">车次</th>
<th style="text-align:center;">出发</th>
<th style="text-align:center;">到达</th>
<th style="text-align:center;">状态</th>
<th style="text-align:center;">价格</th>
<th style="text-align:center;">提交时间</th>
<th style="text-align:center;">所属部门</th>
<th style="text-align:center;">渠道</th>
<th style="text-align:center;">出票方式</th>
<th style="text-align:center;">是否发送邮件</th>
<th style="text-align:center;">操作</th>
</tr>
</thead>
<tbody>
<?php $num=0; foreach($data as $v):?>
<tr>
<td><?php echo ++$num;?></td>
<td><?php echo $v->COLI_ID.'('.$v->ts_cold_sn.')';?></td>
<td><?php echo $v->ts_ordernumber;?></td>
<td><?php echo $v->ts_checi;?></td>
<td><?php echo $v->ts_fromstationame;?></td>
<td><?php echo $v->ts_tostationame;?></td>
<td><?php echo $v->info;?></td>
<td><?php echo $v->ts_orderamount;?></td>
<td><?php echo $v->ts_subtime;?></td>
<td><?php echo $v->COLI_WebCode;?></td>
<td><?php echo $v->ts_channel;?></td>
<?php
if($v->ts_isauto == 1){
echo '<td>自动</td>';
}elseif($v->ts_isauto == 0){
echo '<td>手动</td>';
}elseif($v->ts_isauto == 3){
echo '<td>抢票</td>';
}
?>
<?php
if($v->ts_sendmail == 1){
if($v->ts_m_sn){
echo '<td><a target="_blank" href="http://www.mycht.cn/info.php/apps/train/index/get_mailinfo/'.$v->ts_m_sn.'"></a></td>';
}else{
echo '<td></td>';
}
}else{
echo '<td></td>';
}
?>
<td><a target="_blank" href="order?order=<?php echo $v->ts_ordernumber;?>">详情</a></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<div style="text-align:right;"><ul class="pagination"><?php echo $page_link;?></ul></div>
</div>
</div>
</div>

@ -0,0 +1,48 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary" style="width:60%;margin:0 auto;">
<div class="panel-heading">
<h3 class="panel-title"><?php echo $train_date;?>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $checi;?>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo isset($elecnumber)?$elecnumber:"";?></h3>
</div>
<div class="panel-body">
<?php
foreach ($passengers as $items){
echo '<p>'.$from_station_name.'<span class="glyphicon glyphicon-arrow-right"></span>'.$to_station_name.'</p>';
echo '<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>';
echo '<p>'.$items->tst_realname.'('.$items->tst_ticketype.')&nbsp;&nbsp;&nbsp;&nbsp;'.$items->tst_seatstype.'&nbsp;&nbsp;'.$items->tst_seatdetail.'&nbsp;&nbsp;&nbsp;&nbsp;票价:¥'.$items->tst_ticketprice.'</p>';
if((int)$items->tst_status != 7){
echo '<p>';
echo '<a href="###" style="padding:5px 15px;" class="btn btn-warning btn-sm returnticket" name="'.$items->tst_realname.'" passid="'.$items->tst_numberid.'"><span class="glyphicon glyphicon-remove"></span>退票</a>';
echo '</p>';
}else{
$info = json_decode($items->tst_returncallback);
echo '<p><table class="table table-bordered table-hover" style="text-align:center;"><tr><th colspan="2" style="text-align:center;">退票处理</th></tr>';
echo '<tr><td>'.$items->tst_lasteditdate.'</td>';
echo '<tr><td>'.$msg.'</td></tr></table></p>';
}
}?>
</div>
</div>
</div>
<script>
$(function(){
$('.returnticket').click(function(){
var url = <?php echo "'http://www.mycht.cn/info.php/apps/trainsystem/returnorders/returntickets?ordernumber=$ordernumber'"?>;
var return_ticket = $(this);
name = $(this).attr('name');
passid = $(this).attr('passid');
url += '&passportname='+name+'&passportno='+passid;
//console.log(url);return false;
$.ajax({
url:url,
success:function(json){
alert('请求成功,正在处理退票...');
return_ticket.html('退票成功');
},
error:function(json){
alert('请求失败,请重新请求...');
return_ticket.html('退票失败');
}
});
});
});
</script>

@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>c21</Author>
<LastAuthor>c21</LastAuthor>
<Created>2016-12-23T01:21:46Z</Created>
<LastSaved>2016-12-23T01:38:10Z</LastSaved>
<Version>12.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>9630</WindowHeight>
<WindowWidth>21555</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>90</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="m58993952">
<Alignment ss:Horizontal="Right" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="m58993972">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="20"
ss:Color="#000000" ss:Bold="1"/>
</Style>
<Style ss:ID="m58993992">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="s78">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
</Style>
<Style ss:ID="s79">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
<NumberFormat ss:Format="General Date"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<?php $num=count($arr);?>
<Table ss:ExpandedColumnCount="6" ss:ExpandedRowCount="<?php echo $num+6;?>" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Column ss:AutoFitWidth="0" ss:Width="115.5"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="100.5"/>
<Column ss:AutoFitWidth="0" ss:Width="62.25"/>
<Column ss:AutoFitWidth="0" ss:Width="203.25"/>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="5" ss:MergeDown="1" ss:StyleID="m58993952"><Data
ss:Type="String">苏州新科兰德科技有限公司&#10;地址苏州市园区启月街288号紫金东方307室&#10;联系电话051262391880&#10;开户银行:浙商银行苏州分行&#10;公司名称:苏州新科兰德科技有限公司&#10;银行账号3050020010120100129207&#10;跟踪号:<?php echo $arr[0]['trackcode'];?></Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="99.75"/>
<Row ss:AutoFitHeight="0" ss:Height="42">
<Cell ss:MergeAcross="5" ss:StyleID="m58993972"><Data ss:Type="String">桂林海纳国际旅行社有限公司火车票对账文件</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s78"><Data ss:Type="String">时间</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">信息</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">购票人</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">团名</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">变化值</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">最新余额</Data></Cell>
</Row>
<?php for($i=$num-1;$i>=0;$i--){?>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s79"><Data ss:Type="String"><?php echo $arr[$i][2];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i][3];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i][7];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i][6];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="Number"><?php echo $arr[$i][1];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="Number"><?php echo $arr[$i][5];?></Data></Cell>
</Row>
<?php }?>
<Row ss:AutoFitHeight="0" ss:Height="36">
<Cell ss:MergeAcross="5" ss:StyleID="m58993992"><Data ss:Type="String">苏州新科兰德科技有限公司©版权所有 苏ICP备14006450号-3 增值电信业务经营许可证苏B2-20140496</Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>4</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>
Loading…
Cancel
Save