|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm Hotel.php
- * Create By 2018/1/5 9:20 $
- */
-
- namespace zzcx\service\home;
-
- use common\models\MHotel;
- use common\util\OrderUtil;
- use Yii;
- use common\util\Util;
- use common\util\CurlInterface;
-
- class Hotel
- {
- /**
- * Des:获取酒店展示页面信息
- * Name: getInfo
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function getInfo($params)
- {
- //1.获取酒店 详细
- $data = ['hotel_id' => $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);
- }
-
- }
|