getCheckCancelInfo($title_id); if($check_cancel['order_title_type']!=2 || $check_cancel['tourist_id']==0 || (int)$check_cancel['order_title_status']>2){ //目前只有跟团游产品,有自由行产品编号的产品,以及订单状态为待确认或已确认的才可取消 return [ 'code'=>7, 'info'=>'订单不可取消!', ]; } //判断取消限制时间 $refund_limit=$order_common->checkRefundTime($check_cancel['tourist_id'],$check_cancel['start_date']); if(!$refund_limit){ return [ 'code'=>8, 'info'=>'订单已过取消限制时间!', ]; } //开启大事务 $big_transaction=Yii::$app->db->beginTransaction(); //1.查出自由行下的子资源订单 $son_order_arr=$order_group_connect->getSonOrderId($title_id); //2.循环取消子资源,失败则回滚 foreach($son_order_arr as $son_val){ if($son_val['order_type']==1){ #region巴士子资源取消 #region 获取订单线路信息(只判断是否订单有效) $line_info = $order_main->getOrderLineIdCount($son_val['order_main_id']); //订单失效性检验 if($line_info[$son_val['order_main_id']]['order_valid_status']==0){ $big_transaction->rollBack(); return[ 'code'=>1, 'info'=>'巴士订单已失效', ]; } //获取订单所属的班次信息 $order_run_info = $order_main->getOrderRunInfo($son_val['order_main_id']); #endregion $cancel_bus = $order_main->cancelSingleBusOrder([0=>$son_val['order_main_id']], $order_run_info, $user_id, $cancel_reason); if($cancel_bus['code']!=0){ $big_transaction->rollBack(); return[ 'code'=>2, 'info'=>'巴士订单取消失败', ]; } #endregion }else if($son_val['order_type']==2 && $is_cancel_hotel==1){ #region 酒店子资源取消 //获取订单基本信息; //订单三种预订方法,组合单,录单,直连 $data = $model->getOrderInfo($son_val['order_main_id']); //可取消检查 $checkFlag = $model->checkIfCancel($data); if (!$checkFlag) { $big_transaction->rollBack(); return[ 'code'=>3, 'info'=>'酒店子资源不可取消', ]; } $cancel_hotel= $model->cancelOrder($data,$user_id); if($cancel_hotel['code']!=0){ $big_transaction->rollBack(); return[ 'code'=>4, 'info'=>'酒店子资源取消失败', ]; } #endregion }else if ($son_val['order_type']==3){ #region 门票子资源订单取消 #region 1.获取订单详情 $order_info = $order_main->getTicketOrderInfo($son_val['order_main_id']); if (count($order_info) == 0) { $big_transaction->rollBack(); return[ 'code'=>5, 'info'=>'门票子资源已取消或不存在', ]; } #endregion #region 2.取消订单 $cancel_ticket = $order_main->cancelTicketOrder($son_val['order_main_id'], $order_info, $user_id, $cancel_reason,0); if($cancel_ticket['code']!=0){ $big_transaction->rollBack(); return[ 'code'=>6, 'info'=>'门票子资源取消失败', ]; } //门票订单号收集,最后驴妈妈统一退票 $ticket_order_arr[]=$son_val['order_main_id']; #endregion #endregion } } //3.判断是否需要取消对应保险单 if($check_cancel['is_buy_insurance']==1){ $order_insurance_connect=new OrderInsuranceConnect(); $sub = new SubmitOrder(); $insurance_arr=$order_insurance_connect->GetInsuranceOrderId($title_id); foreach($insurance_arr as $ticket_id){ $sub->CancelTicketOrder([ "order_id" => $ticket_id['insurance_order_id'], "user_id" => $user_id, "cancel_reason" => '巴士自由行取消,同步取消保险!' ]); } } //4.大事务提交 $big_transaction->commit(); //5.全部取消成功门票订单判断是否去驴妈妈退单 if(!empty($ticket_order_arr)){ $lvmama_order_connect = new LvmamaOrderConnect(); foreach($ticket_order_arr as $val) { $org_id = $order_main::find()->select('(select org_id from opera_product where id=o.parent_prod_id) as ORG_ID')->from('order_main o')->where(['order_id'=>$val])->asArray()->one(); if ($org_id['ORG_ID'] == 1369) {//org_id=1369时就是驴妈妈的产品 //查出主订单所有关联订单 $lvmama_ids = $lvmama_order_connect::find()->select('partner_id,lvmama_id')->from('lvmama_order_connect')->where(['main_order_id' => $val])->asArray()->all(); if (!empty($lvmama_ids)) { foreach ($lvmama_ids as $v) { $lvmama_result=Util::OrderCancelForLvmama($v['partner_id'], $v['lvmama_id']); //异常错误数据库记录 if ($lvmama_result['state']['code'] != '1000') { $error_order_info=new ErrorOrderLog(); if(isset($lvmama_result['state']['message'])){ $error_msg=$lvmama_result['state']['message']; }else{ $error_msg=''; } $error_order_info->istOrderLog($val,' '.$error_msg); } } } } } } return[ 'code'=>0, 'info'=>'取消成功', ]; } }