|
- <?php
-
- namespace backend\modules\hotel\controllers;
-
-
- use backend\modules\api\util\Util;
- use backend\modules\hotel\models\ChannelBaseRoomMapping;
- use backend\modules\hotel\models\ChannelHotelMapping;
- use backend\modules\hotel\models\CtripHotelList;
- use backend\modules\hotel\models\CtripSwitch;
- use backend\modules\hotel\models\OperaHotel;
- use backend\modules\hotel\models\CtripCityList;
- use backend\modules\hotel\models\OperaHotelBaseRoom;
- use backend\modules\hotel\models\OperaHotelRoom;
- use backend\modules\hotel\service\MappingService;
- use \common\models\BaseSupplier;
- use Yii;
- use yii\data\ActiveDataProvider;
- use yii\db\Expression;
-
- class MappingController extends BaseController
- {
- public $layout = "@backend/modules/motorcade/views/layouts/iframe_new";
- public $enableCsrfValidation = false;
- const SUCCESS_CODE = 0;
- const UNMAPPING_CODE = 100; // 酒店或房型未直连
- const PARAM_ERR0R = 101; // 请求参数缺失
- const MAPPING_HOTEL_ERROR = 102; //酒店关联失败
-
- const RETURN_MSG = [
- self::SUCCESS_CODE => 'success',
- self::UNMAPPING_CODE => '请检查 Mapping 关系!',
- self::PARAM_ERR0R => '请求参数缺失',
- self::MAPPING_HOTEL_ERROR => '酒店关联失败',
- ];
- private $service = null;
-
- /**
- * Des:service
- * Name: service
- * @return MappingService
- * @author 倪宗锋
- */
- public function service()
- {
- if ($this->service == null) {
- $this->service = new MappingService();
- }
- return $this->service;
- }
-
- public function actionIndex()
- {
- $model = new BaseSupplier();
- $request = Yii::$app->request->post();
- $model->load($request);
- $query = BaseSupplier::find()->joinWith('baseSupplierSale b')->from('base_supplier a')
- ->where(['b.PARENT_TYPE' => 25, 'a.CANCEL_FLAG' => 0, 'a.MAIN_CORP_ID' => 1, 'a.supplier_type' => 301, 'b.CANCEL_FLAG' => 0])
- ->select(['a.ID', 'a.SUPPLIER_NAME', 'a.COMPANY_NAME']);
- $query->andFilterWhere(['like', 'a.SUPPLIER_NAME', $model->SUPPLIER_NAME])
- ->andFilterWhere(['in', 'a.ID', [669, 1667, 1668, 1669, 1670]]);
- $dataProvider = new ActiveDataProvider([
- 'query' => $query,
- 'pagination' => [
- 'pageSize' => 25,
- ],
- ]);
-
- return $this->render('index', ['model' => $model, 'dataProvider' => $dataProvider]);
- }
-
- public function actionHotelMappingList()
- {
- $hotel = new OperaHotel();
- $hotel->HOTEL_STATUS = 1;
- $dataProvider = $hotel->getHotelist(Yii::$app->request->queryParams);
-
- return $this->render('hotel_mapping', ['model' => [], 'dataProvider' => $dataProvider]);
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:交互View 母酒店列表
- * User: Steven
- * Date: 2018/4/20
- * Time: 17:00
- * Class actionCityHotelList
- * @return string
- * @throws yii\db\Exception
- */
- public function actionCityHotelList()
- {
- $model = new CtripCityList();
- // 如果参数为空,默认当前为上海
- $request = Yii::$app->request->get();
- $request['channel_id'] = empty($request['channel_id']) ? Yii::$app->params['ctrip']['supplier_id'] : $request['channel_id'];
- $request = empty($request['country_id']) ? ['country_id' => 1, 'city_id' => 2, 'channel_id' => $request['channel_id'], 'hotel_name' => ''] : $request;
- $new_model = new CtripHotelList();
- $hotel_list = $new_model->getMasterHotelList($request);
- $model->load($request, '');
- // 如果当前城市没有酒店信息需要拉取代理通后台数据
- if ($hotel_list->getTotalCount() <= 0 && empty($request['hotel_name'])) {
- $res = Yii::$app->runAction('hotel/ctrip-switch/getdltmasterhotellist');
- if ($res['code'] == 0) {
- return '<script>$("#submit").trigger(\'click\');</script>';
- }
- }
- $zz_hotel_list = OperaHotel::find()
- ->leftJoin('channel_hotel_mapping b', 'a.HOTEL_ID=b.hotel_id')->from('opera_hotel a')
- ->andFilterWhere([
- 'a.CANCEL_FLAG' => 0,
- ])
- ->andWhere('b.hotel_id is null')
- ->orderBy(new Expression('CONVERT(a.HOTEL_NAME USING GBK)'))
- ->all();
-
- return $this->render('set_hotel_mapping', ['model' => $model, 'dataProvider' => $hotel_list, 'hotel_list' => $zz_hotel_list]);
- }
-
- /**
- * @Author: wanglg
- * @DESC: 设置酒店关联
- * @param hotels :代理通子酒店id
- * @param cs_hotel_id :cs酒店id
- * @return string
- */
- public function actionSetHotelMapping()
- {
- $request = Yii::$app->request->post();
- // 查询子酒店是否已经创建成功,如果已存在,不用创建子酒店
- $master_hotel = ChannelHotelMapping::findAll(['master_hotel_id' => $request['hotels'], 'cancel_flag' => 0]);
- // 如果酒店信息不存在,先创建子酒店
- if (empty($master_hotel)) {
- // 创建子酒店
- $res = Yii::$app->runAction('hotel/ctrip-switch/createsubhotel', ['params' => ['hotels' => $request['hotels'], 'cs_hotel_id' => $request['cs_hotel_id']]]);
- } else {
- // 将关联表中的hotel_id绑定cs系统hotel_id
- $update_res = ChannelHotelMapping::updateAll(['hotel_id' => $request['cs_hotel_id']], ['master_hotel_id' => $request['hotels'], 'cancel_flag' => 0]);
- if (!$update_res) {
- $res = json_encode(['code' => self::MAPPING_HOTEL_ERROR, 'msg' => self::RETURN_MSG[self::MAPPING_HOTEL_ERROR]]);
- } else {
- $res = json_encode(['code' => self::SUCCESS_CODE, 'msg' => self::RETURN_MSG[self::SUCCESS_CODE]]);
- }
- }
-
- return $res;
- }
-
- /**
- * Notes:设置酒店售卖渠道
- * User: Steven
- * Date: 2018/5/2
- * Time: 15:16
- * @return string
- */
- public function actionSetSaleType()
- {
- // $model = new ChannelHotelMapping();
- $get = Yii::$app->request->get();
- $model = ChannelHotelMapping::findOne(['channel_id' => $get['channel_id'], 'hotel_id' => $get['hotel_id'], 'cancel_flag' => 0]);
-
- if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
- $request = Yii::$app->request->post();
- $switch_model = new CtripSwitch();
- $model->apply_week = empty($model->apply_week) ? [] : $model->apply_week;
- $week_days = $switch_model->weekDays($model->apply_week);
- $request['ChannelHotelMapping']['apply_week'] = implode('', $week_days);
- $supplier_info = BaseSupplier::findOne(['ID' => $model->channel_id]);
- if ($model->load($request) && $model->validate()) {
- if (!$model->save()) {
- return '<script>z.pjaxFinish("error", "设置售卖状态失败!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
- $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
- } else {
- return '<script>z.pjaxFinish("success", "设置售卖状态成功!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
- $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
- }
- } else {
- return '<script>z.pjaxFinish("error", "设置售卖状态失败!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
- $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
- }
-
- }
-
- return $this->render('_setSaleType', [
- 'model' => $model,
- ]);
- }
- ######################基础房型设置###############################################
-
- /**
- * Des:房型列表
- * Name: actionBaseRoomList
- * @return string
- * @author 倪宗锋
- */
- public function actionBaseRoomList()
- {
- // 如果参数为空,默认当前为上海
- $param = [
- 'sub_hotel_id' => Yii::$app->request->get('sub_hotel_id', ''),//子酒店ID
- 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
- ];
- $channelRoom = new ChannelBaseRoomMapping();
- $room_list = $channelRoom->getMasterBaseRoomList($param);//获取代理通房型数据
- $channelHotel = new ChannelHotelMapping();
- $getChannelHotelInfo = $channelHotel->getInfoBySubHotel($param);//获取代理通酒店数据
- if (empty($getChannelHotelInfo['hotel_id'])) {
- $getChannelHotelInfo['hotel_id'] = '0';
- }
- $operaBaseRoom = new OperaHotelBaseRoom();
- $cs_room_list = $operaBaseRoom->getHotelBaseRoomForSelect($getChannelHotelInfo['hotel_id'], $param['channel_id']);//獲取cs房型列表
- $showParam = [
- 'dataProvider' => $room_list,
- 'cs_room_list' => $cs_room_list,
- 'channel_id' => $param['channel_id'],
- 'sub_hotel_id' => $param['sub_hotel_id']
- ];
- return $this->render('base_room_list', $showParam);
- }
-
- /**
- * Des:匹配房型
- * Name: actionSetRoomMapping
- * @author 倪宗锋
- */
- public function actionSetRoomMapping()
- {
- // 如果参数为空,默认当前为上海
- $param = [
- 'master_base_room_id' => Yii::$app->request->post('master_base_room_id', ''),//母房型ID
- 'cs_room_id' => Yii::$app->request->post('cs_room_id', ''),//cs房型ID
- 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
- ];
- #1、获取物理房型的数据 不存在则自动生成并更新
- $getRoomInfo = $this->service()->getBaseRoom($param);
- if ($getRoomInfo['flag'] == false) {
- return json_encode($getRoomInfo);
- }
- $roomInfo = $getRoomInfo['data'];//物理房型数据
- #2、获取cs房型数据,如果已经和其他房型匹配,则程序终止
- $getCSRoomInfo = $this->service()->getCSRoomInfo($param['cs_room_id'], $param['channel_id']);
- if ($getCSRoomInfo['flag'] == false) {
- return json_encode($getCSRoomInfo);
- }
- $CSRoomInfo = $getCSRoomInfo['data'];
-
- #3、判断cs房型的酒店是否和当前母房型酒店绑定,未绑定则程序终止
- if ($CSRoomInfo['sub_hotel_id'] != $roomInfo['sub_hotel_id']) {
- return json_encode(Util::returnArrEr('酒店绑定不一致!'));
- }
- #4、更新房型数据进行绑定操作
- $ctripSwitch = new CtripSwitch();
- $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
- $channelBaseRoom = new ChannelBaseRoomMapping();
- $data = [
- 'base_room_id' => $param['cs_room_id'],
- ];
- $flag = $channelBaseRoom->editInfo($data, $param['master_base_room_id'],$roomInfo['sub_hotel_id'], $channel_arr);
- if ($flag == false) {
- return json_encode(Util::returnArrEr('绑定操作失败!'));
- }
- return json_encode(Util::returnArrSu('绑定成功!'));
- }
-
- /**
- * Des:更新房型數據
- * Name: actionUpdateBaseRoom
- * @return string
- * @author 倪宗锋
- */
- public function actionUpdateBaseRoom()
- {
- $param = [
- 'sub_hotel_id' => Yii::$app->request->post('sub_hotel_id', ''),//子酒店ID
- ];
- $result = $this->service()->updateBaseRoom($param['sub_hotel_id']);
- return json_encode($result);
- }
-
- /**
- * Des:删除基础房型关联关系
- * Name: actionDelRoomMapping
- * @author 倪宗锋
- */
- public function actionDelBaseRoomMapping()
- {
- // 如果参数为空,默认当前为上海
- $param = [
- 'base_room_id' => Yii::$app->request->post('cs_room_id', ''),//cs房型ID
- ];
- $result = $this->service()->delBaseRoomMapping($param);
- return json_encode($result);
- }
-
- ####################售卖房型操作#################################
-
- /***
- * Des:獲取售賣房型ID
- * Name: actionSaleRoomList
- * @author 倪宗锋
- */
- public function actionSaleRoomList()
- {
- $param = [
- 'cs_room_id' => Yii::$app->request->get('cs_room_id', ''),//cs基礎房型ID
- 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
- ];
- #1、獲取房型關聯關係
- $operaHotelRoom = new OperaHotelBaseRoom();
- $roomInfo = $operaHotelRoom->getRoomInfo($param['cs_room_id'], $param['channel_id']);
-
- #$return 返回值
- $return['channel_id'] = $param['channel_id'];
- $return['error'] = Util::returnArrSu();
-
- #判断
- if (empty($roomInfo['MAIN_ID'])) {
- $return['error'] = Util::returnArrEr('cs房型不存在!');
- } else if (empty($roomInfo['sub_base_room_id'])) {
- $return['error'] = Util::returnArrEr('该cs房型未关联子物理房型!');
- } else if (empty($roomInfo['sub_hotel_id'])) {
- $return['error'] = Util::returnArrEr('当前房型的酒店未关联母酒店!');
- }
-
- if ($return['error']['flag']) {
- #2、獲取cs房型列表
- $saleRoom = new OperaHotelRoom();
- $saleRoomList = $saleRoom->getSaleRoomList($param['cs_room_id'], $param['channel_id']);
- $return['saleRoomList'] = $saleRoom->getSaleRoomListForShow($param['cs_room_id'], $param['channel_id']);//设置获取数据模型
- #3、獲取代理通售賣房型列表
- $return['switchRoomList'] = $this->service()->getSwitchRoomList($roomInfo['sub_hotel_id'], $roomInfo['sub_base_room_id'], $saleRoomList);
- }
- #4、展示頁面
- return $this->render('sale_room_list', $return);
- }
-
- /**
- * Des:设置售卖房型关联
- * Name: actionSetSaleRoomMapping
- * @return string
- * @author 倪宗锋
- */
- public function actionSetSaleRoomMapping()
- {
- $params = [
- 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
- 'sale_room_id' => Yii::$app->request->post('sale_room_id', ''),//代理通售卖房型ID
- 'sale_room_name' => Yii::$app->request->post('sale_room_name', ''),//代理通售卖房型名称
- 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
- ];
- $params['sale_room_name'] = str_replace($params['sale_room_id'], '', $params['sale_room_name']);
- $result = $this->service()->setSaleRoomMapping($params);
- return json_encode($result);
- }
-
- /**
- * Des:取消售卖房型关联
- * Name: actionSetSaleRoomMapping
- * @return string
- * @author 倪宗锋
- */
- public function actionDelSaleRoomMapping()
- {
- $params = [
- 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
- ];
- $result = $this->service()->delSaleRoomMapping($params);
- return json_encode($result);
- }
-
- /**
- * Des:添加售卖房型
- * Name: actionAddSaleRoom
- * @return string
- * @author 倪宗锋
- */
- public function actionAddSaleRoom()
- {
- $params = [
- 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
- ];
- $result = $this->service()->addSaleRoomMapping($params);
- return json_encode($result);
- }
- }
|