public function run() { /** * 验证用户权限,但不抛错 */ /*$this->verifyUserAuth(false); $user_id = $this->getUserAuth()->userId;*/ $user_id = intval($this->getDataItem('user_id', 0)); $page = intval($this->getDataItem('page', 1)); $limit = $this->getConfig()->limit; $offset = ($page - 1) * $limit; if ($user_id > 0) { $list = UserBase::query()->columns(['Apps\\Common\\Models\\UserBase.user_id', 'user_nickname', 'user_cover', 'expert_follow_count', 'f.to_user_id', 'a.attr_value_json'])->leftJoin('Apps\\Common\\Models\\UserFollow', "Apps\\Common\\Models\\UserBase.user_id = f.to_user_id and f.user_id = {$user_id} and f.type = 2", 'f')->leftJoin('Apps\\Common\\Models\\UserAttribute', 'a.user_id = f.to_user_id and a.attr_type = 103 and a.attr_state = 1', 'a')->where('user_expert = 1 and user_state = 1')->orderBy('f.id DESC, expert_follow_count DESC')->limit($limit, $offset)->execute()->toArray(); } else { $list = UserBase::query()->columns(['Apps\\Common\\Models\\UserBase.user_id', 'user_nickname', 'user_cover', 'expert_follow_count', 'a.attr_value_json'])->leftJoin('Apps\\Common\\Models\\UserAttribute', 'a.user_id = Apps\\Common\\Models\\UserBase.user_id and a.attr_type = 103 and a.attr_state = 1', 'a')->where('user_expert = 1 and user_state = 1')->orderBy('expert_follow_count DESC')->limit($limit, $offset)->execute()->toArray(); } foreach ($list as $k => $val) { $list[$k]['user_cover'] = PicUrl::ActivityCover($val['user_cover'], $this->getDi()); // 获取专家的扩展信息 $info = $val['attr_value_json'] ? json_decode($val['attr_value_json']) : []; $list[$k]['experience'] = $info->experience ?: '0'; // 从业经验 $list[$k]['experttitle'] = $info->experttitle ?: ''; // 擅长领域 $list[$k]['field'] = $info->field ?: []; // 专家头衔(array) $list[$k]['is_follow'] = $val['to_user_id'] ? '1' : '0'; unset($list[$k]['to_user_id'], $list[$k]['attr_value_json']); } $this->setResult($list); }
public function run() { if (!$this->verifyUserAuth()) { return false; } $id = intval($this->getDataItem('id', 0)); $user_id = intval($this->getDataItem('user_id', 0)); $content = $this->getDataItem('content', ''); if ($id == 0 || $user_id == 0) { $this->errorLog(ResultStatus::URL_PARAM_CANNOT_EMPTY, 'URL参数不全'); return false; } $contentLenth = $this->utf8_strlen($content); if ($contentLenth < 1 || $contentLenth > 100) { $this->errorLog(ResultStatus::POST_BODY_FORMAT_ERROR, '评论字符应在1~100之间.'); return false; } $ActivityComment = new ActivityComment(); $date = date('Y-m-d H:i:s'); $data = ['comment_user_id' => $user_id, 'comment_content' => $content, 'addtime' => $date, 'activity_id' => $id]; if ($ActivityComment->save($data)) { $ActivityComment->getReadConnection()->query("UPDATE activity SET comments = comments + 1 WHERE activity_id = {$id}"); $userInfo = UserBase::getOne($user_id); $this->setResult(['comment_id' => $ActivityComment->comment_id, 'user_id' => $user_id, 'comment_content' => $content, 'addtime' => $date, 'user_gender' => $userInfo['user_gender'], 'user_cover' => PicUrl::ActivityCover($userInfo['user_cover'], $this->getDi())]); } else { $this->errorLog(ResultStatus::ERROR, '评论失败.'); } }
public function searchActivity($cityId, $keyword, $limit = 5, $offset = 0) { $searchObj = $this->getSearchObj(); $searchResult = $searchObj->search($keyword, ['type=' . SearchDataType::Activity, 'tag_int=' . $cityId], $limit, $offset); $activity = $this->getSearchResult($searchResult); $activity = $activity ? $activity : []; for ($i = 0; $i < count($activity); $i++) { $activity[$i]['cover'] = PicUrl::ActivityCover($activity[$i]['cover'], $this->getDi()); } return $activity; }
public function run() { $id = intval($this->getDataItem('id', 0)); $page = intval($this->getDataItem('page', 1)); $limit = $this->getConfig()->limit; if ($id == 0) { return $this->errorLog(ResultStatus::URL_PARAM_CANNOT_EMPTY, 'URL参数不全'); } $list = ActivityComment::query()->columns(['comment_id', 'comment_content', 'addtime', 'comment_user_id user_id', 'u.user_nickname', 'u.user_gender', 'u.user_cover'])->leftJoin('\\Apps\\Common\\Models\\UserBase', 'u.user_id = \\Apps\\Common\\Models\\ActivityComment.comment_user_id', 'u')->where('activity_id = ' . $id)->orderBy('addtime DESC')->limit($limit, ($page - 1) * $limit)->execute()->toArray(); foreach ($list as $k => $val) { $list[$k]['user_cover'] = PicUrl::ActivityCover($val['user_cover'], $this->getDi()); } $this->setResult($list); }
public function run() { $city_code = $this->getDataItem('city_code', 0); $page = intval($this->getDataItem('page', 1)); $limit = $this->getConfig()->limit; $offset = ($page - 1) * $limit; $cityId = $this->getCityId($city_code); if ($cityId <= 0) { //return $this->errorLog(ResultStatus::CITY_NOT_OPEN, '城市未开通'); $cityId = 2; } $this->activity = Activity::query()->columns(['activity_id id', 'activity_type type', 'activity_title as title', 'activity_cover as cover', 'activity_state as state', 'activity_end_time - NOW() AS ts'])->where('activity_state > 0 and city_id=:city_id:')->bind(['city_id' => $cityId])->limit($limit, $offset)->execute()->toArray(); $this->activity = $this->activity ? $this->activity : []; for ($i = 0; $i < count($this->activity); $i++) { $this->activity[$i]['cover'] = PicUrl::ActivityCover($this->activity[$i]['cover'], $this->getDi()); $this->activity[$i]['state'] = $this->activity[$i]['ts'] > 0 ? $this->activity[$i]['state'] : 2; unset($this->activity[$i]['ts']); } $data = ['recommend' => $this->getRecommend($cityId), 'activity' => $this->activity]; $this->setResult($data); }
public function run() { $user_id = intval($this->getDataItem('user_id', 0)); $expert_id = intval($this->getDataItem('expert_id', 0)); // $expert_id = 289; if ($expert_id < 1) { return $this->errorLog(ResultStatus::URL_PARAM_CANNOT_EMPTY, '缺少必传参数!'); } $columns = ['user_id', 'user_nickname', 'user_cover', 'expert_follow_count', 'persional_sign']; if ($UserBase = UserBase::query()->columns($columns)->where('user_expert = 1 and user_id = ' . $expert_id)->execute()->getFirst()) { $info = $UserBase->toArray(); $info['user_cover'] = PicUrl::ActivityCover($info['user_cover'], $this->getDi()); if ($userAttribute = UserAttribute::findFirst('attr_type = 103 and attr_state = 1 and user_id = ' . $expert_id)) { $attr_value_json = $userAttribute->attr_value_json; } else { $attr_value_json = []; } $info['persional_sign'] = $info['persional_sign'] ? unserialize(base64_decode($info['persional_sign'])) : ''; $attr_value_json = $attr_value_json ? json_decode($attr_value_json) : []; $info['experience'] = $attr_value_json->experience ?: ''; // 从业经验 $info['experttitle'] = $attr_value_json->experttitle ?: ''; // 擅长领域 $info['field'] = $attr_value_json->field ?: []; // 专家头衔(array) if ($user_id > 0) { $info['is_follow'] = (new UserFollow())->is_follow($user_id, $expert_id, 2) ? '1' : '0'; } else { $info['is_follow'] = '0'; } // 回答问题数 $result = (new UserBase())->getReadConnection()->query("SELECT count(*) c FROM\r\n(SELECT count(*) FROM question_answer WHERE answer_state = 1 AND user_id = {$expert_id} GROUP BY question_id) a;"); $count = $result->fetch(); $info['question_count'] = $count['c']; } else { return $this->errorLog(ResultStatus::POST_BODY_PARAM_ERROR, '用户不存在或不是专家'); } $this->setResult($info); }
public function run() { $user_id = intval($this->getDataItem('user_id', 0)); $page = intval($this->getDataItem('page', 1)); $limit = $this->getConfig()->limit; $offset = ($page - 1) * $limit; // $user_id = 12; $where = 'user_expert = 1 and user_state = 1'; if ($user_id > 0) { // 用户关注的专家列表 $followExpert = UserFollow::query()->where("user_id = {$user_id} and type = 2")->execute()->toArray(); $expert = ''; foreach ($followExpert as $val) { $expert .= $val['to_user_id'] . ','; } if ($expert && ($expert = trim($expert, ','))) { $where = "user_expert = 1 and user_state = 1 and user_id not in({$expert})"; } } $list = UserBase::query()->columns(['user_id', 'user_nickname', 'user_cover', 'expert_follow_count'])->where($where)->orderBy('expert_follow_count DESC')->limit($limit, $offset)->execute()->toArray(); foreach ($list as $k => $val) { $list[$k]['user_cover'] = PicUrl::ActivityCover($val['user_cover'], $this->getDi()); // 获取专家的扩展信息 if ($userAttribute = UserAttribute::findFirst('attr_type = 103 and attr_state = 1 and user_id = ' . $val['user_id'])) { $attr_value_json = $userAttribute->attr_value_json; } else { $attr_value_json = []; } $info = $attr_value_json ? json_decode($attr_value_json) : []; $list[$k]['experience'] = $info->experience ?: '0'; // 从业经验 $list[$k]['experttitle'] = $info->experttitle ?: ''; // 擅长领域 $list[$k]['field'] = $info->field ?: ''; // 专家头衔(array) } $this->setResult($list); }
public function run() { $city_code = $this->getDataItem('city_code', 0); $page = intval($this->getDataItem('page', 1)); $state = $this->getDataItem('state', 1); $limit = $this->getConfig()->limit; $offset = ($page - 1) * $limit; $city = $this->getCity($city_code); if (!$city || $city['city_id'] <= 0) { $where = "activity_state = 1 and city_id = 0"; // return $this->errorLog(ResultStatus::CITY_NOT_OPEN, '城市未开通'); // $cityId = 2; } else { // $cityId = $city['city_id']; $where = "activity_state = 1 and city_id in({$city['city_id']}, 0)"; } $date = date('Y-m-d H:i:s'); if ($state == 1) { // 进行中 $where .= " and activity_start_time <= '{$date}' and activity_end_time >= '{$date}'"; } else { // 即将开始 $where .= " and activity_start_time >= '{$date}'"; } $this->activity = Activity::query()->columns(['city_id', 'activity_id id', 'activity_type type', 'activity_title as title', 'activity_cover as cover', 'activity_start_time', 'activity_end_time', 'activity_intro', 'out_link', 'views', 'comments'])->where($where)->orderBy("IF(city_id=0, activity_update_time, 1) DESC,activity_update_time DESC")->limit($limit, $offset)->execute()->toArray(); foreach ($this->activity as $k => $val) { if ($val['city_id'] == 0) { $this->activity[$k]['city_name'] = '全国'; } else { $this->activity[$k]['city_name'] = $city['city_name'] ?: ''; } $this->activity[$k]['cover'] = PicUrl::ActivityCover($this->activity[$k]['cover'], $this->getDi()); unset($this->activity[$k]['city_id']); } $this->setResult($this->activity); }
/** * 用户的关注列表(关注的专家) * @param int $user_id 用户id * @param int $offset 偏移量 * @param int $limit 页大小 * @return mixed */ public function getFollowExpertList($user_id, $offset = 0, $limit = 10) { $list = self::query()->columns(['u.user_id', 'u.user_gender', 'u.user_cover', 'u.user_nickname', 'a.attr_value_json'])->leftJoin('\\Apps\\Common\\Models\\UserBase', 'u.user_id = \\Apps\\Common\\Models\\UserFollow.to_user_id', 'u')->leftJoin('\\Apps\\Common\\Models\\UserAttribute', 'a.user_id = \\Apps\\Common\\Models\\UserFollow.to_user_id and a.attr_type = 103 and a.attr_state = 1', 'a')->where("\\Apps\\Common\\Models\\UserFollow.user_id = {$user_id} and type = 2")->limit($limit, $offset)->execute()->toArray(); // 上面这里的关联查询,如果对应的专家扩展模型没有有效的数据,则这条数据就不会出现 foreach ($list as $k => $val) { $list[$k]['user_cover'] = PicUrl::ActivityCover($val['user_cover'], $this->getDi()); $list[$k]['fans_count'] = $this->getToFollowCount($val['user_id'], 2); // 组合专家的扩展信息 $info = json_decode($val['attr_value_json']); $list[$k]['experience'] = $info->experience ?: ''; // 从业经验 $list[$k]['experttitle'] = $info->experttitle ?: ''; // 擅长领域 $list[$k]['field'] = $info->field ?: []; // 专家头衔(array) unset($list[$k]['attr_value_json']); } return $list; }
public function run() { $id = intval($this->getDataItem('id', 0)); $user_id = intval($this->getDataItem('user_id', 0)); if ($id == 0) { return $this->errorLog(ResultStatus::URL_PARAM_CANNOT_EMPTY, 'URL参数不全'); } $Activity = new Activity(); $ActivityViewsUser = new ActivityViewsUser(); $data = $Activity->query()->columns(['activity_id id', 'activity_type type', 'activity_title as title', 'activity_cover as cover', 'activity_start_time', 'activity_end_time', 'activity_intro', 'views', 'comments'])->where("activity_id = {$id}")->execute()->toArray(); $data = $data ? $data[0] : []; $data['user_views_list'] = $ActivityViewsUser->getViewsUserList($id, 0, 7); $data['cover'] = $data['cover'] ? PicUrl::ActivityCover($data['cover'], $this->getDi()) : ''; $this->setResult($data); $count = 1; $Activity->getReadConnection()->query("UPDATE activity SET views = views + {$count} WHERE activity_id = {$id}"); if ($user_id) { $ActivityViewsUser->addData($id, $user_id); } /*if(0 < $id) { $this->activity = Activity::query() ->columns(['activity_id id', 'city_id city', 'activity_type type', 'activity_title as title', 'activity_intro as intro', '0 beauty_parlors', ]) ->where('activity_id=:id:') ->bind(['id'=>$id]) ->execute()->getFirst(); if($this->activity){ $parlor = ActivityBeautyParlor::query() ->columns([ 'bp_id as id', 'bp_name as name', 'bp_cover as cover', 'bp_address as address', '0 as tags', 'bp_medal as medal']) ->leftJoin('Apps\Common\Models\BeautyParlor', 'Apps\Common\Models\ActivityBeautyParlor.beauty_parlor_id=bp.bp_id','bp') ->where('bp.bp_state > 0 and activity_id = :id:') ->bind(['id' => $id]) ->execute()->toArray(); $this->activity->beauty_parlors = $parlor; } } $this->activity = $this->activity ? $this->activity : null; if($this->activity) { //$this->activity->cover = PicUrl::ActivityCover($this->activity->cover, $this->getDi()); for($i = 0; $i < count($this->activity->beauty_parlors); $i++) { $this->activity->beauty_parlors[$i]['cover'] = PicUrl::BeautyParlorCover($this->activity->beauty_parlors[$i]['cover'], $this->getDi()); $medal = $this->activity->beauty_parlors[$i]['medal']; unset($this->activity->beauty_parlors[$i]['medal']); $this->activity->beauty_parlors[$i]['medal_refund'] = \Apps\Common\Libs\BeautyParlor::getMedalRefund($medal); $this->activity->beauty_parlors[$i]['medal_verify'] = \Apps\Common\Libs\BeautyParlor::getMedalVerify($medal); $this->activity->beauty_parlors[$i]['tags'] = \Apps\Common\Libs\BeautyParlor::getTags($this->activity->beauty_parlors[$i]['id']); } $this->activity->intro = \Apps\Common\Libs\BeautyParlor::formatServiceIntro($this->activity->intro, $this->getDi(), true); } $this->setResult($this->activity);*/ }
public function run() { //判断城市是否开通 未开通城市 banner 广告位显示全国 美容院不显示 $banners = []; //首页banner $questionlists = []; //首页推荐问答 $city_code = $this->getDataItem('city_code', 0); $userid = $this->getDataItem('user_id', 0); $is_open = SysOpenCity::findFirst(['columns' => "city_id", 'conditions' => "city_code = {$city_code} AND city_state = 1"]); $city_id = $is_open->city_id > 0 ? $is_open->city_id : 0; $alllimit = $this->getConfig()->national; //属于全国的banner条数 //获取全国banner $banners = $this->getBanner($alllimit, 0); //获取属于全国的广告 $advert = $this->getAdvert(0, null, "addtime desc", "position"); //获取城市问答 $limit_q = $this->getConfig()->question; $questionlists = $this->getQuestion(0, $limit_q, $userid, "sort DESC"); //城市未开通 if (!$city_id) { foreach ($advert as $k => $v) { $advert[$k]['advertisement_cover'] = PicUrl::ActivityCover($v['advertisement_cover'], $this->getDi()); } $lists['banner'] = $banners; $lists['question'] = $questionlists; $lists['parlors'] = null; $lists['adverts'] = empty($advert) ? null : $advert; $this->setResult($lists); } else { $citylimit = $this->getConfig()->city; //获取城市banner $citybanner = $this->getBanner($citylimit, $city_id); $banners = array_merge($banners, $citybanner); //获取城市问答 if (count($questionlists) < $limit_q) { //如果全国的问答条数不足 则查询城市问答补充 $limit_c = $limit_q - count($questionlists); $questionlist = $this->getQuestion($city_id, $limit_c, $userid, "sort DESC"); $questionlists = array_merge($questionlists, $questionlist); } /*************************************************获取城市广告**********************************/ $pos_ids = array_column($advert, 'position'); //如果没有全国的位置1的广告 则 查询是否有全国位置为1的广告 if (!in_array(1, $pos_ids)) { $temp = $this->getAdvert($city_id, "position = 1", "addtime desc"); if (count($temp)) { $advert = array_merge($advert, $temp); } } //如果没有全国的位置2的广告 则 查询是否有全国位置为2的广告 if (!in_array(2, $pos_ids)) { $temp = $this->getAdvert($city_id, "position = 2", "addtime desc"); if (count($temp)) { $advert = array_merge($advert, $temp); } } //如果没有全国的位置3的广告 则 查询是否有全国位置为3的广告 if (!in_array(3, $pos_ids)) { $temp = $this->getAdvert($city_id, "position = 3", "addtime desc"); if (count($temp)) { $advert = array_merge($advert, $temp); } } $advert = $this->multi_array_sort($advert, 'position'); foreach ($advert as $k => $v) { $advert[$k]['advertisement_cover'] = PicUrl::ActivityCover($v['advertisement_cover'], $this->getDi()); } /*************************************************美容院*****************************************/ //获取位置固定的美容院 $parlor = $this->getParlor($city_id, 3, "show_start_time DESC,id DESC", "sort"); $sortids = array_column($parlor, 'sort'); if (count($sortids) < 3) { //当固定位置的首页推荐美容院不足时,随机获取没有固定位置的推荐数据 $limit_r = 3 - count($sortids); $parlor_r = $this->getParlorRand($city_id, $limit_r); $parlor = array_merge($parlor, $parlor_r); } $parlor = $this->multi_array_sort($parlor, 'sort'); foreach ($parlor as $k => $v) { if ($v) { $parlor[$k]['cover'] = PicUrl::BeautyParlorCover($v['cover'], $this->getDi()); $parlor[$k]['medal_verify'] = \Apps\Common\Libs\BeautyParlor::getMedalVerify($v['bp_medal']); unset($parlor[$k]['bp_medal']); $tag = BeautyParlorTag::query()->columns(['i.tag_title'])->leftJoin('Apps\\Common\\Models\\BeautyParlorTagInfo', 'Apps\\Common\\Models\\BeautyParlorTag.tag_id = i.tag_id', 'i')->where('i.tag_state=1 and bp_id=:bid:')->bind(['bid' => $v['id']])->orderBy('sort desc,bp_tag_addtime asc')->execute()->toArray(); $tags = array_column($tag, 'tag_title'); $parlor[$k]['tags'] = empty($tags) ? null : $tags; } } /***************************************************返回结果集******************************************/ $lists['banner'] = empty($banners) ? null : $banners; $lists['question'] = empty($questionlists) ? null : $questionlists; $lists['parlors'] = empty($parlor) ? null : $parlor; $lists['adverts'] = empty($advert) ? null : $advert; $this->setResult($lists); } }
/** * 活动预览 * @date: 2016年1月12日 * @author: chenxiaolin */ public function activityPreviewAction() { $id = $this->request->getQuery('id'); if (empty($id)) { echo '活动不存在!'; $this->view->disable(); return; } //活动内容 $date = date('Y-m-d H:i:s'); $activity = Activity::query()->columns(['Apps\\Common\\Models\\Activity.activity_id', 'activity_title', 'activity_cover', 'activity_intro', 'out_link', 'activity_addtime', 'views', 'comments'])->where("activity_id = {$id} and activity_state in (0,1)")->execute()->getFirst(); if (!$activity) { echo '活动不存在!'; $this->view->disable(); return; } else { $activity = $activity->toArray(); } $activity['activity_cover'] = PicUrl::ActivityCover($activity['activity_cover'], $this->getDI()); //活动回复 $comment = ActivityComment::query()->columns(['comment_content', 'user.user_nickname', 'user.user_cover', 'user.user_gender'])->leftJoin('Apps\\Common\\Models\\UserBase', 'Apps\\Common\\Models\\ActivityComment.comment_user_id = user.user_id', 'user')->where("Apps\\Common\\Models\\ActivityComment.activity_id = {$id} and Apps\\Common\\Models\\ActivityComment.state = 1")->order('addtime desc')->execute()->toArray(); foreach ($comment as $k => $v) { $comment[$k]['user_cover'] = PicUrl::UserCover($comment[$k]['user_cover'], $this->getDI()); } $lastTime = ActivityComment::maximum(array("activity_id = {$id} and state = 1", 'column' => 'addtime')); //美人儿已阅处显示的头像 $covers = ActivityComment::query()->columns(['distinct comment_user_id', 'user.user_cover'])->leftJoin('Apps\\Common\\Models\\UserBase', 'Apps\\Common\\Models\\ActivityComment.comment_user_id = user.user_id', 'user')->where("Apps\\Common\\Models\\ActivityComment.activity_id = {$id} and Apps\\Common\\Models\\ActivityComment.state = 1")->order('addtime desc')->limit(7)->execute()->toArray(); foreach ($covers as $k => $v) { $covers[$k]['user_cover'] = PicUrl::UserCover($covers[$k]['user_cover'], $this->getDI()); } $this->view->setVar('activity', $activity); $this->view->setVar('comment', $comment); $this->view->setVar('lastTime', $lastTime); $this->view->setVar('covers', $covers); $this->tag->setTitle($activity->activity_title); }