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]; } } ?>