Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

635 rindas
24 KiB

  1. <?php
  2. namespace backend\modules\hotel\models;
  3. use backend\modules\api\models\BaseArea;
  4. use backend\modules\api\models\BaseResource;
  5. use common\models\BaseUserAuth;
  6. use common\models\BaseSupplierSale;
  7. use Yii;
  8. use common\models\BaseSupplierPurchase;
  9. use yii\data\ActiveDataProvider;
  10. use yii\db\Expression;
  11. use common\models\BaseAreaView;
  12. use backend\modules\api\models\DictType;
  13. use yii\base;
  14. use yii\db\ActiveRecord;
  15. /**
  16. * This is the model class for table "opera_hotel".
  17. *
  18. * @property integer $HOTEL_ID
  19. * @property integer $CREATE_USER_ID
  20. * @property string $CREATE_TIME
  21. * @property integer $UPDATE_USER_ID
  22. * @property string $UPDATE_TIME
  23. * @property integer $CANCEL_FLAG
  24. * @property string $HOTEL_NAME
  25. * @property integer $STAR_LEVEL
  26. * @property integer $AREA_ID
  27. * @property string $HOTEL_ADDRESS
  28. * @property integer $SUPPLIER_ID
  29. * @property integer $HOTEL_STATUS
  30. * @property string $ROOM_TYPE_ALL
  31. * @property string $ROOM_TYPE_SALE
  32. * @property string $EARLIEST_CHECKIN_TIME
  33. * @property integer $CONFIRM_FROM
  34. * @property string $PURCHASE_NAME
  35. * @property string $PRINCIPAL
  36. * @property string $BUSINESS_AREA
  37. * @property string $DRIECT_CONNNECT_CHANNEL
  38. * @property string $RESERVATION_NOTES
  39. * @property string $INTRODUCTION
  40. * @property string $PERIPHERAL_TRAFFIC
  41. * @property integer $IS_PROMOTION
  42. * @property string $HOTEL_LABEL
  43. * @property string $SALE_LABEL
  44. * @property string $RECOMMEND_LEVEL
  45. * @property string $HOTEL_IMAGE
  46. */
  47. class OperaHotel extends \yii\db\ActiveRecord
  48. {
  49. public $province = 791;
  50. public $city;
  51. public $country;
  52. public $star_name;
  53. public $base_room = array();
  54. public $hotel_gift = array();
  55. // 星级
  56. const START_LEVEL = 30;
  57. // 酒店品牌
  58. const HOTEL_BRAND = 712;
  59. // 酒店类型:舒适、豪华等
  60. const HOTEL_TYPE = 711;
  61. // 酒店标签:WiFi、泳池等
  62. const HOTEL_LABEL = 709;
  63. // 售卖标签:促销、热卖等
  64. const SALE_LABEL = 710;
  65. // 在职运营负责人
  66. const EXIST_PRINCIPAL = array('35' => '杨晓婷', '276' => '潘历俊', "768" => "徐志浩", "879" => "罗萍");
  67. // 所有运营负责人
  68. const ALL_PRINCIPAL = array('35' => '杨晓婷', '274' => '王晓云', '276' => '潘历俊', '283' => '陈娟', '284' => '徐安', '300' => '李少斌', '301' => '路逢源', '669' => '党晴晴',
  69. '697' => '罗萍', '554' => '马志涛', '586' => '王楠', '728' => '尚璇璇', '746' => '王龙', '751' => '朱佳伟', '752' => '王思邈', '753' => '于洋', '768' => '徐志浩', '769' => '肖强',
  70. '771' => '陈雨婷', '773' => '孙浩', '777' => '程珊珊', '797' => '李华', "879" => "罗萍",);
  71. /**
  72. * @inheritdoc
  73. */
  74. public static function tableName()
  75. {
  76. return 'opera_hotel';
  77. }
  78. /**
  79. * @inheritdoc
  80. */
  81. public function rules()
  82. {
  83. return [
  84. [['CREATE_USER_ID', 'UPDATE_USER_ID', 'CANCEL_FLAG', 'STAR_LEVEL', 'AREA_ID', 'SUPPLIER_ID', 'HOTEL_STATUS', 'CONFIRM_FROM', 'PURCHASE_NAME', 'PRINCIPAL', 'IS_PROMOTION', 'RECOMMEND_LEVEL', 'IS_SELL'], 'integer'],
  85. [['UPDATE_TIME'], 'safe'],
  86. [['HOTEL_NAME', 'HOTEL_ADDRESS'], 'required'],
  87. [['CREATE_TIME'], 'string', 'max' => 20],
  88. [['LONGITUDE', 'LATITUDE'], 'number'],
  89. [['LONGITUDE', 'LATITUDE'], 'number'],
  90. [['RESERVATION_NOTES', 'INTRODUCTION', 'PERIPHERAL_TRAFFIC', 'BUSINESS_AREA', 'HOTEL_LABEL', 'SALE_LABEL', 'BRAND', 'HOTEL_TYPE'], 'string'],
  91. [['HOTEL_NAME', 'HOTEL_ADDRESS', 'ROOM_TYPE_ALL', 'ROOM_TYPE_SALE', 'HOTEL_IMAGE'], 'string', 'max' => 1000],
  92. [['EARLIEST_CHECKIN_TIME'], 'string', 'max' => 8],
  93. [['DRIECT_CONNNECT_CHANNEL'], 'string', 'max' => 1000],
  94. [['HOTEL_NAME'], 'unique', 'targetAttribute' => ['HOTEL_NAME', 'CANCEL_FLAG'], 'message' => '该酒店已经存在!'],
  95. [['HOTEL_STATUS'], 'required', 'on' => 'putawayHotel', 'message' => '酒店状态不能为空'],
  96. [['EARLIEST_CHECKIN_TIME'], 'required', 'on' => 'putawayHotel', 'message' => '最早入住时间不能为空'],
  97. [['ROOM_TYPE_SALE'], 'required', 'on' => 'putawayHotel', 'message' => '基础房型不能为空'],
  98. [['SUPPLIER_ID'], 'required', 'on' => 'putawayHotel', 'message' => '供应商不能为空'],
  99. [['PURCHASE_NAME'], 'required', 'on' => 'putawayHotel', 'message' => '采购人不能为空'],
  100. [['PRINCIPAL'], 'required', 'on' => 'putawayHotel', 'message' => '运营负责人不能为空'],
  101. [['CONFIRM_FROM'], 'required', 'on' => 'putawayHotel', 'message' => '发单主体不能为空'],
  102. [['LONGITUDE'], 'required', 'on' => 'addHotel', 'message' => '经度不能为空'],
  103. [['LATITUDE'], 'required', 'on' => 'addHotel', 'message' => '纬度不能为空'],
  104. [['DRIECT_CONNNECT_CHANNEL'], 'string', 'max' => 500],
  105. [['LONGITUDE'], 'match', 'pattern' => '/^[-\+]?((1[0-7]\d{1}|0?\d{1,2})\.\d{1,6}|180\.0{1,6})$/', 'message' => '请输入正确的经度范围(-180,180)1~6位小数 如121.33414', 'skipOnEmpty' => true],
  106. [['LATITUDE'], 'match', 'pattern' => '/^[-\+]?([0-8]?\d{1}\.\d{1,6}|90\.0{1,6})$/', 'message' => '请输入正确的纬度范围(-90,90)1~6位小数 如31.192376', 'skipOnEmpty' => true],
  107. ];
  108. }
  109. /**
  110. * @inheritdoc
  111. */
  112. public function attributeLabels()
  113. {
  114. return [
  115. 'HOTEL_ID' => '酒店ID',
  116. 'CREATE_USER_ID' => '记录创建用户ID',
  117. 'CREATE_TIME' => '记录创建时间',
  118. 'UPDATE_USER_ID' => '记录最后更新用户ID',
  119. 'UPDATE_TIME' => '记录最后更新时间',
  120. 'CANCEL_FLAG' => '记录有效性标记,0:记录有效;1:记录已删除',
  121. 'HOTEL_NAME' => '酒店名称',
  122. 'STAR_LEVEL' => '星级',
  123. 'AREA_ID' => '酒店所属区域,对应base_area.id',
  124. 'HOTEL_ADDRESS' => '酒店地址',
  125. 'SUPPLIER_ID' => '供应商',
  126. 'HOTEL_STATUS' => '酒店状态',
  127. 'ROOM_TYPE_ALL' => '基础房型',
  128. 'ROOM_TYPE_SALE' => '可售基础房型',
  129. 'EARLIEST_CHECKIN_TIME' => '最早入住时间',
  130. 'CONFIRM_FROM' => '发单主体',
  131. 'PURCHASE_NAME' => '采购人',
  132. 'PRINCIPAL' => '运营负责人',
  133. 'DRIECT_CONNNECT_CHANNEL' => '直连渠道',
  134. 'BUSINESS_AREA' => '商圈信息',
  135. 'RESERVATION_NOTES' => '酒店预订须知',
  136. 'INTRODUCTION' => '酒店介绍',
  137. 'PERIPHERAL_TRAFFIC' => '周边交通',
  138. 'IS_PROMOTION' => '是否促销',
  139. 'HOTEL_LABEL' => '酒店标签',
  140. 'SALE_LABEL' => '售卖标签',
  141. 'RECOMMEND_LEVEL' => '推荐等级',
  142. 'HOTEL_IMAGE' => '酒店图片',
  143. 'LONGITUDE' => '经度',
  144. 'LATITUDE' => '纬度',
  145. 'BRAND' => '酒店品牌',
  146. 'HOTEL_TYPE' => '酒店类型',
  147. 'base_room' => '基础房型信息',
  148. 'hotel_gift' => '礼盒信息',
  149. 'IS_SELL' => '是否上架',
  150. ];
  151. }
  152. /**
  153. * @return \yii\db\ActiveQuery 酒店
  154. */
  155. public function getBaseUser()
  156. {
  157. return $this->hasOne(User::className(), ['ID' => 'PRINCIPAL']);
  158. }
  159. public function getPurcharse()
  160. {
  161. return $this->hasOne(User::className(), ['ID' => 'PURCHASE_NAME']);
  162. }
  163. public function getConfirmOrganization()
  164. {
  165. return $this->hasOne(BaseConfirmOrganization::className(), ['ID' => 'CONFIRM_FROM']);
  166. }
  167. /**
  168. * User:Steven
  169. * Desc:酒店价格报警关联表 on条件
  170. * @return \yii\db\ActiveQuery
  171. */
  172. public function getHotelRelation()
  173. {
  174. return $this->hasOne(HotelRelation::className(), ['HotelId' => 'HOTEL_ID'])->andOnCondition(['ChannelId' => new Expression(Yii::$app->params['ctrip']['relation_supplier_id'])]);
  175. }
  176. /**
  177. * 酒店关联地区
  178. */
  179. public function getBaseAreaView()
  180. {
  181. return $this->hasOne(BaseAreaView::className(), ['AREA_ID' => 'AREA_ID']);
  182. }
  183. public function getBaseArea()
  184. {
  185. return $this->hasOne(BaseArea::className(), ['ID' => 'AREA_ID']);
  186. }
  187. /**
  188. * 酒店关联星级
  189. */
  190. public function getDictType()
  191. {
  192. return $this->hasOne(DictType::className(), ['ID' => 'STAR_LEVEL']);
  193. }
  194. /**
  195. * @Author wanglg
  196. * @Desc 获取酒店资源信息:品牌、售卖标签、酒店标签;
  197. * @return array|ActiveRecord[]
  198. */
  199. public static function getConfigList($parent_id)
  200. {
  201. $star_list = BaseResource::find()->select(['a.ID', 'a.RES_NAME as TYPE_NAME'])
  202. // ->leftJoin('dict_type b', 'a.RES_TYPE_ID=b.ID')
  203. ->from('base_resource a')->where(['a.IF_DISABLED' => 0, 'a.RES_TYPE_ID' => $parent_id])
  204. ->asArray()->all();
  205. return $star_list;
  206. }
  207. /**
  208. * 根据酒店id获取酒店信息
  209. * @param $id
  210. * @return static
  211. */
  212. public function findHotel($id)
  213. {
  214. if (($model = OperaHotel::findOne($id)) !== null) {
  215. return $model;
  216. } else {
  217. throw new NotFoundHttpException('The requested page does not exist.');
  218. }
  219. }
  220. /**
  221. * User:Steven
  222. * Desc:
  223. * @return \yii\db\ActiveQuery
  224. */
  225. public function getBaseSupplier()
  226. {
  227. return $this->hasOne(BaseSupplier::className(), ['ID' => 'SUPPLIER_ID']);
  228. }
  229. /**
  230. * User:Steven
  231. * Desc:
  232. * @return \yii\db\ActiveQuery
  233. */
  234. public function getBaseSupplierPurchase()
  235. {
  236. return $this->hasOne(BaseSupplierPurchase::className(), ['ID' => 'PURCHASE_NAME']);
  237. }
  238. /**
  239. * 运营负责人列表
  240. * @return array|ActiveRecord[]
  241. */
  242. public static function getPrincipal()
  243. {
  244. $query = OperaHotel::find()->select(['PRINCIPAL', 'TRUE_NAME'])->joinWith('baseUser b', false);
  245. $query->where(['!=', 'PRINCIPAL', '']);
  246. if(BaseUserAuth::HOTEL_PURCHASE == Yii::$app->user->identity['USER_ROLE']){
  247. $query->andFilterWhere(['PURCHASE_NAME' => Yii::$app->user->id]);
  248. }
  249. $query->groupBy(['PRINCIPAL']);
  250. $res = $query->asArray()->all();
  251. return $res;
  252. }
  253. /**
  254. * 采购负责人列表
  255. * @return array
  256. */
  257. public static function getPurchase()
  258. {
  259. $query = OperaHotel::find()->select(['PURCHASE_NAME', 'TRUE_NAME'])->joinWith('purcharse')->where(['!=', 'TRUE_NAME', '']);
  260. if(BaseUserAuth::HOTEL_PURCHASE == Yii::$app->user->identity['USER_ROLE']){
  261. $query->andFilterWhere(['PURCHASE_NAME' => Yii::$app->user->id]);
  262. }
  263. $res = $query->groupBy(['base_user.ID'])->asArray()->all();
  264. return $res;
  265. }
  266. /**
  267. * User:Steven
  268. * Desc:获取酒店列表
  269. * @return ActiveDataProvider
  270. */
  271. public function getHotel()
  272. {
  273. $res = $this->getPrincipal();
  274. $query = OperaHotel::find()
  275. ->joinWith('baseSupplier')
  276. ->joinWith('baseUser a')
  277. ->joinWith('purcharse b')
  278. ->from('opera_hotel')
  279. ->where(['opera_hotel.CANCEL_FLAG' => 0, 'IS_SELL' => 1]);
  280. //-> createCommand() -> getSql();
  281. $query->andFilterWhere(['or', ['!=', 'opera_hotel.PRINCIPAL', ''], ['!=', 'opera_hotel.PURCHASE_NAME', ''], ['!=', 'opera_hotel.SUPPLIER_ID', '0']]);
  282. $dataProvider = new ActiveDataProvider([
  283. 'query' => $query,
  284. 'pagination' => [
  285. 'pageSize' => 25,
  286. ],
  287. ]);
  288. #region 功能描述数据权限
  289. //酒店采购负责人只能看到自己采购的酒店订单,其他(酒店运营人员、酒店管理人员、酒店客服人员、酒店客服管理人员)数据均可见
  290. $user_role = Yii::$app->user->identity->USER_ROLE; //获取当前用户的角色
  291. if ($user_role == BaseUserAuth::HOTEL_PURCHASE) { //酒店采购负责人
  292. $query->andFilterWhere([
  293. 'PURCHASE_NAME' => Yii::$app->user->id,
  294. ]);
  295. }
  296. #endregion
  297. if ($this->HOTEL_NAME != null) {
  298. $query->andFilterWhere(['like', 'HOTEL_NAME', $this->HOTEL_NAME]);
  299. }
  300. if ($this->HOTEL_STATUS !== null) {
  301. $query->andFilterWhere(['HOTEL_STATUS' => $this->HOTEL_STATUS]);
  302. }
  303. if ($this->PRINCIPAL !== null && $this->PRINCIPAL != -1) {
  304. $query->andFilterWhere(['PRINCIPAL' => $this->PRINCIPAL]);
  305. }
  306. return $dataProvider;
  307. }
  308. public function getHotelist($params)
  309. {
  310. $query = OperaHotel::find()
  311. ->select(['a.HOTEL_ID', 'a.hotel_name as HOTEL_NAME', 'c.type_name as star_name', 'a.hotel_address as HOTEL_ADDRESS', 'concat(b.parent_area_name, b.area_name) as city', 'a.hotel_status as HOTEL_STATUS'])
  312. ->joinWith('dictType as c')
  313. ->joinWith('baseAreaView as b')
  314. ->from('opera_hotel as a')
  315. ->where(['a.cancel_flag' => 0])->orderBy(['a.CREATE_TIME' => SORT_DESC]);
  316. // -> createCommand() ->getSql();
  317. $this->load($params);
  318. #region 功能描述数据权限
  319. //酒店运营人员只能看到自己运营的酒店订单,酒店采购负责人只能看到自己采购的酒店订单,其他(酒店管理人员、酒店客服人员、酒店客服管理人员)数据均可见
  320. $user_role = Yii::$app->user->identity->USER_ROLE; //获取当前用户的角色
  321. if ($user_role == BaseUserAuth::HOTEL_OPERATOR) { //酒店运营人员
  322. $query->andFilterWhere([
  323. 'a.PRINCIPAL' => Yii::$app->user->id,
  324. ]);
  325. } else if ($user_role == BaseUserAuth::HOTEL_PURCHASE) { //酒店采购负责人
  326. $query->andFilterWhere([
  327. 'a.PURCHASE_NAME' => Yii::$app->user->id,
  328. ]);
  329. } else if ($user_role == BaseUserAuth::HOTEL_CUSTOMER || $user_role == BaseUserAuth::HOTEL_CUS_ADMIN) { //酒店客服人员
  330. $dataProvider = new ActiveDataProvider([
  331. 'query' => $query->andFilterWhere([
  332. 'a.HOTEL_ID' => -1, //表示当前角色没有任何酒店的权限
  333. ]),
  334. 'sort' => false,
  335. 'pagination' => [
  336. 'pagesize' => 25,
  337. ],
  338. ]);
  339. return $dataProvider;
  340. }
  341. #endregion
  342. if ($this->HOTEL_NAME != null) {
  343. $query->andFilterWhere(['like', 'HOTEL_NAME', $this->HOTEL_NAME]);
  344. }
  345. if ($this->HOTEL_STATUS != null) {
  346. $query->andFilterWhere(['HOTEL_STATUS' => $this->HOTEL_STATUS]);
  347. }
  348. $dataProvider = new ActiveDataProvider([
  349. 'query' => $query,
  350. 'sort' => false,
  351. 'pagination' => [
  352. 'pagesize' => 25,
  353. ],
  354. ]);
  355. return $dataProvider;
  356. }
  357. /**
  358. * 获取默认酒店(选中第一个)
  359. */
  360. public function getFirstHotel()
  361. {
  362. $res = OperaHotel::find()
  363. ->select(['HOTEL_ID'])
  364. ->where(['CANCEL_FLAG' => 0, 'IS_SELL' => 0])
  365. ->limit(1)
  366. ->asArray()->all();
  367. return $res;
  368. }
  369. /**
  370. * 获取一个酒店的信息
  371. */
  372. public function getOneHotelInfo($hotel_id)
  373. {
  374. $info = OperaHotel::find()
  375. ->select(['a.HOTEL_ID', 'a.HOTEL_NAME', 'a.ROOM_TYPE_SALE', 'a.EARLIEST_CHECKIN_TIME', 'a.HOTEL_STATUS', 'a.SUPPLIER_ID', 'a.PURCHASE_NAME', 'a.CONFIRM_FROM', 'a.PRINCIPAL', 'a.DRIECT_CONNNECT_CHANNEL'])
  376. ->joinWith('baseSupplier')
  377. ->joinWith('baseUser')
  378. ->joinWith('baseSupplierPurchase')
  379. ->joinWith('baseSupplierPurchase.userName')->from('opera_hotel as a')
  380. ->where(['a.HOTEL_ID' => $hotel_id, 'a.CANCEL_FLAG' => 0])->one();
  381. return $info;
  382. }
  383. /**
  384. * 获取上下架酒店列表
  385. * @param $params
  386. * @return ActiveDataProvider
  387. *
  388. */
  389. public function upDownHoteList()
  390. {
  391. $query = OperaHotel::find()
  392. ->joinWith('baseSupplier')
  393. ->joinWith('purcharse')
  394. ->from('opera_hotel')
  395. ->where(['opera_hotel.cancel_flag' => 0])->orderBy(['opera_hotel.CREATE_TIME' => SORT_DESC]);
  396. // -> createCommand() ->getRawSql();
  397. #region 功能描述数据权限
  398. //酒店运营人员只能看到自己运营的酒店,酒店采购负责人只能看到自己采购的酒店,其他(酒店管理人员、酒店客服人员、酒店客服管理人员)数据均可见
  399. $user_role = Yii::$app->user->identity->USER_ROLE; //获取当前用户的角色
  400. /*if ($user_role == BaseUserAuth::HOTEL_OPERATOR) { //酒店运营人员
  401. $query->andFilterWhere([
  402. 'PRINCIPAL' => Yii::$app->user->id,
  403. ]);
  404. } else */
  405. if ($user_role == BaseUserAuth::HOTEL_PURCHASE) { //酒店采购负责人
  406. $query->andFilterWhere([
  407. 'PURCHASE_NAME' => Yii::$app->user->id,
  408. ]);
  409. }
  410. #endregion
  411. if ($this->HOTEL_NAME != null) {
  412. $query->andFilterWhere(['like', 'HOTEL_NAME', $this->HOTEL_NAME]);
  413. }
  414. if ($this->HOTEL_STATUS != null && $this->HOTEL_STATUS != -1) {
  415. $query->andFilterWhere(['HOTEL_STATUS' => $this->HOTEL_STATUS]);
  416. }
  417. if ($this->PRINCIPAL !== null && $this->PRINCIPAL != -1) {
  418. $query->andFilterWhere(['PRINCIPAL' => $this->PRINCIPAL]);
  419. }
  420. if ($this->PURCHASE_NAME !== null && $this->PURCHASE_NAME != -1) {
  421. $query->andFilterWhere(['PURCHASE_NAME' => $this->PURCHASE_NAME]);
  422. }
  423. $sql = $query->createCommand()->getRawSql();
  424. $dataProvider = new ActiveDataProvider([
  425. 'query' => $query,
  426. 'sort' => false,
  427. 'pagination' => [
  428. 'pagesize' => 25,
  429. ],
  430. ]);
  431. return $dataProvider;
  432. }
  433. public function getPushHotelInfo($hotel_id)
  434. {
  435. $res = OperaHotel::find()
  436. ->select(['a.HOTEL_ID', 'a.HOTEL_NAME', 'a.AREA_ID', 'a.HOTEL_ADDRESS', 'a.HOTEL_STATUS', 'a.STAR_LEVEL', 'a.DRIECT_CONNNECT_CHANNEL', 'IFNULL(c.SL_POSTCODE, c.POSTCODE) POSTCODE'])
  437. ->joinWith('baseAreaView as b', false)
  438. ->leftJoin('base_area as c', 'b.PARENT_AREA_ID=c.ID and c.CANCEL_FLAG=0')
  439. ->from('opera_hotel as a')
  440. ->where(['a.HOTEL_ID' => $hotel_id, 'a.CANCEL_FLAG' => 0])->asArray()->one();
  441. return $res;
  442. }
  443. /**
  444. * 添加酒店之前
  445. */
  446. public function beforeSave($insert)
  447. {
  448. //联系地址的省市
  449. if ($this->isNewRecord) {
  450. // $this->AREA_ID = $this->country ? $this->country : $this->city;
  451. $this->CREATE_TIME = date('Y-m-d H:i:s', time());
  452. $this->CREATE_USER_ID = Yii::$app->user->id;
  453. $this->PURCHASE_NAME = 0;
  454. } else {
  455. $this->UPDATE_USER_ID = Yii::$app->user->id;
  456. $this->UPDATE_TIME = date('Y-m-d H:i:s', time());
  457. }
  458. return parent::beforeSave($insert);
  459. }
  460. /**
  461. * Des:获取酒店信息
  462. * Name: getInfo
  463. * @param $hotel_id
  464. * @return array
  465. * @author 倪宗锋
  466. */
  467. public function getInfo($hotel_id)
  468. {
  469. $select = [
  470. //酒店图片
  471. 'hotel_name' => new Expression("ifnull(HOTEL_NAME,'')"),//酒店名称
  472. 'star_level' => new Expression("ifnull((select if(star_level=31,'',TYPE_NAME) from dict_type where id=star_level),'')"),//星级
  473. 'hotel_address' => new Expression("ifnull(HOTEL_ADDRESS,'')"),//酒店地址
  474. //酒店图片数量
  475. 'hotel_label' => new Expression("ifnull((select GROUP_CONCAT(res_name) from base_resource where instr((select SALE_LABEL from opera_hotel where hotel_id=a.hotel_id),RES_ID) and res_type_id=709 GROUP BY res_type_id),'')"),//酒店标签 酒店设施
  476. 'sale_label' => new Expression("ifnull((select GROUP_CONCAT(res_name) from base_resource where instr((select SALE_LABEL from opera_hotel where hotel_id=a.hotel_id),RES_ID) and res_type_id=710 GROUP BY res_type_id),'')"),//售卖标签
  477. 'reservation_notes' => new Expression("ifnull(RESERVATION_NOTES,'')"),//酒店预订须知
  478. 'introduction' => new Expression("ifnull(INTRODUCTION,'')"),//酒店介绍
  479. 'peripheral_traffic' => new Expression("ifnull(PERIPHERAL_TRAFFIC,'')"),//周边交通
  480. 'business_area' => new Expression("ifnull(BUSINESS_AREA,'')"),//商圈信息
  481. 'LONGITUDE' => new Expression("ifnull(LONGITUDE,'')"),//经度
  482. 'LATITUDE' => new Expression("ifnull(LATITUDE,'')"),//纬度
  483. 'hotel_img' => new Expression("ifnull(HOTEL_IMAGE,'')"),//酒店图片
  484. //酒店图片
  485. 'imgs' => new Expression("(SELECT group_CONCAT(IMG_URL SEPARATOR '||') from base_img WHERE IMG_TYPE = 25 and PRODUCT_ID = HOTEL_ID and cancel_flag=0)"),
  486. 'in_time' => 'EARLIEST_CHECKIN_TIME',//入住时间
  487. ];
  488. $where = ['=', 'HOTEL_ID', $hotel_id];
  489. $getInfo = self::find()->select($select)
  490. ->from(self::tableName().' a')
  491. ->where($where)
  492. ->asArray()
  493. ->one();
  494. return $getInfo;
  495. }
  496. /**
  497. * Function Description:查找酒店的area_name和area_id
  498. * Function Name: getHotelArea
  499. * @return array
  500. * @author 田玲菲
  501. */
  502. public function getHotelArea()
  503. {
  504. $conn = Yii::$app->db;
  505. $sql = "SELECT DISTINCT c.area_name, c.id FROM opera_hotel AS a LEFT JOIN base_area AS b ON a.AREA_ID = b.ID JOIN base_area AS c ON b.PARENT_ID = c.ID AND c.CANCEL_FLAG = 0 AND ( c.PARENT_ID <> 0 OR c.SL_POSTCODE IS NOT NULL ) AND( c.PARENT_ID NOT IN (SELECT d.id FROM base_area AS d WHERE d.SL_POSTCODE IS NOT NULL) ) ORDER BY CONVERT (c.AREA_NAME USING gbk) ASC";
  506. $result = $conn->createCommand($sql)->queryAll();
  507. return $result;
  508. }
  509. /**
  510. * @Author wanglg
  511. * @Desc酒店基础房型验证规则
  512. * @param $attribute
  513. */
  514. public function VBaseRoom($attribute)
  515. {
  516. if (count($this->$attribute) <= 0) {
  517. $this->addError($attribute, '基础房型信息不能为空');
  518. } else {
  519. //验证每个基础房型信息
  520. foreach ($this->$attribute as $key => $room) {
  521. if (empty($room['BASE_ROOM_NAME']) || empty($room['BED_TYPE']) || empty($room['AREA_SIZE'])) {
  522. $this->addError($attribute, '基础房型有必填写信息');
  523. }
  524. }
  525. }
  526. }
  527. /**
  528. * Des:获取官网酒店列表
  529. * Name: getWwwHotelList
  530. * @param $DistribID
  531. * @return array
  532. * @author 倪宗锋
  533. */
  534. public function getWwwHotelList($DistribID)
  535. {
  536. $baseSupplierSale = new BaseSupplierSale();
  537. $price = $baseSupplierSale->getSaleType($DistribID);
  538. $select = [
  539. 'a.hotel_id',
  540. 'a.hotel_name',
  541. 'show_img' => new Expression("CONCAT(a.HOTEL_IMAGE,'.370x326',RIGHT(a.HOTEL_IMAGE,LOCATE('.', REVERSE(a.HOTEL_IMAGE))))"),
  542. 'min_price' => new Expression("IFNULL((
  543. SELECT MIN(b.{$price}) from run_hotel_distrib b
  544. INNER JOIN run_hotel_sub_room f on b.HOTEL_ID=f.HOTEL_ID and b.BASE_ROOM_TYPE=f.BASE_ROOM_TYPE and b.ROOM_TYPE=f.ROOM_TYPE and b.RUN_DATE=f.RUN_DATE and f.IS_ONSALE = 1
  545. INNER JOIN run_hotel g on b.HOTEL_ID=g.HOTEL_ID and b.BASE_ROOM_TYPE=g.BASE_ROOM_TYPE and b.RUN_DATE=g.RUN_DATE and g.IS_ONSALE = 1
  546. WHERE b.HOTEL_ID = a.HOTEL_ID and b.{$price} not in(-1,0,1) and b.RUN_DATE >= NOW() and b.RUN_DATE < DATE_ADD(NOW(),INTERVAL 1 MONTH)
  547. and f.RUN_DATE >= NOW() and f.RUN_DATE < DATE_ADD(NOW(),INTERVAL 1 MONTH)
  548. and g.RUN_DATE >= NOW() and g.RUN_DATE < DATE_ADD(NOW(),INTERVAL 1 MONTH)
  549. and b.RUN_STATUS=326 and b.DISTRIB_ID = {$DistribID}
  550. ),0)"),
  551. ];
  552. $where = [
  553. 'and',
  554. ['=', 'a.CANCEL_FLAG', 0],
  555. ['>', 'a.RECOMMEND_LEVEL', 0],
  556. ['=', 'a.HOTEL_STATUS', 1],
  557. ['is not', 'a.HOTEL_IMAGE', null],
  558. ];
  559. $getList = self::find()->select($select)
  560. ->from(static::tableName() . ' a')
  561. ->where($where)
  562. ->having(['!=', 'min_price', 0])
  563. ->orderBy('a.RECOMMEND_LEVEL desc')
  564. ->asArray()
  565. ->all();
  566. if (empty($getList[0]['hotel_id'])) {
  567. return [];
  568. }
  569. return $getList;
  570. }
  571. }
  572. ?>