|
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 倪宗锋
- * PhpStorm SetService.php
- * Create By 2017/4/13 9:33 $
- */
-
-
- namespace backend\modules\hotel\models;
-
- use backend\common\Utils;
- use backend\modules\hotel\controllers\SetController;
- use yii\db\Exception;
- use yii\helpers\ArrayHelper;
-
- class SetService
- {
- /**
- * Des:获取
- * Name: getChannelList
- * @return array
- * @author 倪宗锋
- */
- public function getChannelHotelList()
- {
- $channelHotel = new ChannelHotel();
- $getList = $channelHotel->getListForSet();
- return $getList;
- }
-
- /**
- * Des:获取房型列表
- * Name: getRoomListByHotelId
- * @param $hotelId
- * @return array
- * @author 倪宗锋
- */
- public function getRoomListByHotelId($hotelId)
- {
- $channelRoom = new ChannelRoom();
- $getList = $channelRoom->getRoomListByHotelId($hotelId);
- return $getList;
- }
-
- /**
- * Des:获取本地酒店信息 根据 渠道酒店ID
- * Name: getHotelIdByChannelHotelId
- * @param $hotelId
- * @return array
- * @author 倪宗锋
- */
- public function getHotelIdByChannelHotelId($hotelId)
- {
- if (empty($hotelId)) {
- return [];
- }
- $channelHotel = new ChannelHotel();
- $getInfo = $channelHotel->getHotelInfoChannelHotelId($hotelId);
- return $getInfo;
- }
-
- /**
- * Des:更新酒店数据
- * Name: upJD
- * @return array
- * @author 倪宗锋
- */
- public function upJD()
- {
- /**1.更新携程酒店数据*/
- $msg = '';
- $upCtrip = $this->upJdFromCtrip();
- if ($upCtrip['flag'] == false) {
- $msg .= $upCtrip['msg'] . ' ';
- }
- /**返回*/
- if (empty($msg)) {
- return ['flag' => true, 'msg' => 'success'];
- } else {
- return ['flag' => false, 'msg' => $msg];
- }
-
- }
-
- /**
- * Des:更新房型数据
- * Name: upRoom
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function upRoom($params)
- {
- if (empty($params['channelHotelId']) || empty($params['channelId'])) {
- return ['flag' => false, 'msg' => 'params error'];
- }
- if ($params['channelId'] == \Yii::$app->params['ctrip']['supplier_id']) {
- /**1.更新携程酒店房型数据数据*/
- $upCtrip = $this->upRoomFromCtrip($params);
- if ($upCtrip['flag'] == false) {
- return $upCtrip;
- }
- } else {
- return ['flag' => false, 'msg' => 'params error'];
- }
- return ['flag' => true, 'msg' => 'success'];
- }
-
- /**
- * Des:酒店关联
- * Name: mappingJd
- * @param $params array
- * @return array
- * @author 倪宗锋
- */
- public function mappingJd($params)
- {
- /**1.检测参数*/
- if (empty($params['channelHotelId']) || empty($params['channelId']) || empty($params['hotelId'])) {
- return ['flag' => false, 'msg' => '关联操作失败!params error'];
- }
- /**2.检测是否可以mapping*/
- $channelHotelRelation = new HotelRelation();
- $check = $channelHotelRelation->checkIsCanMapping($params);
- if ($check) {//已存在 渠道酒店已绑定其他本地酒店或本地酒店已绑定其他渠道酒店!
- return ['flag' => false, 'msg' => '关联操作失败!having mapping'];
- }
- /**3。添加关联表记录*/
- $result = $channelHotelRelation->mapping($params);
- if ($result) {
- $hotelMapping = HotelMapping::findOne(['channel_id' => \Yii::$app->params['ctrip']['supplier_id']]);
- $arr = explode(',', $hotelMapping->hotel_str);
- $arr[] = $params['hotelId'];
- $arr = array_unique($arr);
- $hotelMapping->hotel_str = implode(',', $arr);
- $hotelMapping->save(false);
- return ['flag' => true, 'msg' => 'success'];
- } else {
- return ['flag' => false, 'msg' => '关联操作失败!add error'];
- }
- }
-
- /**
- * Des:解除酒店关联
- * Name: unMappingHotel
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function unMappingHotel($params, $setType)
- {
- /**1.检测参数*/
- if (empty($params['channelHotelId']) || empty($params['channelId'])) {
- return ['flag' => false, 'msg' => '失败!params error'];
- }
- //解除酒店时,不判断子房型是否解除mapping
- // $roomRelation = new RoomRelation();
- // $check = $roomRelation->checkUnMappingHotel($params);
- // if($check == false){
- // return ['flag' => false, 'msg' => '失败!请先解绑子房型!'];
- // }
- if ($params['channelId'] == \Yii::$app->params['ctrip']['supplier_id']) {
- $relation = $this->relationCtripHotel($params, $setType);
- if ($relation['flag'] == false) {
- return ['flag' => false, 'msg' => '失败!del error'];
- }
- }
- /**3。添加关联表记录*/
- $channelHotelRelation = HotelRelation::findOne(['ChannelHotelId' => $params['channelHotelId']]);
- $hotel = $channelHotelRelation->HotelId;
- //先删除该酒店下的所有房型关联
- $flag = $channelHotelRelation->clearRoom($params);
- if (!$flag) {
- return ['flag' => false, 'msg' => '失败!del error'];
- }
- $result = $channelHotelRelation->unMapping($params);
- if ($result) {
- $hotelMapping = HotelMapping::findOne(['channel_id' => \Yii::$app->params['ctrip']['supplier_id']]);
- $arr = explode(',', $hotelMapping->hotel_str);
- if (($key = array_search($hotel, $arr)) !== false) {
- unset($arr[$key]);
- }
- $hotelMapping->hotel_str = implode(',', $arr);
- $hotelMapping->save(false);
- return ['flag' => true, 'msg' => 'success'];
- } else {
- return ['flag' => false, 'msg' => '失败!del error'];
- }
- }
-
- /**
- * Des:关联房型
- * Name: mappingRoom
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function mappingRoom($params, $setType)
- {
-
- /**1.检测参数*/
- if (empty($params['channelRoomId']) || empty($params['channelId']) || empty($params['roomId'])) {
- return ['flag' => false, 'msg' => '关联操作失败!params error'];
- }
- /**2.检测是否可以mapping*/
- $check = $this->checkRoomIsCanMapping($params);
- if ($check['flag'] == false) {
- return $check;
- }
- /**3。添加关联表记录*/
- $transaction = \Yii::$app->db->beginTransaction();
- try {
- if ($setType == RoomRelation::MAPPING_SET_TYPE_NEW) {
- $channelRoomRelation = new RoomRelation();
- } else {
- $channelRoomRelation = RoomRelation::findOne(['ChannelRoomId' => $params['channelRoomId'], 'ChannelId' => $params['channelId']]);
- if ($channelRoomRelation == null) {
- $channelRoomRelation = new RoomRelation();
- }
- }
- $result = $channelRoomRelation->mapping($params);
- if (!$result) {
- return ['flag' => false, 'msg' => '关联操作失败!add error'];
- }
- /**4.1前往携程关联*/
- if ($params['channelId'] == \Yii::$app->params['ctrip']['supplier_id']) {
- $relation = $this->relationCtripRoom($params, $setType);
- if ($relation['flag'] == false) {
- $transaction->rollBack();//回滚
- return $relation;
- }
- }
- $transaction->commit();
- return ['flag' => true, 'msg' => 'success'];
- } catch (Exception $e) {
- $transaction->rollBack();//回滚
- return ['flag' => false, 'msg' => '关联操作失败!sys error'];
- }
-
- }
-
- /**
- * Des:接触房型关联
- * Name: unMappingRoom
- * @param $params
- * @param $setType
- * @return array
- * @throws Exception
- * @author 倪宗锋
- */
- public function unMappingRoom($params, $setType)
- {
- /**删除关联表记录*/
- $transaction = \Yii::$app->db->beginTransaction();
- try {
- $channelRoomRelation = new RoomRelation();
- $result = $channelRoomRelation->unMapping($params);
- if (!$result) {
- return ['flag' => false, 'msg' => '删除操作失败!del error'];
- }
- /**4.1前往携程关联*/
- if ($params['channelId'] == \Yii::$app->params['ctrip']['supplier_id']) {
- $relation = $this->relationCtripRoom($params, $setType);
- if ($relation['flag'] == false) {
- $transaction->rollBack();//回滚
- return $relation;
- }
- }
- $transaction->commit();
- return ['flag' => true, 'msg' => 'success'];
- } catch (Exception $e) {
- $transaction->rollBack();//回滚
- return ['flag' => false, 'msg' => '删除操作失败!sys error'];
- }
-
- }
-
- /**
- * Des: 检查房型是否可以mapping
- * Name: checkIsCanMapping
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function checkRoomIsCanMapping($params)
- {
- /**校验房型是否已经mapping*/
- $channelRoomRelation = new RoomRelation();
- $check = $channelRoomRelation->checkIsCanMapping($params);
- if ($check) {//已存在 渠道酒店已绑定其他本地酒店或本地酒店已绑定其他渠道酒店!
- return ['flag' => false, 'msg' => '关联操作失败!having mapping'];
- }
- /**检查该房型关联是否正确*/
- $channelHotelRelation = new HotelRelation();
- $checkHotel = $channelHotelRelation->checkRoomCanMapping($params);
- if ($checkHotel) {
- return ['flag' => true, 'msg' => ''];
- }
- return ['flag' => false, 'msg' => '关联操作失败!请先关联酒店!'];
- }
-
- /**
- * Des:推送订单状态
- * Name: setOrderStatus
- * @param $params
- * @return mixed
- * @author 倪宗锋
- */
- public function setOrderStatus($params)
- {
- if ($params['channelId'] == \Yii::$app->params['ctrip']['supplier_id']) {//携程酒店
- $setDes = $this->setCtripOrderStatus($params);
- } else {
- $setDes = ['flag' => true];
- }
- return $setDes;
- }
- /*********************携程酒店************************************/
- /**
- * Des:更新携程酒店数据
- * Name: upJdFromCtrip
- * @return array
- * @author 倪宗锋
- */
- public function upJdFromCtrip()
- {
- $getJdFromCtrip = $this->getJdFromCtrip();//获取携程酒店数据
- if ($getJdFromCtrip['flag'] == false) {
- return $getJdFromCtrip;
- }
- if (empty($getJdFromCtrip['data'])) {
- return ['flag' => false, 'msg' => '未获取到携程酒店数据'];
- }
- $channelHotel = new ChannelHotel();//渠道酒店表
- $upFlag = $channelHotel->upDateCtrip($getJdFromCtrip['data']);
- if ($upFlag) {
- return ['flag' => true, 'msg' => 'success'];
- }
- return ['flag' => false, 'msg' => '同步携程酒店数据失败'];
- }
-
- /**
- * Des:从携程获取酒店数据
- * Name: getJdFromCtrip
- * @param int $page
- * @return array
- * @author 倪宗锋
- */
- public function getJdFromCtrip($page = 1)
- {
- $data = ['SupplierID' => \Yii::$app->params['ctrip']['soap']['SupplierID'], 'CurrentPage' => $page];
- $soap = new SoapService($data, 'GetHotelInfo', 'GetHotelInfoRequest', '1.2');
- $return = $soap->exec();
- if ($return['flag'] == false) {
- return $return;
- }
- $return = $return['data'];
- if (empty($return['RequestResult']['Response']) || $return['RequestResult']['ResultCode'] != 0) {
- return ['flag' => false, 'msg' => '同步携程JD数据失败[1001]'];
- }
- $hotel = $return['RequestResult']['Response']['GetHotelInfoResponse'];
-
- if (isset($hotel['HotelList']['Hotel'])) {
- $jdList[] = $hotel['HotelList'];
- } else {
- $jdList = $hotel['HotelList'];
- }
- $totalPage = intval($hotel['TotalPage']);
- $page = intval($hotel['CurrentPage']);
- if ($totalPage > $page) {//当存在下个分页时 获取下个分页的数据
- $getJdList = $this->getJdFromCtrip($page + 1);
- if ($getJdList['flag'] == false) {
- return ['flag' => false, 'msg' => '同步携程JD数据失败[1002]'];
- }
- $jdList_1 = $getJdList['data'];
- $jdList = ArrayHelper::merge($jdList, $jdList_1);
- }
- return ['flag' => true, 'data' => $jdList];
- }
-
- /**
- * Des:更新房型数据
- * Name: upRoomFromCtrip
- * @param $params array
- * @return array
- * @author 倪宗锋
- */
- public function upRoomFromCtrip($params)
- {
- /**去携程获取酒店对应的房型数据*/
- $getRoomUnMapping = $this->getRoomFromCtrip($params);//获取携程酒店数据-没有mapping
- $getRoomMapping = $this->getRoomFromCtrip($params, 'Mapping');//获取携程酒店房型数据数据-已经mapping
- if ($getRoomUnMapping['flag'] == false || $getRoomMapping['flag'] == false) {
- return ['flag' => false, 'msg' => '获取携程房型数据失败!'];
- }
- $roomList = ArrayHelper::merge($getRoomMapping['data'], $getRoomUnMapping['data']);
- if (empty($roomList)) {
- return ['flag' => false, 'msg' => '该酒店下没有房型数据'];
- }
- /**更新渠道房型数据*/
- $channelRoom = new ChannelRoom();
- $upFlag = $channelRoom->upRoomForCtrip($roomList, $params['channelHotelId']);
- if ($upFlag) {
- return ['flag' => true, 'msg' => 'success'];
- }
- return ['flag' => false, 'msg' => '同步携程房型数据失败'];
- }
-
- /**
- * Des:获取酒店的房型数据
- * Name: getRoomFromCtrip
- * @param $params
- * @param string $type
- * @return array
- * @author 倪宗锋
- */
- public function getRoomFromCtrip($params, $type = 'UnMapping')
- {
- $data = [
- 'SupplierID' => \Yii::$app->params['ctrip']['soap']['SupplierID'],
- 'GetMappingInfoType' => $type,
- 'GetMappingInfoRequest' => [
- 'Hotel' => $params['channelHotelId'],
- ]
- ];
- $soap = new SoapService($data, 'GetMappingInfo', 'GetMappingInfoRequestList', '1.2');
- $return = $soap->exec();
- if ($return['flag'] == false) {
- return $return;
- }
- $return = $return['data'];
- if (empty($return['RequestResult']['Response']['GetMappingInfoResponseList']['HotelResponseItem']['MasterHotel']['ChildHotel'])) {
- return ['flag' => false, 'msg' => '同步携程JD房型数据失败[1000]'];
- }
- $childHotel = $return['RequestResult']['Response']['GetMappingInfoResponseList']['HotelResponseItem']['MasterHotel']['ChildHotel'];
- if (empty($childHotel['RoomResponseItem'])) {
- $roomList = [];
- } else {
- if (empty($childHotel['RoomResponseItem']['Room'])) {
- $roomList = $childHotel['RoomResponseItem'];
- } else {
- $roomList[] = $childHotel['RoomResponseItem'];
- }
-
- }
- return ['flag' => true, 'data' => $roomList];
- }
-
- //取消酒店的mapping关系
- public function relationCtripHotel($params, $SetType = RoomRelation::MAPPING_SET_TYPE_DELETE_HOTEL)
- {
- if (empty($params['channelHotelId'])) {
- return ['flag' => false, 'msg' => '关联失败,params error'];
- }
- $data = [
- 'SupplierID' => \Yii::$app->params['ctrip']['soap']['SupplierID'],
- 'Hotel' => $params['channelHotelId'],
- 'RatePlanCode' => '',
- 'HotelGroupRoomTypeCode' => '',
- 'HotelGroupRoomName' => '',
- 'HotelGroupHotelCode' => '',
- 'HotelGroupRatePlanCode' => '',
- 'BalanceType' => 'PP',
- 'MappingType' => 1,
- 'SetType' => $SetType
- ];
- $soap = new SoapService($data, 'SetMappingInfo', 'SetMappingInfoRequest', '1.2');
- $soap->exec();
-
- return ['flag' => true, 'msg' => ''];
- }
-
- /**
- * Des:关联子房型和子酒店
- * Name: relationCtripRoom
- * @param $params
- * @param $SetType int 设置类型:-4 代表删除酒店和房型 Mapping 关系
- * 的同时删除房价,只认 Hotel 参数;-3 代表删除酒
- * 店和房型 Mapping 关系,只认 Hotel 参数;-2 代
- * 表删除房型 Mapping 关系的同时删除房价;-1 代
- * 表房型删除 Mapping 关系;0 代表修改;1 代表新增
- * @return array
- * @author 倪宗锋
- */
- public function relationCtripRoom($params, $SetType = RoomRelation::MAPPING_SET_TYPE_NEW)
- {
- $channelRoom = new ChannelRoom();
- $roomInfo = $channelRoom->getParamsForCtrip($params);
- if (empty($roomInfo['ChannelHotelID']) || empty($roomInfo['ROOM_NAME'])) {
- return ['flag' => false, 'msg' => '关联失败,params error'];
- }
- $data = [
- 'SupplierID' => \Yii::$app->params['ctrip']['soap']['SupplierID'],
- 'Hotel' => $roomInfo['ChannelHotelID'],
- 'Room' => $roomInfo['RoomId'],
- 'RatePlanCode' => '',
- 'HotelGroupRoomTypeCode' => $roomInfo['ID'],
- 'HotelGroupRoomName' => $roomInfo['ROOM_NAME'],
- 'HotelGroupHotelCode' => $roomInfo['HOTEL_ID'],
- 'HotelGroupRatePlanCode' => '',
- 'BalanceType' => 'PP',
- 'MappingType' => 1,
- 'SetType' => $SetType
- ];
- $soap = new SoapService($data, 'SetMappingInfo', 'SetMappingInfoRequest', '1.2');
- $xml = $soap->exec();
- $soapRsp = Utils::xml_to_array($xml);
- if($soapRsp["RequestResult"]["ResultCode"] == 0){
- return ['flag' => true, 'msg' => ''];
- }else{
- return ['flag' => false, 'msg' => '携程直连出错(' . $soapRsp["RequestResult"]["Message"] . ')'];
- }
-
-
- }
-
- /**
- * Des:推送携程订单状态
- * Name: setCtripOrderStatus
- * @param $params
- * @return mixed
- * @author 倪宗锋
- */
- public function setCtripOrderStatus($params)
- {
- $data = [
- 'OrderID' => $params['OrderID'],
- 'InterFaceSendID' => $params['InterFaceSendID'],
- 'OrderStatus' => $params['OrderStatus'],
- 'InterfaceConfirmNo' => $params['InterfaceConfirmNo'],
- 'ResultCode' => $params['ResultCode'],
- 'Message' => $params['Message']
- ];
- if (empty($data['InterfaceConfirmNo']) == false) {
- $data['IsHotelConfirm'] = 'T';
- } else {
- $data['IsHotelConfirm'] = 'F';
- }
- $soap = new SoapService($data, 'DomesticPushOrderStatus', 'DomesticPushOrderStatusRequest', '1.3');
- $result = $soap->exec();
- if ($result['flag'] == false) {
- return $result;
- }
- $result = $result['data'];
- if (empty($result['RequestResult']['DomesticPushOrderStatusResponse']) || $result['RequestResult']['DomesticPushOrderStatusResponse']['ReturnCode'] != 0) {
- return ['flag' => false, 'msg' => '推送订单状态失败!'];
- }
- return ['flag' => true];
- }
-
- /****************计划任务使用函数*********************/
-
- /**
- * Des:校验房型mapping信息
- * Name: checkMapping
- * @return array
- * @author 倪宗锋
- */
- public function checkMapping()
- {
- //获取所有的mapping信息 如果没有则不必校验
- $roomRelation = new RoomRelation();
- $getAllRelation = $roomRelation->getAllRelationForCheckMapping();
- if (empty($getAllRelation)) {
- return ['flag' => true, 'msg' => 'OK'];
- }
- //一条条校验mapping信息
- $msg = '';
- foreach ($getAllRelation as $val) {
- if ($val['ChannelId'] == \Yii::$app->params['ctrip']['supplier_id']) {//如果为669则为携程
- $check = $this->checkCtripMappings($val);//校验携程mapping信息
- } else {
- continue;
- }
- if ($check['flag'] == false) {
- $msg .= $check['msg'];
- }
- }
- //如果有错误信息 说明有mapping错误
- if (empty($msg) == false) {
- return ['flag' => false, 'msg' => $msg];
- }
- return ['flag' => true, 'msg' => 'OK'];
- }
-
- /**
- * Des:校验携程的mapping
- * Name: checkCtripMappings
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function checkCtripMappings($params)
- {
- $getMappingInfo = $this->getCtripRoomTypeInfo($params);
- if ($getMappingInfo['flag'] == false) {
- return ['flag' => false, 'msg' => $params['hotel_id'] . ':' . $params['room_id'] . '[1000]' . PHP_EOL];
- }
- if ($getMappingInfo['data']['ChannelHotelID'] != $params['ChannelHotelID'] || $getMappingInfo['data']['ChannelRoomId'] != $params['ChannelRoomId']) {
- return ['flag' => false, 'msg' => $params['hotel_id'] . ':' . $params['room_id'] . '[1001]' . PHP_EOL];
- }
- return ['flag' => true, 'msg' => ''];
- }
-
- /**
- * Des:获取携程mapping信息
- * Name: getCtripRoomTypeInfo
- * @param $params
- * @return array
- * @author 倪宗锋
- */
- public function getCtripRoomTypeInfo($params)
- {
- $data = [
- 'SupplierID' => \Yii::$app->params['ctrip']['soap']['SupplierID'],
- 'HotelGroupHotelCode' => $params['hotel_id'],
- 'HotelGroupRoomTypeCode' => $params['room_id']
- ];
- $soap = new SoapService($data, 'GetCtripRoomTypeInfo', 'HotelGroupInterfaceRoomTypeListRequest', '1.2');
- $return = $soap->exec();
- if ($return['flag'] == false) {
- return $return;
- }
- $return = $return['data'];
- if (empty($return['RequestResult']['Response']['HotelGroupInterfaceRoomTypeListResponse']['HotelGroupInterfaceRoomTypeList']['HotelGroupInterfaceRoomTypeEntity']) || $return['RequestResult']['ResultCode'] != 0) {
- return ['flag' => false, 'msg' => 'not get info!'];
- }
- $hotel = $return['RequestResult']['Response']['HotelGroupInterfaceRoomTypeListResponse']['HotelGroupInterfaceRoomTypeList']['HotelGroupInterfaceRoomTypeEntity'];
- $data = [
- 'ChannelHotelID' => $hotel['Hotel'],
- 'ChannelRoomId' => $hotel['Room']
- ];
- return ['flag' => true, 'data' => $data];
- }
- }
- ?>
|