123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472 |
- <?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 App\Models\CollectReceipt;
- 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)->where('releaseTime','<',$today)->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();
- $readArr=Menu::getReadNum($initArr);
- $discountArr=Menu::getCollectNum($initArr);
- $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'];
- }
- if(array_key_exists($value['id'],$readArr)){
- $menuAll[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000))+$readArr[$value['id']];
- }else{
- $menuAll[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000));
- }
- if(array_key_exists($value['id'],$discountArr)){
- $menuAll[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000))+$discountArr[$value['id']];
- }else{
- $menuAll[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000));
- }
- }
- $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();
- $initArr=Menu::where('status',1)->orderBy('created_at','desc')->limit(50)->pluck('menu_id');
- $initArr=json_decode(json_encode($initArr),true);
- $readArr=Menu::getReadNum($initArr);
- $discountArr=Menu::getCollectNum($initArr);
- 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'];
- }
- if(array_key_exists($value['id'],$readArr)){
- $data[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000))+$readArr[$value['id']];
- }else{
- $data[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000));
- }
- if(array_key_exists($value['id'],$discountArr)){
- $data[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000))+$discountArr[$value['id']];
- }else{
- $data[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000));
- }
- }
- 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();
- $readArr=Menu::getReadNum($idArr);
- $discountArr=Menu::getCollectNum($idArr);
- $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'];
- }
- if(array_key_exists($value['id'],$readArr)){
- $menuList[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000))+$readArr[$value['id']];
- }else{
- $menuList[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000));
- }
- if(array_key_exists($value['id'],$discountArr)){
- $menuList[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000))+$discountArr[$value['id']];
- }else{
- $menuList[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000));
- }
- }
- 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;
- $token = $request->headers->get('token');
- if($token==''){
- $menu['is_collect']=0;
- }else{
- $user = DB::table('users')->where('token', $token)->first();
- $tokendata= !empty($user) ? $user : null;
- if(empty($tokendata) || ($token!=$tokendata->token && (($tokendata->last_login_time - 30 *86400) > time()))) {
- $menu['is_collect']=0;
- }else{
- $user_id = Menu::getUserId($token);
- //查询是否收藏过该商品 收藏过 - 取消收藏 ; 未收藏 - 进行收藏操作
- $is_collect = Menu::isCollectTicket($user_id,$id);
- if ($is_collect ==1 ){
- $menu['is_collect']=1;
- }else{
- //未收藏该商品,进行收藏
- $menu['is_collect']=0;
- }
- }
- }
- $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));
- }
- public function collectRecipes(Request $request){
- $token=$request->header('token');
- $user=DB::table('user')->where('token',$token)->first();
- if(count($user)){
- $data['user_id']=$user('user_id');
- }else{
- return $this->response->array(self::returnValue(['data' => 'user is not found'], 400));
- }
- $data['menu_id']=$request->input('menu_id');
- $data['create_time']=date("Y-m-d H:i:s",time());
- $data=DB::table('collect_recipes')->where('user_id',$data['user_id'])->where('menu_id',$data['menu_id'])->first();
- if($data){
- if($data['status']==1){
- $status=0;
- }else{
- $status=1;
- }
- $res=DB::table('collect_recipes')->where('user_id',$data['user_id'])->where('menu_id',$data['menu_id'])->update(['status'=>$status,'create_time'=>$data['create_time']]);
- }else{
- DB::table('collect_recipes')->insert($data);
- }
- return $this->response->array(self::returnValue(['data' => '收藏成功'], 200));
- }
- public function receiptPersonList(Request $request){
- $user_id=$request->input('user_id');
- $list=DB::table('collect_recipes')->where('user_id',$user_id)->pluck('menu_id');
- $menuList=Menu::whereIn('id',$list)->get();
- $readArr=Menu::getReadNum($list);
- $discountArr=Menu::getCollectNum($list);
- $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'];
- }
- if(array_key_exists($value['id'],$readArr)){
- $menuList[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000))+$readArr[$value['id']];
- }else{
- $menuList[$key]['readingVolume']=intval(abs(crc32($value['id'])/1000000));
- }
- if(array_key_exists($value['id'],$discountArr)){
- $menuList[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000))+$discountArr[$value['id']];
- }else{
- $menuList[$key]['collectVolume']=intval(abs(crc32($value['id'])/100000000));
- }
- }
- return $this->response->array(self::returnValue(['data' => $menuList], 200));
- }
- public function menuRead(Request $request){
- $menu_id=$request->input('menu_id');
- $res=DB::table('menu_read_num')->where('menu_id',$menu_id)->first();
- if($res){
- $result=DB::table('menu_read_num')->where('menu_id',$menu_id)->increment('num');
- }else{
- $data['menu_id']=$menu_id;
- $result=DB::table('menu_read_num')->insert($data);
- }
- return $this->response->array(self::returnValue(['data' => '阅读成功'], 200));
- }
- }
|