Enroll.php 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: xiaofeng
  5. * Date: 2018/3/4
  6. * Time: 上午9:25
  7. * 报名
  8. */
  9. namespace common\models;
  10. class Enroll extends Common
  11. {
  12. //PC端 模板来源
  13. // public $sourceArr = [
  14. // 0 => '楼盘搜索列表-降价通知',
  15. // 1 => '楼盘搜索列表-立即咨询',
  16. // 2 => '楼盘搜索列表-帮你找房',
  17. // 3 => '新房-预约看房',
  18. // 4 => '区域新房页-降价通知',
  19. // 5 => '区域新房页-专业帮您找房',
  20. // 6 => '资讯详情-资讯订阅',
  21. // 7 => '楼盘首页-动态提醒',
  22. // 8 => '楼盘首页-降价通知',
  23. // 9 => '楼盘首页-专业帮您找房',
  24. // 10 => '楼盘首页-公共降价通知',
  25. // 11 => '城市团购详情-降价通知',
  26. // 12 => '城市团购详情-我要看房',
  27. // 13 => '团购详情页-我要参团',
  28. // 14 => '团购详情页-我要看房',
  29. // 15 => '楼盘首页-报名看房',
  30. // 16 => '楼盘首页-楼盘动态',
  31. // 17 => '楼盘首页-楼盘户型',
  32. // 18 => '楼盘首页-楼盘信息',
  33. // 19 => '楼盘首页-楼盘相册',
  34. // 20 => '列表-有新房通知我',
  35. // 21 => '新房-有新房通知我',
  36. // 22 => '首页-查看房源',
  37. // 23 => '首页-购房需求',
  38. // 24 => '首页-房价动态提醒',
  39. // 25 => '区域介绍-立即咨询',
  40. // 26 => '区域介绍-降价通知',
  41. // 27 => '奇葩说详情-立即阅',
  42. // 28 => '列表页-获取优惠'
  43. // ];
  44. //
  45. // //移动端 模板来源
  46. // public $sourceMrr = [
  47. // 0 => '楼盘首页-优惠获取',
  48. // 1 => '楼盘首页-看房定制',
  49. // 2 => '楼盘首页-立即了解',
  50. // 3 => '团购-立即报名',
  51. // 4 => '团购详情-立即报名',
  52. // 5 =>' 团购详情-报名看房',
  53. // 6 => '视频播放页-了解项目',
  54. // 7 => '资讯详情-立即订阅',
  55. // 8 => '资讯详情-报名看房',
  56. // 9 => '首页-报名看房',
  57. // 10 => '首页-看房专车',
  58. // 11 => '楼盘首页-报名看房',
  59. // 12 => '楼盘首页-降价通知',
  60. // 13 => '楼盘首页-开盘通知我',
  61. // 14 => '底部导航-看房定制',
  62. // 15 => '奇葩说详情-报名看房'
  63. // ];
  64. public $stateArr = [
  65. 1 => '失败',
  66. 2 => '成功',
  67. ];
  68. public $equipmentArr = [
  69. 1 => '移动端',
  70. 2 => 'PC',
  71. ];
  72. public function rules()
  73. {
  74. return [
  75. [['mobile', 'name', 'intention_house', 'intention_city', 'budget', 'intention_housetype', 'hid', 'source', 'equipment'], 'trim'],
  76. ['mobile', 'match', 'pattern' => '/^1[23456789]\d{9}$/', 'message' => '请输入正确的手机号码'],
  77. ['name', 'string', 'max' => 5, 'min' => 2],
  78. [['intention_house', 'intention_city', 'budget', 'intention_housetype'], 'string', 'max' => 100],
  79. ['equipment', 'in', 'range' => [1, 2], 'message' => '设备来源错误'],
  80. ['hid', 'number'],
  81. ['hid', 'default', 'value' => 0],
  82. ['send_email', 'string'],
  83. ['ip', 'default', 'value' => \Yii::$app->request->userIP],
  84. ['source', 'in', 'range' => array_flip((new \common\models\EnrollSource())->TypeColumn(2)), 'on' => 'pcadd'],
  85. ['source', 'in', 'range' => array_flip((new \common\models\EnrollSource())->TypeColumn(1)), 'on' => 'madd'],
  86. ];
  87. }
  88. public function attributeLabels()
  89. {
  90. return [
  91. 'mobile' => '手机号码',
  92. 'intention_house' => '意向楼盘',
  93. 'intention_city' => '意向区域',
  94. 'intention_housetype' => '意向户型',
  95. 'budget' => '预算',
  96. 'name' => '姓名',
  97. 'equipment' => '设备',
  98. 'source' => '来源',
  99. ];
  100. }
  101. public function Authenticator($input)
  102. {
  103. $this->load($input, '');
  104. if ($this->validate()) return $this;
  105. return $this->errors;
  106. }
  107. public function FindById($id)
  108. {
  109. return self::findOne($id);
  110. }
  111. public function FindByIds()
  112. {
  113. $query = self::find();
  114. $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_email.email']);
  115. $query->andwhere(['pfg_enroll.id' => $this->id]);
  116. $query->andwhere(['pfg_enroll.del' => $this->setDel]);
  117. $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
  118. $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
  119. $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
  120. return $query->asArray()->one();
  121. }
  122. public function getList($page)
  123. {
  124. $query = self::find();
  125. $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_house.city as house_city']);
  126. $query->andwhere(['pfg_enroll.del' => $this->setDel]);
  127. if (!empty($page['equipment'])) {
  128. $query->andWhere(['pfg_enroll.equipment' => $page['equipment']]);
  129. }
  130. if (!empty($page['hid'])) {
  131. $query->andWhere(['pfg_enroll.id' => $page['hid']]);
  132. }
  133. if (!empty($page['state'])) {
  134. $query->andWhere(['pfg_enroll.state' => $page['state']]);
  135. }
  136. if (isset($page['source_id']) && !empty($page['source_id'])) {
  137. $sou = explode('-', $page['source_id']);
  138. $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
  139. $query->andWhere(['pfg_enroll.source' => $sou[0]]);
  140. }
  141. if (isset($page['source_mobile']) && !empty($page['source_mobile'])) {
  142. $sou = explode('-', $page['source_mobile']);
  143. $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
  144. $query->andWhere(['pfg_enroll.source' => $sou[0]]);
  145. }
  146. if (!empty($page['start_time'])) {
  147. $start_time = strtotime($page['start_time'] . ' 00:00:00');
  148. if (!empty($page['end_time'])) {
  149. $end_time = strtotime($page['end_time'] . ' 23:59:59');
  150. } else {
  151. $end_time = $_SERVER['REQUEST_TIME'];
  152. }
  153. $query->andWhere(['>=', 'pfg_enroll.create_at', $start_time]);
  154. $query->andWhere(['<=', 'pfg_enroll.create_at', $end_time]);
  155. }
  156. $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
  157. $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
  158. // $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
  159. $arr = [];
  160. if (!empty($page['accurate']) && $page['accurate'] == 1) {
  161. $query->groupBy(['pfg_enroll.mobile']);
  162. }
  163. if (!empty($page['page'])) {
  164. $count = clone $query;
  165. $arr['total'] = $count->count();
  166. $query->offset = ($page['page'] - 1) * $page['limit'];
  167. $query->limit = $page['limit'];
  168. } else {
  169. $query->limit = 20;
  170. }
  171. $arr['data'] = $query->orderBy(['pfg_enroll.create_at' => SORT_DESC])->asArray()->all();
  172. return $arr;
  173. }
  174. public function Total($page)
  175. {
  176. $query = self::find();
  177. $query->where(['pfg_enroll.del' => $this->setDel]);
  178. if (!empty($page['equipment'])) {
  179. $query->andWhere(['pfg_enroll.equipment' => $page['equipment']]);
  180. }
  181. if (isset($page['source_id']) && !empty($page['source_id'])) {
  182. $sou = explode('-', $page['source_id']);
  183. $query->andWhere(['pfg_enroll.equipment' => $sou[1]]);
  184. $query->andWhere(['pfg_enroll.source' => $sou[0]]);
  185. }
  186. if (!empty($page['start_time'])) {
  187. $start_time = strtotime($page['start_time'] . ' 00:00:00');
  188. if (!empty($page['end_time'])) {
  189. $end_time = strtotime($page['end_time'] . ' 23:59:59');
  190. } else {
  191. $end_time = $_SERVER['REQUEST_TIME'];
  192. }
  193. $query->andWhere(['>=', 'pfg_enroll.create_at', $start_time]);
  194. $query->andWhere(['<=', 'pfg_enroll.create_at', $end_time]);
  195. }
  196. $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id and pfg_enroll.hid != 0');
  197. $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id and pfg_enroll.hid != 0');
  198. // $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city and pfg_enroll.hid != 0');
  199. return $query->count();
  200. }
  201. public function SendEmail($page)
  202. {
  203. $query = self::find();
  204. $query->select(['pfg_enroll.*', 'pfg_house.name as house_name', 'pfg_category_city.city_name', 'pfg_email.email']);
  205. $query->andWhere(['pfg_enroll.del' => $this->setDel]);
  206. if (!empty($page['id'])) {
  207. $query->andWhere(['IN', 'pfg_enroll.id', $page['id']]);
  208. }
  209. $query->leftJoin('pfg_house', 'pfg_enroll.hid = pfg_house.id');
  210. $query->leftJoin('pfg_category_city', 'pfg_house.city = pfg_category_city.id or pfg_enroll.b_city = pfg_category_city.id');
  211. $query->leftJoin('pfg_email', 'pfg_house.city = pfg_email.city');
  212. $query->orderBy(['pfg_enroll.create_at' => SORT_DESC]);
  213. return $query->asArray()->all();
  214. }
  215. }