diff --git a/application/third_party/trainsystem/config/config.php b/application/third_party/trainsystem/config/config.php index 0e60a2c6..30e79ef1 100644 --- a/application/third_party/trainsystem/config/config.php +++ b/application/third_party/trainsystem/config/config.php @@ -73,7 +73,9 @@ $config["train_order_status_msg"]=array( "7"=>"(改签)退票成功", "8"=>"乘客退票失败", "e"=>"数据错误,提交失败", - "9"=>"改签成功" + "9"=>"改签成功", + "c"=>"订单取消", + "r"=>"订单退款" ); //座次配对 @@ -136,6 +138,20 @@ $config["train_certificateType"]=array( "28"=>"外国人永久居留身份证2", "32"=>"港澳台居民居住证" ); + +/*退款类型 +1差额退款:原票出票及改签出票产生的儿童、卧铺差额、抢票差额退款。 +推送时间接近与其对应的出票通知、改签通知同步推送 +2核销退款:退票退款,改签后的原票退款, 推送时间见下面说明 +3异常退款:人工操作的异常订单退款 ,人工审核后推送 +5无票退款:出票失败、改签失败产生的退款,和购票失败通知几乎同步推送 +*/ +$config["train_refundType"]=array( + "1"=>"差额退款", + "2"=>"核销退款", + "3"=>"异常退款", + "5"=>"无票退款" +); //黑名单用户 diff --git a/application/third_party/trainsystem/controllers/callback.php b/application/third_party/trainsystem/controllers/callback.php index e6b51db2..55eaed3b 100644 --- a/application/third_party/trainsystem/controllers/callback.php +++ b/application/third_party/trainsystem/controllers/callback.php @@ -8,6 +8,8 @@ class callback extends CI_Controller{ $this->load->helper('train'); $this->load->model("train_system_model"); $this->load->model("BIZ_train_model"); + $this->train_certificateType = $this->config->item('train_certificateType'); + $this->train_refundType = $this->config->item('train_refundType'); } public function juhecallback(){ @@ -178,7 +180,7 @@ class callback extends CI_Controller{ if(!empty($ctrip_backdata)){ //判断回调信息是否正确,主要判断是否是本企业的回调信息 - $TimeStamp = $ctrip_backdata->timeStamp; + $TimeStamp = $ctrip_backdata->authentication->timeStamp; $serviceName = $ctrip_backdata->authentication->serviceName; //每个接口都有自己名称 $companyId = COMPANYID; $key = CTRIPKEY; @@ -247,15 +249,17 @@ class callback extends CI_Controller{ } $update_data->orderType = $ctrip_backdata->ticketResult->orderMasterInfo->orderType; //订单类型 0电子票 1配送票 2人工客票 3抢票订单 $update_data->contactName = $ctrip_backdata->ticketResult->orderMasterInfo->contactName; //联系人 - $update_data->mobileNo = $ctrip_backdata->ticketResult->orderMasterInfo->mobileNo; //联系电话 (DES加密) + $update_data->mobileNo = des_decrypt($ctrip_backdata->ticketResult->orderMasterInfo->mobileNo,$key); //联系电话 (DES加密) //人员及车票 $data_passager = new stdClass(); foreach ( $ctrip_backdata->ticketResult->passengerInfoList as $pItems) { + $data_passager->ordernumber = $ctrip_backdata->ticketResult->companyOrderId; //人员列表 $data_passager->status = '4'; - $data_passager->identitytype = $pItems->certificateType; + $certificateType = $this->train_certificateType[ $pItems->certificateType]; //证件类型,身份证传1、护照2、回乡证7、台胞证8、外国人永久居留身份证28、港澳台居民居住证32; + $data_passager->identitytype = $certificateType; $data_passager->realname = $pItems->certificateName; $data_passager->numberid = des_decrypt($pItems->certificateNo,$key) ; //证件号码 (DES加密) $data_passager->birthday = $pItems->birthday; @@ -290,7 +294,7 @@ class callback extends CI_Controller{ $data_passager->ticketprice = $tItems->realTicketPrice; $SeatNo = ""; if (isset($tItems->carriageNo)){ - $SeatNo.=$tItems->carriageNo; + $SeatNo.=$tItems->carriageNo."车厢"; } if (isset($tItems->seatNo)){ $SeatNo.=$tItems->seatNo; @@ -313,6 +317,7 @@ class callback extends CI_Controller{ //添加支付记录 $add_train_payment_data = new stdClass(); $add_train_payment_data->TOC_Memo = $update_data->ordernumber.'出票费'; + $add_train_payment_data->TOC_VEI_SN = "28209"; //根据订单号获取cold_sn $order_info = $this->train_system_model->get_order_info($update_data->ordernumber); @@ -322,17 +327,46 @@ class callback extends CI_Controller{ $add_train_payment_data->TOC_DepartureDate = date('Y-m-d',strtotime($update_data->departTime )); $add_train_payment_data->TOC_TicketCost = $update_data->OrderTotleFee; $add_train_payment_data->poundage = ""; - $add_train_payment_data->FOI_TrainNetOrderNo = $update_data->ElectronicOrderNumber; + $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,'28209'); }else if($update_data->ServiceName == 'notice.ordercancel'){ //订单取消 $update_data->ordernumber = $ctrip_backdata->cancelResult->companyOrderId; - $update_data->OrderStatus = '1'; - $update_data->ErrorMsg = $ctrip_backdata->cancelResult->cancelTime; + $update_data->OrderStatus = 'c'; + $update_data->ErrorMsg = '订单取消'.$ctrip_backdata->cancelResult->cancelTime; $update_data->confirmcallback = $back_json; - }else if($update_data->ServiceName == 'notice.refundresult'){ //退票 + }else if($update_data->ServiceName == 'notice.refundresult'){ //退款通知 + $update_data->ordernumber = $ctrip_backdata->refundResult->companyOrderId; + $update_data->OrderStatus = 'r'; + $update_data->ErrorMsg = '退款:'.$ctrip_backdata->refundResult->refundTime; + $update_data->confirmcallback = $back_json; + + //翰特添加退款记录 + $refund_train_payment = new stdClass(); + $return_order = $ctrip_backdata->refundResult->companyOrderId; + $return_money = $ctrip_backdata->refundResult->refundAmount; //退款金额 + $refund_train_payment->TOC_VEI_SN = "28209"; + + //根据订单号获取cold_sn + $order_info = $this->train_system_model->get_order_info($return_order); + $cold_sn = $order_info->ts_cold_sn; + //print_r($order_info); + $refundType = $ctrip_backdata->refundResult->refundType; //退款类型int + $reason = $ctrip_backdata->refundResult->reason; //退款原因 + $refundTime = $ctrip_backdata->refundResult->refundTime; //退款时间 + + $memo = $return_order.'_'.$this->train_refundType[$refundType].'_原因:'. $reason . '_' . $refundTime; //退款集合信息 + $refund_train_payment->TOC_Memo = $memo; + $refund_train_payment->TOC_COLD_SN = $cold_sn; + $refund_train_payment->TOC_TrainNumber = $order_info->ts_checi; + $refund_train_payment->TOC_DepartureDate = $order_info->ts_startdate; + $refund_train_payment->TOC_TicketCost = -$return_money; + //print_r($add_train_payment_data);die(); + $this->BIZ_train_model->refund_train_payment($refund_train_payment); + + }else if($update_data->ServiceName == 'notice.returnresult'){ //退票 $update_data->ordernumber = $ctrip_backdata->refundResult->companyOrderId; $update_data->OrderStatus = '7'; $update_data->ErrorMsg = $ctrip_backdata->refundResult->reason; diff --git a/application/third_party/trainsystem/controllers/pages.php b/application/third_party/trainsystem/controllers/pages.php index 32c7f3a7..a5276531 100644 --- a/application/third_party/trainsystem/controllers/pages.php +++ b/application/third_party/trainsystem/controllers/pages.php @@ -15,9 +15,9 @@ class pages extends CI_Controller{ //首页 public function index($coli_id = null){ - // if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ - // redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); - // } + if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ + redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); + } if($coli_id == null){ $cols_id = $this->input->post("ht_order"); @@ -35,7 +35,7 @@ class pages extends CI_Controller{ $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->biz_order_detail($v->COLD_SN); - $list->info[$i]->status = $this->BIZ_train_model->get_biz_jol($v->COLD_SN); + $list->info[$i]->status = $this->train_system_model->get_submitStatus($v->COLD_SN); //判断是否提交过 $i++; } $list->cols_id=$cols_id; @@ -57,9 +57,9 @@ class pages extends CI_Controller{ //系统列表页面 public function order_list(){ - // if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ - // redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); - // } + if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){ + redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/'); + } $page_size = 10; $page = $this->input->get("page"); diff --git a/application/third_party/trainsystem/models/BIZ_train_model.php b/application/third_party/trainsystem/models/BIZ_train_model.php index 0294a8d6..d3446e8c 100644 --- a/application/third_party/trainsystem/models/BIZ_train_model.php +++ b/application/third_party/trainsystem/models/BIZ_train_model.php @@ -158,52 +158,89 @@ class BIZ_train_model extends CI_Model { //删除多余支付记录 $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, - TOC_VEI_SN - ) - 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,$data->TOC_VEI_SN)); - }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')) + // 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, + // TOC_VEI_SN + // ) + // 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,$data->TOC_VEI_SN)); + // }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='$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); - + 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, + TOC_VEI_SN + ) + VALUES(?,getdate(),{$CCSN},?,?,?,?,(SELECT isnull(COLI_OPI_ID,29) 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_VEI_SN,$data->TOC_Memo." 手续费",$data->TOC_COLD_SN,$data->TOC_TrainNumber,$data->TOC_DepartureDate,$data->poundage,$data->TOC_VEI_SN)); + + return $query; + } + + //新增退款记录 refund + public function refund_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); + //退款记录 $sql="IF NOT EXISTS( SELECT TOP 1 1 FROM BIZ_TrainOrderCost WHERE TOC_COLD_SN = ? AND TOC_Memo like ? @@ -217,13 +254,12 @@ class BIZ_train_model extends CI_Model { TOC_DepartureDate, TOC_TicketCost, TOC_WL, - TOC_OtherCost, TOC_VEI_SN ) - VALUES(?,getdate(),{$CCSN},?,?,?,?,(SELECT isnull(COLI_OPI_ID,29) 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_VEI_SN,$data->TOC_Memo." 手续费",$data->TOC_COLD_SN,$data->TOC_TrainNumber,$data->TOC_DepartureDate,$data->poundage,$data->TOC_VEI_SN)); - } - return $query; + VALUES(?,getdate(),{$CCSN},?,?,?,?,(SELECT isnull(COLI_OPI_ID,29) 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,$data->TOC_VEI_SN)); + + } public function update_cold_planvei_sn($cold_sn,$planveiSn){ diff --git a/application/third_party/trainsystem/models/train_system_model.php b/application/third_party/trainsystem/models/train_system_model.php index 9792d401..0d9d2531 100644 --- a/application/third_party/trainsystem/models/train_system_model.php +++ b/application/third_party/trainsystem/models/train_system_model.php @@ -190,9 +190,11 @@ class train_system_model extends CI_Model { ts_checkdoor = '{$data->TicketCheck}', ts_elecnumber = '{$data->ElectronicOrderNumber}', ts_orderamount = '{$data->OrderTotleFee}', - ts_operateTradeNo = '{$data->operateTradeNo}', - ts_bookcallback = '{$data->bookcallback}',"; + ts_operateTradeNo = '{$data->operateTradeNo}',"; + //ts_bookcallback = '{$data->bookcallback}', //ts_startime = '{$data->OrderTicketTime}', + }else if(!empty($data->bookcallback)){ + $where .= "ts_bookcallback = '{$data->ts_bookcallback}',"; }else if(!empty($data->confirmcallback)){ $where .= "ts_confirmcallback = '{$data->confirmcallback}',"; }else if(!empty($data->returncallback)){ @@ -283,4 +285,15 @@ class train_system_model extends CI_Model { $query = $this->INFO->query($sql,array($ordernumber)); return $query->result(); } + + //传入COLD_SN,获取trainsystem是否存在此订单,用来判断是否提交过 + function get_submitStatus($cold_sn) { + $sql = "SELECT top 1 ts_cold_sn FROM trainsystem WHERE ts_cold_sn= ?"; + $query = $this->INFO->query($sql, $cold_sn); + if($query->num_rows() == 0){ + return true; + }else{ + return false; + } + } } \ No newline at end of file diff --git a/application/third_party/trainsystem/views/order_list.php b/application/third_party/trainsystem/views/order_list.php index caa069d1..b6c7d017 100644 --- a/application/third_party/trainsystem/views/order_list.php +++ b/application/third_party/trainsystem/views/order_list.php @@ -46,13 +46,14 @@