| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- namespace app\api\model\massager;
- use app\admin\model\Service;
- use app\api\model\BaseModel;
- use app\api\model\order\Order;
- use app\api\model\Store;
- use redis\RedisClient;
- class Massager extends BaseModel
- {
- // 表名
- protected $name = 'massager';
- static function fmtMassager(&$massager)
- {
- if (null === $massager)
- return null;
- unset($massager['password']);
- return $massager;
- }
- public function fetchAppMassager(
- $city_code,
- array $lng_lat,
- $search_text = null,
- $distance = 1000,
- $service_status = null,
- $gender = [\E_GENDER_TYPE::Man, \E_GENDER_TYPE::Woman],
- $free_travel = false,
- $hot = false,
- $service_id = null,
- $sort = 'def',
- $page = 1,
- $size = 10,
- $user_id = null,
- $level = -1)
- {
- $where = [
- // 'status' => \E_BASE_STATUS::Normal,
- 'type' => \E_SERVICE_TYPE::App,
- ];
- if (!is_null($service_status)) {
- $where["online"] = $service_status;
- }
- $subQuery = $this->field("*,round(st_distance_sphere (point($lng_lat[0],$lng_lat[1]), point ( `lng`, `lat` ))) distance")
- ->where($where)
- ->where("status", "in", [\E_MASSAGER_STATUS::Hidden, \E_BASE_STATUS::Normal])
- ->where("gender", "in", $gender);
- if ($search_text)
- $subQuery->where("name", "like", "%$search_text%");
- $query = $this->table($subQuery->buildSql() . ' distance')
- ->where($where)
- ->where("gender", "in", $gender)
- ->where("distance", "<=", $distance * 1000);
- if ($service_id > 0) {
- $service = (new Service())->get($service_id);
- if ($service) {
- $query->where("level", $service["level"]);
- }
- }
- if ($level !== null && (int)$level === 0) {
- $query->where("level", $level);
- }
- if ($search_text)
- $query->where("name", "like", "%$search_text%");
- if ($hot)
- $query->where('hot', 1);
- if ($free_travel)
- $query->where('free_travel', 1);
- $query->order("online", "DESC");
- switch ($sort) {
- case "weight": // 默认排序
- $query->order("weight", "DESC");
- break;
- case "distance": // 距离排序
- $query->order('distance', 'ASC');
- break;
- case "praise_rate": // 评价最高
- $query->order('praise_rate', 'DESC');
- break;
- case "order_count": //接单量优先
- $query->order('order_count', 'DESC');
- break;
- case "collect_count": // 人气最高
- $query->order('collect_count', 'DESC');
- break;
- case "new_people": // 新人推荐
- $query->order('createtime', 'DESC');
- break;
- }
- return $query
- ->with(['store', 'nearly_two_days_orders'])
- ->page($page)
- ->paginate($size);
- }
- public function fetchStoreMassager($store_id, $service_id = null, $search_text = null, $hot = false, $gender = [\E_GENDER_TYPE::Man, \E_GENDER_TYPE::Woman], $page = 1, $size = 10)
- {
- $where = [
- 'status' => \E_BASE_STATUS::Normal,
- // 'type' => \E_SERVICE_TYPE::Store,
- 'store_id' => $store_id,
- // "online" => 1,
- ];
- $query = $this->where($where)
- ->where("gender", "in", $gender);
- // if ($service_id > 0)
- // $query->where("FIND_IN_SET($service_id, service_ids)");
- // if ($search_text)
- // $query->where("name", "like", "%$search_text%");
- // if ($hot)
- // $query->where('hot', 1);
- return $query
- ->with(['store', 'nearly_two_days_orders'])
- ->page($page)
- ->paginate($size);
- }
- public function fetchHiddenAndNormal($id, $with = ["store"])
- {
- return $this->where([
- 'ma_massager.id' => $id,
- ])->where("ma_massager.status", "in", [\E_MASSAGER_STATUS::Hidden, \E_MASSAGER_STATUS::Normal])
- ->with($with)
- ->find();
- }
- public function getMassager($id, $with = ["store"])
- {
- return $this->where([
- 'id' => $id,
- "status" => \E_MASSAGER_STATUS::Normal
- ])->with($with)
- ->find();
- }
- public function store()
- {
- return $this->hasOne(Store::class, 'id', 'store_id');
- }
- public function findByMobile($mobile)
- {
- return $this->where("mobile", $mobile)
- ->find();
- }
- public function login($account, $password)
- {
- $m = $this->where([
- "mobile" => $account,
- "password" => md5($password),
- ])->find();
- if (!$m)
- return null;
- return self::fmtMassager($m);
- }
- public function findByUnionId($unionId)
- {
- return $this->where("union_id", $unionId)->find();
- }
- public function nearlyTwoDaysOrders()
- {
- return $this->hasMany(Order::class, 'massager_id', 'id')
- ->where('service_end_date', '>=', date('Y-m-d H:i:s', time()))
- ->where('status', 'in', [
- \E_ORDER_STATUS::Purchase,
- \E_ORDER_STATUS::Proceed,
- ]);
- }
- }
|