You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1178 lines
48 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Steven
  5. * Date: 2018/4/16
  6. * Time: 11:37
  7. */
  8. namespace backend\modules\hotel\controllers;
  9. use backend\modules\hotel\models\ChannelHotelMapping;
  10. use backend\modules\hotel\models\OrderComment;
  11. use common\models\Msg;
  12. use backend\modules\hotel\models\OperaRoomDistrib;
  13. use yii\filters\AccessControl;
  14. use yii\filters\ContentNegotiator;
  15. use yii\web\Response;
  16. use yii;
  17. use yii\helpers\Html;
  18. use yii\base\Module;
  19. use yii\httpclient\Client;
  20. use backend\modules\hotel\models\CtripCountryList;
  21. use backend\modules\hotel\models\CtripCityList;
  22. use backend\modules\hotel\models\CtripHotelList;
  23. use backend\modules\hotel\models\ChannelBaseRoomMapping;
  24. use backend\modules\hotel\models\OperaHotel;
  25. use yii\db\Exception;
  26. use yii\db\Expression;
  27. use yii\data\ActiveDataProvider;
  28. use backend\modules\hotel\models\CtripSwitch;
  29. use backend\modules\hotel\models\OrderMain;
  30. use backend\modules\hotel\models\CommonOrder;
  31. use backend\modules\hotel\models\CtripOrder;
  32. class CtripSwitchController extends BaseController
  33. {
  34. public $layout = "@backend/modules/motorcade/views/layouts/iframe_new";
  35. public $enableCsrfValidation = false;
  36. public $request_params;
  37. /**
  38. * CtripSwitchController constructor.
  39. * @param $id
  40. * @param Module $module
  41. * @param array $config
  42. */
  43. public function __construct($id, $module, array $config = [])
  44. {
  45. parent::__construct($id, $module, $config);
  46. }
  47. public function behaviors()
  48. {
  49. return [
  50. /*'access' => [
  51. 'class' => AccessControl::className(),
  52. 'rules' => [
  53. [
  54. 'ips' => ['127.0.0.1', '106.14.56.77', '180.168.4.58', '139.224.30.29', '103.214.68.209' //蜘蛛IP访问白名单
  55. ],
  56. 'allow' => true,
  57. ],
  58. ],
  59. ],*/
  60. 'contentNegotiator' => [
  61. 'class' => ContentNegotiator::className(),
  62. 'formats' => [
  63. 'application/xml' => Response::FORMAT_JSON,
  64. ],
  65. // 'only' => ['index'],//指定只是针对于index有效
  66. 'except' => ['city-hotel-list', 'get-city-byid', 'basicroomview'] //除去部分需要渲染页面的action
  67. ],
  68. ];
  69. }
  70. /**
  71. * Notes:
  72. * User: Steven
  73. * Date: 2018/4/16
  74. * Time: 18:38
  75. * @param $action
  76. * @return bool
  77. * @throws yii\web\BadRequestHttpException
  78. */
  79. /* public function beforeAction($action)
  80. {
  81. //如果传入的是json串,由于在main中配置了JsonParser,所以接收到的json串都会转成数组 因此,这个控制器中的方法,接受json和数组都行
  82. if (Yii::$app->request->isPost) {
  83. $this->request_params = empty(Yii::$app->request->post()) ?
  84. [] : Yii::$app->request->post();
  85. }
  86. return parent::beforeAction($action);
  87. }*/
  88. /**
  89. * Notes:获取国家列表
  90. * User: Steven
  91. * Date: 2018/4/19
  92. * Time: 15:22
  93. * @return mixed
  94. * @throws yii\db\Exception
  95. */
  96. public function actionGetdltcountrylist()
  97. {
  98. $model = new CtripSwitch();
  99. $data = [
  100. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  101. ];
  102. $res = $model->request(Yii::$app->controller->action->id, $data);
  103. if ($res->resultStatus->resultCode == 0) {
  104. $table_key = ['create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'country_id', 'country_name'];
  105. foreach ($res->countryInfoList->countryInfo as $value) {
  106. $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];
  107. }
  108. $count = $model->batchInsert(CtripCountryList::tableName(), $table_key, $table_value);
  109. return $count;
  110. } else {
  111. return $res->resultStatus;
  112. }
  113. }
  114. /**
  115. * Notes:获取城市列表
  116. * User: Steven
  117. * Date: 2018/4/19
  118. * Time: 17:09
  119. * @param int $countryID
  120. * @return array|int
  121. * @throws yii\db\Exception
  122. */
  123. public function actionGetdltcitylist($countryID = 1)
  124. {
  125. $model = new CtripSwitch();
  126. $current_page = 1;
  127. $cityInfoList = [];
  128. $exist_city_list = CtripCityList::findOne(['country_id' => $countryID]);
  129. if (!empty($exist_city_list)) {
  130. return true;
  131. }
  132. do {
  133. $data = [
  134. 'searchCandidate' => [
  135. 'countryID' => $countryID,
  136. ],
  137. 'pagingSettings' => [
  138. 'pageSize' => 100,
  139. 'currentPageIndex' => $current_page,
  140. ],
  141. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  142. ];
  143. $res = $model->request(Yii::$app->controller->action->id, $data);
  144. if ($res->resultStatus->resultCode == 0) {
  145. $cityInfoList = array_merge($cityInfoList, $res->cityInfoList->cityInfo);
  146. } else {
  147. return $res->resultStatus;
  148. }
  149. $current_page++;
  150. } while ($res->resultStatus->resultCode == 0 && !empty($res->cityInfoList->cityInfo));
  151. $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'];
  152. foreach ($cityInfoList as $value) {
  153. $table_value[] = [
  154. Yii::$app->params['systemUser'],
  155. date('Y-m-d H:i:s'),
  156. Yii::$app->params['systemUser'],
  157. date('Y-m-d H:i:s'), 0,
  158. $value->cityID,
  159. $value->cityName,
  160. $value->cityCode,
  161. $value->provinceID,
  162. $value->provinceName,
  163. $value->countryID,
  164. ];
  165. }
  166. $count = $model->batchInsert(CtripCityList::tableName(), $table_key, $table_value);
  167. return $count;
  168. }
  169. /**
  170. * Created by PhpStorm.
  171. * NOTES:获取某个城市的酒店列表
  172. * User: Steven
  173. * Date: 2018/4/20
  174. * Time: 14:03
  175. * Class actionGetdltmasterhotellist
  176. * @param city_id :城市id
  177. * @return mixed
  178. * @throws yii\db\Exception
  179. */
  180. public function actionGetdltmasterhotellist()
  181. {
  182. $model = new CtripSwitch();
  183. $request = Yii::$app->request->get();
  184. if (!preg_match('/^[0-9]+$/', $request['city_id']) || empty($request['city_id'])) {
  185. return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
  186. }
  187. $current_page = 1;
  188. $table_key = ['create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'city_id', 'city_name',
  189. 'hotel_name', 'master_hotel_id', 'can_add_hotel', 'hotel_phone', 'hotel_star', 'star_licence', 'hotel_address',
  190. 'hotel_address_en', 'glat', 'glng', 'gDlat', 'gDlng', 'bDlat', 'bDlng'];
  191. $tran = Yii::$app->db->beginTransaction();
  192. try {
  193. do {
  194. $data = [
  195. 'supplierID' => $model->ctripConf['switch_supplier_id'],
  196. 'cityID' => (int)$request['city_id'],
  197. 'pager' => [
  198. 'pageSize' => 200,
  199. 'pageIndex' => $current_page,
  200. 'isReturnTotalCount' => true,
  201. ],
  202. ];
  203. $res = $model->request('getdltmasterhotellist', $data);
  204. $total_page = $res->pager->totalPages; // 总页数
  205. if ($res->resultStatus->resultCode == 0) {
  206. /*if(empty($res->dltMasterHotelEntityList)){
  207. return json_encode(['code' => -1, 'msg' => '该城市下没有酒店信息']);
  208. }*/
  209. $table_value = [];
  210. foreach ($res->dltMasterHotelEntityList as $value) {
  211. $table_value[] = [
  212. Yii::$app->params['systemUser'],
  213. date('Y-m-d H:i:s'),
  214. Yii::$app->params['systemUser'],
  215. date('Y-m-d H:i:s'), 0,
  216. $value->cityID,
  217. $value->cityName,
  218. $value->hotelName,
  219. $value->masterHotelID,
  220. $value->canAddHotel == 'T' ? 1 : 0,
  221. $value->hotelPhone,
  222. $value->hotelStar,
  223. $value->starLicence == 'T' ? 1 : 0,
  224. $value->hotelAddress,
  225. $value->hotelAddressEn,
  226. $value->dltCoordinateEntity->glat,
  227. $value->dltCoordinateEntity->glng,
  228. $value->dltCoordinateEntity->gDlat,
  229. $value->dltCoordinateEntity->gDlng,
  230. $value->dltCoordinateEntity->bDlat,
  231. $value->dltCoordinateEntity->bDlng,
  232. ];
  233. }
  234. // 分批插入数据
  235. $insert_res = $model->batchInsert(CtripHotelList::tableName(), $table_key, $table_value);
  236. if ($insert_res <= 0) {
  237. throw new \Exception($model::ADD_HOTEL_ERR);
  238. }
  239. } else {
  240. throw new \Exception($model::GET_MASTER_HOTEL_ERR);
  241. }
  242. $current_page++;
  243. } while ($res->resultStatus->resultCode == 0 && $current_page <= $total_page);
  244. $tran->commit();
  245. } catch (\Exception $e) {
  246. $tran->rollBack();
  247. return ['code' => $e->getMessage(), 'msg' => $model::RETURN_MSG[$e->getMessage()]];
  248. }
  249. return $res;
  250. }
  251. /**
  252. * Created by PhpStorm.
  253. * NOTES:层级联动,通过国家获取国家下面的城市
  254. * User: Steven
  255. * Date: 2018/4/20
  256. * Time: 16:58
  257. * Class actionGetCityByid
  258. * @param $country_id
  259. */
  260. public function actionGetCityByid($country_id)
  261. {
  262. $model = new CtripCityList();
  263. $model = $model::getCity($country_id);
  264. echo Html::tag('option', '--请选择区--', ['value' => 'empty', 'class' => 'select_screen']);
  265. foreach ($model as $value => $name) {
  266. echo Html::tag('option', Html::encode($name), array('value' => $value));
  267. }
  268. }
  269. /**
  270. * Created by PhpStorm.
  271. * NOTES:创建子酒店 多次调用该接口并给传入同一母酒店,也会返回创建成功,但是hotelIDs返回空值
  272. * User: Steven
  273. * Date: 2018/4/23
  274. * Time: 13:35
  275. * Class actionCreateSubHotel
  276. * @param array $params
  277. * @return array
  278. * @throws Exception
  279. */
  280. public function actionCreatesubhotel(array $params = [])
  281. {
  282. $model = new CtripSwitch();
  283. $request = empty($params) ? Yii::$app->request->post() : $params;
  284. if (empty($request['hotels'])) {
  285. return ['code' => $model::MASTER_HOTEL_EMPTY, 'msg' => $model::RETURN_MSG[$model::MASTER_HOTEL_EMPTY]];
  286. }
  287. $master_hotel_id = $request['hotels'];
  288. $data = [
  289. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  290. 'masterHotelIDs' => [(int)$master_hotel_id], //母酒店的ID,
  291. ];
  292. $res = $model->request(Yii::$app->controller->action->id, $data);
  293. if ($res->resultStatus->resultCode === 0) {
  294. // 如果创建成功但未返回子酒店id说明已经添加过子酒店
  295. if (empty($res->hotelIDs[0])) {
  296. return ['code' => CtripSwitch::REPEAT_CREATE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::REPEAT_CREATE]];
  297. }
  298. $sub_hotels = $res->hotelIDs[0];
  299. $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']];
  300. // 关联酒店酒店操作需要同时在本地生成5个相关渠道的关联记录,因为同一个母酒店只有第一次新增子酒店返回子酒店id,如果不同时新增,其他渠道需要关联时无法获取子酒店id
  301. $tran = Yii::$app->db->beginTransaction();
  302. try {
  303. $model = new ChannelHotelMapping();
  304. foreach ($channel_arr as $item) {
  305. $cmodel = clone $model;
  306. $save_hotel_info = [
  307. 'master_hotel_id' => $master_hotel_id,
  308. 'sub_hotel_id' => $sub_hotels,
  309. 'hotel_id' => $request['cs_hotel_id'],
  310. 'channel_id' => $item,
  311. ];
  312. if (!($cmodel->load($save_hotel_info, '') && $cmodel->validate())) {
  313. throw new \Exception();
  314. }
  315. if (!$cmodel->save()) {
  316. throw new \Exception();
  317. }
  318. }
  319. // 将已创建过子酒店的母酒店可添加子酒店属性修改为不可添加
  320. $update_res = CtripHotelList::updateAll(['can_add_hotel' => 0], ['master_hotel_id' => $master_hotel_id]);
  321. if (!$update_res) {
  322. throw new \Exception();
  323. }
  324. $tran->commit();
  325. } catch (\Exception $e) {
  326. $tran->rollBack();
  327. return ['code' => CtripSwitch::SYS_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::SYS_ERR0R]];
  328. }
  329. } else {
  330. return ['code' => CtripSwitch::CTRIP_HOTEL_CODE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::CTRIP_HOTEL_CODE]];
  331. }
  332. return ['code' => CtripSwitch::SUCCESS_CODE, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::SUCCESS_CODE]];
  333. }
  334. /**
  335. * Created by PhpStorm.
  336. * NOTES:获取子酒店接口
  337. * User: Steven
  338. * Date: 2018/4/23
  339. * Time: 13:41
  340. * @param $child_hotel_id :子酒店id 可以不传,不传查询所有子酒店信息
  341. * Class actionGetSubHotel
  342. * @return mixed
  343. */
  344. public function actionGetdlthotellist()
  345. {
  346. $model = new CtripSwitch();
  347. $request = Yii::$app->request->post();
  348. $current_page = 1;
  349. $data = [
  350. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  351. 'pager' => [
  352. 'pageSize' => 200,
  353. 'pageIndex' => $current_page,
  354. 'isReturnTotalCount' => true,
  355. ],
  356. ];
  357. if (!empty($request['child_hotel_id'])) {
  358. $data['hotelID'] = (int)$request['child_hotel_id'];
  359. }
  360. $res = $model->request(Yii::$app->controller->action->id, $data);
  361. if ($res->resultStatus->resultCode === 0) {
  362. return $res->dltHotelEntityList;
  363. } else {
  364. return $res->resultStatus;
  365. }
  366. }
  367. /**
  368. * Created by PhpStorm.
  369. * NOTES:获取母物理房型列表
  370. * User: Steven
  371. * Date: 2018/4/23
  372. * Time: 15:53
  373. * Class actionGetdltbasicroomlist
  374. * @return bool
  375. */
  376. public function actionGetdltbasicroomlist()
  377. {
  378. $model = new CtripSwitch();
  379. $request = Yii::$app->request->get();
  380. $data = [
  381. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  382. 'hotelID' => (int)$request['child_hotel_id'], // 子酒店id
  383. ];
  384. $res = $model->request(Yii::$app->controller->action->id, $data);
  385. if ($res->resultStatus->resultCode === 0) {
  386. //todo:保存,相当于mapping
  387. // $model = new ChannelBaseRoomMapping();
  388. // $model_param = [
  389. // 'create_time' => date('Y-m-d H:i:s'),
  390. // 'create_user_id'=>Yii::$app->user->id,
  391. // 'channel_id'=>Yii::$app->params['ctrip']['supplier_id'],
  392. // 'master_hotel_id'=>$res->dltBasicRoomTypeEntityList->hotelId,
  393. // 'sub_hotel_id',
  394. // 'hotel_id',
  395. // 'master_base_room_id'=>$res->dltBasicRoomTypeEntityList->masterBasicRoomId,
  396. // 'master_base_room_name'=>$res->dltBasicRoomTypeEntityList->basicRoomName,
  397. // 'master_base_room_name_en'=>$res->dltBasicRoomTypeEntityList->basicRoomNameEn,
  398. // 'base_room_is_add'=>$res->dltBasicRoomTypeEntityList->isAdd=='T'?'1':'0'
  399. // ];
  400. // if ($model->load($model_param, '') && $model->validate()) {
  401. // $model->save();
  402. // }
  403. return $res->dltBasicRoomTypeEntityList;
  404. /*[ //返回示例
  405. {
  406. "hotelID": 4963549,
  407. "masterBasicRoomId": 17607148,
  408. "basicRoomTypeID": 17607148,
  409. "basicRoomName": "欧式阳光房",
  410. "basicRoomNameEn": "",
  411. "isAdd": "F"
  412. },
  413. {
  414. "hotelID": 4963549,
  415. "masterBasicRoomId": 17607157,
  416. "basicRoomTypeID": 17607157,
  417. "basicRoomName": "特价标准房(无窗)",
  418. "basicRoomNameEn": "特价标准房(无窗)",
  419. "isAdd": "F"
  420. },
  421. {
  422. "hotelID": 4963549,
  423. "masterBasicRoomId": 17607143,
  424. "basicRoomTypeID": 17607143,
  425. "basicRoomName": "豪华套房",
  426. "basicRoomNameEn": "",
  427. "isAdd": "F"
  428. },
  429. {
  430. "hotelID": 4963549,
  431. "masterBasicRoomId": 17607152,
  432. "basicRoomTypeID": 17607152,
  433. "basicRoomName": "阳光大床房",
  434. "basicRoomNameEn": "",
  435. "isAdd": "F"
  436. },
  437. {
  438. "hotelID": 4963549,
  439. "masterBasicRoomId": 17607154,
  440. "basicRoomTypeID": 17607154,
  441. "basicRoomName": "普通标准房",
  442. "basicRoomNameEn": "",
  443. "isAdd": "F"
  444. }
  445. ]*/
  446. } else {
  447. return $res->resultStatus;
  448. }
  449. }
  450. /**
  451. * @Author wanglg
  452. * @Desc 创建子物理房型
  453. * @return bool
  454. */
  455. public function actionCreatebasicroom()
  456. {
  457. $model = new CtripSwitch();
  458. $request = Yii::$app->request->get();
  459. $data = [
  460. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  461. 'updator' => Yii::$app->user->identity->TRUE_NAME,
  462. 'masterHotelId' => (int)$request['master_hotel_id'],
  463. 'childHotelId' => (int)$request['child_hotel_id'],
  464. 'masterBasicRoomIds' => array_map('intval', $request['master_basic_room_ids']),
  465. 'opClientIP' => '127.0.0.1',
  466. 'currency' => 'CNY',
  467. ];
  468. $res = $model->request(Yii::$app->controller->action->id, $data);
  469. if ($res->reultStatus->resultCode === 0) {
  470. return $res->resultStatus;
  471. } else {
  472. return $res->resultStatus;
  473. }
  474. }
  475. /**
  476. * @Author wanglg
  477. * @Desc 获取房型静态信息
  478. * @return bool
  479. */
  480. public function actionGethotelroomstaticinfo()
  481. {
  482. $model = new CtripSwitch();
  483. $request = Yii::$app->request->get();
  484. $data = [
  485. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  486. 'hotelId' => (int)$request['hotel_id'],
  487. 'returnDataTypeList' => [
  488. 'BasicRoomTypeSimpleEntity', 'BasicRoomTypeSmokeInfoEntity', 'BasicRoomTypeFacilityEntityList', 'RoomTypeSimpleEntity', 'RoomTypeBedTypeEntity',
  489. 'RoomTypeBroadnNetEntity', 'SupplierInfoEntity',
  490. ],
  491. ];
  492. $res = $model->request(Yii::$app->controller->action->id, $data);
  493. if ($res->reultStatus->resultCode === 0) {
  494. return $res->roomStaticInfos->roomStaticInfo;
  495. } else {
  496. return $res->roomStaticInfos->roomStaticInfo;
  497. }
  498. }
  499. /**
  500. * Created by PhpStorm.
  501. * NOTES:设置售卖房型的上下线,
  502. * 使用:该接口在CS系统中:
  503. * 1、房型渠道授权开关的开关的时候调用;
  504. * 2、子房型(非渠道维度)下线房型也应该调用该接口(待确认) 授权开:表示上线 授权关:表示下线
  505. * User: Steven
  506. * Date: 2018/4/27
  507. * Time: 15:42
  508. * Class actionSetroomonlineoffline
  509. * @return mixed
  510. */
  511. public function actionSetroomonlineoffline()
  512. {
  513. $model = new CtripSwitch(['scenario' => 'setRoomOnlineOffline']);
  514. if (!$model->load(Yii::$app->request->get(), '') || !$model->validate()) {
  515. return ['Message' => $model->getFirstErrors(), 'ResultCode' => '-116'];
  516. }
  517. //验证是否直连
  518. $ismapping = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
  519. if ($ismapping['code'] != CtripSwitch::SUCCESS_CODE) {
  520. return true; //不需要推送数据
  521. }
  522. //需要子房型ID和渠道ID
  523. $OperaRoomDistrib = new OperaRoomDistrib();
  524. $model_data = $OperaRoomDistrib->getRoomDistrib($model->zz_room_id, $model->zz_channel_id);
  525. $request = Yii::$app->request->get();
  526. $data = [
  527. 'supplierId' => (int)$model->supplierID,
  528. 'hotelId' => (int)$ismapping['data']['sub_hotel_id'],
  529. 'roomTypeId' => (int)$model_data->CHANNEL_MAPPING_ID, //售卖房型
  530. 'channel' => $model->getChannelID($model->zz_channel_id), //分销渠道 Ctrip,Qunar,Elong,ChannelA(分销A),B2B
  531. 'roomStatus' => (int)$model->roomStatus //状态:0 下线,1 上线,2 无效
  532. ];
  533. $res = $model->request(Yii::$app->controller->action->id, $data);
  534. if ($res->resultStatus->resultCode === 0) {
  535. return $res->resultStatus;
  536. } else {
  537. return $res->resultStatus;
  538. }
  539. }
  540. /**
  541. * Created by PhpStorm.
  542. * NOTES:更改售卖房型渠道名称
  543. * User: Steven
  544. * Params:
  545. * Date: 2018/4/27
  546. * Time: 16:30
  547. * Class actionUpdateroomsalename
  548. * @return mixed
  549. */
  550. public function actionUpdateroomsalename()
  551. {
  552. $model = new CtripSwitch(['scenario' => 'updateRoomSaleName']);
  553. if (!$model->load(Yii::$app->request->get(), '') || !$model->validate()) {
  554. return ['Message' => $model->getFirstErrors(), 'ResultCode' => '-116'];
  555. }
  556. //验证是否直连
  557. $ismapping = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
  558. if ($ismapping['code'] != CtripSwitch::SUCCESS_CODE) {
  559. return true; //不需要推送数据
  560. }
  561. //需要子房型ID和渠道ID
  562. $OperaRoomDistrib = new OperaRoomDistrib();
  563. $model_data = $OperaRoomDistrib->getRoomDistrib($model->zz_room_id, $model->zz_channel_id);
  564. $channel_name = $model->zz_channel_id == CtripSwitch::CTRIP_ID ? 'ctripName' : (
  565. $model->zz_channel_id == CtripSwitch::QUNAR_ID ? 'qunarRatePlanName' : (
  566. $model->zz_channel_id == CtripSwitch::ELONG_ID ? 'eLongRatePlanName' : (
  567. $model->zz_channel_id == CtripSwitch::CHANNELA_ID ? 'channelARatePlanName' : 'b2bRatePlanName')));
  568. $data = [
  569. 'supplierId' => (int)$model->supplierID,
  570. 'hotelId' => (int)$model->$ismapping['data']['sub_hotel_id'],
  571. 'roomTypeId' => (int)$model_data->CHANNEL_MAPPING_ID,
  572. ];
  573. $data[$channel_name] = $model_data->DISTRIB_ROOM_NAME;
  574. $res = $model->request(Yii::$app->controller->action->id, $data);
  575. if ($res->resultStatus->resultCode === 0) {
  576. return $res->resultStatus;
  577. } else {
  578. return $res->resultStatus;
  579. }
  580. }
  581. /**
  582. * Created by PhpStorm.
  583. * NOTES:设置渠道库存房态共享
  584. * 跟业务(杨晓婷)沟通后,得出结论先不做共享,默认是非共享的
  585. * User: Steven
  586. * Date: 2018/4/28
  587. * Time: 15:07
  588. * Class actionSetroomshare
  589. * @return mixed
  590. */
  591. public function actionSetroomshare()
  592. {
  593. $model = new CtripSwitch();
  594. $request = Yii::$app->request->get();
  595. $data = [
  596. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  597. 'hotelId' => (int)$request['hotel_id'],
  598. 'roomId' => (int)$request['room_type_id'], // 售卖房型id
  599. 'shareType' => 'RoomInventory', // RoomInventory:库存,RoomStatus:房态
  600. 'isShare' => true, // 是否共享
  601. 'baseChannel' => 'ctrip' // 共享渠道 Ctrip,Qunar,Elong,ChannelA,B2B
  602. ];
  603. $res = $model->request(Yii::$app->controller->action->id, $data);
  604. if ($res->resultStatus->resultCode === 0) {
  605. return $res;
  606. } else {
  607. return $res->resultStatus;
  608. }
  609. }
  610. /**
  611. * @Author: wanglg
  612. * @DESC:创建售卖房型
  613. * @return mixed
  614. */
  615. public function actionCreateroom()
  616. {
  617. $model = new CtripSwitch();
  618. $data = [
  619. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  620. 'hotelId' => 11337705,
  621. 'basicRoomTypeId' => 55334003, // 子物理房型
  622. 'purchaseSourceID' => 0,
  623. 'rateCodePropertyValueIDList' => [8, 4],
  624. 'priceType' => 2,
  625. 'mealType' => 7,
  626. 'mealCount' => 1,
  627. ];
  628. $res = $model->request(Yii::$app->controller->action->id, $data);
  629. if ($res->resultStatus->resultCode === 0) {
  630. return $res;
  631. } else {
  632. return $res->resultStatus;
  633. }
  634. }
  635. /**
  636. * Notes:订单预定
  637. * User: Steven
  638. * Date: 2018/5/11
  639. * Time: 13:06
  640. * @param $order_info
  641. * @return array
  642. * @throws Exception
  643. */
  644. private function bookOrder($order_info)
  645. {
  646. $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
  647. $mapping_info = CtripSwitch::getZzIDByCtripID($supplier_id, $order_info['dltOrderInfo']['roomId']);
  648. if (empty($mapping_info)) {
  649. return ['code' => CommonOrder::RETURN_CODE_MAPPING_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_MAPPING_FAIL]];
  650. }
  651. $room_price_list = [];
  652. foreach ($order_info['dltOrderInfo']['roomPriceList'] as $tmp_room_price) {
  653. $room_price_list[] = [
  654. 'RunDate' => self::FormatDate($tmp_room_price['effectDate']),
  655. 'Price' => $tmp_room_price['price'],
  656. ];
  657. }
  658. $params = [
  659. 'CreateUserID' => Yii::$app->params['ctrip']['base_user_id'],
  660. 'OrderID' => $order_info['dltOrderInfo']['orderId'], //销售方订单号
  661. 'HotelID' => $mapping_info['HOTEL_ID'],
  662. 'RoomID' => $mapping_info['ROOM_ID'],
  663. 'DistribID' => $supplier_id,
  664. 'RoomNum' => $order_info['dltOrderInfo']['roomnum'],
  665. 'CheckIn' => self::FormatDate($order_info['dltOrderInfo']['checkinDate']),
  666. 'CheckOut' => self::FormatDate($order_info['dltOrderInfo']['checkoutDate']),
  667. 'TotalPrice' => $order_info['dltOrderInfo']['orderPrice'],
  668. 'Currency' => 'RMB',
  669. 'ContactName' => $order_info['dltOrderInfo']['customerName'],
  670. 'ContactTel' => '',
  671. 'PayType' => CommonOrder::PAY_TYPE_CREDIT,
  672. 'PayTradeNo' => '',
  673. 'OrderGuests' => [
  674. 0 => [
  675. 'Name' => $order_info['dltOrderInfo']['customerName'],
  676. ]
  677. ],
  678. 'Comment' => [
  679. ],
  680. 'NeedInvoice' => 0,
  681. 'InvoiceInfos' => [],
  682. 'RoomPrices' => $room_price_list,
  683. 'OrderTitleID' => 0,
  684. ];
  685. empty($order_info['dltOrderInfo']['orderMemo']) ? false : $params['Comment']['orderMemo'] = ['comment' => $order_info['dltOrderInfo']['orderMemo'], 'comment_type' => OrderComment::TYPE_INTERNAL];
  686. empty($order_info['dltOrderInfo']['specialMemo']) ? false : $params['Comment']['specialMemo'] = ['comment' => $order_info['dltOrderInfo']['specialMemo'], 'comment_type' => OrderComment::TYPE_INTERNAL];
  687. empty($order_info['dltOrderInfo']['additionalList']) ? false : $params['Comment']['additionalList'] = ['comment' => json_encode($order_info['dltOrderInfo']['additionalList']), 'comment_type' => OrderComment::TYPE_INTERNAL];
  688. //检查订单是否预定成功
  689. $check_order_exits = OrderMain::getInfoByOutsideId($order_info['dltOrderInfo']['orderId'], $supplier_id);
  690. if (!empty($check_order_exits)) {
  691. //todo:这里还需要看是否有其他情况,
  692. return ['code' => CommonOrder::RETURN_CODE_REPEAT, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_REPEAT]];
  693. }
  694. if ($order_info['dltOrderInfo']['isHoldRoom'] == 'R') {
  695. $channel_status = CtripOrder::ORDER_STATUS_ACCEPT;
  696. } else {
  697. $channel_status = CtripOrder::ORDER_STATUS_WAITING;
  698. }
  699. //创建订单
  700. $new_order = new CommonOrder(['scenario' => 'BookHotelOrder']);
  701. if ($new_order->load($params, '') && $new_order->validate()) {
  702. $res = $new_order->bookHotelOrder();
  703. if ($res['code'] == CommonOrder::RETURN_CODE_SUCCESS) {//下单成功
  704. //TODO:更新订单相关信息
  705. OrderMain::updateAll(['DOCKING_TYPE' => CtripOrder::ORDER_DOCKING_TYPE, 'CHANNEL_ORDER_STATUS' => $channel_status, 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
  706. ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $res['data']['order_id']], ['PARENT_ORDER_ID' => $res['data']['order_id']]]]);
  707. return ['code' => CommonOrder::RETURN_CODE_SUCCESS, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_SUCCESS]];
  708. } else //下单失败
  709. {
  710. return ['code' => CommonOrder::RETURN_CODE_PROGRAM_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_PROGRAM_FAIL]];
  711. }
  712. }
  713. }
  714. /**
  715. * Notes:修改订单
  716. * User: Steven
  717. * Date: 2018/5/11
  718. * Time: 13:56
  719. * @param $order_info
  720. * @return array|int
  721. * @throws Exception
  722. */
  723. private function modifyOrder($order_info)
  724. {
  725. //检查订单是否已经存在,如果已经存在,说明只修改了非入住需求的信息;如果订单不存在,说明代理通是取消+新订
  726. $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
  727. $order_model = OrderMain::findOne([
  728. 'OUTSIDE_ORDER_NO' => $order_info['dltOrderInfo']['releationOrder']['lastOrderId'],
  729. 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN,
  730. 'PARENT_ORDER_ID' => 0,
  731. 'OUTSIDE_SALE_ORG_ID' => $supplier_id,
  732. 'CANCEL_FLAG' => 0,
  733. ]);
  734. //订单在渠道未接单的情况下 且订单的状态是待发单、待确认的订单可直接修改
  735. if ($order_model->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_WAITING &&
  736. ($order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND || $order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM)) {
  737. $mapping_info = CtripSwitch::getZzIDByCtripID($supplier_id, $order_info['dltOrderInfo']['roomId']);
  738. if (empty($mapping_info)) {
  739. return ['code' => CommonOrder::RETURN_CODE_MAPPING_FAIL, 'msg' => CommonOrder::RETURN_MSG[CommonOrder::RETURN_CODE_MAPPING_FAIL]];
  740. }
  741. $room_price_list = [];
  742. foreach ($order_info['dltOrderInfo']['roomPriceList'] as $tmp_room_price) {
  743. $room_price_list[] = [
  744. 'RunDate' => self::FormatDate($tmp_room_price['effectDate']),
  745. 'Price' => $tmp_room_price['price'],
  746. ];
  747. }
  748. $param = [
  749. 'CreateUserID' => Yii::$app->params['ctrip']['base_user_id'],
  750. 'ZZ_ORDER_ID' => $order_model->ORDER_ID, //蜘蛛订单号
  751. 'OrderID' => $order_info['dltOrderInfo']['orderId'], //渠道订单号
  752. 'HotelID' => $mapping_info['HOTEL_ID'],
  753. 'RoomID' => $mapping_info['ROOM_ID'],
  754. 'DistribID' => $supplier_id,//渠道ID
  755. 'RoomNum' => $order_info['dltOrderInfo']['roomnum'], //房间数量
  756. 'CheckIn' => self::FormatDate($order_info['dltOrderInfo']['checkinDate']), //入住日期
  757. 'CheckOut' => self::FormatDate($order_info['dltOrderInfo']['checkoutDate']), //离店日期,
  758. 'TotalPrice' => $order_info['dltOrderInfo']['orderPrice'],//订单总价
  759. 'Currency' => 'RMB', //币种
  760. 'ContactName' => $order_info['dltOrderInfo']['customerName'],//联系人姓名
  761. 'ContactTel' => '', //联系人电话
  762. 'OrderGuests' => [
  763. 0 => [
  764. 'Name' => $order_info['dltOrderInfo']['customerName'],
  765. ]
  766. ], //入住人信息
  767. 'Comment' => $order_info['dltOrderInfo']['orderMemo'], //客人备注
  768. 'NeedInvoice' => 0,
  769. 'InvoiceInfos' => 0,
  770. 'RoomPrices' => $room_price_list,
  771. ];
  772. $newOrder = new CommonOrder(['scenario' => 'UpdateHotelOrder']);
  773. if ($newOrder->load($param, '') && $newOrder->validate()) {
  774. $res = $newOrder->updateHotelOrder();
  775. if ($res['code'] == 0) {
  776. return $res;
  777. } else {
  778. return $res;
  779. }
  780. } else {
  781. $error = array_values($newOrder->getFirstErrors());
  782. return ['code' => 1, 'info' => $error[0]];
  783. }
  784. }
  785. $orderStatusArr = [
  786. OrderMain::ORDER_CHANNEL_STATUS_ACCEPT, //已接单
  787. OrderMain::ORDER_CHANNEL_STATUS_REJECT,//已拒绝
  788. OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT //取消被拒
  789. ];
  790. //并且订单的状态不能是已取消
  791. if (in_array($order_model->CHANNEL_ORDER_STATUS, $orderStatusArr) && $order_model->ORDER_STATUS != OrderMain::ORDER_STATUS_CANCEL) {
  792. //更新订单的渠道接单状态为申请修改(同意修改,拒绝修改)
  793. $effectCount = OrderMain::updateAll(['CHANNEL_ORDER_STATUS' => OrderMain::ORDER_CHANNEL_STATUS_APPLY_MODIFY,
  794. 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
  795. ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order_model->ORDER_ID], ['PARENT_ORDER_ID' => $order_model->ORDER_ID]]]);
  796. return $effectCount;
  797. }
  798. //其他修改情况但是未做处理
  799. $this->sendAliMsgToRtx('代理通直连通知', '修改订单,其他修改情况但是未做处理,请关注', 'shifp');
  800. }
  801. /**
  802. * Notes:取消订单
  803. * User: Steven
  804. * Date: 2018/5/11
  805. * Time: 14:05
  806. * @param $order_info
  807. * @return array|int
  808. * @throws Exception
  809. */
  810. private function cancelOrder($order_info)
  811. {
  812. $supplier_id = CtripSwitch::SupplierDict($order_info['dltOrderInfo']['channel']);
  813. $order_model = OrderMain::findOne([
  814. 'OUTSIDE_ORDER_NO' => $order_info['dltOrderInfo']['releationOrder']['lastOrderId'],
  815. 'ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN,
  816. 'PARENT_ORDER_ID' => 0,
  817. 'OUTSIDE_SALE_ORG_ID' => $supplier_id,
  818. 'CANCEL_FLAG' => 0,
  819. ]);
  820. //订单在渠道未接单的情况下 且订单的状态是待发单、待确认的订单可直接取消
  821. if ($order_model->CHANNEL_ORDER_STATUS == OrderMain::ORDER_CHANNEL_STATUS_WAITING &&
  822. ($order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_SEND || $order_model->ORDER_STATUS == OrderMain::ORDER_STATUS_WAITING_CONFIRM)) {
  823. $params = [
  824. 'CreateUserId' => Yii::$app->params['ctrip']['base_user_id'],
  825. 'OrderID' => $order_info['dltOrderInfo']['orderId'], //渠道订单号
  826. 'HotelID' => $order_model->PARENT_PROD_ID,
  827. 'DistribID' => $supplier_id,
  828. 'RoomID' => $order_model->PROD_ID,
  829. 'Reason' => '携程代理通直连取消!'
  830. ];
  831. $newOrder = new CommonOrder(['scenario' => 'CancelHotelOrder']);
  832. if ($newOrder->load($params, '') && $newOrder->validate()) {
  833. $res_code = $newOrder->cancelHotelOrder();
  834. return ['code' => $res_code, 'info' => CommonOrder::RETURN_MSG[$res_code]];
  835. } else {
  836. $error = array_values($newOrder->getFirstErrors());
  837. return ['code' => CommonOrder::RETURN_CODE_CANCEL_FAIL, 'info' => $error[0]];
  838. }
  839. }
  840. //以下情况都是申请取消 变更渠道的订单状态为申请取消(同意取消、拒绝取消)
  841. $orderStatusArr = [
  842. OrderMain::ORDER_CHANNEL_STATUS_ACCEPT, //已接单
  843. OrderMain::ORDER_CHANNEL_STATUS_REJECT,//已拒绝
  844. OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL_REJECT //取消被拒
  845. ];
  846. if (in_array($order_model->CHANNEL_ORDER_STATUS, $orderStatusArr)) {
  847. $effectCount = OrderMain::updateAll(['CHANNEL_ORDER_STATUS' => OrderMain::ORDER_CHANNEL_STATUS_APPLY_CANCEL,
  848. 'UPDATE_TIME' => date('Y-m-d H:i:s', time())],
  849. ['and', ['CANCEL_FLAG' => 0], ['or', ['ORDER_ID' => $order_model->ORDER_ID], ['PARENT_ORDER_ID' => $order_model->ORDER_ID]]]);
  850. return $effectCount;
  851. }
  852. //其他取消情况但是未做处理
  853. $this->sendAliMsgToRtx('代理通直连通知', '取消订单,其他修改情况但是未做处理,请关注', 'shifp');
  854. }
  855. /**
  856. * Notes:订单变化通知接口
  857. * User: Steven
  858. * Date: 2018/5/11
  859. * Time: 10:12
  860. * @return array
  861. * @throws Exception
  862. */
  863. public function actionGetdltordernotify()
  864. {
  865. $model = new CtripSwitch();
  866. $data = [
  867. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  868. 'startTime' => '/Date(' . strval($model->getTimestamp() - 30000) . '+0800)/',
  869. 'endTime' => '/Date(' . strval($model->getTimestamp()) . '+0800)/',
  870. 'pagingType' => [
  871. 'pageSize' => 100,
  872. 'pageIndex' => 1
  873. ],
  874. ];
  875. $res = $model->request(Yii::$app->controller->action->id, $data);
  876. #处理返回的数据
  877. if ($res->ResponseStatus->Ack != 'Success') {
  878. return [
  879. 'code' => 1,
  880. 'info' => '携程订单变化接口返回值错误!', $res->ResponseStatus->Errors->Message
  881. ];
  882. }
  883. if ($res->resultStatus->resultCode != 0) {
  884. return [
  885. 'code' => 2,
  886. 'info' => '携程订单变化接口返回值错误!', $res->resultStatus->resultMsg
  887. ];
  888. }
  889. if (isset($res->dltOrderIds) || !empty($res->dltOrderIds)) {
  890. $outside_order_list = $res->dltOrderIds;
  891. $detail_error_info = '';
  892. foreach ($outside_order_list as $outside_order_id) {
  893. //调用携程订单详情接口
  894. $tmp_order_detail = $this->GetOrderInfo($outside_order_id);
  895. $sale_order_id = $tmp_order_detail['dltOrderInfo']['orderId'];
  896. if ($tmp_order_detail['resultStatus']['resultCode'] != 0) {
  897. $detail_error_info .= '代理通订单号: ' . $sale_order_id . ' 携程订单详情接口获取失败!' . $tmp_order_detail['resultStatus']['resultMsg'];
  898. continue;
  899. }
  900. //N:新订 D:延住
  901. if ($tmp_order_detail['dltOrderInfo']['formType'] == 'N' || $tmp_order_detail['dltOrderInfo']['formType'] == 'D') {
  902. $book_res = $this->bookOrder($tmp_order_detail);
  903. }
  904. //M:修改 如果是修改单,那么直接在原单上进行修改
  905. if ($tmp_order_detail['dltOrderInfo']['formType'] == 'M') {
  906. $modify_res = $this->modifyOrder($tmp_order_detail);
  907. }
  908. //取消
  909. if ($tmp_order_detail['dltOrderInfo']['formType'] == 'C') {
  910. $cancel_res = $this->cancelOrder($tmp_order_detail);
  911. }
  912. }
  913. }
  914. return [];
  915. }
  916. /**
  917. * Function Description:7.2 获取携程订单详情方法
  918. * Function Name: GetOrderInfo
  919. * @param $dltOrderId
  920. *
  921. * @return mixed
  922. *
  923. * @author 娄梦宁
  924. */
  925. public function GetOrderInfo($dltOrderId)
  926. {
  927. $model = new CtripSwitch();
  928. $data = [
  929. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  930. 'dltOrderId' => (string)$dltOrderId,
  931. ];
  932. $res = $model->request('getdltorderinfo', $data);
  933. return json_decode(json_encode($res), true);
  934. }
  935. /**
  936. * Notes:订单操作接口 确认 拒绝等
  937. * User: Steven
  938. * Date: 2018/5/22
  939. * Time: 10:12
  940. * @return array
  941. * @throws Exception
  942. */
  943. public function actionOperaterDltOrder()
  944. {
  945. $model = new CtripSwitch();
  946. $orderId = Yii::$app->request->post('orderId', '');//订单id
  947. $operaterType = Yii::$app->request->post('operaterType', '');//操作类型 0:接受,1:拒绝,2:更改确认号 11:接受取消 12:拒绝取消
  948. $confirmType = Yii::$app->request->post('confirmType', '');//1:按入住人姓名;2:按确认号
  949. $refuseType = Yii::$app->request->post('refuseType', '');//拒绝类型 1:满房;2:房价不对;3:其他原因
  950. $refuseRemark = Yii::$app->request->post('refuseRemark', '');//拒绝原因
  951. $bookingNo = Yii::$app->request->post('bookingNo', '');//预定号
  952. $params = [
  953. 'supplierID' => (int)$model->ctripConf['switch_supplier_id'],
  954. 'confirmType' => 1
  955. ];
  956. if ($orderId == '' || $operaterType == '') {
  957. return [
  958. 'code' => 1,
  959. 'info' => '参数错误!'
  960. ];
  961. }
  962. $order_main = new OrderMain();
  963. $params['dltOrderId'] = (string)$order_main->getOutSideId($orderId);
  964. if ($operaterType != '') {
  965. $params['operaterType'] = (int)$operaterType;
  966. }
  967. if ($confirmType != '') {
  968. $params['confirmType'] = (int)$confirmType;
  969. }
  970. if ($refuseType != '') {
  971. $params['refuseType'] = (int)$refuseType;
  972. }
  973. if ($refuseRemark != '') {
  974. $params['refuseRemark'] = $refuseRemark;
  975. }
  976. if ($bookingNo != '') {
  977. $params['bookingNo'] = $bookingNo;
  978. }
  979. $res = $model->request('operaterdltorder', $params);
  980. if ($res->ResponseStatus->Ack != 'Success') {
  981. return [
  982. 'code' => 1,
  983. 'info' => '携程服务器错误!'
  984. ];
  985. }
  986. return [
  987. 'code' => $res->resultStatus->resultCode,
  988. 'info' => $res->resultStatus->resultMsg,
  989. ];
  990. }
  991. /**
  992. * Function Description:格式化携程接口中的时间为 年-月-日
  993. * Function Name: FormatDate
  994. * @param $dateTime
  995. *
  996. * @return false|string
  997. *
  998. * @author 娄梦宁
  999. */
  1000. private function FormatDate($dateTime)
  1001. {
  1002. $time = substr($dateTime, 6, 10);
  1003. $date = date('Y-m-d', $time);
  1004. return $date;
  1005. }
  1006. /**
  1007. * @Author: wanglg
  1008. * @DESC:推送房态接口
  1009. * @param hotel_id :cs后台酒店id
  1010. * @param base_room_type :cs后台酒店id
  1011. * @param room_type :cs后台子房型room_type
  1012. * @return mixed
  1013. */
  1014. public function actionBatchpushroomdata()
  1015. {
  1016. $request = Yii::$app->request->post();
  1017. $model = new CtripSwitch(['scenario' => 'PushRoomData']);
  1018. if (!$request['zz_hotel_id'] || !$request['zz_base_room_id'] || !$request['zz_room_id']) {
  1019. return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
  1020. }
  1021. // 如果没有日期段,默认时间段为当前开始+90天
  1022. $request['start_date'] = empty($request['start_date']) ? date('Y-m-d') : $request['start_date'];
  1023. $request['end_date'] = empty($request['end_date']) ? date('Y-m-d', strtotime('+90 days')) : $request['end_date'];
  1024. $model->load($request, '');
  1025. // 首先判断酒店房型是否直连,确认直连再查询数据
  1026. $mp_res = $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
  1027. // 判断房型是否直连
  1028. if ($mp_res['code'] != 0) {
  1029. return $mp_res;
  1030. }
  1031. // 查询房型在一个日期段内的数据
  1032. if (!$model->loadPushData($request, '') || !$model->validate()) {
  1033. return false;
  1034. }
  1035. $data = [
  1036. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  1037. 'hotelId' => (int)$mp_res['data']['sub_hotel_id'],
  1038. 'roomDataEntitys' => $model->roomDataEntitys,
  1039. ];
  1040. $res = $model->request('BatchPushRoomData', $data);
  1041. if ($res->resultStatus->resultCode === 0) {
  1042. return $res->resultStatus;
  1043. } else {
  1044. return $res->resultStatus;
  1045. }
  1046. }
  1047. /**
  1048. * @Author: wanglg
  1049. * @DESC: 验证酒店房型是否直连接口
  1050. */
  1051. public function actionCheckMapping()
  1052. {
  1053. // scenario scenario scenario
  1054. $model = new CtripSwitch(['scenario' => 'CheckMapping']);
  1055. $request = Yii::$app->request->post();
  1056. $request['zz_channel_id'] = empty($request['zz_channel_id']) ? Yii::$app->params['ctrip']['supplier_id'] : $request['zz_channel_id'];
  1057. $request['zz_room_id'] = empty($request['zz_room_id']) ? 0 : $request['zz_room_id'];
  1058. if (!$model->load($request, '') || !$model->validate()) {
  1059. return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
  1060. }
  1061. return $model->isMapping($model->zz_hotel_id, $model->zz_room_id, $model->zz_channel_id);
  1062. }
  1063. /**
  1064. * Notes:更新房型售卖规则
  1065. * User: Aaron
  1066. * Date: 2018/5/11
  1067. * @return mixed
  1068. * @throws yii\db\Exception
  1069. */
  1070. public function actionSetRoomSaleRule()
  1071. {
  1072. $model = new CtripSwitch();
  1073. $request = Yii::$app->request->post();
  1074. if ($request['hotel_id'] == null || $request['room_type'] == null) {
  1075. return ['code' => CtripSwitch::PARAM_ERR0R, 'msg' => CtripSwitch::RETURN_MSG[CtripSwitch::PARAM_ERR0R]];
  1076. }
  1077. // 首先判断酒店房型是否直连,确认直连再查询数据
  1078. $mp_res = $model->isMapping($request['hotel_id'], $request['room_type'], $model->ctripConf['switch_supplier_id']);
  1079. // 判断房型是否直连
  1080. if ($mp_res['code'] != 0) {
  1081. return $mp_res;
  1082. }
  1083. //需要子房型ID和渠道ID
  1084. $OperaRoomDistrib = new OperaRoomDistrib();
  1085. $model_data = $OperaRoomDistrib->getRoomDistrib($request['hotel_id'], $model->ctripConf['switch_supplier_id']);
  1086. $data = [
  1087. 'supplierId' => (int)$model->ctripConf['switch_supplier_id'],
  1088. 'hotelId' => $request['hotel_id'],
  1089. 'roomTypeList' => $request['roomTypeList'],
  1090. 'setCtripDailyRule' => $request['setCtripDailyRule'],
  1091. 'saleRuleList' => $request['saleRuleList']
  1092. ];
  1093. return $data;
  1094. }
  1095. }
  1096. ?>