|
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm MappingService.php
- * Create By 2018/5/2 16:05 $
- */
-
- namespace backend\modules\hotel\service;
-
-
- use backend\modules\api\util\Util;
- use backend\modules\hotel\models\ChannelBaseRoomMapping;
- use backend\modules\hotel\models\ChannelHotelMapping;
- use backend\modules\hotel\models\CtripSwitch;
- use backend\modules\hotel\models\OperaHotelBaseRoom;
- use backend\modules\hotel\models\OperaHotelRoom;
- use backend\modules\hotel\models\OperaRoomDistrib;
-
- class MappingService
- {
- #住宿人数对应 值
- public $OCCUPANCY_LIMIT = [
- 1 => 4,
- 2 => 5,
- 3 => 593407,
- 4 => 593411,
- 5 => 600700,
- 6 => 600701,
- 7 => 790297,
- 8 => 790298,
- 9 => 790299,
- ];
-
- public $BED_TYPE = [
- '1' => 641440,
- '2' => 863115
- ];
-
- /**
- * Des:获取房型数据
- * Name: getSubBaseRoom
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function getBaseRoom($params)
- {
- $channelRoomMapp = new ChannelBaseRoomMapping();
- $info = $channelRoomMapp->getInfoByMasterRoomId($params['master_base_room_id'], $params['channel_id']);
- if (empty($info['master_base_room_id'])) {
- return Util::returnArrEr('母物理房型不存在!');
- }
- if (empty($info['sub_base_room_id'])) {
- //添加子房型
- $this->addBaseRoom($info);
- //更新当前酒店的所有房型数据
- $this->updateBaseRoom($info['sub_hotel_id']);
- //再次查询
- $info = $channelRoomMapp->getInfoByMasterRoomId($params['master_base_room_id'], $params['channel_id']);
- if (empty($info['sub_base_room_id'])) {
- return Util::returnArrEr('新增子房型失败!');
- }
- }
- return Util::returnArrSu('', $info);
- }
-
- /**
- * Des:新增子房型
- * Name: addBaseRoom
- * @param $info
- * @return array
- * @author 倪宗锋
- */
- public function addBaseRoom($info)
- {
- $ctripSwitch = new CtripSwitch();
- $data = [
- 'updator' => (string)'',
- 'masterHotelId' => (int)$info['master_hotel_id'],
- 'childHotelId' => (int)$info['sub_hotel_id'],
- 'masterBasicRoomIds' => [
- (int)$info['base_room_id']
- ],
- 'supplierId' => (int)$ctripSwitch->ctripConf['switch_supplier_id'],
- 'opClientIP' => (string)\Yii::$app->request->userIP,
- 'currency' => (string)'CNY'
- ];
- $res = $ctripSwitch->request('getdltcountrylist', $data);
- if ($res->resultStatus->resultCode == 0) {
- return Util::returnArrSu();
- } else {
- return Util::returnArrEr();
- }
- }
-
- /**
- * Des:更新所有房型
- * Name: updateBaseRoom
- * @param $sub_hotel_id
- * @return array
- * @author 倪宗锋
- */
- public function updateBaseRoom($sub_hotel_id)
- {
- #1.获取酒店关联数据
- $chanelHotel = new ChannelHotelMapping();
- $hotelInfo = $chanelHotel->getInfoBySubHotel(['sub_hotel_id' => $sub_hotel_id]);
- if (empty($hotelInfo['hotel_id'])) {
- return Util::returnArrEr('酒店未关联!');
- }
- #2、获取携程数据
- $ctripSwitch = new CtripSwitch();
- $sendData = [
- 'supplierID' => (int)$ctripSwitch->ctripConf['switch_supplier_id'],
- 'hotelID' => (int)$sub_hotel_id
- ];
- $res = $ctripSwitch->request('getdltbasicroomlist', $sendData);
- if (!isset($res->resultStatus->resultCode) || $res->resultStatus->resultCode != 0) {
- return Util::returnArrEr('获取房型数据失败!');
- }
- $baseRoomList = (array)$res->dltBasicRoomTypeEntityList;
- $roomTypeInfo = json_decode(json_encode($baseRoomList), true);
- #4、对数组进行循环处理
- $channelBaseRoom = new ChannelBaseRoomMapping();
- $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
- $masterBasicRoomList = [];
- foreach ($roomTypeInfo as $roomType) {
- #4.1 将母房型的子房型设置为空
- $data = [
- 'roomTypeId' => '',
- 'masterBasicRoomTypeId' => $roomType['masterBasicRoomId']
- ];
- $channelBaseRoom->editRow($data, $channel_arr);
- #4.2如果不存则添加、如果存在就更新
- $masterBasicRoomList[] = $roomType['masterBasicRoomId'];
- $getInfo = $channelBaseRoom->getInfoByMasterRoomId($roomType['masterBasicRoomId']);
- if (empty($getInfo['ID'])) {
- $channelBaseRoom->addRows($roomType, $hotelInfo, $channel_arr);
- }
- }
- #4.2如果库内的房型数据不在接口返回数据中则删除。
- $channelBaseRoom->delRow($sub_hotel_id, $channel_arr, $masterBasicRoomList);
- #5、获取售卖房型的数据
- $getSaleRoomList = $this->getSwitchSaleRoomList($sub_hotel_id);
- if ($getSaleRoomList['flag'] == false) {
- return $getSaleRoomList;
- }
- $saleRoomList = $getSaleRoomList['data'];
- #6、更新母房型的子房型信息
- foreach ($saleRoomList as $saleVal) {
- $channelBaseRoom->editRow($saleVal, $channel_arr);
- }
-
- return Util::returnArrSu();
- }
-
-
- /**
- * Des:获取售卖房型的列表
- * Name: getSwitchSaleRoomList
- * @param $sub_hotel_id
- * @return array
- * @author 倪宗锋
- */
- public function getSwitchSaleRoomList($sub_hotel_id)
- {
- $ctripSwitch = new CtripSwitch();
- $data = [
- 'supplierId' => (int)$ctripSwitch->ctripConf['switch_supplier_id'],
- 'hotelId' => (int)$sub_hotel_id,
- 'returnDataTypeList' => [
- 'BasicRoomTypeSimpleEntity',
- ]
- ];
- $res = $ctripSwitch->request('gethotelroomstaticinfo', $data);
- if (!isset($res->resultStatus->resultCode) || $res->resultStatus->resultCode != 0) {
- return Util::returnArrEr('获取房型数据失败!');
- }
- #3、截取房型数组
- if (empty($res->roomStaticInfos->roomStaticInfo[0]->roomTypeInfos->roomTypeInfo)) {
- $roomTypeInfo = [];
- } else {
- $roomTypeInfo = (array)$res->roomStaticInfos->roomStaticInfo[0]->roomTypeInfos->roomTypeInfo;
- $roomTypeInfo = json_decode(json_encode($roomTypeInfo), true);
- }
- return Util::returnArrSu('', $roomTypeInfo);
- }
-
- /**
- * Des:获取cs房型数据
- * Name: getCSRoomInfo
- * @param $roomId
- * @param $channel_id
- * @return array
- * @author 倪宗锋
- */
- public function getCSRoomInfo($roomId, $channel_id)
- {
- $operaHotelRoom = new OperaHotelBaseRoom();
- $getInfo = $operaHotelRoom->getRoomInfo($roomId, $channel_id);
- if (empty($getInfo['MAIN_ID'])) {
- return Util::returnArrEr('cs房型不存在!');
- }
- if (empty($getInfo['sub_base_room_id']) == false) {
- return Util::returnArrEr('该cs房型已经关联了其他房型数据!' . $getInfo['sub_base_room_id']);
- }
- if (empty($getInfo['sub_hotel_id'])) {
- return Util::returnArrEr('当前酒店未绑定!');
- }
- return Util::returnArrSu('', $getInfo);
- }
-
- /**
- * Des:获取代理通可以进行关联的房型数组
- * Name: getSwitchRoomList
- * @param $sub_hotel_id
- * @param $sub_base_room_id
- * @param $saleRoomList
- * @return array
- * @author 倪宗锋
- */
- public function getSwitchRoomList($sub_hotel_id, $sub_base_room_id, $saleRoomList)
- {
- #1、第一步調用接口獲取列表
- $ctripSwitch = new CtripSwitch();
- $data = [
- 'supplierId' => (int)$ctripSwitch->ctripConf['switch_supplier_id'],
- 'hotelId' => (int)$sub_hotel_id,
- 'returnDataTypeList' => [
- 'RoomTypeSimpleEntity',
- ]
- ];
- $res = $ctripSwitch->request('gethotelroomstaticinfo', $data);
- if (!isset($res->resultStatus->resultCode) || $res->resultStatus->resultCode != 0) {
- return [];
- }
- if (empty($res->roomStaticInfos->roomStaticInfo[0]->roomInfos->roomInfo)) {
- $roomInfo = [];
- } else {
- $roomInfo = (array)$res->roomStaticInfos->roomStaticInfo[0]->roomInfos->roomInfo;
- $roomInfo = json_decode(json_encode($roomInfo), true);
- }
- #2、獲取已关联的售卖房型ID
- $saleRoomArr = [];
- foreach ($saleRoomList as $salRoomVal) {
- $saleRoomArr[] = $salRoomVal['channel_mapping_id'];
- }
- #3、过滤掉不可关联的代理通房型ID
- $result = [];
- foreach ($roomInfo as $roomVal) {
- if ($roomVal['basicRoomTypeId'] != $sub_base_room_id) {
- continue;
- }
- if (in_array($roomVal['roomId'], $saleRoomArr)) {
- continue;
- }
- $roomVal['roomName'] = $roomVal['roomId'] . $roomVal['roomName'];
- $result[] = $roomVal;
- }
- return $result;
- }
-
- /**
- * Des:设置售卖房型的关联
- * Name: setSaleRoomMapping
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function setSaleRoomMapping($params)
- {
- #1、获取cs房型数据 判断房型是否已经关联
- $operaHotelRoom = new OperaHotelRoom();
- $getRoomInfo = $operaHotelRoom->getRoomInfoForSetSaleRoom($params);
- if (empty($getRoomInfo['cs_sale_room_id'])) {
- return Util::returnArrEr('cs房型不存在 !');
- }
- if (empty($getRoomInfo['sale_room_id']) == false) {
- return Util::returnArrEr('cs房型已经关联了其他代理通房型!');
- }
- if (empty($getRoomInfo['sub_base_room_id'])) {
- return Util::returnArrEr('基础房型未关联!');
- }
- #2、进行关联操作
- $ctripSwitch = new CtripSwitch();
- $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
- $operaRoomDistrip = new OperaRoomDistrib();
- $data = [
- 'DISTRIB_ROOM_NAME' => $params['sale_room_name'],//针对渠道设置的子房型名称
- 'ROOM_ID' => $params['cs_sale_room_id'],//房型ID 对应opera_hotel_room的ID
- 'CHANNEL_MAPPING_ID' => $params['sale_room_id']//渠道直连房型ID(携程:房型ID,阿里:RP ID)
- ];
- $operaRoomDistrip->addRow($data, $channel_arr);
- return Util::returnArrSu();
- }
-
- /**
- * Des:删除基础房型的关联关系
- * Name: delBaseRoomMapping
- * @param $param
- * @return array
- * @author 倪宗锋
- */
- public function delBaseRoomMapping($param)
- {
- if (empty($param['base_room_id'])) {
- return Util::returnArrEr('参数异常!');
- }
- $ctripSwitch = new CtripSwitch();
- $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
- #1、获取基础房型下面子房型的关联关系
- $operaHotelRoom = new OperaHotelRoom();
- $getSaleChannelCnt = $operaHotelRoom->getChannelByBaseRoom($param, $channel_arr);
- if ($getSaleChannelCnt != 0) {
- return Util::returnArrEr('请先解除售卖房型的关联关系!');
- }
- #2、删除关联关系
- $channelBaseMappingRoom = new ChannelBaseRoomMapping();
- $channelBaseMappingRoom->delBaseRoomMapping($param, $channel_arr);
- return Util::returnArrSu();
- }
-
-
- /**
- * Des:解除售卖房型关联关系
- * Name: delSaleRoomMapping
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function delSaleRoomMapping($params)
- {
- $ctripSwitch = new CtripSwitch();
- $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
- $operaRoomDistrip = new OperaRoomDistrib();
- $data = [
- 'DISTRIB_ROOM_NAME' => '',//针对渠道设置的子房型名称
- 'ROOM_ID' => $params['cs_sale_room_id'],//房型ID 对应opera_hotel_room的ID
- 'CHANNEL_MAPPING_ID' => ''//渠道直连房型ID(携程:房型ID,阿里:RP ID)
- ];
- $operaRoomDistrip->editRow($data, $channel_arr);
- return Util::returnArrSu();
- }
-
- /**
- * Des:新增售卖房型数据
- * Name: addSaleRoomMapping
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function addSaleRoomMapping($params)
- {
- $switch = new CtripSwitch();
- $config = $switch->ctripConf;
- #1、获取用于发送请求的参数
- $operaHotelRoom = new OperaHotelRoom();
- $getData = $operaHotelRoom->getDataForAddSaleRoom($params);
- if (empty($getData['master_base_room_id'])) {
- return Util::returnArrEr('基础房型未关联!不可新增!');
- }
- #设置接口参数
- $data = [
- 'supplierId' => (int)$config['switch_supplier_id'],//供应商
- 'hotelId' => (int)$getData['sub_hotel_id'],
- 'basicRoomTypeId' => (int)$getData['sub_base_room_id'],
- 'purchaseSourceID' => (int)0,
- 'priceType' => (int)2
- ];
- #餐食设置
- if ($getData['BREAKFAST_INCLUDE'] == 0) {
- $data['mealType'] = (int)0;//餐食
- $data['mealCount'] = (int)-1;//餐食份数
- $data['rateCodePropertyValueIDList'][] = (int)498160;//餐食
- } elseif ($getData['BREAKFAST_INCLUDE'] == 1) {
- $data['mealType'] = (int)1;
- $data['mealCount'] = (int)1;
- $data['rateCodePropertyValueIDList'][] = (int)7;
- } elseif ($getData['BREAKFAST_INCLUDE'] == 2) {
- $data['mealType'] = (int)1;
- $data['mealCount'] = (int)2;
- $data['rateCodePropertyValueIDList'][] = (int)640292;
- } else {
- $data['mealType'] = (int)10;
- $data['mealCount'] = (int)$getData['BREAKFAST_INCLUDE'];
- $data['rateCodePropertyValueIDList'][] = (int)8;
- }
- #入住人数
- if (isset($this->OCCUPANCY_LIMIT[$getData['OCCUPANCY_LIMIT']])) {
- $data['rateCodePropertyValueIDList'][] = $this->OCCUPANCY_LIMIT[$getData['OCCUPANCY_LIMIT']];//入住人数
- }
- #床行
- if (isset($this->BED_TYPE[$getData['BED_TYPE']])) {
- $data['rateCodePropertyValueIDList'][] = $this->BED_TYPE[$getData['BED_TYPE']];
- }
- $res = $switch->request('createRoom', $data);//向代理通发送添加请求
- if (!isset($res->resultStatus->resultCode) || $res->resultStatus->resultCode != 0) {
- $msg = empty($res->resultStatus->resultMsg) ? '新增房型数据失败!' : $res->resultStatus->resultMsg;
- return Util::returnArrEr($msg);
- }
- //添加成功则 设置关联关系
- $mappingData = [
- 'cs_sale_room_id' => $params['cs_sale_room_id'],//cs售卖房型ID
- 'sale_room_id' => $res->roomTypeId,//代理通售卖房型ID
- 'sale_room_name' => $res->roomName,//代理通售卖房型名称
- 'channel_id' => 669,//渠道ID
- ];
- $result = $this->setSaleRoomMapping($mappingData);
- return $result;
- }
- }
|