| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?php
- namespace app\api\controller;
- use app\admin\model\dynamic\Comment;
- use app\admin\model\dynamic\Dynamic;
- use app\admin\model\dynamic\Like;
- use app\admin\model\dynamic\Topic;
- use app\api\model\massager\Collect;
- use app\api\validate\BaseApiValidate;
- use app\common\controller\Api;
- use think\Request;
- /**
- * 评论
- */
- class Community extends Api
- {
- protected $noNeedLogin = ['*'];
- protected $massagerModel = null;
- public function __construct(Request $request = null)
- {
- parent::__construct($request);
- $this->massagerModel = new \app\api\model\massager\Massager();
- }
- public function fetch()
- {
- $params = (new BaseApiValidate([
- "lng" => "require|number",
- "lat" => "require|number",
- "page" => "require|number",
- "size" => "require|number",
- "hot" => "number",
- "topic_id" => "number",
- "local" => "number",
- "city_code" => "number",
- "collect" => "number",
- ]))->checkBody();
- $dynamicModel = new Dynamic();
- $where = [
- ['status', "=", \E_BASE_STATUS::Normal],
- ];
- $subQuery = $dynamicModel->field("*,round(st_distance_sphere (point({$params["lng"]},{$params["lat"]}), point ( `lng`, `lat` ))) distance");
- if (isset($params["hot"]) && $params["hot"] == 1) {
- $where[] = ["hot", "=", 1];
- }
- if (isset($params["topic_id"]) && $params["topic_id"] > 0) {
- $where[] = ["topic_id", "=", $params["topic_id"]];
- }
- if (isset($params["local"]) && $params["local"] == 1) {
- if (!isset($params["city_code"]))
- $this->error("定位错误!");
- $where[] = ["city_code", "=", $params["city_code"]];
- }
- if (isset($params["collect"]) && $params["collect"] == 1) {
- $user = $this->auth->getUser();
- $collects = (new Collect())->where("user_id", $user ? $user["id"] : -1)->select();
- $where[] = ["massager_id", "in", array_map(function ($item) {
- return $item["massager_id"];
- }, $collects)];
- }
- if (isset($params["search_text"]) && mb_strlen($params["search_text"]) > 0) {
- $where[] = ["massager.name", "like", "%{$params["search_text"]}%"];
- }
- foreach ($where as $item) {
- $subQuery->where($item[0], $item[1], $item[2]);
- }
- $query = $dynamicModel->table($subQuery->buildSql() . ' distance');
- foreach ($where as $item) {
- $query->where($item[0], $item[1], $item[2]);
- }
- $paginate = $query
- ->page($params["page"])
- ->paginate($params["size"]);
- $items = collection($paginate->items())->toArray();
- $massager_ids = array_map(function ($data) {
- return $data["massager_id"];
- }, $items);
- $massagers = $this->massagerModel->where("id", "in", $massager_ids)->select();
- $f_massager = array_reduce($massagers, function ($p, $cur) {
- $p[$cur["id"]] = $cur;
- return $p;
- }, []);
- $topicModel = new Topic();
- $likeModel = new Like();
- $commentModel = new Comment();
- foreach ($items as &$item) {
- $item["massager"] = $f_massager[$item["massager_id"]] ?? ["id" => null, "name" => null];
- $item["topic"] = $topicModel->get($item["topic_id"]);
- $item["like_count"] = $likeModel->where("dynamic_id", "=", $item["id"])->count();
- $item["comment_count"] = $commentModel->where("status", "normal")->where("dynamic_id", $item["id"])->count();
- }
- $this->success([
- $items,
- $paginate->total()
- ]);
- }
- public function getDynamic($id)
- {
- $res = (new Dynamic())
- ->where("id", $id)
- ->with(["comments", "likes", "comments.user"])
- ->find();
- $user = $this->auth->getUser();
- $res["is_can_like"] = true;
- if ($user) {
- $q = array_column($res["likes"], "user_id", "user_id");
- if (isset($q[$user["id"]]))
- $res["is_can_like"] = false;
- }
- $res ? $this->success($res) : $this->error("数据不存在!");
- }
- }
|