diff --git a/application/third_party/trainsystem/config/config.php b/application/third_party/trainsystem/config/config.php
new file mode 100644
index 00000000..7e4ddb07
--- /dev/null
+++ b/application/third_party/trainsystem/config/config.php
@@ -0,0 +1,107 @@
+"待处理",
+ "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;
\ No newline at end of file
diff --git a/application/third_party/trainsystem/config/constants.php b/application/third_party/trainsystem/config/constants.php
new file mode 100644
index 00000000..9d315fd5
--- /dev/null
+++ b/application/third_party/trainsystem/config/constants.php
@@ -0,0 +1,4 @@
+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 .= '
| 汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.' |
';
+ }else{
+ //单个订单提交
+ echo $cold_sn.'
';
+ $this->booktickets($cold_sn,$bpe_sn,'','juhe');
+ //$string .= '| 汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票 |
';
+ }
+ }
+ print_r('');
+ }
+
+ //创建一个方法用于接收所有的出票请求
+ 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);
+ }
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/controllers/api.php b/application/third_party/trainsystem/controllers/api.php
new file mode 100644
index 00000000..7091dbfd
--- /dev/null
+++ b/application/third_party/trainsystem/controllers/api.php
@@ -0,0 +1,342 @@
+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.'不需要发邮件
';
+ $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;$iBIZ_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.'该订单还未关联财务表,不能导出账单。
';
+ 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.'×tamp='.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);
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/controllers/callback.php b/application/third_party/trainsystem/controllers/callback.php
new file mode 100644
index 00000000..b6d36723
--- /dev/null
+++ b/application/third_party/trainsystem/controllers/callback.php
@@ -0,0 +1,320 @@
+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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/controllers/check.php b/application/third_party/trainsystem/controllers/check.php
new file mode 100644
index 00000000..0344df4d
--- /dev/null
+++ b/application/third_party/trainsystem/controllers/check.php
@@ -0,0 +1,528 @@
+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.'
';
+ if($sale_diff > 1){
+ $back_data = 0;
+ $back_message .= '-超过抢票时间';
+ }else if($sale_diff <0){
+ $back_data = 0;
+ $back_message .= '-未到抢票时间';
+ }
+ }
+ }
+
+ if($back_data == 0){
+ $string .= '| 汉特订单号:'.$coli_id.'('.$cold_sn.'/'.$this->isauto.')'.$back_message.' |
';
+ }else{
+ //单个订单提交
+ echo $cold_sn.'
';
+ //$this->booktickets($cold_sn,$bpe_sn,'','juhe');
+ //$string .= '| 汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票 |
';
+ }
+ }
+ print_r('');
+ }
+
+ //创建一个方法用于接收所有的出票请求
+ 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);
+ }
+
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/controllers/orders.php b/application/third_party/trainsystem/controllers/orders.php
new file mode 100644
index 00000000..51cde718
--- /dev/null
+++ b/application/third_party/trainsystem/controllers/orders.php
@@ -0,0 +1,18 @@
+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'] = '';
+ $config['cur_tag_close'] = '';
+ $config['first_tag_open']=$config['last_tag_open']=$config['next_tag_open']=$config['prev_tag_open']=$config['num_tag_open']="";
+ $config['first_tag_close']=$config['last_tag_close']=$config['next_tag_close']=$config['prev_tag_close']=$config['num_tag_close']="";
+
+ $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');
+ }
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/controllers/returnorders.php b/application/third_party/trainsystem/controllers/returnorders.php
new file mode 100644
index 00000000..078bf373
--- /dev/null
+++ b/application/third_party/trainsystem/controllers/returnorders.php
@@ -0,0 +1,153 @@
+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"}';
+ }
+ }
+
+
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/helpers/train_helper.php b/application/third_party/trainsystem/helpers/train_helper.php
new file mode 100644
index 00000000..d79db5e6
--- /dev/null
+++ b/application/third_party/trainsystem/helpers/train_helper.php
@@ -0,0 +1,89 @@
+
\ No newline at end of file
diff --git a/application/third_party/trainsystem/libraries/Des.php b/application/third_party/trainsystem/libraries/Des.php
new file mode 100644
index 00000000..b2ea6b5f
--- /dev/null
+++ b/application/third_party/trainsystem/libraries/Des.php
@@ -0,0 +1,59 @@
+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);
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/application/third_party/trainsystem/models/BIZ_train_model.php b/application/third_party/trainsystem/models/BIZ_train_model.php
new file mode 100644
index 00000000..bd392858
--- /dev/null
+++ b/application/third_party/trainsystem/models/BIZ_train_model.php
@@ -0,0 +1,492 @@
+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_ID(161014006M),获取子订单中火车订单的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);
+ }
+}
diff --git a/application/third_party/trainsystem/models/sendmail_model.php b/application/third_party/trainsystem/models/sendmail_model.php
new file mode 100644
index 00000000..98ec89bc
--- /dev/null
+++ b/application/third_party/trainsystem/models/sendmail_model.php
@@ -0,0 +1,157 @@
+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;
+ }
+
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/models/train_system_model.php b/application/third_party/trainsystem/models/train_system_model.php
new file mode 100644
index 00000000..9b84793a
--- /dev/null
+++ b/application/third_party/trainsystem/models/train_system_model.php
@@ -0,0 +1,267 @@
+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);
+ }
+}
\ No newline at end of file
diff --git a/application/third_party/trainsystem/views/addorders.php b/application/third_party/trainsystem/views/addorders.php
new file mode 100644
index 00000000..e69de29b
diff --git a/application/third_party/trainsystem/views/common/footer.php b/application/third_party/trainsystem/views/common/footer.php
new file mode 100644
index 00000000..b231b902
--- /dev/null
+++ b/application/third_party/trainsystem/views/common/footer.php
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+