選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

205 行
6.9 KiB

  1. <?php
  2. /**
  3. * 渠道酒店表 用于和本地酒店进行关联的原始数据
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm ChannelHotel.php
  13. * Create By 2017/4/13 10:29 $
  14. */
  15. namespace backend\modules\hotel\models;
  16. use backend\modules\api\models\BaseArea;
  17. use yii\data\ActiveDataProvider;
  18. use yii\db\ActiveRecord;
  19. use yii\db\Expression;
  20. class ChannelHotel extends ActiveRecord
  21. {
  22. public $hotelId1;
  23. public $name1;
  24. public static function tableName()
  25. {
  26. return 'channel_hotel';
  27. }
  28. public function rules()
  29. {
  30. return [
  31. [['HotelID'], 'string', 'max' => 20],
  32. [['HotelName'], 'string', 'max' => 150],
  33. [['CountryName', 'CityName'], 'string', 'max' => 100],
  34. [['Address', 'Telephone'], 'string', 'max' => 255],
  35. [['ChannelID'], 'integer'],
  36. [['name1', 'hotelId1'], 'safe']
  37. ];
  38. }
  39. /**
  40. * Des:请不要随意添加修改次表 以免造成数据更新失败的问题
  41. * Name: attributeLabels
  42. * @return array
  43. * @author 倪宗锋
  44. */
  45. public function attributeLabels()
  46. {
  47. return [
  48. 'HotelID' => 'HotelID',
  49. 'HotelName' => 'HotelName',
  50. 'Telephone' => 'Telephone',
  51. 'CountryName' => 'CountryName',
  52. 'CityName' => 'CityName',
  53. 'Address' => 'Address',
  54. 'ChannelID' => 'ChannelID',
  55. ];
  56. }
  57. public function getOperaHotel()
  58. {
  59. return $this->hasOne(OperaHotel::className(), ['HOTEL_ID' => 'HotelId']);
  60. }
  61. public function getBaseArea()
  62. {
  63. return $this->hasOne(BaseArea::className(), ['ID' => 'AREA_ID']);
  64. }
  65. /**
  66. * Des:更新酒店数据-携程酒店
  67. * Name: upDateCtrip
  68. * @param $prodArr
  69. * @return bool
  70. * @throws \yii\db\Exception
  71. * @author 倪宗锋
  72. */
  73. public function upDateCtrip($prodArr)
  74. {
  75. /**清除当前渠道的所有酒店数据*/
  76. \Yii::$app->db->createCommand()->delete(static::tableName(), ['=', 'ChannelID', \Yii::$app->params['ctrip']['relation_supplier_id']])->execute();
  77. //插入数据
  78. $prodValues = [];
  79. $prodKeys = array_keys($this->attributes);
  80. foreach ($prodArr as $key => $val) {
  81. $prodVal = [];
  82. $prodVal[] = $val['Hotel'];
  83. $prodVal[] = $val['HotelName'];
  84. $prodVal[] = $val['CountryName'];
  85. $prodVal[] = $val['CityName'];
  86. $prodVal[] = $val['Address'];
  87. $prodVal[] = is_array($val['Telephone']) ? json_encode($val['Telephone']) : $val['Telephone'];
  88. $prodVal[] = \Yii::$app->params['ctrip']['relation_supplier_id'];//1标识携程
  89. $prodValues[] = $prodVal;
  90. }
  91. $count = \Yii::$app->db->createCommand()->batchInsert(static::tableName(), $prodKeys, $prodValues)->execute();
  92. if ($count == 0) {
  93. return false;
  94. }
  95. return true;
  96. }
  97. /**
  98. * Des:获取所有记录
  99. * Name: getListForSet
  100. * @return array|\yii\db\ActiveRecord[]
  101. * @author 倪宗锋
  102. */
  103. public function getListForSet()
  104. {
  105. $sql = "
  106. SELECT a.*,ifnull(c.HOTEL_NAME,'') AS 'name1',b.HotelId AS 'hotelId1',if(b.HotelId IS NULL, 1, 0) AS maped
  107. FROM channel_hotel a
  108. LEFT JOIN channel_hotel_relation b ON a.HotelID = b.ChannelHotelId AND b.ChannelId=".\Yii::$app->params['ctrip']['relation_supplier_id']."
  109. LEFT JOIN opera_hotel c ON b.HotelId = c.HOTEL_ID
  110. WHERE a.ChannelID =".\Yii::$app->params['ctrip']['relation_supplier_id']."
  111. ORDER BY maped , CONVERT(a.HotelName USING GBK) ASC
  112. ";
  113. $db = \Yii::$app->db;
  114. $result = $db->createCommand($sql)->queryAll();
  115. return $result;
  116. }
  117. /**
  118. * Des:获取酒店信息 根据 渠道酒店ID
  119. * Name: getHotelInfoChannelHotelId
  120. * @param $hotelId
  121. * @return array
  122. * @author 倪宗锋
  123. */
  124. public function getHotelInfoChannelHotelId($hotelId)
  125. {
  126. $sql = "SELECT a.HotelID,a.HotelName,c.HOTEL_ID,c.HOTEL_NAME
  127. from channel_hotel a
  128. LEFT JOIN channel_hotel_relation b on a.HotelID = b.ChannelHotelId
  129. LEFT JOIN opera_hotel c on b.HotelId = c.HOTEL_ID
  130. WHERE a.HotelID = '{$hotelId}'
  131. ";
  132. $db = \Yii::$app->db;
  133. $result = $db->createCommand($sql)->queryOne();
  134. return $result;
  135. }
  136. public function search($params, $user)
  137. {
  138. $query = ChannelHotel::find();
  139. $query->from(ChannelHotel::tableName() . ' as a');
  140. $this->load($params);
  141. $query->addSelect([
  142. "a.*",
  143. "ifnull(c.HOTEL_NAME,'') as 'name1'",
  144. "b.HotelId as hotelId1",
  145. "if(b.HotelId is null, 0, 1) as mapped"
  146. ]);
  147. $query->leftJoin(HotelRelation::tableName() . ' as b',
  148. [
  149. 'a.HotelId' => new Expression('b.ChannelHotelId'),
  150. 'b.ChannelId' => \Yii::$app->params['ctrip']['relation_supplier_id']
  151. ]);
  152. $query->leftJoin(OperaHotel::tableName() . ' as c', ['b.HotelId' => new Expression('c.HOTEL_ID')]);
  153. $query->andFilterWhere([
  154. 'a.ChannelId' => \Yii::$app->params['ctrip']['relation_supplier_id'],
  155. 'a.HotelId' => $this->HotelID,
  156. 'if(b.HotelId is null, 0, 1)' => $this->hotelId1 === '' ? null : $this->hotelId1,
  157. 'c.principal' => $user //只显示运营负责人为自己的酒店
  158. ]);
  159. $query->andFilterWhere([
  160. 'and',
  161. ['like', 'HotelName', $this->HotelName],
  162. ['like', 'CityName', $this->CityName],
  163. ['like', 'Address', $this->Address],
  164. ['like', 'Telephone', $this->Telephone],
  165. ['like', 'HOTEL_NAME', $this->name1],
  166. ]);
  167. $query->orderBy('mapped DESC, CONVERT(a.HotelName USING GBK) ASC');
  168. $dataProvider = new ActiveDataProvider([
  169. // 'totalCount' => $count,
  170. 'query' => $query,
  171. 'sort' => false
  172. // 'pagination' => false
  173. ]);
  174. return $dataProvider;
  175. }
  176. public function getParamsForCtrip($params)
  177. {
  178. $sql = "SELECT a.ChannelID,a.RoomId,b.ID,b.HOTEL_ID,b.ROOM_NAME
  179. from channel_hotel a,opera_hotel b
  180. WHERE a.ChannelID = ".\Yii::$app->params['ctrip']['relation_supplier_id']." and a.HotelId = {$params['channelRoomId']} and b.ID={$params['HotelId']}";
  181. $db = \Yii::$app->db;
  182. $result = $db->createCommand($sql)->queryOne();
  183. return $result;
  184. }
  185. }