Goods.php 13.2 KB
<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2020/5/6
 * Time: 14:43
 */

namespace app\index\controller;


use app\common\controller\Frontend;
use app\index\model\Evaluate;
use app\index\model\Goodscollect;
use app\index\model\Goodstype;
use app\index\model\Pic;
use app\index\model\Province;
use app\index\model\Store;

class Goods extends Frontend
{
    protected $noNeedLogin = ['index','detail','goods_list','get_all','get_one'];
    protected $noNeedRight = ['*'];

    public function _initialize()
    {
        parent::_initialize(); // TODO: Change the autogenerated stub
        $this->view->assign('is_search', 1);
        $this->view->assign('is_active', 2);
        $this->view->assign('title', '采购中心');
    }

    /**
     * 采购中心页面
     * @return mixed
     */
    public function index(){
        //获取分类
        $goodstypeModel = new Goodstype();
        $goodstype_one = $goodstypeModel->selectData(['pid'=>0]);//一级
        foreach($goodstype_one as $key => $g_o){
            $goodstype_two = $goodstypeModel->selectData(['pid'=>$g_o['id']]);//二级
            $goodstype_one[$key]['goodstype_two'] = $goodstype_two;
        }
        //幻灯片
        $picModel = new Pic();
        $slide = $picModel->selectData([]);
        $this->assign('goodstype_one',$goodstype_one);
        $this->assign('slide',$slide);
        $this->assign('clearance_goods',[]);
        $this->assign('goods',[]);
        $this->assign('title','采购中心');
        return $this->fetch();
    }

    /**
     * 商品详情页
     * @return mixed
     */
    public function detail(){
        $user_id = 0;
        if($this->auth->isLogin()) {
            $user_id = $this->auth->id;
        }
        $goods_id = $this->request->param('goods_id',0,'intval');
        if(empty($goods_id)){
            $this->error('缺少必要参数');
        }
        $goodsModel = new \app\index\model\Goods();
        $data = $goodsModel->findData(['g.id'=>$goods_id]);
        if(empty($data)){
            $this->error('查询为空');
        }
        if($data['status'] != '1'){
            $this->error('该商品已下架');
        }
        //收藏
        $is_collect = "2";
        if(!empty($user_id)){
            $collectModel = new Goodscollect();
            $collect = $collectModel->findData(['user_id'=>$user_id,'goods_id'=>$goods_id]);
            if(!empty($collect)){
                $is_collect = "1";
            }
            $userModel = new \app\index\model\User();
            $encrypt = '2';
            $user = $userModel->findData(['id'=>$user_id]);
            if(!empty($user)){
                if($user['is_svip'] == '1' || ($user['is_vip'] == '1' && in_array($user['province_id'],$user['province_ids']))){
                    $encrypt = '1';
                }
            }
            //当前用户若不是会员加密部分信息
            if($encrypt == '2'){
                $data['store_phone'] = "***********";
                $data['store_address'] = "***********";
            }
        }
        $data['is_collect'] = $is_collect;
        //获取评论
        $evaluateModel = new Evaluate();
        $comments_count1 = $evaluateModel->countData(['goods_id'=>$goods_id]);//全部评论数量
        $comments_count2 = $evaluateModel->countData(['goods_id'=>$goods_id,'level'=>['in',[4,5]]]);//好评评论数量
        $comments_count3 = $evaluateModel->countData(['goods_id'=>$goods_id,'level'=>['in',[3]]]);//中评评论数量
        $comments_count4 = $evaluateModel->countData(['goods_id'=>$goods_id,'level'=>['in',[1,2]]]);//差评评论数量
        $comments1 = $evaluateModel->selectData(['goods_id'=>$goods_id]);//全部评论
        $comments2 = $evaluateModel->selectData(['goods_id'=>$goods_id,'level'=>['in',[4,5]]]);//好评评论
        $comments3 = $evaluateModel->selectData(['goods_id'=>$goods_id,'level'=>['in',[3]]]);//中评评论
        $comments4 = $evaluateModel->selectData(['goods_id'=>$goods_id,'level'=>['in',[1,2]]]);//差评评论
        //计算好评、中评、差评率
        $probability1 = !empty($comments_count2) ? round(($comments_count2/$comments_count1)*100,2) : 0;//好评率
        $probability2 = !empty($comments_count3) ? round(($comments_count3/$comments_count1)*100,2) : 0;//中评率
        $probability3 = !empty($comments_count4) ? round(($comments_count4/$comments_count1)*100,2) : 0;//差评率
        $this->assign('data',$data);
        $this->assign('comments_count1',$comments_count1);
        $this->assign('comments_count2',$comments_count2);
        $this->assign('comments_count3',$comments_count3);
        $this->assign('comments_count4',$comments_count4);
        $this->assign('comments1',$comments1);
        $this->assign('comments2',$comments2);
        $this->assign('comments3',$comments3);
        $this->assign('comments4',$comments4);
        $this->assign('probability1',$probability1);
        $this->assign('probability2',$probability2);
        $this->assign('probability3',$probability3);
        $this->assign('title',$data['goodsname']);
        return $this->fetch();
    }

