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(''.$string.'
'); + } + + //创建一个方法用于接收所有的出票请求 + 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(''.$string.'
'); + } + + //创建一个方法用于接收所有的出票请求 + 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 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/common/header.php b/application/third_party/trainsystem/views/common/header.php new file mode 100644 index 00000000..57025d13 --- /dev/null +++ b/application/third_party/trainsystem/views/common/header.php @@ -0,0 +1,131 @@ + + + + + 出票系统 + + + + + + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/email.php b/application/third_party/trainsystem/views/email.php new file mode 100644 index 00000000..1fe9c49e --- /dev/null +++ b/application/third_party/trainsystem/views/email.php @@ -0,0 +1,33 @@ + +China train ticket(s) confirmed, Booking Number <?php echo $coli_id;?>

    China Highlights Booking Confirmation

    Dear ,

    Thank you for your payment of US$GAI_SQJE?> . The train tickets have already been issued.

    You can collect the paper ticket(s) from now on at any train station in mainland China.

    Please note:

    1.Please present the original passport(s) of all the passenger(s) and the ticket pick-up number(s) at ticket collection counters. The counter will then issue your paper train ticket(s).

    +

    See the video about how to collect the ticket(s) in China. +

    2.Please double check the train(s) information and passport information. Let us know AT ONCE if you see any mistakes below. We can try to cancel tickets to minimize your loss. A 20% cancellation fee is charged by China Railway.

    Ticket collection sentences

    The bilingual note below might help you pick up tickets at the ticket collection counter more easily.

    1.Please show me which window for picking up the train ticket. 你好,请问哪个是取票窗?

    2.Please issue the paper tickets for me. The following is the pick up number(s).请帮我出票,电子取票号如下.

    + + + Pick up number'; + echo ''.$item->FOI_TrainNetOrderNo.''; + echo 'Train No.'; + echo ''.$item->FlightsNo.''; + echo 'Departure'; + echo ''.$item->DepartureTime.' '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站)'; + echo 'Arrival'; + echo ''.$item->ArrivalTime.' '.$item->ArrivalCity.' Station(in Chinese '.$item->ArrivalAirport_cn.'火车站)'; + echo 'Class'; + echo ''.$item->Cabin.' ('.$seatinfo.')'; + } +?> +
    Passenger(s)

    0){echo $adult.' adult(s) ';} + if($chlid>0){echo $chlid.' chlid(s) ';} + if($baby>0){echo $baby.' baby(s) ';} + ?>

    BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'
    '; + } + ?>

    +

    3.On your departure day, please time your arrival at the station wisely. If you are going to collect your train ticket(s) on the departure day, allow enough time waiting in the queue of the ticket collection counter, for the security x-ray check of your luggage, and for the ticket check before entering the passenger lounge. Tickets will stop being issued 30 minutes prior to departure. We suggest you be at the station at least 1.5 hours ahead of the stated departure time. Please leave at least 2.5 hours during public holidays.

    4.If you’ve already collected your ticket before the departure day, we recommend that you be at the station at least 40 minutes ahead of time. Please be at the station at least 1.5 hours during a public holiday.

    5.Please don't throw your ticket(s) away because you'll need it to exit the station.

    6.If you cancel the ticket(s) at a train station yourself, the money will be refunded to our account. Please cancel the tickets before the train departure. And email us then we will refund you accordingly.

    7.China Highlights train ticket booking policy

    Should you have any questions about your train ticket bookings, please do not hesitate to contact me.

    +

    Best Regards!

    Name?>, Travel Advisor

    Tel: tel;?> Mobile: Mobile;?>

    Fax: 86-773-2827424, 86-773-2885308

    E-mail: ;;

    WeChat: CH_train

    www.chinahighlights.com

    Address: Building 6, Chuangyi Business Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China

    If you wish to share anything with my supervisor (Ms. ethel), please feel free to send your email to ethel@chinahighlights.net.

    diff --git a/application/third_party/trainsystem/views/email_before.php b/application/third_party/trainsystem/views/email_before.php new file mode 100644 index 00000000..2a077a6c --- /dev/null +++ b/application/third_party/trainsystem/views/email_before.php @@ -0,0 +1,48 @@ + +China Highlights Booking Confirmation

    China Highlights Booking Confirmation

    Dear ,

    Thanks for payment US$GAI_SQJE?> . The train tickets have already been issued.

    You can collect the paper ticket(s) from now at any train station in mainland China.

    The same passport that was used for booking should also be used for ticket collection. A renewed passport won't be acceptable even if the holder is the same person. The system does not allow us to change passport number or passenger name after issue ticket. Have to issue new ticket if wrong passport number or name.

    Please collect your paper tickets from a ticket counter in the train station. Tickets will stop being printed 30 minutes prior to departure. On departure day, please time your arrival wisely. If you are going to collect your tickets on departure day, allow for time waiting in queue at the ticket-counter, for security checks and for ticket checks. We suggest you be at the station at least 1.5 hours ahead of the stated departure time.

    If you’ve already collected before the departure day, it is also wise to be at the station at least 40 minutes ahead.

    Passenger(s)

    0){echo $adult.' adult(s) ';} + if($chlid>0){echo $chlid.' chlid(s) ';} + if($baby>0){echo $baby.' baby(s) ';} + ?>

    BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'
    '; + } + ?>

    +Train'.++$j.':

    '; + echo ' + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '
    Ticket Pick Up No.'.$item->FOI_TrainNetOrderNo.'
    Train No.'.$item->FlightsNo.'
    Departure'.$item->DepartureTime.' '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站)
    Arrival'.$item->ArrivalTime.' '.$item->ArrivalCity.' Station(in Chinese '.$item->ArrivalAirport_cn.'火车站)
    Class'.$item->Cabin.'
    '; + } +?> +

    Kindly note below:

    1.Please present all passenger(s) original passport(s) and Ticket Pick Up No.FOI_TrainNetOrderNo?>at any ticket counters of any railway stations. They will then issue your paper train ticket(s). You can find more instruction of collecting tickets enclosure. +

    2.You can show screenshot of the paper tickets to the railway station counter. It helps get paper tickets easily.

    +'; + echo ''; + echo ' '.substr($obj->DepartureDate,0,10).'   '.$obj->FlightsNo.'   '.$obj->FOI_TrainNetOrderNo.''; + echo '

    '.$obj->DepartAirport_cn.'('.$obj->DepartureCity.')'.$obj->DepartureTime.' To '.$obj->ArrivalAirport_cn.'('.$obj->ArrivalCity.')'.$obj->ArrivalTime.'

    '; + foreach($juhe_info->passengers as $people){ + echo ''; + echo '

    '.$people->passengersename.'('.$people->piaotypename.') '; + echo $people->cxin.' 票价:¥'.$people->price.'

    '; + echo ''; + } + echo '

    出票成功

    '; + } +?> +

    3. There is no further fee if collect train ticket(s) at the DEPARTURE station shown on your ticket(s). RMB 5 per ticket will be charged at the ticket counter at other stations. Return tickets are treated separately. E.g. if you have booked Beijing-Shanghai and Shanghai-Beijing ticket(s), and you collect them all at Beijing, you will be charged RMB 5 per ticket for the Shanghai-Beijing ticket(s), but if you pick up the return leg ticket(s) separately in Shanghai you will avoid the charge.

    4. Please keep your ticket(s) and don't throw your ticket(s) away once you've boarded your train, you'll need it to exit the station.

    5.Download railway station instructions, maps and tips at https://www.chinahighlights.com/china-trains/station-map.htm

    6.Terms & Conditions. https://www.chinahighlights.com/china-trains/booking-policy.htm

     

    +

    Best Regards!

    Name?>, Travel Advisor

    Tel: tel;?> Mobile: Mobile;?>

    Fax: 86-773-2827424, 86-773-2885308

    E-mail: ;;

    www.chinahighlights.com

    Address: Building 6, Chuangyi Business Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China

    If you wish to share anything with my supervisor (Ms. Alex Yang), please feel free to send your email to alex@chinahighlights.net.

    diff --git a/application/third_party/trainsystem/views/email_fault.php b/application/third_party/trainsystem/views/email_fault.php new file mode 100644 index 00000000..a059912b --- /dev/null +++ b/application/third_party/trainsystem/views/email_fault.php @@ -0,0 +1,26 @@ +

    Dear ,

    Thank you for your booking (order number ), we have received your payment of USDGAI_SQJE?>. 

    Due to the heavy traffic flow of data, the system failed to automatically issue your ticket(s).

    Your travel advisor will purchase your train ticket(s) manually.  You will receive an email within half a working day (Our time now: , , GMT+8).Should you have any questions or concerns with regards to your train booking, please do not hesitate to contact me at ; or telephone tel;?>.

    +'; + echo 'Train No. '; + echo ''.$item->FlightsNo.''; + echo 'Departure '; + echo ''.$item->DepartureTime.', '.$item->DepartureCity.' Station(in Chinese '.$item->DepartAirport_cn.'火车站) '; + echo 'Arrival '.$item->ArrivalTime.', '.$item->ArrivalCity.'(in Chinese'. $item->ArrivalAirport_cn.'火车站)  '; + echo 'Class '.$item->Cabin.''; + echo 'Passenger(s) '; + echo ''; + if($adult>0){echo $adult.' adult(s)
    ';} + if($chlid>0){echo $chlid.' chlid(s)
    ';} + if($baby>0){echo $baby.' baby(s)
    ';} + $i=0; + foreach($allpeople as $item){ + echo ++$i.'.'.$item->BPE_FirstName.$item->BPE_MiddleName.$item->BPE_LastName.' , passport number '.$item->BPE_Passport.'
    '; + } + echo ''; + echo '

    Regards
    '; + echo $operator[0]->Name.'
    Travel Advisor
    '; + echo 'Telephone: (Office)'.$operator[0]->tel.', M: '.$operator[0]->Mobile.','; + echo 'Email: '.$emailarr[0].';'.$emailarr[1].'

    '; + }?> + + diff --git a/application/third_party/trainsystem/views/export.php b/application/third_party/trainsystem/views/export.php new file mode 100644 index 00000000..1da65ee6 --- /dev/null +++ b/application/third_party/trainsystem/views/export.php @@ -0,0 +1,110 @@ +
    +
    +
    +

    交易记录导出 订单列表>>

    +
    +
    +
    + " autocomplete="off">至 + " autocomplete="off"> + 审核状态: name="examine" />    + +
    +

    + +

    " style="width:90%;margin:0 auto;"> +
    + + + + + + + $value) {?> + + + + + + +
    时间信息变化值团名外联
    +
    +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/footer.php b/application/third_party/trainsystem/views/footer.php new file mode 100644 index 00000000..b231b902 --- /dev/null +++ b/application/third_party/trainsystem/views/footer.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/header.php b/application/third_party/trainsystem/views/header.php new file mode 100644 index 00000000..42e3dff2 --- /dev/null +++ b/application/third_party/trainsystem/views/header.php @@ -0,0 +1,156 @@ + + + + + + 信息平台 + + + + + + + + + + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/homepage.php b/application/third_party/trainsystem/views/homepage.php new file mode 100644 index 00000000..832859b3 --- /dev/null +++ b/application/third_party/trainsystem/views/homepage.php @@ -0,0 +1,511 @@ + + +
    +
    +
    +

    翰特订单号 订单列表>>导出交易记录>> 版本:V2.0聚合余额(RMB):

    +
    +
    +
    + "> + +
    +

    外联:OPI_Name;}?>

    +
    +
    +
    +
    +

    火车订单信息

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    序号车次座位出发城市抵达城市发车日期发车时间抵达时间票价是否提交过
    train[0]->FlightsNo;?>train[0]->Cabin;?>train[0]->DepartureCity;?>train[0]->ArrivalCity;?>train[0]->DepartureDate;?>train[0]->DepartureTime;?>train[0]->ArrivalTime;?>train[0]->adultcost;?>status)?"否":"";?>
    + + + + + + + + + + + + people as $key=>$p): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    序号姓名护照年龄类型
    BPE_FirstName." ".$p->BPE_MiddleName." ".$p->BPE_LastName;?>BPE_Passport;?>BPE_GuestType==1?"成人":($p->BPE_GuestType==2?"儿童":"婴儿");?>
    + train[0]->FlightsNo,0,1); + $arr = array('C','D','G'); + $sel_count = 0; + if(in_array($traintype,$arr)){ + $selectseat = ''; + $train_select = $v->train[0]->FOI_SelectedSeat; + $a1=$b1=$c1=$d1=$f1=$a2=$b2=$c2=$d2=$f2=false; + if($train_select){ + $obj = explode(',',$train_select); + foreach($obj as $value){ + switch($value){ + case '1A': + $a1 = true; + $sel_count++; + break; + case '1B': + $b1 = true; + $sel_count++; + break; + case '1C': + $c1 = true; + $sel_count++; + break; + case '1D': + $d1 = true; + $sel_count++; + break; + case '1F': + $f1 = true; + $sel_count++; + break; + case '2A': + $a2 = true; + $sel_count++; + break; + case '2B': + $b2 = true; + $sel_count++; + break; + case '2C': + $c2 = true; + $sel_count++; + break; + case '2D': + $d2 = true; + $sel_count++; + break; + case '2F': + $f2 = true; + $sel_count++; + break; + } + } + } + $html = ''; + $html .= '
    '.$v->train[0]->Cabin.' for '.$v->train[0]->FlightsNo.' ('.$sel_count.' of '.count($v->people).' Seats)
    '; + $html .= '
    '; + if($a1){ + $html .= ''; + }else{ + $html .= ''; + } + + if($v->train[0]->Aircraft == 'O' || $v->train[0]->Aircraft == '8'){ + if($b1){ + $html .= ''; + }else{ + $html .= ''; + } + + } + if($c1){ + $html .= ''; + }else{ + $html .= ''; + } + + if($v->train[0]->Aircraft != '9'){ + if($d1){ + $html .= ''; + }else{ + $html .= ''; + } + + } + if($f1){ + $html .= ''; + }else{ + $html .= ''; + } + + $html .= '
    '; + $html .= '
    '; + if($a2){ + $html .= ''; + }else{ + $html .= ''; + } + + if($v->train[0]->Aircraft == 'O' || $v->train[0]->Aircraft == '8'){ + if($b2){ + $html .= ''; + }else{ + $html .= ''; + } + + } + if($c2){ + $html .= ''; + }else{ + $html .= ''; + } + + if($v->train[0]->Aircraft != '9'){ + if($d2){ + $html .= ''; + }else{ + $html .= ''; + } + + } + if($f2){ + $html .= ''; + }else{ + $html .= ''; + } + + $html .= '
    '; + + if($v->train[0]->Aircraft != 'F'){ + echo $html; + } + } + ?> +
    + + +
    + + +
    + + + 点击打开配置清单 +

    + + + + + + + + + +
    +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/order.php b/application/third_party/trainsystem/views/order.php new file mode 100644 index 00000000..10df6de3 --- /dev/null +++ b/application/third_party/trainsystem/views/order.php @@ -0,0 +1,64 @@ + +
    +
    +
    +

            

    +
    +
    + 1):?> +



    + +

    +

    tst_realname."({$v->tst_identitytype})    {$v->tst_seatstype}  {$v->tst_seatdetail}    票价:¥{$v->tst_ticketprice}";?>

    + + +

    +

    出票成功

    +

    +

    前往退票

    + + + +

    +

    正在处理退票

    +

    查看详情

    + + + +

    +

    +

    查看详情

    + + +

    + +
    +
    +
    + + diff --git a/application/third_party/trainsystem/views/order_list.php b/application/third_party/trainsystem/views/order_list.php new file mode 100644 index 00000000..28108f3a --- /dev/null +++ b/application/third_party/trainsystem/views/order_list.php @@ -0,0 +1,101 @@ +
    +
    +
    +

    订单搜索

    +
    +
    +
    +
    +
    + " autocomplete="off"> +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    +
    +

    订单列表

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ts_isauto == 1){ + echo ''; + }elseif($v->ts_isauto == 0){ + echo ''; + }elseif($v->ts_isauto == 3){ + echo ''; + } + ?> + ts_sendmail == 1){ + if($v->ts_m_sn){ + echo ''; + }else{ + echo ''; + } + }else{ + echo ''; + } + ?> + + + + +
    序号汉特订单号(商家订单号)聚合订单号车次出发到达状态价格提交时间所属部门渠道出票方式是否发送邮件操作
    COLI_ID.'('.$v->ts_cold_sn.')';?>ts_ordernumber;?>ts_checi;?>ts_fromstationame;?>ts_tostationame;?>info;?>ts_orderamount;?>ts_subtime;?>COLI_WebCode;?>ts_channel;?>自动手动抢票详情
    +
    +
    +
    +
    \ No newline at end of file diff --git a/application/third_party/trainsystem/views/refund.php b/application/third_party/trainsystem/views/refund.php new file mode 100644 index 00000000..6eeeac99 --- /dev/null +++ b/application/third_party/trainsystem/views/refund.php @@ -0,0 +1,48 @@ +
    +
    +
    +

            

    +
    +
    + '.$from_station_name.''.$to_station_name.'

    '; + echo '

    '; + echo '

    '.$items->tst_realname.'('.$items->tst_ticketype.')    '.$items->tst_seatstype.'  '.$items->tst_seatdetail.'    票价:¥'.$items->tst_ticketprice.'

    '; + if((int)$items->tst_status != 7){ + echo '

    '; + echo '退票'; + echo '

    '; + }else{ + $info = json_decode($items->tst_returncallback); + echo '

    '; + echo ''; + echo '
    退票处理
    '.$items->tst_lasteditdate.'
    '.$msg.'

    '; + } + }?> +
    +
    +
    + \ No newline at end of file diff --git a/application/third_party/trainsystem/views/train_transaction_excel.php b/application/third_party/trainsystem/views/train_transaction_excel.php new file mode 100644 index 00000000..fd45ab3b --- /dev/null +++ b/application/third_party/trainsystem/views/train_transaction_excel.php @@ -0,0 +1,178 @@ + + + + + c21 + c21 + 2016-12-23T01:21:46Z + 2016-12-23T01:38:10Z + 12.00 + + + 9630 + 21555 + 0 + 90 + False + False + + + + + + + + + + + + + + + + + + + + 苏州新科兰德科技有限公司 地址:苏州市园区启月街288号紫金东方307室 联系电话:051262391880 开户银行:浙商银行苏州分行 公司名称:苏州新科兰德科技有限公司 银行账号:3050020010120100129207 跟踪号: + + + + 桂林海纳国际旅行社有限公司火车票对账文件 + + + 时间 + 信息 + 购票人 + 团名 + 变化值 + 最新余额 + + =0;$i--){?> + + + + + + + + + + + 苏州新科兰德科技有限公司©版权所有 苏ICP备14006450号-3 增值电信业务经营许可证:苏B2-20140496 + +
    + + +
    +