No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

386 líneas
16 KiB

  1. <?php
  2. namespace backend\modules\hotel\controllers;
  3. use backend\modules\api\util\Util;
  4. use backend\modules\hotel\models\ChannelBaseRoomMapping;
  5. use backend\modules\hotel\models\ChannelHotelMapping;
  6. use backend\modules\hotel\models\CtripHotelList;
  7. use backend\modules\hotel\models\CtripSwitch;
  8. use backend\modules\hotel\models\OperaHotel;
  9. use backend\modules\hotel\models\CtripCityList;
  10. use backend\modules\hotel\models\OperaHotelBaseRoom;
  11. use backend\modules\hotel\models\OperaHotelRoom;
  12. use backend\modules\hotel\service\MappingService;
  13. use \common\models\BaseSupplier;
  14. use Yii;
  15. use yii\data\ActiveDataProvider;
  16. use yii\db\Expression;
  17. class MappingController extends BaseController
  18. {
  19. public $layout = "@backend/modules/motorcade/views/layouts/iframe_new";
  20. public $enableCsrfValidation = false;
  21. const SUCCESS_CODE = 0;
  22. const UNMAPPING_CODE = 100; // 酒店或房型未直连
  23. const PARAM_ERR0R = 101; // 请求参数缺失
  24. const MAPPING_HOTEL_ERROR = 102; //酒店关联失败
  25. const RETURN_MSG = [
  26. self::SUCCESS_CODE => 'success',
  27. self::UNMAPPING_CODE => '请检查 Mapping 关系!',
  28. self::PARAM_ERR0R => '请求参数缺失',
  29. self::MAPPING_HOTEL_ERROR => '酒店关联失败',
  30. ];
  31. private $service = null;
  32. /**
  33. * Des:service
  34. * Name: service
  35. * @return MappingService
  36. * @author 倪宗锋
  37. */
  38. public function service()
  39. {
  40. if ($this->service == null) {
  41. $this->service = new MappingService();
  42. }
  43. return $this->service;
  44. }
  45. public function actionIndex()
  46. {
  47. $model = new BaseSupplier();
  48. $request = Yii::$app->request->post();
  49. $model->load($request);
  50. $query = BaseSupplier::find()->joinWith('baseSupplierSale b')->from('base_supplier a')
  51. ->where(['b.PARENT_TYPE' => 25, 'a.CANCEL_FLAG' => 0, 'a.MAIN_CORP_ID' => 1, 'a.supplier_type' => 301, 'b.CANCEL_FLAG' => 0])
  52. ->select(['a.ID', 'a.SUPPLIER_NAME', 'a.COMPANY_NAME']);
  53. $query->andFilterWhere(['like', 'a.SUPPLIER_NAME', $model->SUPPLIER_NAME])
  54. ->andFilterWhere(['in', 'a.ID', [669, 1667, 1668, 1669, 1670]]);
  55. $dataProvider = new ActiveDataProvider([
  56. 'query' => $query,
  57. 'pagination' => [
  58. 'pageSize' => 25,
  59. ],
  60. ]);
  61. return $this->render('index', ['model' => $model, 'dataProvider' => $dataProvider]);
  62. }
  63. public function actionHotelMappingList()
  64. {
  65. $hotel = new OperaHotel();
  66. $hotel->HOTEL_STATUS = 1;
  67. $dataProvider = $hotel->getHotelist(Yii::$app->request->queryParams);
  68. return $this->render('hotel_mapping', ['model' => [], 'dataProvider' => $dataProvider]);
  69. }
  70. /**
  71. * Created by PhpStorm.
  72. * NOTES:交互View 母酒店列表
  73. * User: Steven
  74. * Date: 2018/4/20
  75. * Time: 17:00
  76. * Class actionCityHotelList
  77. * @return string
  78. * @throws yii\db\Exception
  79. */
  80. public function actionCityHotelList()
  81. {
  82. $model = new CtripCityList();
  83. // 如果参数为空,默认当前为上海
  84. $request = Yii::$app->request->get();
  85. $request['channel_id'] = empty($request['channel_id']) ? Yii::$app->params['ctrip']['supplier_id'] : $request['channel_id'];
  86. $request = empty($request['country_id']) ? ['country_id' => 1, 'city_id' => 2, 'channel_id' => $request['channel_id'], 'hotel_name' => ''] : $request;
  87. $new_model = new CtripHotelList();
  88. $hotel_list = $new_model->getMasterHotelList($request);
  89. $model->load($request, '');
  90. // 如果当前城市没有酒店信息需要拉取代理通后台数据
  91. if ($hotel_list->getTotalCount() <= 0 && empty($request['hotel_name'])) {
  92. $res = Yii::$app->runAction('hotel/ctrip-switch/getdltmasterhotellist');
  93. if ($res['code'] == 0) {
  94. return '<script>$("#submit").trigger(\'click\');</script>';
  95. }
  96. }
  97. $zz_hotel_list = OperaHotel::find()
  98. ->leftJoin('channel_hotel_mapping b', 'a.HOTEL_ID=b.hotel_id')->from('opera_hotel a')
  99. ->andFilterWhere([
  100. 'a.CANCEL_FLAG' => 0,
  101. ])
  102. ->andWhere('b.hotel_id is null')
  103. ->orderBy(new Expression('CONVERT(a.HOTEL_NAME USING GBK)'))
  104. ->all();
  105. return $this->render('set_hotel_mapping', ['model' => $model, 'dataProvider' => $hotel_list, 'hotel_list' => $zz_hotel_list]);
  106. }
  107. /**
  108. * @Author: wanglg
  109. * @DESC: 设置酒店关联
  110. * @param hotels :代理通子酒店id
  111. * @param cs_hotel_id :cs酒店id
  112. * @return string
  113. */
  114. public function actionSetHotelMapping()
  115. {
  116. $request = Yii::$app->request->post();
  117. // 查询子酒店是否已经创建成功,如果已存在,不用创建子酒店
  118. $master_hotel = ChannelHotelMapping::findAll(['master_hotel_id' => $request['hotels'], 'cancel_flag' => 0]);
  119. // 如果酒店信息不存在,先创建子酒店
  120. if (empty($master_hotel)) {
  121. // 创建子酒店
  122. $res = Yii::$app->runAction('hotel/ctrip-switch/createsubhotel', ['params' => ['hotels' => $request['hotels'], 'cs_hotel_id' => $request['cs_hotel_id']]]);
  123. } else {
  124. // 将关联表中的hotel_id绑定cs系统hotel_id
  125. $update_res = ChannelHotelMapping::updateAll(['hotel_id' => $request['cs_hotel_id']], ['master_hotel_id' => $request['hotels'], 'cancel_flag' => 0]);
  126. if (!$update_res) {
  127. $res = json_encode(['code' => self::MAPPING_HOTEL_ERROR, 'msg' => self::RETURN_MSG[self::MAPPING_HOTEL_ERROR]]);
  128. } else {
  129. $res = json_encode(['code' => self::SUCCESS_CODE, 'msg' => self::RETURN_MSG[self::SUCCESS_CODE]]);
  130. }
  131. }
  132. return $res;
  133. }
  134. /**
  135. * Notes:设置酒店售卖渠道
  136. * User: Steven
  137. * Date: 2018/5/2
  138. * Time: 15:16
  139. * @return string
  140. */
  141. public function actionSetSaleType()
  142. {
  143. // $model = new ChannelHotelMapping();
  144. $get = Yii::$app->request->get();
  145. $model = ChannelHotelMapping::findOne(['channel_id' => $get['channel_id'], 'hotel_id' => $get['hotel_id'], 'cancel_flag' => 0]);
  146. if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
  147. $request = Yii::$app->request->post();
  148. $switch_model = new CtripSwitch();
  149. $model->apply_week = empty($model->apply_week) ? [] : $model->apply_week;
  150. $week_days = $switch_model->weekDays($model->apply_week);
  151. $request['ChannelHotelMapping']['apply_week'] = implode('', $week_days);
  152. $supplier_info = BaseSupplier::findOne(['ID' => $model->channel_id]);
  153. if ($model->load($request) && $model->validate()) {
  154. if (!$model->save()) {
  155. return '<script>z.pjaxFinish("error", "设置售卖状态失败!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
  156. $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
  157. } else {
  158. return '<script>z.pjaxFinish("success", "设置售卖状态成功!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
  159. $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
  160. }
  161. } else {
  162. return '<script>z.pjaxFinish("error", "设置售卖状态失败!", "#float-div");$("#submit").trigger(\'click\');$("#channel_id").val(' . $model->channel_id . ');
  163. $("#channel_name").val("' . $supplier_info['SUPPLIER_NAME'] . '");$("#show_channel_name").html("' . $supplier_info['SUPPLIER_NAME'] . '")</script>';
  164. }
  165. }
  166. return $this->render('_setSaleType', [
  167. 'model' => $model,
  168. ]);
  169. }
  170. ######################基础房型设置###############################################
  171. /**
  172. * Des:房型列表
  173. * Name: actionBaseRoomList
  174. * @return string
  175. * @author 倪宗锋
  176. */
  177. public function actionBaseRoomList()
  178. {
  179. // 如果参数为空,默认当前为上海
  180. $param = [
  181. 'sub_hotel_id' => Yii::$app->request->get('sub_hotel_id', ''),//子酒店ID
  182. 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
  183. ];
  184. $channelRoom = new ChannelBaseRoomMapping();
  185. $room_list = $channelRoom->getMasterBaseRoomList($param);//获取代理通房型数据
  186. $channelHotel = new ChannelHotelMapping();
  187. $getChannelHotelInfo = $channelHotel->getInfoBySubHotel($param);//获取代理通酒店数据
  188. if (empty($getChannelHotelInfo['hotel_id'])) {
  189. $getChannelHotelInfo['hotel_id'] = '0';
  190. }
  191. $operaBaseRoom = new OperaHotelBaseRoom();
  192. $cs_room_list = $operaBaseRoom->getHotelBaseRoomForSelect($getChannelHotelInfo['hotel_id'], $param['channel_id']);//獲取cs房型列表
  193. $showParam = [
  194. 'dataProvider' => $room_list,
  195. 'cs_room_list' => $cs_room_list,
  196. 'channel_id' => $param['channel_id'],
  197. 'sub_hotel_id' => $param['sub_hotel_id']
  198. ];
  199. return $this->render('base_room_list', $showParam);
  200. }
  201. /**
  202. * Des:匹配房型
  203. * Name: actionSetRoomMapping
  204. * @author 倪宗锋
  205. */
  206. public function actionSetRoomMapping()
  207. {
  208. // 如果参数为空,默认当前为上海
  209. $param = [
  210. 'master_base_room_id' => Yii::$app->request->post('master_base_room_id', ''),//母房型ID
  211. 'cs_room_id' => Yii::$app->request->post('cs_room_id', ''),//cs房型ID
  212. 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
  213. ];
  214. #1、获取物理房型的数据 不存在则自动生成并更新
  215. $getRoomInfo = $this->service()->getBaseRoom($param);
  216. if ($getRoomInfo['flag'] == false) {
  217. return json_encode($getRoomInfo);
  218. }
  219. $roomInfo = $getRoomInfo['data'];//物理房型数据
  220. #2、获取cs房型数据,如果已经和其他房型匹配,则程序终止
  221. $getCSRoomInfo = $this->service()->getCSRoomInfo($param['cs_room_id'], $param['channel_id']);
  222. if ($getCSRoomInfo['flag'] == false) {
  223. return json_encode($getCSRoomInfo);
  224. }
  225. $CSRoomInfo = $getCSRoomInfo['data'];
  226. #3、判断cs房型的酒店是否和当前母房型酒店绑定,未绑定则程序终止
  227. if ($CSRoomInfo['sub_hotel_id'] != $roomInfo['sub_hotel_id']) {
  228. return json_encode(Util::returnArrEr('酒店绑定不一致!'));
  229. }
  230. #4、更新房型数据进行绑定操作
  231. $ctripSwitch = new CtripSwitch();
  232. $channel_arr = $ctripSwitch->ctripConf['supplier_list'];
  233. $channelBaseRoom = new ChannelBaseRoomMapping();
  234. $data = [
  235. 'base_room_id' => $param['cs_room_id'],
  236. ];
  237. $flag = $channelBaseRoom->editInfo($data, $param['master_base_room_id'],$roomInfo['sub_hotel_id'], $channel_arr);
  238. if ($flag == false) {
  239. return json_encode(Util::returnArrEr('绑定操作失败!'));
  240. }
  241. return json_encode(Util::returnArrSu('绑定成功!'));
  242. }
  243. /**
  244. * Des:更新房型數據
  245. * Name: actionUpdateBaseRoom
  246. * @return string
  247. * @author 倪宗锋
  248. */
  249. public function actionUpdateBaseRoom()
  250. {
  251. $param = [
  252. 'sub_hotel_id' => Yii::$app->request->post('sub_hotel_id', ''),//子酒店ID
  253. ];
  254. $result = $this->service()->updateBaseRoom($param['sub_hotel_id']);
  255. return json_encode($result);
  256. }
  257. /**
  258. * Des:删除基础房型关联关系
  259. * Name: actionDelRoomMapping
  260. * @author 倪宗锋
  261. */
  262. public function actionDelBaseRoomMapping()
  263. {
  264. // 如果参数为空,默认当前为上海
  265. $param = [
  266. 'base_room_id' => Yii::$app->request->post('cs_room_id', ''),//cs房型ID
  267. ];
  268. $result = $this->service()->delBaseRoomMapping($param);
  269. return json_encode($result);
  270. }
  271. ####################售卖房型操作#################################
  272. /***
  273. * Des:獲取售賣房型ID
  274. * Name: actionSaleRoomList
  275. * @author 倪宗锋
  276. */
  277. public function actionSaleRoomList()
  278. {
  279. $param = [
  280. 'cs_room_id' => Yii::$app->request->get('cs_room_id', ''),//cs基礎房型ID
  281. 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
  282. ];
  283. #1、獲取房型關聯關係
  284. $operaHotelRoom = new OperaHotelBaseRoom();
  285. $roomInfo = $operaHotelRoom->getRoomInfo($param['cs_room_id'], $param['channel_id']);
  286. #$return 返回值
  287. $return['channel_id'] = $param['channel_id'];
  288. $return['error'] = Util::returnArrSu();
  289. #判断
  290. if (empty($roomInfo['MAIN_ID'])) {
  291. $return['error'] = Util::returnArrEr('cs房型不存在!');
  292. } else if (empty($roomInfo['sub_base_room_id'])) {
  293. $return['error'] = Util::returnArrEr('该cs房型未关联子物理房型!');
  294. } else if (empty($roomInfo['sub_hotel_id'])) {
  295. $return['error'] = Util::returnArrEr('当前房型的酒店未关联母酒店!');
  296. }
  297. if ($return['error']['flag']) {
  298. #2、獲取cs房型列表
  299. $saleRoom = new OperaHotelRoom();
  300. $saleRoomList = $saleRoom->getSaleRoomList($param['cs_room_id'], $param['channel_id']);
  301. $return['saleRoomList'] = $saleRoom->getSaleRoomListForShow($param['cs_room_id'], $param['channel_id']);//设置获取数据模型
  302. #3、獲取代理通售賣房型列表
  303. $return['switchRoomList'] = $this->service()->getSwitchRoomList($roomInfo['sub_hotel_id'], $roomInfo['sub_base_room_id'], $saleRoomList);
  304. }
  305. #4、展示頁面
  306. return $this->render('sale_room_list', $return);
  307. }
  308. /**
  309. * Des:设置售卖房型关联
  310. * Name: actionSetSaleRoomMapping
  311. * @return string
  312. * @author 倪宗锋
  313. */
  314. public function actionSetSaleRoomMapping()
  315. {
  316. $params = [
  317. 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
  318. 'sale_room_id' => Yii::$app->request->post('sale_room_id', ''),//代理通售卖房型ID
  319. 'sale_room_name' => Yii::$app->request->post('sale_room_name', ''),//代理通售卖房型名称
  320. 'channel_id' => Yii::$app->request->get('channel_id', '669'),//渠道ID
  321. ];
  322. $params['sale_room_name'] = str_replace($params['sale_room_id'], '', $params['sale_room_name']);
  323. $result = $this->service()->setSaleRoomMapping($params);
  324. return json_encode($result);
  325. }
  326. /**
  327. * Des:取消售卖房型关联
  328. * Name: actionSetSaleRoomMapping
  329. * @return string
  330. * @author 倪宗锋
  331. */
  332. public function actionDelSaleRoomMapping()
  333. {
  334. $params = [
  335. 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
  336. ];
  337. $result = $this->service()->delSaleRoomMapping($params);
  338. return json_encode($result);
  339. }
  340. /**
  341. * Des:添加售卖房型
  342. * Name: actionAddSaleRoom
  343. * @return string
  344. * @author 倪宗锋
  345. */
  346. public function actionAddSaleRoom()
  347. {
  348. $params = [
  349. 'cs_sale_room_id' => Yii::$app->request->post('cs_sale_room_id', ''),//cs售卖房型ID
  350. ];
  351. $result = $this->service()->addSaleRoomMapping($params);
  352. return json_encode($result);
  353. }
  354. }