where(['del'=>0,'is_show'=>1]) ->order('sort desc') ->field('id,name') ->select(); //泥料筛选表 $mud_list = Db::name('screen_mud') ->where(['del'=>0,'is_show'=>1]) ->order('sort desc') ->field('id,name') ->select(); //价格筛选表 $price_list = Db::name('screen_price') ->where(['del'=>0,'is_show'=>1]) ->order('sort desc') ->field('id,name') ->select(); //尺寸筛选表 $size_list = Db::name('screen_size') ->where(['del'=>0,'is_show'=>1]) ->order('sort desc') ->field('id,name') ->select(); //壶型筛选表 $category_list = Db::name('goods_brand') ->where(['del'=>0,'is_show'=>1]) ->order('sort desc') ->field('id,name,image') ->select(); foreach ($category_list as $key => $v1){ $category_list[$key]['image']=UrlServer::getFileUrl($v1['image']); } $list = [ 'capacity_list' => $capacity_list,//容量筛选表 'mud_list' => $mud_list,//泥料筛选表 'price_list' => $price_list,//价格筛选表 'size_list' => $size_list,//尺寸筛选表 'category_list' => $category_list //壶型筛选表 ]; return $list; } //商品列表 public static function getGoodsList($user_id,$get,$page,$size){ $where = []; $order = []; $where[] = ['g.status','=',1]; $where[] = ['g.del','=',0]; $goods = new Goods(); //壶型筛选 if(isset($get['category_id']) && $get['category_id']){ $where[] = ['first_category_id|second_category_id|third_category_id','=',$get['category_id']]; } //价格 if(isset($get['price']) && $get['price']) { $screen_price_info = Db::name('screen_price')->field('start_price,end_price')->where(['id'=>$get['price'],'del'=>0])->find(); if($screen_price_info){ $where[] = ['min_price','>=',strtotime($screen_price_info['start_price'])]; $where[] = ['min_price','<=',strtotime($screen_price_info['end_price'])]; } } //容量 if(isset($get['rongliang']) && $get['rongliang']) { $screen_capacity_info = Db::name('screen_capacity')->field('start_capacity,end_capacity')->where(['id'=>$get['rongliang'],'del'=>0])->find(); if($screen_capacity_info){ $where[] = ['rongliang_name','>=',strtotime($screen_capacity_info['start_capacity'])]; $where[] = ['rongliang_name','<=',strtotime($screen_capacity_info['end_capacity'])]; } } //泥料 if(isset($get['mud_id']) && $get['mud_id']) { $where[] = ['mud_id', '=', $get['mud_id']]; } //尺寸 if(isset($get['size_id']) && $get['size_id']) { $where[] = ['size_id', '=', $get['size_id']]; } //关键词搜索 if(isset($get['keyword']) && $get['keyword']){ $where[] = ['g.name','like','%'.$get['keyword'].'%']; if($user_id){//记录关键词 self::recordKeyWord(trim($get['keyword']),$user_id); } } $order['g.sort'] = 'desc'; $order['g.id'] = 'desc'; $goods_count =Db::name('goods g') ->where($where) ->join('screen_mud sm', 'g.mud_id = sm.id') ->join('supplier s', 'g.supplier_id = s.id') ->count(); $goods_list =Db::name('goods g') ->where($where) ->page($page,$size) ->order($order) ->field('g.id as goods_id,g.name as goods_name,g.code,g.image,min_price as price,rongliang_name,sm.name as mud_name,s.name as supplier_name,g.code') ->join('screen_mud sm', 'g.mud_id = sm.id') ->join('supplier s', 'g.supplier_id = s.id') ->select(); foreach ($goods_list as $key => $v1){ $goods_list[$key]['image']=UrlServer::getFileUrl($v1['image']); } $more = is_more($goods_count,$page,$size); //是否有下一页 $data = [ 'list' => $goods_list, 'page_no' => $page, 'page_size' => $size, 'count' => $goods_count, 'more' => $more ]; return $data; } //记录搜索关键词 public static function recordKeyWord($keyword,$user_id){ $record = Db::name('search_record')->where(['user_id'=>$user_id,'keyword'=>$keyword,'del'=>0])->find(); if($record){ return Db::name('search_record')->where(['id'=>$record['id']])->update(['count'=>Db::raw('count+1'),'update_time'=>time()]); } return Db::name('search_record')->insert(['user_id'=>$user_id,'keyword'=>$keyword]); } //商品详情 public static function getGoodsDetail($user_id,$id){ $goods = Goods::get(['id'=>$id,'status'=>1],['goods_image','goods_item']); if($goods){ //点击量 $goods->click_count = $goods->click_count + 1; $goods->save(); $goods->sales_sum += $goods->virtual_sales_sum; //专家信息 $supplier = Db::name('supplier') ->where(['del'=>0,'id'=>$goods->supplier_id]) ->order('create_time desc') ->field('id,name,remark,avatar') ->find(); $supplier['avatar']=UrlServer::getFileUrl($supplier['avatar']); $goods->supplier_list=$supplier; $goods->payment=ConfigServer::get('policy', 'payment'); $goods->reason = ConfigServer::get('policy', 'reason'); $goods->after_sale =ConfigServer::get('policy', 'after_sale'); //商品规格 $goods->GoodsSpec(); $goods->append(['comment'])->hidden(['Spec','GoodsSpecValue']) ->visible(['id','name','code','image','stock','content', 'price','market_price','goods_spec','goods_image', 'goods_item','supplier_list','payment','reason','after_sale']); // 钩子-记录足迹(浏览商品) Hook::listen('footprint', [ 'type' => Footprint::browse_goods, 'user_id' => $user_id, 'foreign_id' => $id //商品ID ]); Db::name('goods_click')->insert([ 'user_id' => $user_id, 'goods_id' => $id, 'create_time' => time(), ]); return $goods; } return []; } //好物优选 public static function getBestList($page,$size){ $goods = new Goods(); $goods_count = $goods ->where(['del'=>0,'status'=>1,'is_best'=>1]) ->count(); $goods_list = $goods ->where(['del'=>0,'status'=>1,'is_best'=>1]) ->field('id,name,image,min_price as price,market_price') ->order('sort desc,id desc') ->page($page,$size) ->select(); $more = is_more($goods_count,$page,$size); //是否有下一页 $data = [ 'list' => $goods_list, 'page_no' => $page, 'page_size' => $size, 'count' => $goods_count, 'more' => $more ]; return $data; } //热门推荐 public static function getHostList($page,$size){ $goods = new Goods(); $goods_count = $goods ->where(['del'=>0,'status'=>1]) ->count(); $goods_list = $goods ->where(['del'=>0,'status'=>1]) ->field('id,name,image,min_price as price,market_price,sales_sum+virtual_sales_sum as sales_sum,click_count,sort') ->order('sales_sum desc,click_count desc, sort desc') ->page($page,$size) ->select(); $more = is_more($goods_count,$page,$size); //是否有下一页 $data = [ 'list' => $goods_list, 'page_no' => $page, 'page_size' => $size, 'count' => $goods_count, 'more' => $more ]; return $data; } //搜索记录 public static function getSearchPage($user_id,$limit){ $history_list = Db::name('search_record') ->where(['user_id'=>$user_id,'del'=>0]) ->limit($limit) ->order('id desc') ->column('keyword'); $hot_lists = ConfigServer::get('hot_search','hot_keyword',[]); return[ 'history_lists' => $history_list, 'hot_lists' => $hot_lists, ]; } //检查商品是否正在参加活动 public static function checkActivity($goods){ $goods['activity'] = []; $seckill = SeckillLogic::getSeckillGoods(); if($seckill['seckill_goods']){ $seckill_goods_ids = array_column($seckill['seckill_goods'],'goods_id'); if($seckill['seckill_goods'] && in_array($goods['id'],$seckill_goods_ids)){ $goods['activity'] = [ 'type' => 1, 'info' => $seckill['seckill'], ]; foreach ($goods['goods_item'] as &$item){ if(isset($seckill['seckill_goods'][$item['id']])){ $item['price'] = $seckill['seckill_goods'][$item['id']]['price']; } } } } return $goods; } //清空搜索记录 public static function clearSearch($user_id){ return Db::name('search_record') ->where(['user_id'=>$user_id]) ->update(['del'=>1,'update_time'=>time()]); } // 获取拼团内容 private static function getTeam($goods) { // 查询拼团活动信息 $teamActivityModel = new TeamActivity(); $team = $teamActivityModel->field(true) ->where(['del'=>0, 'status'=>1, 'goods_id'=>$goods['id']])->find(); // 判断是否已到活动时间 (为真则活动结束) if ($team['end_time'] <= time()) { Goods::where(['id'=>$goods['id']])->update([ 'is_team' => 0 ]); return 10; } // 查询规格信息 $teamGoodsItem = new TeamGoodsItem(); $team_item = $teamGoodsItem->field(true) ->where('team_id', '=', $team['team_id']) ->where('goods_id','=', $team['goods_id'])->select(); $team_spec_price = []; foreach ($team_item as $item) { $team_spec_price[intval($item['item_id'])] = $item['team_price']; } // 重置商品规格价格 为 拼团活动规格的价格 $goods_item = $goods['goods_item']; foreach ($goods_item as &$item) { $item['team_price'] = $team_spec_price[$item['id']]; } $goods['goods_item'] = $goods_item; unset($team['status']); unset($team['del']); unset($team['create_time']); // 获取该商品正在开的团,但是还不够人的团 $teamFoundModel = new TeamFound(); $team_found = $teamFoundModel->field('id,team_id,found_time,found_end_time, nickname,avatar,join,need') ->where('team_id', '=', $team['team_id']) ->where('status', '=', 0) ->where('found_end_time', '>', time()) ->limit(10) ->select()->toArray(); return ['type'=>2, 'team'=>$team, 'team_found'=>$team_found]; } }