157 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			157 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace app\api\logic;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\common\basics\Logic;
							 | 
						||
| 
								 | 
							
								use app\common\enum\GoodsEnum;
							 | 
						||
| 
								 | 
							
								use app\common\enum\ShopEnum;
							 | 
						||
| 
								 | 
							
								use app\common\server\ConfigServer;
							 | 
						||
| 
								 | 
							
								use app\common\server\UrlServer;
							 | 
						||
| 
								 | 
							
								use app\common\model\goods\Goods;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\Shop;
							 | 
						||
| 
								 | 
							
								use app\common\model\shop\ShopFollow;
							 | 
						||
| 
								 | 
							
								use think\facade\Event;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class ShopLogic extends Logic
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 获取店铺信息
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getShopInfo($shopId, $userId)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // 记录统计信息(访问商铺用户量)
							 | 
						||
| 
								 | 
							
								        Event::listen('ShopStat', 'app\common\listener\ShopStat');
							 | 
						||
| 
								 | 
							
								        event('ShopStat', $shopId);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $where = [
							 | 
						||
| 
								 | 
							
								            'del' => 0,
							 | 
						||
| 
								 | 
							
								            'id' => $shopId
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $shop = Shop::field('id,name,logo,background,type,type as type_desc,score,star,intro,visited_num,cover,banner')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->findOrEmpty();
							 | 
						||
| 
								 | 
							
								        if($shop->isEmpty()) {
							 | 
						||
| 
								 | 
							
								            return [];
							 | 
						||
| 
								 | 
							
								        }else{
							 | 
						||
| 
								 | 
							
								            $shop = $shop->toArray();
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        // logo及背景图
							 | 
						||
| 
								 | 
							
								        $shop['logo'] = $shop['logo'] ? UrlServer::getFileUrl($shop['logo']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_LOGO);
							 | 
						||
| 
								 | 
							
								        $shop['background'] = $shop['background'] ? UrlServer::getFileUrl($shop['background']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_BG);
							 | 
						||
| 
								 | 
							
								        $shop['cover'] = $shop['cover'] ? UrlServer::getFileUrl($shop['cover']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_COVER);
							 | 
						||
| 
								 | 
							
								        $shop['banner'] = UrlServer::getFileUrl(!empty($shop['banner']) ? $shop['banner'] : ShopEnum::DEFAULT_BANNER);
							 | 
						||
| 
								 | 
							
								        // 在售商品
							 | 
						||
| 
								 | 
							
								        // 销售中商品:未删除/审核通过/已上架
							 | 
						||
| 
								 | 
							
								        $onSaleWhere = [
							 | 
						||
| 
								 | 
							
								            ['del', '=', GoodsEnum::DEL_NORMAL],  // 未删除
							 | 
						||
| 
								 | 
							
								            ['status', '=', GoodsEnum::STATUS_SHELVES], // 上架中
							 | 
						||
| 
								 | 
							
								            ['audit_status', '=', GoodsEnum::AUDIT_STATUS_OK], // 审核通过
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $shop['on_sale_count'] = Goods::where($onSaleWhere)->where('shop_id', $shopId)->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 店铺推荐商品
							 | 
						||
| 
								 | 
							
								        $onSaleWhere = [
							 | 
						||
| 
								 | 
							
								            ['del', '=', GoodsEnum::DEL_NORMAL],  // 未删除
							 | 
						||
| 
								 | 
							
								            ['status', '=', GoodsEnum::STATUS_SHELVES], // 上架中
							 | 
						||
| 
								 | 
							
								            ['audit_status', '=', GoodsEnum::AUDIT_STATUS_OK], // 审核通过
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        $shop['goods_list'] = Goods::field('id,image,name,min_price,market_price')
							 | 
						||
| 
								 | 
							
								            ->where($onSaleWhere)
							 | 
						||
| 
								 | 
							
								            ->where([
							 | 
						||
| 
								 | 
							
								                'shop_id' => $shop['id'],
							 | 
						||
| 
								 | 
							
								                'is_recommend' => 1, // 推荐商品
							 | 
						||
| 
								 | 
							
								            ])
							 | 
						||
| 
								 | 
							
								            ->limit(9)
							 | 
						||
| 
								 | 
							
								            ->select()
							 | 
						||
| 
								 | 
							
								            ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 用户是否关注店铺
							 | 
						||
| 
								 | 
							
								        $shop['shop_follow_status'] = 0;
							 | 
						||
| 
								 | 
							
								        if($userId) { // 用户已登录
							 | 
						||
| 
								 | 
							
								            $shopFollow = ShopFollow::where(['user_id'=>$userId, 'shop_id'=>$shopId])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								            if(!$shopFollow->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                $shop['shop_follow_status'] = $shopFollow['status'];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $shop['follow_num'] = ShopFollow::where(['shop_id' => $shopId,'status' => 1])->count('id');
							 | 
						||
| 
								 | 
							
								        $image = ConfigServer::get('shop_customer_service', 'image', '', $shopId);
							 | 
						||
| 
								 | 
							
								        $shop['customer_image'] = $image ? UrlServer::getFileUrl($image) : '';
							 | 
						||
| 
								 | 
							
								        return $shop;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 店铺列表
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getShopList($get)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where = [
							 | 
						||
| 
								 | 
							
								            ['is_freeze', '=', 0], // 未冻结
							 | 
						||
| 
								 | 
							
								            ['del', '=', 0], // 未删除
							 | 
						||
| 
								 | 
							
								            ['is_run', '=', 1], // 未暂停营业
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 店铺名称
							 | 
						||
| 
								 | 
							
								        if(isset($get['name']) && !empty($get['name'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['name', 'like', '%'. trim($get['name']. '%')];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 主营类目
							 | 
						||
| 
								 | 
							
								        if(isset($get['shop_cate_id']) && !empty($get['shop_cate_id'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['cid', '=', $get['shop_cate_id']];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $order = [
							 | 
						||
| 
								 | 
							
								            'weight' => 'asc',
							 | 
						||
| 
								 | 
							
								            'score' => 'desc',
							 | 
						||
| 
								 | 
							
								            'id' => 'desc'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $list = Shop::field('id,name,logo,background,visited_num,cover,banner')
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            // 无限期 或 未到期
							 | 
						||
| 
								 | 
							
								            ->whereRaw('expire_time =0 OR expire_time > '. time())
							 | 
						||
| 
								 | 
							
								            ->order($order)
							 | 
						||
| 
								 | 
							
								            ->page($get['page_no'], $get['page_size'])
							 | 
						||
| 
								 | 
							
								            ->select()
							 | 
						||
| 
								 | 
							
								            ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = Shop::where($where)
							 | 
						||
| 
								 | 
							
								            // 无限期 或 未到期
							 | 
						||
| 
								 | 
							
								            ->whereRaw('expire_time =0 OR expire_time > '. time())
							 | 
						||
| 
								 | 
							
								            ->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $onSaleWhere = [
							 | 
						||
| 
								 | 
							
								            ['del', '=', GoodsEnum::DEL_NORMAL],  // 未删除
							 | 
						||
| 
								 | 
							
								            ['status', '=', GoodsEnum::STATUS_SHELVES], // 上架中
							 | 
						||
| 
								 | 
							
								            ['audit_status', '=', GoodsEnum::AUDIT_STATUS_OK], // 审核通过
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        foreach($list as &$shop) {
							 | 
						||
| 
								 | 
							
								            $shop['goods_list'] = Goods::field('id,image,name,min_price,market_price')
							 | 
						||
| 
								 | 
							
								                ->where($onSaleWhere)
							 | 
						||
| 
								 | 
							
								                ->where([
							 | 
						||
| 
								 | 
							
								                    'shop_id' => $shop['id'],
							 | 
						||
| 
								 | 
							
								                ])
							 | 
						||
| 
								 | 
							
								                ->select()
							 | 
						||
| 
								 | 
							
								                ->toArray();
							 | 
						||
| 
								 | 
							
								            $shop['on_sale_goods'] = count($shop['goods_list']);
							 | 
						||
| 
								 | 
							
								            // logo及背景图
							 | 
						||
| 
								 | 
							
								            $shop['logo'] = $shop['logo'] ? UrlServer::getFileUrl($shop['logo']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_LOGO);
							 | 
						||
| 
								 | 
							
								            $shop['background'] = $shop['background'] ? UrlServer::getFileUrl($shop['background']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_BG);
							 | 
						||
| 
								 | 
							
								            $shop['cover'] = $shop['cover'] ? UrlServer::getFileUrl($shop['cover']) : UrlServer::getFileUrl(ShopEnum::DEFAULT_COVER);
							 | 
						||
| 
								 | 
							
								            $shop['banner'] = $shop['banner'] ? UrlServer::getFileUrl($shop['banner']) : '';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $more = is_more($count, $get['page_no'], $get['page_size']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'list' => $list,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => $more,
							 | 
						||
| 
								 | 
							
								            'page_no' => $get['page_no'],
							 | 
						||
| 
								 | 
							
								            'page_isze' => $get['page_size']
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $data;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |