3,2=>2] key 1对应成人 key 2 对应儿童 v代表人数 foreach ($prod_arr as $k => $v) { $ticket_type_arr[explode('-', $v['prod_id'])[2]] = $v['prod_num']; } //最终返回数据 $fin_models = []; //酒店对象们 $hotel_models = []; //巴士对象们 $bus_models = []; //门票对象们 $opera_models = []; //临时data $data = self::returnNow(); // //特殊处理 order_info 中的outside_sale_org_id 传入为微信 传出为内部渠道 // $order_info['outside_sale_org_id'] = BaseUser::getTouristMainCorporationToOrgId($order_info['user_id']); # 自由行销售渠道从运营主体的内部采购改为销售渠道 $order_info['outside_sale_org_id'] = $to_org_id; //是否资源足够标识 $flag = true; #2.获取对象们 限制tourist_id ,cancel_flag=0 res_type 为所有资源故不限制; $models = OperaTouristDetail::getOperaTouristDetailAll($tourist_id); if (!$models) { $data = self::returnNow(1, '数据为空'); return $data; } foreach ($models as $k => $v) { if ($flag) { $v_date = date("Y-m-d", strtotime($date . "+$v->day_from_start day")); if ($v->res_type == OperaTouristRun::TOURIST_HOTEL_RES_TYPE) { //酒店部分 //酒店部分总数组 $hotel_models[$k] = []; $data = self::getTouristToHotel($v, $v_date, $ticket_type_arr, $hotel_models[$k], $order_info['outside_sale_org_id'], $customer_info); if ($data['code'] == 0) $hotel_models[$k] = $data['list']; else $flag = false; } elseif ($v->res_type == OperaTouristRun::TOURIST_BUS_RES_TYPE) { //巴士部分 //巴士部分总数组 $bus_models[$k] = []; $data = self::getTouristToBus($v, $v_date, $ticket_type_arr, $bus_models[$k], $order_info); if ($data['code'] == 0) $bus_models[$k] = $data['list']; else $flag = false; } elseif ($v->res_type == OperaTouristRun::TOURIST_OPERA_RES_TYPE) { //门票部分 //门票部分总数组 $opera_models[$k] = []; $data = self::getTouristToOpera($v, $v_date, $ticket_type_arr, $opera_models[$k], $to_org_id); if ($data['code'] == 0) $opera_models[$k] = $data['list']; else $flag = false; } } } if ($flag) { if (!empty($bus_models)) { foreach ($bus_models as $k => $v) { if ($v['prod_num'] == 0) { unset($bus_models[$k]); } } } if (!empty($hotel_models)) { foreach ($hotel_models as $hk => $hv) { foreach ($hv['run_room'] as $k => $v) { if ($v['prod_num'] == 0) { unset($hotel_models[$hk]['run_room'][$k]); } } } } if (!empty($opera_models)) { foreach ($opera_models as $ok => $ov) { foreach ($ov['son_ticket'] as $k => $v) { if ($v['prod_num'] == 0) { unset($opera_models[$ok]['son_ticket'][$k]); } } if (!$opera_models[$ok]['son_ticket']) { unset($opera_models[$ok]); } } } //处理返回数据格式 $fin_models['product_name'] = OperaTouristCommon::getOperaTouristCommonOne($tourist_id)->tourist_name; $fin_models['bus_product'] = array_values($bus_models); $fin_models['hotel_product'] = array_values($hotel_models); $fin_models['ticket_product'] = array_values($opera_models); $fin_models['customer_info'] = $customer_info; $fin_models['order_info'] = $order_info; $fin_data = self::returnNow(0, '获取成功'); $fin_data['list'] = $fin_models; } else { return $data; } return $fin_data; } /** * Function Description:获取酒店信息 * Function Name: getTouristToHotel * @param $v //循环至当前酒店对象 * @param $v_date //当前入住日期 * @param $ticket_type_arr //票种相应信息 * @param $hotel_models_k //最终酒店部分数组 * * @return mixed * * @author LUOCJ */ public function getTouristToHotel($v, $v_date, $ticket_type_arr, $hotel_models_k, $org_id, $customer_info) { if ( //判断酒店是否停止售卖 !OperaHotel::getOperaHotelOne($v) || //判断该酒店基础房型是否被删 !OperaHotelBaseRoom::getOperaHotelBaseRoom($v) || //判断该酒店子房型是否上线 !OperaHotelRoom::getOperaHotelRoomOne($v) || //判断该渠道是否授权 !RunHotelDistrib::getRunHotelDistribOne($v, $v_date, $org_id) || //判断该天是否开房 !RunHotelSubRoom::getRunHotelSubRoomOne($v, $v_date) ) { unset($hotel_models_k); } else { $model_rhd = RunHotelDistrib::getRunHotelDistribOne($v, $v_date, $org_id); //酒店id $hotel_models_k['hotel_id'] = $v->extra_res_info; //基础房型id $hotel_models_k['base_room_type'] = $v->top_res_id; //子房型id $hotel_models_k['room_type'] = $v->sub_res_id; //酒店备注 $hotel_models_k['hotel_memo'] = $customer_info['customer_memo']; //入住日期 $hotel_models_k['run_room'][0]['run_date'] = $v_date; //渠道价格 $hotel_models_k['run_room'][0]['prod_price'] = $model_rhd->PROD_PRICE; //获取需要住几间房 $hotel_models_k['run_room'][0]['prod_num'] = self::getProdNum($v, $ticket_type_arr); } $data = isset($hotel_models_k) ? self::returnNow(0, '返回成功') : self::returnNow(6, '酒店库存不满足条件'); if ($data['code'] == 0) $data['list'] = $hotel_models_k; return $data; } /** * Function Description:获取巴士信息 * Function Name: getTouristToBus * @param $v //循环至当前巴士对象 * @param $v_date //当前日期 * @param $ticket_type_arr //票种相关信息 * @param $bus_models_k //最终巴士部分数组 * @param $order_info // 订单信息 * * @return array|mixed * * @author LUOCJ */ public function getTouristToBus($v, $v_date, $ticket_type_arr, $bus_models_k, $order_info) { $run_model = new GetTouristStock(); $run_data = $run_model->getBusRunInfo($v->sub_res_id, $v_date, $v->extra_res_info); $price_model = new GetStockData(); $price_data = $price_model->getBusBasicCost($v->sub_res_id, $order_info['outside_sale_org_id'], $order_info['user_id']); if ($run_data['code'] != 0) return $run_data; if ($price_data['code'] != 0) return $price_data; $bus_models_k['run_id'] = $run_data['list']['run_id']; $bus_models_k['ticket_id'] = $v->sub_res_id; $bus_models_k['prod_num'] = self::getProdNum($v, $ticket_type_arr); $bus_models_k['prod_price'] = $price_data['list']['sale_price']; $data = self::returnNow(0, '获取成功'); $data['list'] = $bus_models_k; return $data; } /** * Function Description:获取门票信息 * Function Name: getTouristToOpera * @param $v //循环至当前门票对象 * @param $v_date //当前日期 * @param $ticket_type_arr //票种相关信息 * @param $opera_models_k //最终门票部分数组 * * @return array|mixed * * @author LUOCJ */ public function getTouristToOpera($v, $v_date, $ticket_type_arr, $opera_models_k, $to_org_id) { //非成人+儿童 $opera_data = ['code' => 0]; //儿童 $opera_data_child = []; //成人 $opera_data_adult = []; $opera_model = new GetStockData(); if ($v->crowd_type == OperaTouristRun::ADULT) { //为成人 $opera_data = $opera_model->getTicketBasicStock($v->top_res_id, $v->sub_res_id, $v_date, $to_org_id); } elseif ($v->crowd_type == OperaTouristRun::CHILD) { //为儿童 $opera_data = $opera_model->getTicketBasicStock($v->top_res_id, $v->sub_res_id1, $v_date, $to_org_id); } elseif ($v->crowd_type == OperaTouristRun::ADULT_CHILD) { //为成人+儿童 $opera_data_child = $opera_model->getTicketBasicStock($v->top_res_id, $v->sub_res_id1, $v_date, $to_org_id); if ($opera_data_child['code'] != 0) { return $opera_data; } $opera_data_adult = $opera_model->getTicketBasicStock($v->top_res_id, $v->sub_res_id, $v_date, $to_org_id); if ($opera_data_adult['code'] != 0) { return $opera_data; } } if ($opera_data['code'] != 0) { return $opera_data; } $opera_models_k['ticket_id'] = $v->top_res_id; $opera_models_k['run_date'] = $v_date; if ($v->crowd_type == OperaTouristRun::ADULT_CHILD) { //特殊处理 如果为成人+儿童 则 son_ticket 会有两条数据 [0]接收成人 [1]接收儿童 $opera_models_k['son_ticket'][0]['prod_num'] = $ticket_type_arr[1]; $opera_models_k['son_ticket'][0]['prod_price'] = $opera_data_adult['list']['base_price']; $opera_models_k['son_ticket'][0]['son_ticket_id'] = $v->sub_res_id; $opera_models_k['son_ticket'][1]['prod_num'] = $ticket_type_arr[2]; $opera_models_k['son_ticket'][1]['prod_price'] = $opera_data_child['list']['base_price']; $opera_models_k['son_ticket'][1]['son_ticket_id'] = $v->sub_res_id1; } else { $opera_models_k['son_ticket'][0]['prod_num'] = self::getProdNum($v, $ticket_type_arr); $opera_models_k['son_ticket'][0]['prod_price'] = $opera_data['list']['base_price']; $opera_models_k['son_ticket'][0]['son_ticket_id'] = $v->sub_res_id; } $data = self::returnNow(0, '获取成功'); $data['list'] = $opera_models_k; return $data; } /** * Function Description:获取数量 * Function Name: getProdNum * @param $v * @param $ticket_type_arr //票种信息 * * @return int * * @author LUOCJ */ public function getProdNum($v, $ticket_type_arr) { $sum_num = 0; foreach ($ticket_type_arr as $k_1 => $v_1) { if ($v->crowd_type == OperaTouristRun::ADULT_CHILD) $sum_num += $v_1; elseif ($v->crowd_type == OperaTouristRun::ADULT && $k_1 == 1) $sum_num += $v_1; elseif ($v->crowd_type == OperaTouristRun::CHILD && $k_1 == 2) $sum_num += $v_1; } $data = ceil($sum_num / $v->max_num); return $data; } public static function returnNow($code = 1, $info = '出错啦') { $data['code'] = $code; $data['info'] = $info; return $data; } }