You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/third_party/train/controllers/auto.php

628 lines
23 KiB
PHTML

<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
//[{"ticket_no":"E855807446107001B","passengername":"陈斯坤","passporttypeseid":"1","passportseno":"450521199406098313"}]
class Auto extends CI_Controller{
private $order_status_msg;//订单状态说明
private $key;
private $cx_api;//查询api
private $dp_api;//订票api
private $qxdd_api;//取消订单api
private $pay_api;//请求出票,支付
private $refund_api;//线上退票
private $status_api;//状态查询
private $code_zw;//座次信息
private $piaotype;//票种信息
private $passportty;//证件类型信息
public function __construct()
{
header("Content-Type: text/html;charset=utf-8");
parent::__construct();
$this->config->load('config');
$this->order_status_msg=$this->config->item('train_order_status_msg');
$this->key=JUHE_TRAIN_API_KEY;
$this->cx_api=JUHE_TRAIN_CX_API;
$this->dp_api=JUHE_TRAIN_DP_API;
$this->qxdd_api=JUHE_TRAIN_CANCEL_API;
$this->pay_api=JUHE_TRAIN_PAY_API;
$this->refund_api=JUHE_TRAIN_REFUND_API;
$this->status_api=JUHE_TRAIN_STATUS_API;
$this->code_zw=$this->config->item('train_zw');
$this->piaotype=$this->config->item('train_piaotype');
$this->passportty=$this->config->item('train_passportty');
$this->balance_api = "http://op.juhe.cn/trainTickets/balance.php";//余额
$this->load->model("BIZ_train_model");//加载模型
}
//index
public function index(){
echo 'index';
//print_r($black_list);
}
//用于自动发送确认信
public function send_confirmmail(){
//header('Location: http://www.mycht.cn/info.php/apps/trainsystem/api/send_confirmmail');
die();
$mailarr = $this->BIZ_train_model->auto_sendmail();
foreach($mailarr as $obj){
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($obj->JOL_COLD_SN);
$coli_id = $coli_id[0]->COLI_ID;
$juhe_order = $obj->JOL_JuheOrder;
$this->send_mail_to_guest($coli_id,$juhe_order);
}
}
//用于自动出票
public function auto_pay_ticket(){
//header('Location: http://www.mycht.cn/info.php/apps/trainsystem/addorders/auto_pay_ticket');
die();
date_default_timezone_set('Asia/Shanghai');
//$this->BIZ_train_model->auto_add();
//判断账户余额如果小于1000自动退出。
$post_data=array("key"=>$this->key);
$back_data=$this->post_data($this->balance_api,$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->ticketype = 1;
$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);
//print_r($train_info);
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不自动出票';
}
}
//单张票价不能大于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->ticketype = 3;
$time_obj = $this->BIZ_train_model->get_saletime($train_info['0']->DepartAirport_cn);
//print_r($time_obj);
if(!empty($time_obj)){
$saletime = strtotime($time_obj->TST_saletime);
//echo $saletime;
$sale_diff = (time() - $saletime) / 3600;
if($sale_diff > 1){
$back_data = 0;
$back_message .= '-超过抢票时间';
}else if($sale_diff <0){
$back_data = 0;
$back_message .= '-未到抢票时间';
}
}
}
if($back_data == 0){
$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.'</td></tr>';
}else{
//单个订单提交
$this->submit_juhe_order($cold_sn,$coli_id);
//$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票</td></tr>';
}
}
print_r('<table border="1">'.$string.'</table>');
}
//根据汉特订单明细表SN来获取车次乘客信息拼接成聚合提交订单的url
public function submit_juhe_order($cold_sn,$coli_id) {
// $cold_sn=$this->input->get("order");
$data = array();
$reback=array();//返回数据
$reback["status"]=0;
$reback["mes"]="";
// $reback["order"] = "123";
// return $reback;die;
if(!is_numeric($cold_sn)){
$reback["mes"]="订单号是数字";
echo json_encode($reback);
return false;
}
$data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn);
if (empty($data['train'])) {
//显示错误,找不到车次
$reback["mes"]="找不到车次";
echo json_encode($reback);
return false;
}
//选座功能
$selectseat = '';
$train_select = $data['train']->FOI_SelectedSeat;
$obj = explode(',',$train_select);
foreach($obj as $value){
$selectseat .= $value;
}
$data['people_list'] = $this->BIZ_train_model->biz_people($cold_sn);
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;
}
$db_train_zw = $this->config->item('db_train_zw');
$train_zw = $this->config->item('train_zw');
$passengers='';
foreach ($data['people_list'] as $key => $item) {
$zwcode = $db_train_zw[$data['train']->Aircraft]; //座位简码
$zwname = $train_zw[$db_train_zw[$data['train']->Aircraft]]; //座位名称
//乘客姓名(聚合要求名字中不能出现空格字符)
$passengersename = str_replace(' ','',$item->BPE_FirstName) . str_replace(' ','',$item->BPE_MiddleName) . str_replace(' ','',$item->BPE_LastName);
//将/替换掉
$passengersename = str_replace('/','',$passengersename);
$passengersename = $this->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 'Travel Permit from Hong Kong / Macau':
$passporttypeseid = "C";
$passporttypeseidname = "港澳通行证";
break;
case 'Travel Permit from Taiwan':
$passporttypeseid = "G";
$passporttypeseidname = "台湾通行证";
break;
default :
$passporttypeseid = "B";
$passporttypeseidname = "护照";
break;
}
$passportseno = str_replace(' ','',$item->BPE_Passport);
$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;
$url=$this->dp_api;
$post_data=array(
"key"=>$this->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
);
$arr = '';
foreach($post_data as $key=>$value){
$arr .= $key.'='.$value.';';
}
//return '汉特订单号:'.$coli_id.'-可以自动出票---'.$arr;
//echo '<br>';
//print_r($url);
//print_r($post_data);
//echo '<br>';
//print_r($post_data);
//die();
$bakc_json=$this->post_data($url,$post_data);
$bakc=json_decode($bakc_json);//json=>obj
$add_data=new StdClass();
$add_data->JOL_COLD_SN=(int)$cold_sn;
$add_data->JOL_Status="0";
$add_data->JOL_RebackMsg=$bakc->reason;
$add_data->JOL_FromStation=$data["train"]->DepartAirport_cn;
$add_data->JOL_ToStation=$data["train"]->ArrivalAirport_cn;
$add_data->JOL_FromStationCode=$data["train"]->DepartAirport;
$add_data->JOL_ToStationCode=$data["train"]->ArrivalAirport;
$add_data->JOL_TrainCode=$data["train"]->FlightsNo;
$add_data->JOL_BackTxt=$bakc_json;
if(!$bakc->error_code){
$add_data->JOL_JuheOrder=$bakc->result->orderid;
$reback["status"]=1;
$reback["order"]=$bakc->result->orderid;
$reback["mes"]="订单提交成功,等待回调";
//$this->send_mail_to_wl("订单:{$coli_id} 提交成功","翰特订单号:{$coli_id} ;聚合订单号:{$bakc->result->orderid}",$coli_id);
}else{
$add_data->JOL_JuheOrder=null;
$reback["mes"]= $bakc_json;
$add_data->JOL_Status="e";
// $this->send_mail_to_wl("订单:{$coli_id} 提交失败","翰特订单号:{$coli_id}",$coli_id);
}
//聚合返回数据之后记录到聚合订单表
$add_back_data=$this->BIZ_train_model->add_biz_jol($add_data,$this->ticketype);
return $reback;
}
public function ticket_status($coli_sn="",$jh_id=""){
if(empty($coli_sn)){
$coli_sn = $this->input->get("sn");
}
if(empty($jh_id)){
$jh_id = $this->input->get("reback");
}
if(empty($coli_sn) or empty($jh_id)){
echo "error";
return false;
}
$jh_id = explode(",", $jh_id);
$cold_sn = $this->BIZ_train_model->get_cold_sn($coli_sn);
$cols_id = $this->BIZ_train_model->coli_sn_get_coli_id($coli_sn);
if(empty($cold_sn)){
echo "error";
return false;
}else{
$list=new StdClass;
$list->info=array();
foreach ($cold_sn as $key => $v) {
$list->info[$key]=new StdClass;
$list->info[$key]->people=$this->BIZ_train_model->biz_people($v->COLD_SN);
$list->info[$key]->train=$this->BIZ_train_model->get_biz_foi($v->COLD_SN);
foreach ($jh_id as $jh_id_v) {
$list->info[$key]->order_info = $this->BIZ_train_model->get_biz_jol_info($v->COLD_SN,$jh_id_v);
if(!empty($list->info[$key]->order_info)) break;
}
}
}
$list->cols_id = $cols_id[0]->COLI_ID;
$this->load->view("ticket_status",$list);
}
//发邮件给外联
public function send_mail_to_wl($subject,$body,$coli_id){
//$subject = 'autopay ticket';
//$body = 'this is autopay ticket';
$this->load->model("Sendmail_model");
$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);
}
//发邮件给客人(测试)
public function send_mail_to_guest_old($coli_id,$jh_order){
$this->load->model("Sendmail_model");
$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['juhe_info'] = json_decode($obj->JOL_BackTxt);
$status = $obj->JOL_Status;
$data['operator'] = $operator_info;
$data['emailarr'] = explode(';',$operator_info[0]->Email);
$coach = array();
$seats = array();
$string = '';
foreach($data['juhe_info']->passengers as $item){
foreach(explode(',',$item->cxin) as $item){
if(strpos($item,'车厢')){
$item = str_replace('车厢','',$item);
array_push($coach,$item);
}else{
$find = array('座上铺','座中铺','座下铺','座');
$replace = array(' upper',' middle',' lower','');
$item = str_replace($find,$replace,$item);
array_push($seats,$item);
}
}
}
//判断车厢是否唯一,如果不唯一的话,分成两个车厢
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.',';
}
$data['seatinfo'] = substr($string,0,strlen($string)-1);
if($status == '4' && $differtime > 0){
$subject = "Got payment and issued train ticket(s), Order No $coli_id";
$body = $this->load->view('email',$data,true);
print_r($body);
//$this->send_mail_to_wl("订单:{$coli_id} 出票成功","翰特订单号:{$coli_id};聚合订单号:{$jh_order}",$coli_id);
//发送邮件给客人
//$flag = $this->Sendmail_model->SendMailToTable($fromName,$fromEmail,$toName,$toEmail,$subject,$body);
}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);
print_r($body);
//$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);
}else{
echo $jh_order.'不需要发邮件<br>';
//$this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>2));
$flag = false;
}
if($flag){
//$this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_M_SN"=>$flag));
}
}
//发邮件给客人
public function send_mail_to_guest($coli_id,$jh_order){
$this->load->model("Sendmail_model");
$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['juhe_info'] = json_decode($obj->JOL_BackTxt);
$status = $obj->JOL_Status;
$data['operator'] = $operator_info;
$data['emailarr'] = explode(';',$operator_info[0]->Email);
$coach = array();
$seats = array();
$string = '';
foreach($data['juhe_info']->passengers as $item){
foreach(explode(',',$item->cxin) as $item){
if(strpos($item,'车厢')){
$item = str_replace('车厢','',$item);
array_push($coach,$item);
}else{
$find = array('座上铺','座中铺','座下铺','座');
$replace = array(' upper',' middle',' lower','');
$item = str_replace($find,$replace,$item);
array_push($seats,$item);
}
}
}
//判断车厢是否唯一,如果不唯一的话,分成两个车厢
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.',';
}
$data['seatinfo'] = substr($string,0,strlen($string)-1);
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("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_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("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>1,"JOL_M_SN"=>$flag));
}else{
echo $jh_order.'不需要发邮件<br>';
$this->BIZ_train_model->update_biz_jol(array("JOL_JuheOrder"=>$jh_order),array("JOL_SendMail"=>2));
$flag = false;
}
}
//存储火车票开售时间
public function add_sale_time(){
$time = '18:00';
$str = '';
$station_arr = explode('、',$str);
foreach($station_arr as $station){
$this->BIZ_train_model->sale_time_station($station,$time);
}
}
public function update_sale_time(){
$this->BIZ_train_model->test();
}
function my_post($url,$post_data){
// $url = "http://op.juhe.cn/trainTickets/cityCode";
// $post_from = array("stationName" => $from,"key"=>"79f03107b921ef31310bd40a1415c1cb");
// $post_to = array("stationName" => $to,"key"=>"79f03107b921ef31310bd40a1415c1cb");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
$output=json_decode($output,TRUE);//json => array
return $output;
}
function get_data($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function post_data($url,$post_data){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post数据
curl_setopt($ch, CURLOPT_POST, 1);
// post的变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
// $output=json_decode($output,TRUE);//json => array
return $output;
}
function chk_sp_name($name){
$name = str_replace(
array('á', 'é', 'è', 'í', 'ó', 'ú', 'ñ', 'Á', 'É', 'Í', 'Ó', 'Ú', 'Ñ',' ','/',' ',','),
array('a', 'e', 'e', 'i', 'o', 'u', 'n', 'A', 'E', 'I', 'O', 'U', 'N','','','',''),
$name
);
return substr(strtoupper($name),0,30);
}
}