    /**
     * 产品热卖商品列表页面
     * @return mixed
     */
    public function goods_list(){
        $category_id = $this->request->param('category_id',0,'intval');
        $category = [];
        $where = [];
        $goodstypeModel = new Goodstype();
        if(!empty($category_id)){
            $category = $goodstypeModel->findData(['id'=>$category_id]);
            $where['goodstype_id'] = ['eq',$category_id];
        }
        //获取分类
        $goodstype_one = $goodstypeModel->selectData(['pid'=>0]);//一级
        foreach($goodstype_one as $key => $g_o){
            $goodstype_two = $goodstypeModel->selectData(['pid'=>$g_o['id']]);//二级
            $goodstype_one[$key]['goodstype_two'] = $goodstype_two;
        }
        //幻灯片
        $picModel = new Pic();
        $slide = $picModel->selectData([]);
        $this->assign('goodstype_one',$goodstype_one);
        $this->assign('slide',$slide);
        $this->assign('category',$category);
        $this->assign('title','产品热卖');
        return $this->fetch();
    }

    /**
     * 搜索结果页面
     * @return mixed
     */
    public function search(){
        $keyword = $this->request->param('keyword');
        $this->assign('keyword',$keyword);
        $this->assign('title','搜索');
        return $this->fetch();
    }

