|
- <?php
- /**
- * Created by PhpStorm.
- * User: 501810442
- * Date: 2017/7/6
- * Time: 10:46
- */
-
- namespace backend\modules\api\logic;
-
-
- use backend\modules\api\models\BaseUser;
- use backend\modules\api\models\OperaHotel;
- use backend\modules\api\models\OperaHotelBaseRoom;
- use backend\modules\api\models\OperaHotelRoom;
- use backend\modules\api\models\RunHotelDistrib;
- use backend\modules\api\models\RunHotelSubRoom;
- use backend\modules\api\models\OperaTouristCommon;
- use backend\modules\api\models\OperaTouristDetail;
- use backend\modules\api\models\OperaTouristRun;
-
- class TouristToResource
- {
- public function getTouristToAll($tourist_id, $date, $prod_arr, $customer_info, $order_info, $to_org_id)
- {
- //1.1获取成人票种 和儿童票种的数量
- $ticket_type_arr = [];
- //1.2票种数组处理 [1=>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;
- }
- }
|