$this->request->param('businessType/d', 0), // 商家类型 'couponType' => $this->request->param('couponType/d', 0), // 优惠卷类型 'businessCode' => $this->request->param('businessCode/s'), // 商家code 'businessCircleId' => $this->request->param('businessCircle/d',0), // 商圈id 'dis' => $this->request->param('dis/d', -1), // 距离,单位为km 'lng' => $this->request->param('lng/f', 0), // 经度 104.752890 'lat' => $this->request->param('lat/f', 0), // 纬度 31.465040 'keyword' => $this->request->param('key/s', ''), // 关键词查询 'page' => $this->request->param('page/d', 1), 'size' => $this->request->param('size/d', 10), ]; try { $repo = CouponRepository::getInstance(); $nowDate = date('Y-m-d H:i:s'); $lngRange = []; $latRange = []; $whereMap = []; $sortOrder = ['square'=> 'asc', 'id'=>'desc']; $whereMap[] = ['status', '=', CouponMain::status_on]; $whereMap[] = ['on_shelf', '=', CouponMain::on_shelf_on]; //$whereMap[] = ['start_time', '< TIME', $nowDate]; $whereMap[] = ['end_time', '> TIME', $nowDate]; $whereMap[] = ['using_count', '>', 0]; if (!empty($params['keyword'])) { $whereMap[] = ['name|business_name', 'like', "%".$params['keyword']."%"]; } if ($params['businessType'] > 0) { $whereMap[] = ['business_type', '=', $params['businessType']]; } if ($params['couponType'] > 0) { $whereMap[] = ['type', '=', $params['couponType']]; } if (!empty($params['businessCode'])) { $whereMap[] = ['business_code', '=', $params['businessCode']]; } if (($params['businessCircleId']) > 0 ) { $whereMap[] = ['business_circle_id', '=', $params['businessCircleId']]; } if ($params['dis'] > 0) { $pointList = getEarthSquareRangePoint($params['lat'],$params['lng'], $params['dis']); $latRange[] = ['lat', 'BETWEEN', [$pointList['lat_min'], $pointList['lat_max']]]; if (abs($pointList['cur_lng'] - $pointList['lng_min']) != $pointList['dis_lng'] && $pointList['lng_min'] < 0) { $lngRange[] = ['lng', 'BETWEEN' , [-180, $pointList['lng_min']]]; $lngRange[] = ['lng', 'BETWEEN' , [($pointList['cur_lng'] - $pointList['dis_lng']), 180]]; } else { $lngRange[] = ['lng', 'BETWEEN' , [$pointList['lng_min'], $pointList['lng_max']]]; } } $res = $repo->findCouponMainList($whereMap,[], $params['page'], $params['size'], function ($q) use($lngRange, $latRange, $params) { return $q->with(["business"=>function($q){ return $q->field("business_subtitle,code"); }])->when(!empty($lngRange) && !empty($latRange), function($query) use($lngRange, $latRange){ $query->where(function ($queryB) use($lngRange) { $queryB->whereOr($lngRange); })->where($latRange); }) ->field("*, abs( (IFNULL(lat,0) - {$params['lat']}) * (IFNULL(lng,0) - {$params['lng']}) ) as square"); }, $sortOrder); $accountRepo= AccountRepository::getInstance(); $accountId = $this->request->user['user_id'] ?? 0; $flowArray = []; if ($accountId) { $account = $accountRepo->findById($accountId, [], function ($q) { return $q->with(['business', 'parent']); }); if (!empty($account)) { $flowArray = $accountRepo->getBusinessFlowCodeArray($account->user_code); } } $time = time(); $res['list']->each(function ($item) use ($params, $flowArray, $time) { unset($item->square); $distance = (get_distance($params["lat"], $params["lng"], $item["lat"],$item["lng"])); if ($distance >= 1000) { $item->distance_text = round($distance / 1000, 2) . "km"; } else { $item->distance_text = $distance . "m"; } //是否收藏了该签到券的商家 $item->isFlow = in_array($item->business_code,$flowArray); $item->couponId = $item->id; $item->businessCode = $item->business_code; $item->businessName = $item->business_name; $item->cover = $this->request->domain().$item->image_url; $item->couponName = $item->name; //到期状态 到期前7天!!!!!!!!没做完 $weekTime = 7 * 86400; $endTime = strtotime($item->end_time); if (($endTime - $time) < $weekTime) { $ExpirationTime = ($endTime - $time) / 86400; $item->expirationTimeStr = "还有" . ceil($ExpirationTime) . "到期"; } else { $item->expirationTimeStr = ''; } }); return $this->json(0, 'success', $res); } catch (\Exception $e) { return $this->json(0, 'success', [ "total" => 0, "current" => $params['page'], "size" => $params['size'], "list" => new Collection() ]); } } /** * banner列表 * */ public function bannerList() { $repo = OperationRepository::getInstance(); $whereMap = []; $orders = ['sort'=>'asc']; $page = input("page/d",1); $size = input("size/d",1000); $whereMap[] = ['position', '=', Slide::homePosition]; $list = $repo->slideList($whereMap, ["id","title","src as image","url","url_type as type"], $page, $size, function ($q){ return $q->withAttr("image",function ($value){ return $this->request->domain() . $value; }); }, $orders); return $this->json(1,"ok",$list["list"]); } /** * 广告列表 * */ public function advertisement() { $repo = OperationRepository::getInstance(); $orders = ['sort'=>'asc']; $page = input("page/d",1); $size = input("size/d",1000); $couponId = input("coupon_id/d",0); $coupon = CouponRepository::getInstance()->findById($couponId, [], function ($q) { return $q->with([ "business" => function ($q) { $q->field("code,id,business_name,business_subtitle,is_assign,agency_code"); } ]); }); //如果优惠券所属商家指派了渠道商 if( !empty($coupon) && isset($coupon->business) && !empty($coupon->business) ){ if($coupon->business->is_assign && !empty($coupon->business->agency_code) ){ $agency = Member::findOne([["business_code","=",$coupon->business->agency_code]]); if(!empty($agency)){ $awhereMap = []; $awhereMap[] = ['position', '=', Slide::advertisement]; $awhereMap[] = ['agency_id', '=', $agency["id"]]; $list = $repo->slideList($awhereMap, ["id","title","src as image","url","url_type as type"], $page, $size, function ($q){ return $q->withAttr("image",function ($value){ return $this->request->domain() . $value; }); }, $orders); if(!empty($list["list"]->toArray())){ return $this->json(1,"ok",$list["list"]); } } } } $whereMap = []; $whereMap[] = ['position', '=', Slide::advertisement]; $list = $repo->slideList($whereMap, ["id","title","src as image","url","url_type as type"], $page, $size, function ($q){ return $q->withAttr("image",function ($value){ return $this->request->domain() . $value; }); }, $orders); return $this->json(1,"ok",$list["list"]); } /** * 关注/取消关注一个商家 * */ public function flowBusiness() { $accountId = $this->request->user['user_id'] ?? 0; $accountRepo = AccountRepository::getInstance(); try { $account = $accountRepo->findById($accountId, [], function ($q) { return $q->with(['business', 'parent']); }); if (empty($account)) { throw new ValidateException('用户无效!'); } $businessCode = input("businessCode/s"); $business = BusinessRepository::getInstance()->findOneByWhere(["code"=>$businessCode]); if(empty($business)){ throw new ValidateException('商家无效!'); } $businessFlow = $accountRepo->hasBusinessFlow($account->user_code,$businessCode); //如果关注了 就删除 if($businessFlow){ $businessFlow->delete(); }else{ //没有关注就添加 $accountRepo->createBusinessFlow($account->user_code,$businessCode,$business->business_name); } return $this->json(); } catch (ValidateException $e) { return $this->json(4001, $e->getError()); } catch (Exception $e) { return $this->json(5001, '服务器繁忙!'); } } /** * 关注商家的列表 * */ public function getFlowBusiness() { $accountId = $this->request->user['user_id'] ?? 0; $page = $this->request->param('page/d', 1); $size = $this->request->param('size/d', 10); $keyword = input("keyWord/s"); $accountRepo = AccountRepository::getInstance(); try { $account = $accountRepo->findById($accountId, [], function ($q) { return $q->with(['business', 'parent']); }); if (empty($account)) { throw new ValidateException('用户无效!'); } $data = AccountRepository::getInstance()->getBusinessFlowList($account->user_code,$page,$size,$keyword); $data["list"]->each(function ($item){ $item->businessCover = $this->request->domain() . $item->background; }); return $this->json(0,"success",$data); }catch (ValidateException $e) { return $this->json(4001, $e->getError()); } catch (Exception $e) { echo $e->getMessage(); return $this->json(5001, '服务器繁忙!获取用户个人信息失败'); } } }