123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- <?php
- namespace api\modules\v1\controllers;
- use common\library\ZM_Geohash;
- use common\models\Building;
- use common\models\MaterType;
- use common\models\UserMater;
- use yii\rest\ActiveController;
- use common\library\Apireturn;
- use yii\helpers\ArrayHelper;
- use yii\filters\auth\QueryParamAuth;
- use yii;
- class SearchController extends ActiveController
- {
- public $modelClass = 'common\models';
- const DISPLAY = 10;//显示条数
- public function behaviors()
- {
- return ArrayHelper::merge(parent::behaviors(), [
- 'authenticator' => [
- 'class' => QueryParamAuth::className(),
- 'tokenParam' => "token",//access-token修改为token
- 'optional' => [//不需要认证方法名 array
- ],
- ]
- ]);
- }
- /**
- * 搜索页面
- * @return array
- */
- public function actionPage()
- {
- $type = Yii::$app->request->post('type');
- if(in_array($type,array(Building::TYPE_SITE,Building::TYPE_HOUSE)))//工地/样板房
- {
- $list = array_merge(CompanyBuildingController::$layout_arr,CompanyBuildingController::$style_arr);
- }else{
- $list = MaterType::find()->select('id,name')->where(['status'=>MaterType::STATUS_YES])->asArray()->all();
- }
- return Apireturn::sent(1,'success',200,$list);
- }
- /**
- * 搜索结果
- */
- public function actionList()
- {
- $latitude = Yii::$app->request->post('latitude');
- $longitude = Yii::$app->request->post('longitude');
- $type = Yii::$app->request->post('type');
- $page = Yii::$app->request->POST('page', 1);//分页页数
- $display = Yii::$app->request->POST('display', self::DISPLAY);//分页页数
- $search = Yii::$app->request->post('name');
- switch ($type)
- {
- case Building::TYPE_SITE :
- $count = Building::find()->where(['posted'=>Building::POSTED_YES,'type'=>Building::TYPE_SITE])->andWhere('name like :search or address like :search or layout like :search or stage like :search or pattern like :search or style like :search ',[':search'=>'%'.$search.'%'])->count();
- $list = Building::findBySql("select *,get_Distance(latitude,longitude,:latitude,:longitude) as distance from {{%building}} WHERE posted = :posted AND type = :type AND ( name like :search or address like :search or layout like :search or stage like :search or pattern like :search or style like :search) ORDER BY distance ASC LIMIT ".($page-1) * $display.",".$display, [':latitude' => $latitude, ':longitude' => $longitude,':posted'=>Building::POSTED_YES,':type'=>Building::TYPE_SITE,':search'=>'%'.$search.'%'])->all();
- break;
- case Building::TYPE_HOUSE :
- $count = Building::find()->where(['posted'=>Building::POSTED_YES,'type'=>Building::TYPE_HOUSE])->andWhere('name like :search or address like :search or layout like :search or stage like :search or pattern like :search or style like :search ',[':search'=>'%'.$search.'%'])->count();
- $list = Building::findBySql("select *,get_Distance(latitude,longitude,:latitude,:longitude) as distance from {{%building}} WHERE posted = :posted AND type = :type AND ( name like :search or address like :search or layout like :search or stage like :search or pattern like :search or style like :search) ORDER BY distance ASC LIMIT ".($page-1) * $display.",".$display, [':latitude' => $latitude, ':longitude' => $longitude,':posted'=>Building::POSTED_YES,':type'=>Building::TYPE_HOUSE,':search'=>'%'.$search.'%'])->all();
- break;
- case 10 :
- $count = UserMater::find()->where(['{{%user_mater}}.member'=>UserMater::MEMBER_YES])->andWhere('{{%user_mater}}.company like :search OR {{%mater_type}}.name like :search ',[':search'=>'%'.$search.'%'])->joinWith('type')->count();
- $list = UserMater::findBySql("select a.id,a.company,a.backpic,a.age,a.address,b.name as type_name,get_Distance(latitude,longitude,:latitude,:longitude) as distance from {{%user_mater}} a LEFT JOIN {{%mater_type}} b ON a.type_id = b.id WHERE a.member = :member AND (a.company like :search OR b.name like :search ) ORDER BY distance ASC LIMIT ".($page-1) * $display.",".$display, [':latitude' => $latitude, ':longitude' => $longitude,':member'=>UserMater::MEMBER_YES,':search'=>'%'.$search.'%'])->asArray()->all();
- break;
- default :
- break;
- }
- $lists = array();
- if(!empty($list))
- {
- if(in_array($type,array(Building::TYPE_SITE,Building::TYPE_HOUSE)))
- {
- foreach ($list as $key => $value)
- {
- $lists[$key]['id'] = $value->id;
- $lists[$key]['name'] = $value->name;
- $lists[$key]['pic'] = $value->all ? $value->all->pic : "";
- $lists[$key]['address'] = $value->address;
- $lists[$key]['layout'] = $value->layout;
- $lists[$key]['style'] = $value->style;
- $lists[$key]['acreage'] = $value->acreage;
- $lists[$key]['type'] = $value->type;
- $lists[$key]['distance'] = $value->distance >= 0 ? sprintf("%.1f",$value->distance/1000) : "";
- }
- }else{
- $lists = $list;
- foreach ($lists as $key => $value)
- {
- $lists[$key]['distance'] = $value['distance'] >= 0 ? sprintf("%.1f",$value['distance']/1000) : "";
- }
- }
- }
- return Apireturn::sent(1,'success',200,array('count'=>$count,'list'=>$lists));
- }
- }
|