123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350 |
- <?php
- namespace App\Api\V1\Controllers;
- use App\Models\Category;
- use App\Models\Menu;
- use App\Models\RecommendTag;
- use App\Models\Record;
- use App\Models\SearchRecord;
- use App\Models\SearchStatistics;
- use App\Models\Tag;
- use App\Models\UserMessage;
- use App\Models\Special;
- use App\Models\News;
- use App\Models\NewsCategory;
- use Illuminate\Http\Request;
- use Solr;
- use DB;
- class FeaturesController extends BaseController
- {
- //获取类目表
- public function getCategoryList(Request $request)
- {
- $type = $request->get('type');
- if ($type != 1 && $type != 0) {
- return $this->response->array(self::returnValue(['data' => 'Invalid type'], 1005));
- }
- $categoryList = Category::selectCategoryList($type);
- if (empty($categoryList)) {
- return $this->response->array(self::returnValue(['data' => 'Database error'], 9999));
- } else {
- return $this->response->array(self::returnValue(['data' => $categoryList], 200));
- }
- }
- //获取标签列表
- public function getTagList(Request $request)
- {
- $categoryId = $request->get('category_id');
- if (!is_numeric($categoryId)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid category id'], 1002));
- }
- $tagList = Tag::selectTagList($categoryId);
- if (empty($tagList)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid category id'], 1002));
- }
- return $this->response->array(self::returnValue(['data' => $tagList], 200));
- }
- //获取菜单具体信息
- public function getMenu(Request $request)
- {
- $menuId = $request->get('menu_id');
- if (!is_numeric($menuId)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid menu id'], 1003));
- }
- $menu = Menu::selectMenu($menuId);
- if (empty($menu)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid menu id'], 1003));
- }
- Record::insertViews($menuId);
- $init = abs(ceil(crc32($menuId) / 1000000));
- $record = Record::selectRecord($menuId);
- $menu->collections = $record['collection']+floor($init/50);
- $menu->views = $record['view']+$init;
- $menu->share = 'http://182.92.118.1:3320/api/features/getMenu';
- return $this->response->array(self::returnValue(['data' => $menu], 200));
- }
- public function addCollection(Request $request)
- {
- $menuId = $request->get('menu_id');
- if (!is_numeric($menuId)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid menu id'], 1003));
- }
- Record::insertCollection($menuId);
- return $this->response->array(self::returnValue(['data' => []], 200));
- }
- //获取精品好菜
- public function getRecommend(Request $request)
- {
- $time = $request->get('page');
- if (!is_numeric($time)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid page'], 1004));
- }
- $menuList = Menu::selectRecommend(0, $time);
- return $this->response->array(self::returnValue(['data' => $menuList], 200));
- }
- //获取banner推荐菜品
- public function getBannerRecommend(Request $request)
- {
- $menuList = Menu::selectRecommend(1);
- return $this->response->array(self::returnValue(['data' => $menuList], 200));
- }
- //获取推荐标签
- public function getRecommendTag(Request $request)
- {
- $tagList = RecommendTag::selectRecommendTag();
- return $this->response->array(self::returnValue(['data' => $tagList], 200));
- }
- //solr 查询
- protected function select($solrData, Request $request)
- {
- $time = $request->get('page');
- $menuListNum = config('view.menuListNum');
- if (!is_numeric($time)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid page'], 1004));
- }
- $solrData = array_merge($solrData, array("fl" => "id,title,url,ingredients", "start" => $time * $menuListNum, "rows" => $menuListNum));
- $solr = new Solr();
- $menuDataList = $solr->select($solrData);
- $menuDataList = $menuDataList['data']['response']['docs'];
- foreach ($menuDataList as $v) {
- $menuListId[] = $v['id'];
- }
- $record = Record::selectListRecord($menuListId);
- foreach ($menuDataList as &$v) {
- $init = abs(ceil(crc32($v['id']) / 1000000));
- if (isset($record['collection'][$v['id']])) {
- $v['collections'] = $record['collection'][$v['id']] + floor($init / 50);
- } else {
- $v['collections'] = floor($init / 50);
- }
- if (isset($record['view'][$v['id']])) {
- $v['views'] = $record['view'][$v['id']] + $init;
- } else {
- $v['views'] = $init;
- }
- }
- unset($v);
- return $menuDataList;
- }
- //搜索食材
- public function selectIngredients(Request $request)
- {
- //ingredients
- $value = $request->get('value');
- if (empty($value)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid value'], 1006));
- }
- $this->addSearchValue($value, 2);
- $solrData = array("q" => 'ingredients:' . $value . '');
- $menuDataList = $this->select($solrData, $request);
- return $this->response->array(self::returnValue(['data' => $menuDataList], 200));
- }
- //搜索标签
- public function selectTag(Request $request)
- {
- $value = $request->get('value');
- if (empty($value)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid value'], 1006));
- }
- $this->addSearchValue($value, 1);
- $solrData = array("q" => 'tags:' . $value . '');
- $menuDataList = $this->select($solrData, $request);
- return $this->response->array(self::returnValue(['data' => $menuDataList], 200));
- }
- //全搜索
- public function selectAll(Request $request)
- {
- $value = $request->get('value');
- if (empty($value)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid value'], 1006));
- }
- $this->addSearchValue($value);
- $solrData = array("q" => "title:$value tags:$value ingredients $value", "q.op" => "or");
- $menuDataList = $this->select($solrData, $request);
- return $this->response->array(self::returnValue(['data' => $menuDataList], 200));
- }
- public function feedBack(Request $request)
- {
- $message = $request->get('message');
- if (empty($message)) {
- return $this->response->array(self::returnValue(['data' => 'Invalid message'], 1009));
- }
- UserMessage::addFeedBack($request);
- return $this->response->array(self::returnValue(['data' => []], 200));
- }
- public function getHotSearch()
- {
- $data = SearchStatistics::selectHotSearch();
- if (!$data) {
- return $this->response->array(self::returnValue(['data' => 'Database error'], 9999));
- }
- return $this->response->array(self::returnValue(['data' => $data], 200));
- }
- protected function addSearchValue($value, $type = 0)
- {
- SearchRecord::insertSearchValue($value, $type);
- }
- public function startsWith($str, $prefix)
- {
- for ($i = 0; $i < strlen($prefix); ++$i) {
- if ($prefix[$i] !== $str[$i]) {
- return false;
- }
- }
- return true;
- }
- //早中晚专题
- public function earlyMiddleAndLateTheme(Request $request){
- $data=Special::whereIn('title',['上午','中午','下午'])->get();
- if (!$data) {
- return $this->response->array(self::returnValue(['data' => 'Database error'], 9999));
- }
- $data=json_decode(json_encode($data),true);
- foreach($data as $key=>$value){
- $data[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- return $this->response->array(self::returnValue(['data' => $data], 200));
- }
- //其他专题
- /**
- * @param Request $request
- * @return mixed
- */
- public function otherTheme(Request $request){
- $today=strtotime(date('Y-m-d'));
- $data=Special::whereNotIn('title',['上午','中午','下午'])->where('status',1)->where('releaseTime','<',$today)->get();
- $data=json_decode(json_encode($data),true);
- foreach($data as $key=>$value){
- $data[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- $json_menu_idarr=Special::whereNotIn('title',['上午','中午','下午'])->where('status',1)->pluck('contain_recipes');
- $json_menu_idarr=json_decode(json_encode($json_menu_idarr),true);
- $initArr=array();
- foreach($json_menu_idarr as $item){
- if($item){
- $initArr=array_merge($initArr,explode(',',$item));
- }
- }
- $initArr=array_unique($initArr);
- $menuAll=DB::table('menu')->whereIn('id',$initArr)->where('status',1)->get();
- $menuAll=json_decode(json_encode($menuAll),true);
- foreach($menuAll as $key=>$value){
- if(!$this->startsWith($value['url'],'http') && $value['url'] !='None' && $value['url']!=''){
- $menuAll[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- }
- $middleArr=array();
- foreach($menuAll as $item){
- $middleArr["".$item['id']]=$item;
- }
- foreach($data as $key=>$item){
- if($item['contain_recipes']){
- foreach(explode(',',$item['contain_recipes']) as $inneritem){
- $data[$key]['menuList'][]=$middleArr[$inneritem];
- }
- }
- }
- return $this->response->array(self::returnValue(['data' => $data], 200));
- }
- public function theLastRecipes(Request $request){
- $data=Menu::where('status',1)->orderBy('created_at','desc')->limit(50)->get();
- if (!$data) {
- return $this->response->array(self::returnValue(['data' => 'Database error'], 9999));
- }
- $data=json_decode(json_encode($data),true);
- foreach($data as $key=>$value){
- if(!$this->startsWith($value['url'],'http') && $value['url'] !='None' && $value['url']!=''){
- $data[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- }
- return $this->response->array(self::returnValue(['data' => $data], 200));
- }
- public function menuList(Request $request){
- $id=$request->input('id');
- $special=Special::where('id',$id)->first();
- if($special['title']=='上午' || $special['title']=='中午' || $special['title']=='下午'){
- $contain_recipes_time=json_decode($special['contain_recipes_time'],true);
- arsort($contain_recipes_time);
- $idArr=array();
- $today=date('Y-m-d');
- foreach($contain_recipes_time as $key=>$value){
- if($value < $today){
- $idArr[]=$key;
- }
- }
- $lastarr=explode(',',$special['contain_recipes']);
- $idArr=array_intersect($idArr,$lastarr);
- }else{
- $idArr=explode(',',$special['contain_recipes']);
- }
- $menuList=Menu::whereIn('id',$idArr)->get();
- $menuList=json_decode(json_encode($menuList),true);
- foreach($menuList as $key=>$value){
- if(!$this->startsWith($value['url'],'http') && $value['url'] !='None' && $value['url']!=''){
- $menuList[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- }
- return $this->response->array(self::returnValue(['data' => $menuList], 200));
- }
- public function menuDetail(Request $request){
- $id=$request->input('id');
- $menu=Menu::where('id',$id)->first();
- if(!$this->startsWith($menu['url'],'http') && $menu['url'] !='None' && $menu['url']!=''){
- $menu['url']=config('constants.HOST_URL').$menu['url'];
- }
- $init=array();
- $list=explode(';',$menu['ingredients']);
- foreach($list as $item){
- $origin=explode(',',$item);
- $init[$origin[0]]=$origin[1];
- }
- $menu['ingredients']=$init;
- $menuDetail=DB::table('menu_step')->where('menu_id',$id)->get();
- $menuDetail=json_decode(json_encode($menuDetail),true);
- foreach($menuDetail as $key=>$value){
- if(!$this->startsWith($value['url'],'http') && $value['url'] !='None' && $value['url']!=''){
- $menuDetail[$key]['url']=config('constants.HOST_URL').$value['url'];
- }
- }
- return $this->response->array(self::returnValue(['data' => $menu,'detailData'=>$menuDetail], 200));
- }
- public function articleList(Request $request){
- $page=$request->has('page')?$request->input('page'):1;
- $start=intval((intval($page)-1)*intval(20));
- $type=NewsCategory::pluck('name','abbreviation');
- $data=News::where('status',1)->select('id','imgurl','title','createTime','category','readNum')->orderBy('createTime','desc')->offset($start)->limit(20)->get();
- $data=json_decode(json_encode($data),true);
- foreach($data as $key=>$item){
- $data[$key]['category']=$type[$item['category']];
- if(!$this->startsWith($item['imgurl'],'http') && $item['imgurl'] !='None' && $item['imgurl']!=''){
- $data[$key]['imgurl']=config('constants.HOST_URL').$item['imgurl'];
- }
- }
- return $this->response->array(self::returnValue(['data' => $data], 200));
- }
- public function articleDetail(Request $request){
- $id=$request->input('id');
- $articleDetail=News::where('id',$id)->first();
- $articleDetail=json_decode(json_encode($articleDetail),true);
- if(!$this->startsWith($articleDetail['imgurl'],'http') && $articleDetail['imgurl'] !='None' && $articleDetail['imgurl']!=''){
- $articleDetail['imgurl']=config('constants.HOST_URL').$articleDetail['imgurl'];
- }
- $type=NewsCategory::pluck('name','abbreviation');
- $articleDetail['category']=$type[$articleDetail['category']];
- $articleDetail['content'] = str_replace(array("\r\n", "\r", "\n"), "", $articleDetail['content']);
- $articleDetail['content'] = str_replace(array("/ueditor/php/upload/"), config('constants.HOST_URL')."/ueditor/php/upload/", $articleDetail['content']);
- return $this->response->array(self::returnValue(['data' => $articleDetail], 200));
- }
- }
|