$params['hotel_id']]; $getInfo = Util::sendCs($data, '/hotel/api/get-hotel-info', 2); if ($getInfo['flag'] == false) { return $getInfo; } $return = $getInfo['data']['data']; if (empty($return['hotel_name'])) { return Util::returnArrEr('酒店已下架!'); } //2.获取房型列表 $return['list'] = $this->getRoomList($params); return Util::returnArrSu('', $return); } /** * Des:获取酒店房型列表 * Name: getRoomList * @param $params * @return array * @author 倪宗锋 */ public function getRoomList($params) { $data_1 = [ 'hotel_id' => $params['hotel_id'],//酒店ID 'start_date' => $params['start_date'],//入住日期 'end_date' => $params['end_date'],//离店日期 'org_id' => 164, ]; if (empty($params['room_id']) == false) { $data_1['room_id'] = $params['room_id']; } $getInfo1 = Util::sendCs($data_1, '/hotel/api/get-hotel-room-list-by-date', 2); if ($getInfo1['flag'] == false || empty($getInfo1['data']['list'])) { $return = []; } else { $return = $getInfo1['data']['list']; } return $return; } /** * Des:获取下单参数 * Name: getParamsForOrder * @return array * @author 倪宗锋 */ public function getParamsForOrder() { $cookies = $_COOKIE; $params = [ 'hotel_id' => Yii::$app->request->post('hotel_id', ''),//酒店ID 'hotel_name' => Yii::$app->request->post('hotel_name', ''),//酒店名称 'room_id' => Yii::$app->request->post('room_id', ''),//房型ID 'start_date' => Yii::$app->request->post('start_date', ''),//入住日期 'in_time' => Yii::$app->request->post('in_time', '00:00'),//离店 'end_date' => Yii::$app->request->post('end_date', ''),//离店 'prod_cnt' => Yii::$app->request->post('prod_cnt', ''),//预定间数 'contacts_name' => Yii::$app->request->post('contacts_name', ''),//联系人名称 'contacts_phone' => Yii::$app->request->post('contacts_phone', ''),//联系人手机 'contacts_ID' => Yii::$app->request->post('contacts_ID', ''),//联系人身份证 'fx_uid' => empty($cookies['fx_uid']) ? Yii::$app->request->post('fx_uid', 0) : $cookies['fx_uid'],//分销用户ID 'passanger_arr' => json_decode(Yii::$app->request->post('passanger_arr', '[]'), true),//出行人数组 'remarks' => Yii::$app->request->post('remarks', ''),//需求备注 'remark' => Yii::$app->request->post('remarks', ''),//需求备注 'system' => Yii::$app->request->post('system', '2'),//需求备注 ]; return $params; } /** * Des:酒店下单 * Name: makeOrder * @return array * @author 倪宗锋 */ public function makeOrder() { $params = $this->getParamsForOrder(); $getRoomList = $this->getRoomList($params); if (empty($getRoomList[0]['room_list'][0]['room_id']) || $getRoomList[0]['room_list'][0]['room_id'] != $params['room_id']) { return Util::returnArrEr('该房型已售完,请选择其他房型。[1001]'); } $params['base_room'] = $getRoomList[0];//基础房型数据 unset($params['base_room']['room_list']); $params['room_info'] = $getRoomList[0]['room_list'][0];//子房型详细 if ($params['room_info']['can_reserve'] == 0) { return Util::returnArrEr('该房型已售完,请选择其他房型。[1002]'); } if ($params['room_info']['stock'] < $params['prod_cnt']) { return Util::returnArrEr('该房型库存不足,请选择其他房型。[1003]'); } /**设置下单参数*/ $param_arr = [ 'total_money' => $params['room_info']['total_money'] * $params['prod_cnt'],//总金额 'prod_cnt' => $params['prod_cnt'],//产品数量 'order_name' => $params['hotel_name'] . ' ' . $params['room_info']['room_name'],//订单名称 'sh_uid' => 0,//用户ID 'fx_uid' => $params['fx_uid'],//分销商ID 'start_date' => $params['start_date'],//开始日期 'start_time' => $params['in_time'] . ':00',//开始时间 'end_date' => $params['end_date'],//结束日期 'end_time' => '12:00:00',//结束时间 'category_id' => 3,//订单类型 'system' => $params['system'],//系统 'contacts_name' => $params['contacts_name'],//联系人 'contacts_ID' => $params['contacts_ID'],//联系人证件ID 'contacts_phone' => $params['contacts_phone'],//联系人手机号 'prod_source' => 2,//产品来源 'start_area' => '',//起始地点 'end_area' => '',//结束地点 'passanger_arr' => $params['passanger_arr'],//出行人数组 "remark"=>$params['remarks'], 'hotel_extra' => [//酒店详细 'breakfast' => $params['room_info']['breakfast'], 'hotel_name' => $params['hotel_name'], 'hotel_id' => $params['hotel_id'], 'room_id' => $params['room_id'], 'room_name' => $params['room_info']['room_name'], 'total_details' => json_encode($params['room_info']['date_price']), 'remarks' => $params['remarks'], 'is_gift' => count($params['room_info']['gift_list']) == 0 ? 0 : 1, 'gift_describe' => json_encode($params['room_info']['gift_list']), ] ]; $makeOrder = OrderUtil::makeUnProdOrder($param_arr); if ($makeOrder['flag'] == true) { $return = OrderUtil::setMakeOrderReturn($makeOrder['data']['order_id'], $param_arr['total_money'], $param_arr['system'], $param_arr['contacts_phone'], $param_arr['fx_uid']); return Util::returnArrSu('', $return); } return $makeOrder; } /** * Function Description:获取并筛选酒店列表 * Function Name: getHotelList * @param $params * * @return array * * @author 娄梦宁 */ public function getHotelList($params) { #参数校验 $checkParams = $this->checkParamsForHotelList($params); if (!$checkParams) { return Util::returnArrEr('参数错误!'); } #入住总晚数 $max_day_num = (strtotime($params['end_date']) - strtotime($params['start_date'])) / 86400; #region 1:获取列表数据 $mHotel = new MHotel(); $hotelSelectList = $this->getHotelType(); if (!$hotelSelectList['flag']) { return Util::returnArrEr('酒店类型选择获取失败!'); } $result = $mHotel->getHotelList($params, $hotelSelectList['data']['select_list']); #endregion #region 2:刷选处理结果数组 $new_hotel_list_by_date = []; $tmp_day_num = 1; #region 2.1 该循环去掉日期属性,按酒店整合数组。并排除床型早餐不符合的子房型。 foreach ($result as $key => $val) { if (isset($new_hotel_list_by_date[$val['hotel_id']])) {//天数计算器 $tmp_day_num += 1; } else { $new_hotel_list_by_date[$val['hotel_id']] = $val; $tmp_day_num = 1; } #子房型归类 foreach ($val['room_info'] as $v) { #筛选床型和早餐 if ($params['breakfast_include'] != '0') { #早餐 if ($params['breakfast_include'] == '1') {//含早 if ($v['breakfast_include'] == '0') { continue; } } if ($params['breakfast_include'] == '2') {//单早 if ($v['breakfast_include'] != '1') { continue; } } if ($params['breakfast_include'] == '3') {//双早 if ($v['breakfast_include'] != '2') { continue; } } } if ($params['bed_type'] != '0') { #床型 if ($v['bed_type'] != $params['bed_type'] && !in_array($params['bed_type'],explode(',',$v['bed_type']))) { continue; } } $new_hotel_list_by_date[$val['hotel_id']]['son_room'][$v['room_type']][] = $v; } $new_hotel_list_by_date[$val['hotel_id']]['max_day_num'] = $tmp_day_num;//所选日期内酒店开房天数 } #endregion #region 2.2 按库存量再次筛选数组,并算出有效子房型最低价 foreach ($new_hotel_list_by_date as $key => $val) { $tmp_stock = 0;//是否售罄中间变量 if ($val['max_day_num'] != $max_day_num || !isset($val['son_room'])) { //开房天数不够排除 && 一个符合的子房型也没有的排除 unset($new_hotel_list_by_date[$key]); continue; } $tmp_son_date_stock=0;//子房型售卖天数是否足够标识。 $tmp_lower_price = 100000; $no_stock_price = 100000;//全部没有库存时的展示价 foreach ($val['son_room'] as $k => $v) { $tmp_son_stock = 0; if (count($val['son_room'][$k]) != $max_day_num) {#子房型售卖天数不够的排除 continue; } $tmp_son_date_stock=1;//子房型有一个天数符合条件。 foreach ($v as $value) { if ($value['remaining_count'] != '0') {#子房型有库存充足的天数 $tmp_son_stock++; } } if ($tmp_son_stock == $max_day_num) { $tmp_stock = 1; foreach ($v as $value) { if (intval($value['price']) < $tmp_lower_price) {#有库存的子房型的最低价 $tmp_lower_price = intval($value['price']); } } } else { foreach ($v as $value) { if (intval($value['price']) < $no_stock_price) {#无库存的子房型的最低价 $no_stock_price = intval($value['price']); } } } } if($tmp_son_date_stock!=1){//符合筛选条件的子房型的可售天数都不足 unset($new_hotel_list_by_date[$key]); continue; } $new_hotel_list_by_date[$key]['stock'] = $tmp_stock; if ($tmp_lower_price != 100000) { //有有库存的子房型取该子房型最低价 $new_hotel_list_by_date[$key]['price'] = $tmp_lower_price; } else { //全部无库存取整体最低价 $new_hotel_list_by_date[$key]['price'] = $no_stock_price; } #价格刷选 if ($params['price_type'] != '0') { switch ($params['price_type']) { case '1': if ($new_hotel_list_by_date[$key]['price'] > 200) { unset($new_hotel_list_by_date[$key]); }; break; case '2': if ($new_hotel_list_by_date[$key]['price'] < 200 || $new_hotel_list_by_date[$key]['price']>500) { unset($new_hotel_list_by_date[$key]); }; break; case '3': if ($new_hotel_list_by_date[$key]['price'] < 500 || $new_hotel_list_by_date[$key]['price']>800) { unset($new_hotel_list_by_date[$key]); }; break; case '4': if ($new_hotel_list_by_date[$key]['price'] < 800) { unset($new_hotel_list_by_date[$key]); }; break; default:break; } } } #endregion #endregion #region 3 :结果排序 $sort_result = []; #region 3.1 结果数组整理 $promotion = [];//推荐酒店数组 $un_promotion = [];//不推荐酒店数组 $price_sort_list = [];//价格排序数组 foreach ($new_hotel_list_by_date as $value) { #星级字段处理 switch ($value['star_level']) { case '39': $star_level = '五星级'; break; case '38': $star_level = '四星级'; break; case '37': case '36': $star_level = '三星级'; break; case '35': case '34': $star_level = '二星级'; break; case '33': case '32': $star_level = '一星级'; break; default; $star_level = '无星级'; }; $tmp_hotel_value = [ 'hotel_id' => $value['hotel_id'], 'hotel_name' => $value['hotel_name'], 'star_level' => $star_level, 'sale_label' => $value['sale_label'] == '' ? '' : explode(',', $value['sale_label']), 'area_name' => $value['area_name'], 'price' => $value['price'], 'stock' => $value['stock'], 'hotel_image' => $value['hotel_image'] ]; #默认排序 if ($params['sort'] == '-1') { if ($value['is_promotion'] == '1') { #推荐酒店数组 $promotion[$value['recommend_level'] . '0.' . $value['hotel_id']] = $tmp_hotel_value; } else { #不推荐酒店数组 $un_promotion[$value['recommend_level'] . '0.' . $value['hotel_id']] = $tmp_hotel_value; } } #价格排序 if ($params['sort'] == '0' || $params['sort'] == '1') { $price_sort_list[$value['price'] . '0.' . $value['hotel_id']] = $tmp_hotel_value; } } #endregion # region 3.2 排序操作 && 分页截取 $start = $params['page_size'] * ($params['current_page'] - 1); if ($params['sort'] == '-1') { krsort($promotion); krsort($un_promotion); $sort_result = array_values(array_slice(array_merge($promotion, $un_promotion), $start, $params['page_size'])); } elseif ($params['sort'] == '0') { krsort($price_sort_list); $sort_result = array_values(array_slice($price_sort_list, $start, $params['page_size'])); } elseif ($params['sort'] == '1') { ksort($price_sort_list); $sort_result = array_values(array_slice($price_sort_list, $start, $params['page_size'])); } #endregion return Util::returnArrSu('酒店列表数据获取成功!', ['hotel_list' => $sort_result,'current_page'=>$params['current_page']]); #endregion } /** * Function Description:获取酒店列表参数校验函数 * Function Name: checkParamsForHotelList * @param $params * * @return bool * * @author 娄梦宁 */ public function checkParamsForHotelList($params) { if (!is_numeric($params['area_id']) || !is_numeric($params['star_type'])) { return false; } if (Util::checkPattern('date', $params['start_date']) == false || Util::checkPattern('date', $params['end_date']) == false) { return false; } if (!in_array($params['breakfast_include'], ['0', '1', '2', '3'], true) || !in_array($params['sort'], ['-1', '0', '1'], true) || !in_array($params['bed_type'], ['0', '1', '2', '3', '4'], true)) { return false; } return true; } /** * Function Description:酒店筛选条件请求接口 * Function Name: getHotelType * * @return array * * @author 李健 */ public function getHotelType() { $curlInterface = new CurlInterface(); $siteConfig = Util::getSiteConfig(); $url = $siteConfig['adm_host1'] . '/hotel/api/get-hotel-type'; // $url = 'http://cs1.zzcs.dev/hotel/api/get-hotel-type'; $getInfo = $curlInterface->execute($url); if ($getInfo['code'] != 0) { return Util::returnArrEr('酒店筛选条件接口获取失败!'); } return Util::returnArrSu('数据获取成功!', ['select_list'=>$getInfo['data']]); } /** * Function Description:获取酒店地址列表 * Function Name: getHotelArea * * @return array * * @author 田玲菲 */ public function getHotelArea(){ $curlInterface = new CurlInterface(); $siteConfig = Util::getSiteConfig(); $url = $siteConfig['adm_host1'] . '/hotel/api/get-area-name'; // $url = 'cs1.myzzcs.com'.'/hotel/api/get-area-name'; $getInfo = $curlInterface->execute($url); if(empty($getInfo)){ return Util::returnArrEr('获取地址失败!'); } return Util::returnArrSu('获取地址成功!', $getInfo); } }