    public function get_all(){
        $param = $this->request->param();
        $where['g.status'] = ['eq','1'];
        if(!empty($param['province_id'])){
            $storeModel = new Store();
            $store = $storeModel->selectData([]);
            $store_ids = [];
            foreach($store as $key => $s){
                $store_ids[] = $s['id'];
                /*//判断该区域是否为会员
                if($s['is_svip'] == '1'){
                    $store_ids[] = $s['id'];
                    continue;
                }
                if($s['is_vip'] == '1' && in_array($param['province_id'],$s['province_ids'])){
                    $store_ids[] = $s['id'];
                    continue;
                }*/
            }
            $where['g.store_id'] = ['in',$store_ids];
        }
        if(!empty($param['is_clearance'])){
            $where['g.is_clearance'] = ['eq',$param['is_clearance']];
        }
        if(!empty($param['keyword'])){
            $where['t.name|s.name|g.goodsname|g.brand'] = ['like',"%$param[keyword]%"];
        }
        if(!empty($param['category_id'])){
            $where['g.goodstype_id'] = ['eq',$param['category_id']];
        }
        if(!empty($param['store_id'])){
            $where['g.store_id'] = ['eq',$param['store_id']];
        }
        $order = 'g.weigh desc';
        if(!empty($param['sort'])){
            if($param['sort'] == 1){
                //销量降序
                $order = "g.sale desc";
            }else if($param['sort'] == 2){
                //评分降序
                $order = "";
            }else if($param['sort'] == 3){
                //发布时间降序
                $order = "g.createtime desc";
            }else if($param['sort'] == 4){
                //库存降序
                $order = "g.inventory desc";
            }else if($param['sort'] == 5){
                //价格升序
                $order = "g.price asc";
            }else if($param['sort'] == 6){
                //价格降序
                $order = "g.price desc";
            }else if($param['sort'] == 7){
                //店铺属性筛选
                $where['s.property'] = ['like',"%供应商%"];
            }else if($param['sort'] == 8){
                //店铺属性筛选
                $where['s.property'] = ['like',"%一级代理%"];
            }else if($param['sort'] == 9){
                //店铺属性筛选
                $where['s.property'] = ['like',"%厂家直销%"];
            }
        }
        $goodsModel = new \app\index\model\Goods();
        $ids = [];
        if(!empty($param['lng']) && !empty($param['lat'])){
            $data = $goodsModel
                ->alias('g')
                ->field('g.*,t.name as goodstype_name,s.lng,s.lat,s.name as store_name,s.address as store_address,s.property,s.type,s.content as store_content,s.thumbnail as store_thumbnail,s.money as store_money')
                ->join('sto_goodstype t','t.id = g.goodstype_id')
                ->join('sto_store s','s.id = g.store_id')
                ->where($where)
                ->order($order)
                ->select();
            foreach($data as $key => $vo){
                //计算距离
                $distance = distance($param,$vo);
                if($distance <= 50){
                    $ids[] = $vo['id'];
                }
            }
            $where['g.id'] = ['in',$ids];
        }
        $data = $goodsModel
            ->alias('g')
            ->field('g.*,t.name as goodstype_name,s.lng,s.lat,s.name as store_name,s.phone as store_phone,s.address as store_address,s.property,s.type,s.content as store_content,s.thumbnail as store_thumbnail,s.money as store_money')
            ->join('sto_goodstype t','t.id = g.goodstype_id')
            ->join('sto_store s','s.id = g.store_id')
            ->where($where)
            ->order($order);
        if(!empty($param['paginate'])){
            $data = $data->paginate($param['pageNum'],'',['page'=>$param['page']]);
        }else{
            $data = $data->select();
        }
        $user_id = $this->auth->id;
        $userModel = new \app\index\model\User();
        $encrypt = '2';
        $user = $userModel->findData(['id'=>$user_id]);
        if(!empty($user)){
            if($user['is_svip'] == '1' || ($user['is_vip'] == '1' && in_array($user['province_id'],$user['province_ids']))){
                $encrypt = '1';
            }
        }
        $storeModel = new Store();
        $evaluateModel = new Evaluate();
        foreach($data as $key => $vo){
            //判断店铺在该区域是否为会员
            $insurance = '2';
            $store = $storeModel->findData(['id'=>$vo['store_id']]);
            if($store['is_svip'] == '1' || ($store['is_vip'] == '1' && in_array($param['province_id'],$store['province_ids']))){
                $insurance = '1';
            }
            $data[$key]['insurance'] = $insurance;
            //当前用户若不是会员加密部分信息
            if($encrypt == '2'){
                $data[$key]['store_phone'] = "***********";
                $data[$key]['store_address'] = "***********";
            }
            //计算平均分
            $score_count = $evaluateModel->where(['goods_id'=>$vo['id']])->count();
            $score_sum = $evaluateModel->where(['goods_id'=>$vo['id']])->sum('level');
            $average_score = !empty($score_sum) ? round($score_sum/$score_count,2) : 0;
            $data[$key]['average_score'] = $average_score;
            //计算距离
            $distance = 0;
            if(!empty($param['lng']) && !empty($param['lat'])){
                $distance = distance($param,$vo);
                if($distance <= 50){
                    $ids[] = $vo['id'];
                }
            }
            $data[$key]['distance'] = $distance;
        }
        if(!empty($param['sort'])){
            if($param['sort'] == 2){
                $sort = array_column($data->items(),"average_score");
                array_multisort($sort,SORT_DESC,$data->items());
            }
        }
        $this->success('SUCCESS','',$data);
    }
    public function get_one(){
        $param = $this->request->param();
        if(empty($param['goods_id']) || empty($param['province_id'])){
            $this->error('缺少必要参数');
        }
        $goodsModel = new \app\index\model\Goods();
        $data = $goodsModel->findData(['g.id'=>$param['goods_id']]);
        if(empty($data)){
            $this->error('查询为空','',['result'=>2]);
        }
        $storeModel = new Store();
        $store = $storeModel->findData(['id'=>$data['store_id']]);
        if(empty($store)){
            $this->error('查询为空','',['result'=>2]);
        }
        $result = 2;
        if($store['is_svip'] == '1' || ($store['is_vip'] == '1' && in_array($param['province_id'],$store['province_ids']))){
            $result = 1;
        }
        $this->success('SUCCESS','',['result'=>$result]);
    }
}