|
- <?php
- /**
- * Created by PhpStorm.
- * User: Steven
- * Date: 2018/4/16
- * Time: 11:37
- */
-
- namespace backend\modules\hotel\controllers;
-
- use backend\modules\hotel\models\ChannelHotelMapping;
- use backend\modules\hotel\models\OrderComment;
- use common\models\Msg;
- use backend\modules\hotel\models\OperaRoomDistrib;
- use yii\filters\AccessControl;
- use yii\filters\ContentNegotiator;
- use yii\web\Response;
- use yii;
- use yii\helpers\Html;
- use yii\base\Module;
- use yii\httpclient\Client;
- use backend\modules\hotel\models\CtripCountryList;
- use backend\modules\hotel\models\CtripCityList;
- use backend\modules\hotel\models\CtripHotelList;
- use backend\modules\hotel\models\ChannelBaseRoomMapping;
- use backend\modules\hotel\models\OperaHotel;
- use yii\db\Exception;
- use yii\db\Expression;
- use yii\data\ActiveDataProvider;
- use backend\modules\hotel\models\CtripSwitch;
- use backend\modules\hotel\models\OrderMain;
- use backend\modules\hotel\models\CommonOrder;
- use backend\modules\hotel\models\CtripOrder;
-
- class CtripSwitchController extends BaseController
- {
- public $layout = "@backend/modules/motorcade/views/layouts/iframe_new";
- public $enableCsrfValidation = false;
-
- public $request_params;
-
- /**
- * CtripSwitchController constructor.
- * @param $id
- * @param Module $module
- * @param array $config
- */
- public function __construct($id, $module, array $config = [])
- {
- parent::__construct($id, $module, $config);
- }
-
- public function behaviors()
- {
- return [
- /*'access' => [
- 'class' => AccessControl::className(),
- 'rules' => [
- [
- 'ips' => ['127.0.0.1', '106.14.56.77', '180.168.4.58', '139.224.30.29', '103.214.68.209' //蜘蛛IP访问白名单
- ],
- 'allow' => true,
- ],
- ],
- ],*/
- 'contentNegotiator' => [
- 'class' => ContentNegotiator::className(),
- 'formats' => [
- 'application/xml' => Response::FORMAT_JSON,
- ],
- // 'only' => ['index'],//指定只是针对于index有效
- 'except' => ['city-hotel-list', 'get-city-byid', 'basicroomview'] //除去部分需要渲染页面的action
- ],
- ];
- }
-
- /**
- * Notes:
- * User: Steven
- * Date: 2018/4/16
- * Time: 18:38
- * @param $action
- * @return bool
- * @throws yii\web\BadRequestHttpException
- */
- /* public function beforeAction($action)
- {
- //如果传入的是json串,由于在main中配置了JsonParser,所以接收到的json串都会转成数组 因此,这个控制器中的方法,接受json和数组都行
- if (Yii::$app->request->isPost) {
- $this->request_params = empty(Yii::$app->request->post()) ?
- [] : Yii::$app->request->post();
- }
- return parent::beforeAction($action);
- }*/
-
-
- /**
- * Notes:获取国家列表
- * User: Steven
- * Date: 2018/4/19
- * Time: 15:22
- * @return mixed
- * @throws yii\db\Exception
- */
- public function actionGetdltcountrylist()
- {
- $model = new CtripSwitch();
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- ];
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode == 0) {
- $table_key = ['create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'country_id', 'country_name'];
- foreach ($res->countryInfoList->countryInfo as $value) {
- $table_value[] = [Yii::$app->params['systemUser'], date('Y-m-d H:i:s'), Yii::$app->params['systemUser'], date('Y-m-d H:i:s'), 0, $value->countryID, $value->countryName];
- }
- $count = $model->batchInsert(CtripCountryList::tableName(), $table_key, $table_value);
-
- return $count;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * Notes:获取城市列表
- * User: Steven
- * Date: 2018/4/19
- * Time: 17:09
- * @param int $countryID
- * @return array|int
- * @throws yii\db\Exception
- */
- public function actionGetdltcitylist($countryID = 1)
- {
- $model = new CtripSwitch();
- $current_page = 1;
- $cityInfoList = [];
- $exist_city_list = CtripCityList::findOne(['country_id' => $countryID]);
- if (!empty($exist_city_list)) {
- return true;
- }
- do {
- $data = [
- 'searchCandidate' => [
- 'countryID' => $countryID,
- ],
- 'pagingSettings' => [
- 'pageSize' => 100,
- 'currentPageIndex' => $current_page,
- ],
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- ];
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode == 0) {
- $cityInfoList = array_merge($cityInfoList, $res->cityInfoList->cityInfo);
- } else {
- return $res->resultStatus;
- }
- $current_page++;
- } while ($res->resultStatus->resultCode == 0 && !empty($res->cityInfoList->cityInfo));
- $table_key = ['create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'city_id', 'city_name', 'city_code', 'province_id', 'province_name', 'country_id'];
- foreach ($cityInfoList as $value) {
- $table_value[] = [
- Yii::$app->params['systemUser'],
- date('Y-m-d H:i:s'),
- Yii::$app->params['systemUser'],
- date('Y-m-d H:i:s'), 0,
- $value->cityID,
- $value->cityName,
- $value->cityCode,
- $value->provinceID,
- $value->provinceName,
- $value->countryID,
- ];
- }
- $count = $model->batchInsert(CtripCityList::tableName(), $table_key, $table_value);
-
- return $count;
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:获取某个城市的酒店列表
- * User: Steven
- * Date: 2018/4/20
- * Time: 14:03
- * Class actionGetdltmasterhotellist
- * @param city_id :城市id
- * @return mixed
- * @throws yii\db\Exception
- */
- public function actionGetdltmasterhotellist()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->get();
- if (!preg_match('/^[0-9]+$/', $request['city_id']) || empty($request['city_id'])) {
- return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
- }
-
- $current_page = 1;
- $table_key = ['create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'city_id', 'city_name',
- 'hotel_name', 'master_hotel_id', 'can_add_hotel', 'hotel_phone', 'hotel_star', 'star_licence', 'hotel_address',
- 'hotel_address_en', 'glat', 'glng', 'gDlat', 'gDlng', 'bDlat', 'bDlng'];
- $tran = Yii::$app->db->beginTransaction();
- try {
- do {
- $data = [
- 'supplierID' => $model->ctripConf['switch_supplier_id'],
- 'cityID' => (int)$request['city_id'],
- 'pager' => [
- 'pageSize' => 200,
- 'pageIndex' => $current_page,
- 'isReturnTotalCount' => true,
- ],
- ];
- $res = $model->request('getdltmasterhotellist', $data);
- $total_page = $res->pager->totalPages; // 总页数
- if ($res->resultStatus->resultCode == 0) {
- /*if(empty($res->dltMasterHotelEntityList)){
- return json_encode(['code' => -1, 'msg' => '该城市下没有酒店信息']);
- }*/
- $table_value = [];
- foreach ($res->dltMasterHotelEntityList as $value) {
- $table_value[] = [
- Yii::$app->params['systemUser'],
- date('Y-m-d H:i:s'),
- Yii::$app->params['systemUser'],
- date('Y-m-d H:i:s'), 0,
- $value->cityID,
- $value->cityName,
- $value->hotelName,
- $value->masterHotelID,
- $value->canAddHotel == 'T' ? 1 : 0,
- $value->hotelPhone,
- $value->hotelStar,
- $value->starLicence == 'T' ? 1 : 0,
- $value->hotelAddress,
- $value->hotelAddressEn,
- $value->dltCoordinateEntity->glat,
- $value->dltCoordinateEntity->glng,
- $value->dltCoordinateEntity->gDlat,
- $value->dltCoordinateEntity->gDlng,
- $value->dltCoordinateEntity->bDlat,
- $value->dltCoordinateEntity->bDlng,
- ];
- }
-
- // 分批插入数据
- $insert_res = $model->batchInsert(CtripHotelList::tableName(), $table_key, $table_value);
- if ($insert_res <= 0) {
- throw new \Exception($model::ADD_HOTEL_ERR);
- }
- } else {
- throw new \Exception($model::GET_MASTER_HOTEL_ERR);
- }
- $current_page++;
- } while ($res->resultStatus->resultCode == 0 && $current_page <= $total_page);
-
- $tran->commit();
- } catch (\Exception $e) {
- $tran->rollBack();
-
- return ['code' => $e->getMessage(), 'msg' => $model::RETURN_MSG[$e->getMessage()]];
- }
-
- return $res;
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:层级联动,通过国家获取国家下面的城市
- * User: Steven
- * Date: 2018/4/20
- * Time: 16:58
- * Class actionGetCityByid
- * @param $country_id
- */
- public function actionGetCityByid($country_id)
- {
- $model = new CtripCityList();
- $model = $model::getCity($country_id);
- echo Html::tag('option', '--请选择区--', ['value' => 'empty', 'class' => 'select_screen']);
- foreach ($model as $value => $name) {
- echo Html::tag('option', Html::encode($name), array('value' => $value));
- }
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:创建子酒店 多次调用该接口并给传入同一母酒店,也会返回创建成功,但是hotelIDs返回空值
- * User: Steven
- * Date: 2018/4/23
- * Time: 13:35
- * Class actionCreateSubHotel
- * @param array $params
- * @return array
- * @throws Exception
- */
- public function actionCreatesubhotel(array $params = [])
- {
- $model = new CtripSwitch();
- $request = empty($params) ? Yii::$app->request->post() : $params;
- if (empty($request['hotels'])) {
- return ['code' => $model::MASTER_HOTEL_EMPTY, 'msg' => $model::RETURN_MSG[$model::MASTER_HOTEL_EMPTY]];
- }
-
- $master_hotel_id = $request['hotels'];
-
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'masterHotelIDs' => [(int)$master_hotel_id], //母酒店的ID,
- ];
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
- // 如果创建成功但未返回子酒店id说明已经添加过子酒店
- if (empty($res->hotelIDs[0])) {
- return ['code' => CtripSwitch::REPEAT_CREATE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::REPEAT_CREATE]];
- }
- $sub_hotels = $res->hotelIDs[0];
-
- $channel_arr = [Yii::$app->params['ctrip']['supplier_id'], Yii::$app->params['qunar']['supplier_id'], Yii::$app->params['elong']['supplier_id'], Yii::$app->params['channela']['supplier_id'], Yii::$app->params['b2b']['supplier_id']];
- // 关联酒店酒店操作需要同时在本地生成5个相关渠道的关联记录,因为同一个母酒店只有第一次新增子酒店返回子酒店id,如果不同时新增,其他渠道需要关联时无法获取子酒店id
- $tran = Yii::$app->db->beginTransaction();
- try {
- $model = new ChannelHotelMapping();
- foreach ($channel_arr as $item) {
- $cmodel = clone $model;
- $save_hotel_info = [
- 'master_hotel_id' => $master_hotel_id,
- 'sub_hotel_id' => $sub_hotels,
- 'hotel_id' => $request['cs_hotel_id'],
- 'channel_id' => $item,
- ];
-
- if (!($cmodel->load($save_hotel_info, '') && $cmodel->validate())) {
- throw new \Exception();
- }
-
- if (!$cmodel->save()) {
- throw new \Exception();
- }
- }
-
- // 将已创建过子酒店的母酒店可添加子酒店属性修改为不可添加
- $update_res = CtripHotelList::updateAll(['can_add_hotel' => 0], ['master_hotel_id' => $master_hotel_id]);
- if (!$update_res) {
- throw new \Exception();
- }
- $tran->commit();
- } catch (\Exception $e) {
- $tran->rollBack();
-
- return ['code' => CtripSwitch::SYS_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::SYS_ERR0R]];
- }
- } else {
- return ['code' => CtripSwitch::CTRIP_HOTEL_CODE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::CTRIP_HOTEL_CODE]];
- }
-
- return ['code' => CtripSwitch::SUCCESS_CODE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::SUCCESS_CODE]];
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:获取子酒店接口
- * User: Steven
- * Date: 2018/4/23
- * Time: 13:41
- * @param $child_hotel_id :子酒店id 可以不传,不传查询所有子酒店信息
- * Class actionGetSubHotel
- * @return mixed
- */
- public function actionGetdlthotellist()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->post();
- $current_page = 1;
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'pager' => [
- 'pageSize' => 200,
- 'pageIndex' => $current_page,
- 'isReturnTotalCount' => true,
- ],
- ];
- if (!empty($request['child_hotel_id'])) {
- $data['hotelID'] = (int)$request['child_hotel_id'];
- }
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
-
- return $res->dltHotelEntityList;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:获取母物理房型列表
- * User: Steven
- * Date: 2018/4/23
- * Time: 15:53
- * Class actionGetdltbasicroomlist
- * @return bool
- */
- public function actionGetdltbasicroomlist()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->get();
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelID' => (int)$request['child_hotel_id'], // 子酒店id
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
-
- if ($res->resultStatus->resultCode === 0) {
- //todo:保存,相当于mapping
- // $model = new ChannelBaseRoomMapping();
- // $model_param = [
- // 'create_time' => date('Y-m-d H:i:s'),
- // 'create_user_id'=>Yii::$app->user->id,
- // 'channel_id'=>Yii::$app->params['ctrip']['supplier_id'],
- // 'master_hotel_id'=>$res->dltBasicRoomTypeEntityList->hotelId,
- // 'sub_hotel_id',
- // 'hotel_id',
- // 'master_base_room_id'=>$res->dltBasicRoomTypeEntityList->masterBasicRoomId,
- // 'master_base_room_name'=>$res->dltBasicRoomTypeEntityList->basicRoomName,
- // 'master_base_room_name_en'=>$res->dltBasicRoomTypeEntityList->basicRoomNameEn,
- // 'base_room_is_add'=>$res->dltBasicRoomTypeEntityList->isAdd=='T'?'1':'0'
- // ];
- // if ($model->load($model_param, '') && $model->validate()) {
- // $model->save();
- // }
-
- return $res->dltBasicRoomTypeEntityList;
- /*[ //返回示例
- {
- "hotelID": 4963549,
- "masterBasicRoomId": 17607148,
- "basicRoomTypeID": 17607148,
- "basicRoomName": "欧式阳光房",
- "basicRoomNameEn": "",
- "isAdd": "F"
- },
- {
- "hotelID": 4963549,
- "masterBasicRoomId": 17607157,
- "basicRoomTypeID": 17607157,
- "basicRoomName": "特价标准房(无窗)",
- "basicRoomNameEn": "特价标准房(无窗)",
- "isAdd": "F"
- },
- {
- "hotelID": 4963549,
- "masterBasicRoomId": 17607143,
- "basicRoomTypeID": 17607143,
- "basicRoomName": "豪华套房",
- "basicRoomNameEn": "",
- "isAdd": "F"
- },
- {
- "hotelID": 4963549,
- "masterBasicRoomId": 17607152,
- "basicRoomTypeID": 17607152,
- "basicRoomName": "阳光大床房",
- "basicRoomNameEn": "",
- "isAdd": "F"
- },
- {
- "hotelID": 4963549,
- "masterBasicRoomId": 17607154,
- "basicRoomTypeID": 17607154,
- "basicRoomName": "普通标准房",
- "basicRoomNameEn": "",
- "isAdd": "F"
- }
- ]*/
- } else {
- return $res->resultStatus;
- }
- }
-
-
- /**
- * @Author wanglg
- * @Desc 创建子物理房型
- * @return bool
- */
- public function actionCreatebasicroom()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->get();
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'updator' => Yii::$app->user->identity->TRUE_NAME,
- 'masterHotelId' => (int)$request['master_hotel_id'],
- 'childHotelId' => (int)$request['child_hotel_id'],
- 'masterBasicRoomIds' => array_map('intval', $request['master_basic_room_ids']),
- 'opClientIP' => '127.0.0.1',
- 'currency' => 'CNY',
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->reultStatus->resultCode === 0) {
- return $res->resultStatus;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * @Author wanglg
- * @Desc 获取房型静态信息
- * @return bool
- */
- public function actionGethotelroomstaticinfo()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->get();
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelId' => (int)$request['hotel_id'],
- 'returnDataTypeList' => [
- 'BasicRoomTypeSimpleEntity', 'BasicRoomTypeSmokeInfoEntity', 'BasicRoomTypeFacilityEntityList', 'RoomTypeSimpleEntity', 'RoomTypeBedTypeEntity',
- 'RoomTypeBroadnNetEntity', 'SupplierInfoEntity',
- ],
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->reultStatus->resultCode === 0) {
- return $res->roomStaticInfos->roomStaticInfo;
- } else {
- return $res->roomStaticInfos->roomStaticInfo;
- }
-
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:设置售卖房型的上下线,
- * 使用:该接口在CS系统中:
- * 1、房型渠道授权开关的开关的时候调用;
- * 2、子房型(非渠道维度)下线房型也应该调用该接口(待确认) 授权开:表示上线 授权关:表示下线
- * User: Steven
- * Date: 2018/4/27
- * Time: 15:42
- * Class actionSetroomonlineoffline
- * @return mixed
- */
- public function actionSetroomonlineoffline()
- {
- $model = new CtripSwitch(['scenario' => 'setRoomOnlineOffline']);
- if (!$model->load(Yii::$app->request->get(), '') || !$model->validate()) {
- return ['Message' => $model->getFirstErrors(), 'ResultCode' => '-116'];
- }
-
- //验证是否直连
- $ismapping = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
- if ($ismapping['code'] != CtripSwitch::SUCCESS_CODE) {
- return true; //不需要推送数据
- }
- //需要子房型ID和渠道ID
- $OperaRoomDistrib = new OperaRoomDistrib();
- $model_data = $OperaRoomDistrib->getRoomDistrib($model->zz_room_id, $model->zz_channel_id);
- $request = Yii::$app->request->get();
- $data = [
- 'supplierId' => (int)$model->supplierID,
- 'hotelId' => (int)$ismapping['data']['sub_hotel_id'],
- 'roomTypeId' => (int)$model_data->CHANNEL_MAPPING_ID, //售卖房型
- 'channel' => $model->getChannelID($model->zz_channel_id), //分销渠道 Ctrip,Qunar,Elong,ChannelA(分销A),B2B
- 'roomStatus' => (int)$model->roomStatus //状态:0 下线,1 上线,2 无效
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
- return $res->resultStatus;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:更改售卖房型渠道名称
- * User: Steven
- * Params:
- * Date: 2018/4/27
- * Time: 16:30
- * Class actionUpdateroomsalename
- * @return mixed
- */
- public function actionUpdateroomsalename()
- {
- $model = new CtripSwitch(['scenario' => 'updateRoomSaleName']);
- if (!$model->load(Yii::$app->request->get(), '') || !$model->validate()) {
- return ['Message' => $model->getFirstErrors(), 'ResultCode' => '-116'];
- }
- //验证是否直连
- $ismapping = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
- if ($ismapping['code'] != CtripSwitch::SUCCESS_CODE) {
- return true; //不需要推送数据
- }
- //需要子房型ID和渠道ID
- $OperaRoomDistrib = new OperaRoomDistrib();
- $model_data = $OperaRoomDistrib->getRoomDistrib($model->zz_room_id, $model->zz_channel_id);
-
- $channel_name = $model->zz_channel_id == CtripSwitch::CTRIP_ID ? 'ctripName' : (
- $model->zz_channel_id == CtripSwitch::QUNAR_ID ? 'qunarRatePlanName' : (
- $model->zz_channel_id == CtripSwitch::ELONG_ID ? 'eLongRatePlanName' : (
- $model->zz_channel_id == CtripSwitch::CHANNELA_ID ? 'channelARatePlanName' : 'b2bRatePlanName')));
- $data = [
- 'supplierId' => (int)$model->supplierID,
- 'hotelId' => (int)$model->$ismapping['data']['sub_hotel_id'],
- 'roomTypeId' => (int)$model_data->CHANNEL_MAPPING_ID,
- ];
- $data[$channel_name] = $model_data->DISTRIB_ROOM_NAME;
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
- return $res->resultStatus;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:设置渠道库存房态共享
- * 跟业务(杨晓婷)沟通后,得出结论先不做共享,默认是非共享的
- * User: Steven
- * Date: 2018/4/28
- * Time: 15:07
- * Class actionSetroomshare
- * @return mixed
- */
- public function actionSetroomshare()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->get();
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelId' => (int)$request['hotel_id'],
- 'roomId' => (int)$request['room_type_id'], // 售卖房型id
- 'shareType' => 'RoomInventory', // RoomInventory:库存,RoomStatus:房态
- 'isShare' => true, // 是否共享
- 'baseChannel' => 'ctrip' // 共享渠道 Ctrip,Qunar,Elong,ChannelA,B2B
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
- return $res;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * @Author: wanglg
- * @DESC:创建售卖房型
- * @return mixed
- */
- public function actionCreateroom()
- {
- $model = new CtripSwitch();
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelId' => 11337705,
- 'basicRoomTypeId' => 55334003, // 子物理房型
- 'purchaseSourceID' => 0,
- 'rateCodePropertyValueIDList' => [8, 4],
- 'priceType' => 2,
- 'mealType' => 7,
- 'mealCount' => 1,
- ];
-
- $res = $model->request(Yii::$app->controller->action->id, $data);
- if ($res->resultStatus->resultCode === 0) {
- return $res;
- } else {
- return $res->resultStatus;
- }
- }
-
- /**
- * Notes:订单预定
- * User: Steven
- * Date: 2018/5/11
- * Time: 13:06
- * @param $order_info
- * @return array
- * @throws Exception
- */
- private function bookOrder($order_info)
- {
- $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
- $mapping_info = CtripSwitch::getZzIDByCtripID($supplier_id, $order_info['dltOrderInfo']['roomId']);
- if (empty($mapping_info)) {
- return ['code' => CommonOrder::RETURN_CODE_MAPPING_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_MAPPING_FAIL]];
- }
- $room_price_list = [];
- foreach ($order_info['dltOrderInfo']['roomPriceList'] as $tmp_room_price) {
- $room_price_list[] = [
- 'RunDate' => self::FormatDate($tmp_room_price['effectDate']),
- 'Price' => $tmp_room_price['price'],
- ];
- }
- $params = [
- 'CreateUserID' => Yii::$app->params['ctrip']['base_user_id'],
- 'OrderID' => $order_info['dltOrderInfo']['orderId'], //销售方订单号
- 'HotelID' => $mapping_info['HOTEL_ID'],
- 'RoomID' => $mapping_info['ROOM_ID'],
- 'DistribID' => $supplier_id,
- 'RoomNum' => $order_info['dltOrderInfo']['roomnum'],
- 'CheckIn' => self::FormatDate($order_info['dltOrderInfo']['checkinDate']),
- 'CheckOut' => self::FormatDate($order_info['dltOrderInfo']['checkoutDate']),
- 'TotalPrice' => $order_info['dltOrderInfo']['orderPrice'],
- 'Currency' => 'RMB',
- 'ContactName' => $order_info['dltOrderInfo']['customerName'],
- 'ContactTel' => '',
- 'PayType' => CommonOrder::PAY_TYPE_CREDIT,
- 'PayTradeNo' => '',
- 'OrderGuests' => [
- 0 => [
- 'Name' => $order_info['dltOrderInfo']['customerName'],
- ]
- ],
- 'Comment' => [
- ],
- 'NeedInvoice' => 0,
- 'InvoiceInfos' => [],
- 'RoomPrices' => $room_price_list,
- 'OrderTitleID' => 0,
- ];
- empty($order_info['dltOrderInfo']['orderMemo']) ? false : $params['Comment']['orderMemo'] = ['comment' => $order_info['dltOrderInfo']['orderMemo'], 'comment_type' => OrderComment::TYPE_INTERNAL];
- empty($order_info['dltOrderInfo']['specialMemo']) ? false : $params['Comment']['specialMemo'] = ['comment' => $order_info['dltOrderInfo']['specialMemo'], 'comment_type' => OrderComment::TYPE_INTERNAL];
- empty($order_info['dltOrderInfo']['additionalList']) ? false : $params['Comment']['additionalList'] = ['comment' => json_encode($order_info['dltOrderInfo']['additionalList']), 'comment_type' => OrderComment::TYPE_INTERNAL];
-
- //检查订单是否预定成功
- $check_order_exits = OrderMain::getInfoByOutsideId($order_info['dltOrderInfo']['orderId'], $supplier_id);
- if (!empty($check_order_exits)) {
- //todo:这里还需要看是否有其他情况,
- return ['code' => CommonOrder::RETURN_CODE_REPEAT, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_REPEAT]];
- }
-
- if ($order_info['dltOrderInfo']['isHoldRoom'] == 'R') {
- $channel_status = CtripOrder::ORDER_STATUS_ACCEPT;
- } else {
- $channel_status = CtripOrder::ORDER_STATUS_WAITING;
- }
-
- //创建订单
- $new_order = new CommonOrder(['scenario' => 'BookHotelOrder']);
- if ($new_order->load($params, '') && $new_order->validate()) {
- $res = $new_order->bookHotelOrder();
- if ($res['code'] == CommonOrder::RETURN_CODE_SUCCESS) {//下单成功
- //TODO:更新订单相关信息
- OrderMain::updateAll(['DOCKING_TYPE' => CtripOrder::ORDER_DOCKING_TYPE, 'CHANNEL_ORDER_STATUS' => $channel_status, 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $res['data']['order_id']], ['PARENT_ORDER_ID' => $res['data']['order_id']]]]);
- return ['code' => CommonOrder::RETURN_CODE_SUCCESS, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_SUCCESS]];
- } else //下单失败
- {
- return ['code' => CommonOrder::RETURN_CODE_PROGRAM_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_PROGRAM_FAIL]];
- }
- }
- }
-
- /**
- * Notes:修改订单
- * User: Steven
- * Date: 2018/5/11
- * Time: 13:56
- * @param $order_info
- * @return array|int
- * @throws Exception
- */
- private function modifyOrder($order_info)
- {
- //检查订单是否已经存在,如果已经存在,说明只修改了非入住需求的信息;如果订单不存在,说明代理通是取消+新订
- $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
-
- $order_model = OrderMain::findOne([
- 'OUTSIDE_ORDER_NO' => $order_info['dltOrderInfo']['releationOrder']['lastOrderId'],
- 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN,
- 'PARENT_ORDER_ID' => 0,
- 'OUTSIDE_SALE_ORG_ID' => $supplier_id,
- 'CANCEL_FLAG' => 0,
- ]);
- //订单在渠道未接单的情况下 且订单的状态是待发单、待确认的订单可直接修改
- if ($order_model->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_WAITING &&
- ($order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND || $order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM)) {
- $mapping_info = CtripSwitch::getZzIDByCtripID($supplier_id, $order_info['dltOrderInfo']['roomId']);
- if (empty($mapping_info)) {
- return ['code' => CommonOrder::RETURN_CODE_MAPPING_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_MAPPING_FAIL]];
- }
- $room_price_list = [];
- foreach ($order_info['dltOrderInfo']['roomPriceList'] as $tmp_room_price) {
- $room_price_list[] = [
- 'RunDate' => self::FormatDate($tmp_room_price['effectDate']),
- 'Price' => $tmp_room_price['price'],
- ];
- }
-
- $param = [
- 'CreateUserID' => Yii::$app->params['ctrip']['base_user_id'],
- 'ZZ_ORDER_ID' => $order_model->ORDER_ID, //蜘蛛订单号
- 'OrderID' => $order_info['dltOrderInfo']['orderId'], //渠道订单号
- 'HotelID' => $mapping_info['HOTEL_ID'],
- 'RoomID' => $mapping_info['ROOM_ID'],
- 'DistribID' => $supplier_id,//渠道ID
- 'RoomNum' => $order_info['dltOrderInfo']['roomnum'], //房间数量
- 'CheckIn' => self::FormatDate($order_info['dltOrderInfo']['checkinDate']), //入住日期
- 'CheckOut' => self::FormatDate($order_info['dltOrderInfo']['checkoutDate']), //离店日期,
- 'TotalPrice' => $order_info['dltOrderInfo']['orderPrice'],//订单总价
- 'Currency' => 'RMB', //币种
- 'ContactName' => $order_info['dltOrderInfo']['customerName'],//联系人姓名
- 'ContactTel' => '', //联系人电话
- 'OrderGuests' => [
- 0 => [
- 'Name' => $order_info['dltOrderInfo']['customerName'],
- ]
- ], //入住人信息
- 'Comment' => $order_info['dltOrderInfo']['orderMemo'], //客人备注
- 'NeedInvoice' => 0,
- 'InvoiceInfos' => 0,
- 'RoomPrices' => $room_price_list,
- ];
- $newOrder = new CommonOrder(['scenario' => 'UpdateHotelOrder']);
- if ($newOrder->load($param, '') && $newOrder->validate()) {
- $res = $newOrder->updateHotelOrder();
- if ($res['code'] == 0) {
- return $res;
- } else {
- return $res;
- }
- } else {
- $error = array_values($newOrder->getFirstErrors());
-
- return ['code' => 1, 'info' => $error[0]];
- }
- }
- $orderStatusArr = [
- OrderMain::ORDER_CHANNEL_STATUS_ACCEPT, //已接单
- OrderMain::ORDER_CHANNEL_STATUS_REJECT,//已拒绝
- OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT //取消被拒
- ];
- //并且订单的状态不能是已取消
- if (in_array($order_model->CHANNEL_ORDER_STATUS, $orderStatusArr) && $order_model->ORDER_STATUS != OrderMain::ORDER_STATUS_CANCEL) {
- //更新订单的渠道接单状态为申请修改(同意修改,拒绝修改)
- $effectCount = OrderMain::updateAll(['CHANNEL_ORDER_STATUS' => OrderMain::ORDER_CHANNEL_STATUS_APPLY_MODIFY,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order_model->ORDER_ID], ['PARENT_ORDER_ID' => $order_model->ORDER_ID]]]);
- return $effectCount;
- }
- //其他修改情况但是未做处理
- $this->sendAliMsgToRtx('代理通直连通知', '修改订单,其他修改情况但是未做处理,请关注', 'shifp');
-
- }
-
- /**
- * Notes:取消订单
- * User: Steven
- * Date: 2018/5/11
- * Time: 14:05
- * @param $order_info
- * @return array|int
- * @throws Exception
- */
- private function cancelOrder($order_info)
- {
- $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
- $order_model = OrderMain::findOne([
- 'OUTSIDE_ORDER_NO' => $order_info['dltOrderInfo']['releationOrder']['lastOrderId'],
- 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN,
- 'PARENT_ORDER_ID' => 0,
- 'OUTSIDE_SALE_ORG_ID' => $supplier_id,
- 'CANCEL_FLAG' => 0,
- ]);
- //订单在渠道未接单的情况下 且订单的状态是待发单、待确认的订单可直接取消
- if ($order_model->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_WAITING &&
- ($order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND || $order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM)) {
- $params = [
- 'CreateUserId' => Yii::$app->params['ctrip']['base_user_id'],
- 'OrderID' => $order_info['dltOrderInfo']['orderId'], //渠道订单号
- 'HotelID' => $order_model->PARENT_PROD_ID,
- 'DistribID' => $supplier_id,
- 'RoomID' => $order_model->PROD_ID,
- 'Reason' => '携程代理通直连取消!'
- ];
-
- $newOrder = new CommonOrder(['scenario' => 'CancelHotelOrder']);
- if ($newOrder->load($params, '') && $newOrder->validate()) {
- $res_code = $newOrder->cancelHotelOrder();
- return ['code' => $res_code, 'info' => CommonOrder::RETURN_MSG[$res_code]];
- } else {
- $error = array_values($newOrder->getFirstErrors());
- return ['code' => CommonOrder::RETURN_CODE_CANCEL_FAIL, 'info' => $error[0]];
- }
- }
- //以下情况都是申请取消 变更渠道的订单状态为申请取消(同意取消、拒绝取消)
- $orderStatusArr = [
- OrderMain::ORDER_CHANNEL_STATUS_ACCEPT, //已接单
- OrderMain::ORDER_CHANNEL_STATUS_REJECT,//已拒绝
- OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT //取消被拒
- ];
- if (in_array($order_model->CHANNEL_ORDER_STATUS, $orderStatusArr)) {
- $effectCount = OrderMain::updateAll(['CHANNEL_ORDER_STATUS' => OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL,
- 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
- ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order_model->ORDER_ID], ['PARENT_ORDER_ID' => $order_model->ORDER_ID]]]);
- return $effectCount;
- }
- //其他取消情况但是未做处理
- $this->sendAliMsgToRtx('代理通直连通知', '取消订单,其他修改情况但是未做处理,请关注', 'shifp');
-
- }
-
- /**
- * Notes:订单变化通知接口
- * User: Steven
- * Date: 2018/5/11
- * Time: 10:12
- * @return array
- * @throws Exception
- */
- public function actionGetdltordernotify()
- {
- $model = new CtripSwitch();
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'startTime' => '/Date(' . strval($model->getTimestamp() - 30000) . '+0800)/',
- 'endTime' => '/Date(' . strval($model->getTimestamp()) . '+0800)/',
- 'pagingType' => [
- 'pageSize' => 100,
- 'pageIndex' => 1
- ],
- ];
- $res = $model->request(Yii::$app->controller->action->id, $data);
- #处理返回的数据
- if ($res->ResponseStatus->Ack != 'Success') {
- return [
- 'code' => 1,
- 'info' => '携程订单变化接口返回值错误!', $res->ResponseStatus->Errors->Message
- ];
- }
-
- if ($res->resultStatus->resultCode != 0) {
- return [
- 'code' => 2,
- 'info' => '携程订单变化接口返回值错误!', $res->resultStatus->resultMsg
- ];
- }
- if (isset($res->dltOrderIds) || !empty($res->dltOrderIds)) {
- $outside_order_list = $res->dltOrderIds;
- $detail_error_info = '';
- foreach ($outside_order_list as $outside_order_id) {
- //调用携程订单详情接口
- $tmp_order_detail = $this->GetOrderInfo($outside_order_id);
- $sale_order_id = $tmp_order_detail['dltOrderInfo']['orderId'];
- if ($tmp_order_detail['resultStatus']['resultCode'] != 0) {
- $detail_error_info .= '代理通订单号: ' . $sale_order_id . ' 携程订单详情接口获取失败!' . $tmp_order_detail['resultStatus']['resultMsg'];
- continue;
- }
- //N:新订 D:延住
- if ($tmp_order_detail['dltOrderInfo']['formType'] == 'N' || $tmp_order_detail['dltOrderInfo']['formType'] == 'D') {
- $book_res = $this->bookOrder($tmp_order_detail);
- }
- //M:修改 如果是修改单,那么直接在原单上进行修改
- if ($tmp_order_detail['dltOrderInfo']['formType'] == 'M') {
- $modify_res = $this->modifyOrder($tmp_order_detail);
- }
- //取消
- if ($tmp_order_detail['dltOrderInfo']['formType'] == 'C') {
- $cancel_res = $this->cancelOrder($tmp_order_detail);
- }
- }
- }
- return [];
- }
-
- /**
- * Function Description:7.2 获取携程订单详情方法
- * Function Name: GetOrderInfo
- * @param $dltOrderId
- *
- * @return mixed
- *
- * @author 娄梦宁
- */
- public function GetOrderInfo($dltOrderId)
- {
- $model = new CtripSwitch();
- $data = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'dltOrderId' => (string)$dltOrderId,
- ];
- $res = $model->request('getdltorderinfo', $data);
- return json_decode(json_encode($res), true);
- }
-
- /**
- * Notes:订单操作接口 确认 拒绝等
- * User: Steven
- * Date: 2018/5/22
- * Time: 10:12
- * @return array
- * @throws Exception
- */
- public function actionOperaterDltOrder()
- {
- $model = new CtripSwitch();
- $orderId = Yii::$app->request->post('orderId', '');//订单id
- $operaterType = Yii::$app->request->post('operaterType', '');//操作类型 0:接受,1:拒绝,2:更改确认号 11:接受取消 12:拒绝取消
- $confirmType = Yii::$app->request->post('confirmType', '');//1:按入住人姓名;2:按确认号
- $refuseType = Yii::$app->request->post('refuseType', '');//拒绝类型 1:满房;2:房价不对;3:其他原因
- $refuseRemark = Yii::$app->request->post('refuseRemark', '');//拒绝原因
- $bookingNo = Yii::$app->request->post('bookingNo', '');//预定号
- $params = [
- 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
- 'confirmType' => 1
- ];
- if ($orderId == '' || $operaterType == '') {
- return [
- 'code' => 1,
- 'info' => '参数错误!'
- ];
- }
- $order_main = new OrderMain();
- $params['dltOrderId'] = (string)$order_main->getOutSideId($orderId);
- if ($operaterType != '') {
- $params['operaterType'] = (int)$operaterType;
- }
- if ($confirmType != '') {
- $params['confirmType'] = (int)$confirmType;
- }
- if ($refuseType != '') {
- $params['refuseType'] = (int)$refuseType;
- }
- if ($refuseRemark != '') {
- $params['refuseRemark'] = $refuseRemark;
- }
- if ($bookingNo != '') {
- $params['bookingNo'] = $bookingNo;
- }
- $res = $model->request('operaterdltorder', $params);
- if ($res->ResponseStatus->Ack != 'Success') {
- return [
- 'code' => 1,
- 'info' => '携程服务器错误!'
- ];
- }
- return [
- 'code' => $res->resultStatus->resultCode,
- 'info' => $res->resultStatus->resultMsg,
- ];
- }
-
-
- /**
- * Function Description:格式化携程接口中的时间为 年-月-日
- * Function Name: FormatDate
- * @param $dateTime
- *
- * @return false|string
- *
- * @author 娄梦宁
- */
- private function FormatDate($dateTime)
- {
- $time = substr($dateTime, 6, 10);
- $date = date('Y-m-d', $time);
- return $date;
- }
-
-
- /**
- * @Author: wanglg
- * @DESC:推送房态接口
- * @param hotel_id :cs后台酒店id
- * @param base_room_type :cs后台酒店id
- * @param room_type :cs后台子房型room_type
- * @return mixed
- */
- public function actionBatchpushroomdata()
- {
- $request = Yii::$app->request->post();
- $model = new CtripSwitch(['scenario' => 'PushRoomData']);
- if (!$request['zz_hotel_id'] || !$request['zz_base_room_id'] || !$request['zz_room_id']) {
- return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
- }
-
- // 如果没有日期段,默认时间段为当前开始+90天
- $request['start_date'] = empty($request['start_date']) ? date('Y-m-d') : $request['start_date'];
- $request['end_date'] = empty($request['end_date']) ? date('Y-m-d', strtotime('+90 days')) : $request['end_date'];
- $model->load($request, '');
- // 首先判断酒店房型是否直连,确认直连再查询数据
- $mp_res = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
- // 判断房型是否直连
- if ($mp_res['code'] != 0) {
- return $mp_res;
- }
-
- // 查询房型在一个日期段内的数据
- if (!$model->loadPushData($request, '') || !$model->validate()) {
- return false;
- }
-
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelId' => (int)$mp_res['data']['sub_hotel_id'],
- 'roomDataEntitys' => $model->roomDataEntitys,
- ];
-
- $res = $model->request('BatchPushRoomData', $data);
- if ($res->resultStatus->resultCode === 0) {
- return $res->resultStatus;
- } else {
- return $res->resultStatus;
- }
- }
-
-
- /**
- * @Author: wanglg
- * @DESC: 验证酒店房型是否直连接口
- */
- public function actionCheckMapping()
- {
- // scenario scenario scenario
- $model = new CtripSwitch(['scenario' => 'CheckMapping']);
- $request = Yii::$app->request->post();
- $request['zz_channel_id'] = empty($request['zz_channel_id']) ? Yii::$app->params['ctrip']['supplier_id'] : $request['zz_channel_id'];
- $request['zz_room_id'] = empty($request['zz_room_id']) ? 0 : $request['zz_room_id'];
-
- if (!$model->load($request, '') || !$model->validate()) {
- return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
- }
-
- return $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
- }
-
- /**
- * Notes:更新房型售卖规则
- * User: Aaron
- * Date: 2018/5/11
- * @return mixed
- * @throws yii\db\Exception
- */
- public function actionSetRoomSaleRule()
- {
- $model = new CtripSwitch();
- $request = Yii::$app->request->post();
- if ($request['hotel_id'] == null || $request['room_type'] == null) {
- return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
- }
- // 首先判断酒店房型是否直连,确认直连再查询数据
- $mp_res = $model->isMapping($request['hotel_id'], $request['room_type'], $model->ctripConf['switch_supplier_id']);
- // 判断房型是否直连
- if ($mp_res['code'] != 0) {
- return $mp_res;
- }
- //需要子房型ID和渠道ID
- $OperaRoomDistrib = new OperaRoomDistrib();
- $model_data = $OperaRoomDistrib->getRoomDistrib($request['hotel_id'], $model->ctripConf['switch_supplier_id']);
-
- $data = [
- 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
- 'hotelId' => $request['hotel_id'],
- 'roomTypeList' => $request['roomTypeList'],
- 'setCtripDailyRule' => $request['setCtripDailyRule'],
- 'saleRuleList' => $request['saleRuleList']
- ];
- return $data;
- }
-
- }
-
- ?>
|