920 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			920 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\api\logic;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use app\common\basics\Logic;
							 | 
						||
| 
								 | 
							
								use app\common\logic\CommunityArticleLogic;
							 | 
						||
| 
								 | 
							
								use app\common\enum\{
							 | 
						||
| 
								 | 
							
								    CommunityCommentEnum,
							 | 
						||
| 
								 | 
							
								    GoodsEnum,
							 | 
						||
| 
								 | 
							
								    OrderEnum,
							 | 
						||
| 
								 | 
							
								    ShopEnum,
							 | 
						||
| 
								 | 
							
								    CommunityArticleEnum,
							 | 
						||
| 
								 | 
							
								    CommunityLikeEnum
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								use app\common\model\{
							 | 
						||
| 
								 | 
							
								    goods\Goods,
							 | 
						||
| 
								 | 
							
								    order\Order,
							 | 
						||
| 
								 | 
							
								    order\OrderGoods,
							 | 
						||
| 
								 | 
							
								    shop\Shop,
							 | 
						||
| 
								 | 
							
								    user\User,
							 | 
						||
| 
								 | 
							
								    community\CommunityArticle,
							 | 
						||
| 
								 | 
							
								    community\CommunityArticleImage,
							 | 
						||
| 
								 | 
							
								    community\CommunityCategory,
							 | 
						||
| 
								 | 
							
								    community\CommunityComment,
							 | 
						||
| 
								 | 
							
								    community\CommunityFollow,
							 | 
						||
| 
								 | 
							
								    community\CommunityLike,
							 | 
						||
| 
								 | 
							
								    community\CommunityTopic
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								use app\common\server\{
							 | 
						||
| 
								 | 
							
								    ConfigServer,
							 | 
						||
| 
								 | 
							
								    UrlServer
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								use think\facade\Db;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 社区相关
							 | 
						||
| 
								 | 
							
								 * Class CommunityArticleLogic
							 | 
						||
| 
								 | 
							
								 * @package app\api\logic
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class CommunityLogic extends Logic
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取商品列表
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $params
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 15:06
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getGoodsLists($user_id, $params, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where = [
							 | 
						||
| 
								 | 
							
								            ['del', '=', GoodsEnum::DEL_NORMAL],  // 未删除
							 | 
						||
| 
								 | 
							
								            ['status', '=', GoodsEnum::STATUS_SHELVES], // 上架中
							 | 
						||
| 
								 | 
							
								            ['audit_status', '=', GoodsEnum::AUDIT_STATUS_OK], // 审核通过
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $type = !empty($params['type']) ? $params['type'] : 'all';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ('buy' == $type) {
							 | 
						||
| 
								 | 
							
								            $condition = [
							 | 
						||
| 
								 | 
							
								                ['user_id', '=', $user_id],
							 | 
						||
| 
								 | 
							
								                ['order_status', '>=', OrderEnum::ORDER_STATUS_NO_PAID],
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								            $order_id = Order::where($condition)->column('id');
							 | 
						||
| 
								 | 
							
								            $goods_id = OrderGoods::whereIn('order_id', $order_id)->column('goods_id');
							 | 
						||
| 
								 | 
							
								            $where[] = ['id', 'in', $goods_id];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!empty($params['keyword'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['name', 'like', '%' . $params['keyword'] . '%'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $model = new Goods();
							 | 
						||
| 
								 | 
							
								        $field = ['id' => 'goods_id', 'image', 'name' => 'goods_name', 'min_price' => 'goods_price', 'shop_id'];
							 | 
						||
| 
								 | 
							
								        $goods = $model->field($field)->where($where)->select();
							 | 
						||
| 
								 | 
							
								        $count = $model->where($where)->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($goods as &$item) {
							 | 
						||
| 
								 | 
							
								            $item['shop_name'] = $item->shop->name;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $goods->hidden(['shop']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'list' => $goods->toArray(),
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 已购买店铺或全部营业店铺
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $params
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 15:39
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getShopLists($user_id, $params, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where = [
							 | 
						||
| 
								 | 
							
								            ['is_freeze', '=', ShopEnum::SHOP_FREEZE_NORMAL], // 未冻结
							 | 
						||
| 
								 | 
							
								            ['del', '=', 0], // 未删除
							 | 
						||
| 
								 | 
							
								            ['is_run', '=', ShopEnum::SHOP_RUN_OPEN], // 未暂停营业
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $type = !empty($params['type']) ? $params['type'] : 'all';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ('buy' == $type) {
							 | 
						||
| 
								 | 
							
								            $condition = [
							 | 
						||
| 
								 | 
							
								                ['order_status', '>=', OrderEnum::ORDER_STATUS_NO_PAID],
							 | 
						||
| 
								 | 
							
								                ['user_id', '=', $user_id]
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								            $shop_id = Order::where($condition)->column('shop_id');
							 | 
						||
| 
								 | 
							
								            $where[] = ['id', 'in', $shop_id];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!empty($params['keyword'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['name', 'like', '%' . $params['keyword'] . '%'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $whereRaw = 'expire_time =0 OR expire_time > '. time();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $field = ['id', 'name', 'logo'];
							 | 
						||
| 
								 | 
							
								        $lists = Shop::field($field)->where($where)->whereRaw($whereRaw)->select()->toArray();
							 | 
						||
| 
								 | 
							
								        $count = Shop::where($where)->whereRaw($whereRaw)->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'list' => $lists,
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取指定数量话题
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 15:59
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getRecommendTopic()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return CommunityTopic::field(['id', 'name', 'cid', 'image'])
							 | 
						||
| 
								 | 
							
								            ->where(['is_show' => 1, 'del' => 0])
							 | 
						||
| 
								 | 
							
								            ->order(['sort' => 'desc', 'id' => 'desc'])
							 | 
						||
| 
								 | 
							
								            ->limit(3)
							 | 
						||
| 
								 | 
							
								            ->select()->toArray();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取话题列表
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @return mixed
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 17:24
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getTopicLists($get)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where[] = ['t.del', '=', 0];
							 | 
						||
| 
								 | 
							
								        $where[] = ['t.is_show', '=', 1];
							 | 
						||
| 
								 | 
							
								        if (!empty($get['name'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['t.name', 'like', '%' . $get['name'] . '%'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $model = new CommunityCategory();
							 | 
						||
| 
								 | 
							
								        $lists = $model->alias('c')
							 | 
						||
| 
								 | 
							
								            ->field(['c.id, c.name'])
							 | 
						||
| 
								 | 
							
								            ->with(['topic' => function ($query) use ($where) {
							 | 
						||
| 
								 | 
							
								                $query->alias('t')->field(['id', 'cid', 'name', 'image', 'click'])
							 | 
						||
| 
								 | 
							
								                    ->where($where)
							 | 
						||
| 
								 | 
							
								                    ->order(['sort' => 'desc', 'id' => 'desc']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->join('community_topic t', 't.cid = c.id')
							 | 
						||
| 
								 | 
							
								            ->group('c.id')
							 | 
						||
| 
								 | 
							
								            ->select()
							 | 
						||
| 
								 | 
							
								            ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (empty($get['name'])) {
							 | 
						||
| 
								 | 
							
								            $recommend_topic = (new CommunityTopic())->field(['id', 'cid', 'name', 'image', 'click'])
							 | 
						||
| 
								 | 
							
								                ->where(['del' => 0, 'is_show' => 1, 'is_recommend' => 1])
							 | 
						||
| 
								 | 
							
								                ->select()
							 | 
						||
| 
								 | 
							
								                ->toArray();
							 | 
						||
| 
								 | 
							
								            $recommend = ['id' => 0, 'name' => '推荐', 'topic' => $recommend_topic];
							 | 
						||
| 
								 | 
							
								            array_unshift($lists, $recommend);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $lists;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取分类
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 17:49
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getCate()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $lists = CommunityCategory::field(['id', 'name'])
							 | 
						||
| 
								 | 
							
								            ->where(['is_show' => 1, 'del' => 0])
							 | 
						||
| 
								 | 
							
								            ->order(['sort' => 'asc', 'id' => 'desc'])
							 | 
						||
| 
								 | 
							
								            ->select()->toArray();
							 | 
						||
| 
								 | 
							
								        return $lists;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取文章列表
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 18:09
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getArticleLists($get, $page, $size, $user_id = null)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where[] = ['del', '=', 0];
							 | 
						||
| 
								 | 
							
								        $where[] = ['status', '=', CommunityArticleEnum::STATUS_SUCCESS];
							 | 
						||
| 
								 | 
							
								        if (!empty($get['cate_id'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['cate_id', '=', $get['cate_id']];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!empty($get['topic_id'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['topic_id', '=', $get['topic_id']];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!empty($get['keyword'])) {
							 | 
						||
| 
								 | 
							
								            $where[] = ['content', 'like', '%' . trim($get['keyword']) . '%'];
							 | 
						||
| 
								 | 
							
								            if (!is_null($user_id)) {
							 | 
						||
| 
								 | 
							
								                // 记录关键词
							 | 
						||
| 
								 | 
							
								                CommunitySearchRecordLogic::recordKeyword(trim($get['keyword']), $user_id);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $sort = [];
							 | 
						||
| 
								 | 
							
								        if (!empty($get['sort_hot'])) {
							 | 
						||
| 
								 | 
							
								            $sort = ['like' => $get['sort_hot'], 'id' => 'desc'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (!empty($get['sort_new'])) {
							 | 
						||
| 
								 | 
							
								            $sort = ['id' => $get['sort_new'], 'like' => 'desc'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        if (empty($sort)) {
							 | 
						||
| 
								 | 
							
								            $sort = ['like' => 'desc', 'id' => 'desc'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $model = new CommunityArticle();
							 | 
						||
| 
								 | 
							
								        $count = $model->where($where)->count();
							 | 
						||
| 
								 | 
							
								        $lists = $model
							 | 
						||
| 
								 | 
							
								            ->with(['user' => function ($query) {
							 | 
						||
| 
								 | 
							
								                $query->field(['id', 'nickname', 'avatar']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->field(['id', 'user_id', 'cate_id', 'image', 'content', 'like', 'create_time'])
							 | 
						||
| 
								 | 
							
								            ->page($page, $size)
							 | 
						||
| 
								 | 
							
								            ->order($sort)
							 | 
						||
| 
								 | 
							
								            ->select()
							 | 
						||
| 
								 | 
							
								            ->bindAttr('user', ['nickname', 'avatar'])
							 | 
						||
| 
								 | 
							
								            ->hidden(['user'])
							 | 
						||
| 
								 | 
							
								            ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 点赞的文章
							 | 
						||
| 
								 | 
							
								        $likes_article = [];
							 | 
						||
| 
								 | 
							
								        if (!is_null($user_id)) {
							 | 
						||
| 
								 | 
							
								            // 点赞的文章
							 | 
						||
| 
								 | 
							
								            $likes_article = CommunityLike::where([
							 | 
						||
| 
								 | 
							
								                'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								                'type' => CommunityLikeEnum::TYPE_ARTICLE
							 | 
						||
| 
								 | 
							
								            ])->column('relation_id');
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($lists as &$item) {
							 | 
						||
| 
								 | 
							
								            $item['avatar'] = !empty($item['avatar']) ? UrlServer::getFileUrl($item['avatar']) : '';
							 | 
						||
| 
								 | 
							
								            $item['is_like'] = in_array($item['id'], $likes_article) ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 关注的人是否有新作品
							 | 
						||
| 
								 | 
							
								        $has_new = CommunityArticleLogic::hasNew($user_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return [
							 | 
						||
| 
								 | 
							
								            'has_new' => $has_new,
							 | 
						||
| 
								 | 
							
								            'list' => $lists,
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 发布文章
							 | 
						||
| 
								 | 
							
								     * @param int $user_id
							 | 
						||
| 
								 | 
							
								     * @param array $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/4/29 10:46
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function addArticle(int $user_id, array $post): bool
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Db::startTrans();
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            // 处理数据
							 | 
						||
| 
								 | 
							
								            $data = self::getEditArticleData($user_id, $post);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 新增文章信息
							 | 
						||
| 
								 | 
							
								            $article = CommunityArticle::create($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 新增文章关联图片
							 | 
						||
| 
								 | 
							
								            self::addArticleImage($post['image'], $article['id']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 更新关联话题文章数量
							 | 
						||
| 
								 | 
							
								            if (!empty($post['topic_id'])) {
							 | 
						||
| 
								 | 
							
								                CommunityTopic::where(['id' => $post['topic_id']])->inc('article_num')->update();
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 通知粉丝有新作品
							 | 
						||
| 
								 | 
							
								            CommunityArticleLogic::noticeFans($user_id, $article['status']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Db::commit();
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            Db::rollback();
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 编辑文章
							 | 
						||
| 
								 | 
							
								     * @param int $user_id
							 | 
						||
| 
								 | 
							
								     * @param array $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/7 9:42
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function editArticle(int $user_id, array $post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Db::startTrans();
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            // 更新文章数据
							 | 
						||
| 
								 | 
							
								            $data = self::getEditArticleData($user_id, $post);
							 | 
						||
| 
								 | 
							
								            $article = CommunityArticle::findOrEmpty($post['id']);
							 | 
						||
| 
								 | 
							
								            if ($article->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('信息缺失');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $article->save($data);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 删除旧的关联图片
							 | 
						||
| 
								 | 
							
								            CommunityArticleImage::where(['article_id' => $post['id']])->delete();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            self::addArticleImage($post['image'], $post['id']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Db::commit();
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            Db::rollback();
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 删除文章
							 | 
						||
| 
								 | 
							
								     * @param int $user_id
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/10 16:16
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function delArticle(int $user_id, $post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Db::startTrans();
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            // 删除文章
							 | 
						||
| 
								 | 
							
								            $article = CommunityArticle::where(['user_id' => $user_id, 'id' => $post['id']])->find();
							 | 
						||
| 
								 | 
							
								            $article->del = 1;
							 | 
						||
| 
								 | 
							
								            $article->update_time = time();
							 | 
						||
| 
								 | 
							
								            $article->save();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (!empty($article['topic_id'])) {
							 | 
						||
| 
								 | 
							
								                // 更新话题文章数量
							 | 
						||
| 
								 | 
							
								                CommunityTopic::decArticleNum($article['topic_id']);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            Db::commit();
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            Db::rollback();
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 文章详情
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $id
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/6 18:08
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function detail($user_id, $id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $result = CommunityArticle::with([
							 | 
						||
| 
								 | 
							
								            'images', 'user' => function ($query) {
							 | 
						||
| 
								 | 
							
								                $query->field(['id', 'nickname', 'avatar']);
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'topic' => function ($query) {
							 | 
						||
| 
								 | 
							
								                $query->field(['id', 'name']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->append(['status_desc', 'goods_data', 'shop_data'])
							 | 
						||
| 
								 | 
							
								            ->findOrEmpty($id)
							 | 
						||
| 
								 | 
							
								            ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 是否已关注
							 | 
						||
| 
								 | 
							
								        $is_follow = CommunityFollow::where([
							 | 
						||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								            'follow_id' => $result['user_id'],
							 | 
						||
| 
								 | 
							
								            'status' => 1
							 | 
						||
| 
								 | 
							
								        ])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 是否已点赞
							 | 
						||
| 
								 | 
							
								        $is_like = CommunityLike::where([
							 | 
						||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								            'relation_id' =>$id,
							 | 
						||
| 
								 | 
							
								            'type' => CommunityLikeEnum::TYPE_ARTICLE
							 | 
						||
| 
								 | 
							
								        ])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $comment_count = CommunityComment::where([
							 | 
						||
| 
								 | 
							
								            'del' => 0,
							 | 
						||
| 
								 | 
							
								            'article_id' => $id,
							 | 
						||
| 
								 | 
							
								            'status' => CommunityCommentEnum::STATUS_SUCCESS
							 | 
						||
| 
								 | 
							
								        ])->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result['is_follow'] = !$is_follow->isEmpty() ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        $result['is_like'] = !$is_like->isEmpty() ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        // 关联商品数量
							 | 
						||
| 
								 | 
							
								        $result['total_goods'] = count($result['goods']);
							 | 
						||
| 
								 | 
							
								        // 关联店铺数量
							 | 
						||
| 
								 | 
							
								        $result['total_shop'] = count($result['shop']);
							 | 
						||
| 
								 | 
							
								        // 评论数量
							 | 
						||
| 
								 | 
							
								        $result['total_comment'] = $comment_count;
							 | 
						||
| 
								 | 
							
								        // 当前用户是否为文章作者
							 | 
						||
| 
								 | 
							
								        $result['is_author'] = ($user_id == $result['user_id']) ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        $result['user']['avatar'] = !empty($result['user']['avatar']) ? UrlServer::getFileUrl($result['user']['avatar']) : '';
							 | 
						||
| 
								 | 
							
								        // 增加话题点击量
							 | 
						||
| 
								 | 
							
								        CommunityTopic::where(['id' => $result['topic_id']])->inc('click')->update();
							 | 
						||
| 
								 | 
							
								        // 审核状态描述
							 | 
						||
| 
								 | 
							
								        $result['audit_remark_desc'] = CommunityArticleEnum::getStatusRemarkDesc($result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取编辑文章数据
							 | 
						||
| 
								 | 
							
								     * @param int $user_id
							 | 
						||
| 
								 | 
							
								     * @param array $post
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \Exception
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/7 9:52
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getEditArticleData(int $user_id, array $post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $data = [
							 | 
						||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								            'content' => $post['content'],
							 | 
						||
| 
								 | 
							
								            'image' => !empty($post['image']) ? reset($post['image']) : '',
							 | 
						||
| 
								 | 
							
								            'goods' => !empty($post['goods']) ? array_unique(array_values($post['goods'])) : '',
							 | 
						||
| 
								 | 
							
								            'shop' => !empty($post['shop']) ? array_unique(array_values($post['shop'])) : '',
							 | 
						||
| 
								 | 
							
								            'topic_id' => 0
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!empty($post['topic_id'])) {
							 | 
						||
| 
								 | 
							
								            $topic = CommunityTopic::where(['id' => $post['topic_id'], 'is_show' => 1])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								            if ($topic->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('所选话题不存在');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $data['cate_id'] = $topic['cid'];
							 | 
						||
| 
								 | 
							
								            $data['topic_id'] = $post['topic_id'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 如果是无需审核的,状态直接为已审核
							 | 
						||
| 
								 | 
							
								        $config = ConfigServer::get('community', 'audit_article', 1);
							 | 
						||
| 
								 | 
							
								        if ($config == 0) {
							 | 
						||
| 
								 | 
							
								            $data['status'] = CommunityArticleEnum::STATUS_SUCCESS;
							 | 
						||
| 
								 | 
							
								            $data['audit_time'] = time();
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $data['status'] = CommunityArticleEnum::STATUS_WAIT;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $data;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 添加文章关联图片
							 | 
						||
| 
								 | 
							
								     * @param $image
							 | 
						||
| 
								 | 
							
								     * @param $article_id
							 | 
						||
| 
								 | 
							
								     * @throws \Exception
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/7 9:52
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function addArticleImage($image, $article_id)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!empty($image)) {
							 | 
						||
| 
								 | 
							
								            $images = [];
							 | 
						||
| 
								 | 
							
								            foreach ($image as $item) {
							 | 
						||
| 
								 | 
							
								                $images[] = [
							 | 
						||
| 
								 | 
							
								                    'article_id' => $article_id,
							 | 
						||
| 
								 | 
							
								                    'image' => $item,
							 | 
						||
| 
								 | 
							
								                ];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            (new CommunityArticleImage())->saveAll($images);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 关注用户
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/5 15:44
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function followRelation($user_id, $post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            if (!isset($post['follow_id']) || !isset($post['status'])) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('参数缺失');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if ($user_id == $post['follow_id']) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('不可关注自己喔');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 要关注的用户是否存在
							 | 
						||
| 
								 | 
							
								            $follow = User::where(['del' => 0, 'id' => $post['follow_id']])->findOrEmpty();
							 | 
						||
| 
								 | 
							
								            if ($follow->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('该用户信息缺失');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 是否已有关注记录
							 | 
						||
| 
								 | 
							
								            $where = ['user_id' => $user_id, 'follow_id' => $post['follow_id']];
							 | 
						||
| 
								 | 
							
								            $relation = CommunityFollow::where($where)->findOrEmpty();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 取消关注
							 | 
						||
| 
								 | 
							
								            if ($relation->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                CommunityFollow::create([
							 | 
						||
| 
								 | 
							
								                    'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								                    'follow_id' => $post['follow_id'],
							 | 
						||
| 
								 | 
							
								                    'status' => $post['status']
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                CommunityFollow::where(['id' => $relation['id']])->update([
							 | 
						||
| 
								 | 
							
								                    'status' => $post['status']
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 点赞
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $post
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/9 15:39
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function giveLike($user_id, $post)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        try {
							 | 
						||
| 
								 | 
							
								            if (!isset($post['status']) || !isset($post['id'])) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('参数缺失');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (isset($post['type']) && !in_array($post['type'], CommunityLikeEnum::LIKE_TYPE)) {
							 | 
						||
| 
								 | 
							
								                throw new \Exception('类型错误');
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $type = $post['type'] ?? CommunityLikeEnum::TYPE_ARTICLE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            $where = [
							 | 
						||
| 
								 | 
							
								                'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								                'relation_id' => $post['id'],
							 | 
						||
| 
								 | 
							
								                'type' => $type
							 | 
						||
| 
								 | 
							
								            ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 点赞
							 | 
						||
| 
								 | 
							
								            if ($post['status']) {
							 | 
						||
| 
								 | 
							
								                $record = CommunityLike::where($where)->findOrEmpty();
							 | 
						||
| 
								 | 
							
								                if (!$record->isEmpty()) {
							 | 
						||
| 
								 | 
							
								                    return true;
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                CommunityLike::create([
							 | 
						||
| 
								 | 
							
								                    'type' => $type,
							 | 
						||
| 
								 | 
							
								                    'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								                    'relation_id' => $post['id'],
							 | 
						||
| 
								 | 
							
								                ]);
							 | 
						||
| 
								 | 
							
								                if ($type == CommunityLikeEnum::TYPE_ARTICLE) {
							 | 
						||
| 
								 | 
							
								                    CommunityArticle::incLike($post['id']);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    CommunityComment::incLike($post['id']);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								                return true;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            // 取消点赞
							 | 
						||
| 
								 | 
							
								            $res = CommunityLike::where($where)->delete();
							 | 
						||
| 
								 | 
							
								            if ($res) {
							 | 
						||
| 
								 | 
							
								                if ($type == CommunityLikeEnum::TYPE_ARTICLE) {
							 | 
						||
| 
								 | 
							
								                    CommunityArticle::decLike($post['id']);
							 | 
						||
| 
								 | 
							
								                } else {
							 | 
						||
| 
								 | 
							
								                    CommunityComment::decLike($post['id']);
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            return true;
							 | 
						||
| 
								 | 
							
								        } catch (\Exception $e) {
							 | 
						||
| 
								 | 
							
								            self::$error = $e->getMessage();
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取关注的文章列表
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/6 9:48
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getFollowArticle($user_id, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $follow_ids = CommunityFollow::where(['user_id' => $user_id])->column('follow_id');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $lists = CommunityArticle::with([
							 | 
						||
| 
								 | 
							
								            'images',
							 | 
						||
| 
								 | 
							
								            'user' => function ($query) {
							 | 
						||
| 
								 | 
							
								                $query->field(['id', 'nickname', 'avatar']);
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            'topic' => function ($query) {
							 | 
						||
| 
								 | 
							
								                $query->field(['id', 'name']);
							 | 
						||
| 
								 | 
							
								            }])
							 | 
						||
| 
								 | 
							
								            ->where(['status' => CommunityArticleEnum::STATUS_SUCCESS, 'del' => 0])
							 | 
						||
| 
								 | 
							
								            ->whereIn('user_id', $follow_ids)
							 | 
						||
| 
								 | 
							
								            ->page($page, $size)
							 | 
						||
| 
								 | 
							
								            ->order(['id' => 'desc', 'like' => 'desc'])
							 | 
						||
| 
								 | 
							
								            ->append(['goods_data', 'shop_data'])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = CommunityArticle::where(['status' => CommunityArticleEnum::STATUS_SUCCESS, 'del' => 0])
							 | 
						||
| 
								 | 
							
								            ->whereIn('user_id', $follow_ids)
							 | 
						||
| 
								 | 
							
								            ->count();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $likes = CommunityLike::where([
							 | 
						||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								            'type' => CommunityLikeEnum::TYPE_ARTICLE
							 | 
						||
| 
								 | 
							
								        ])->column('relation_id');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($lists as $item) {
							 | 
						||
| 
								 | 
							
								            $item['user']['avatar'] = UrlServer::getFileUrl($item['user']['avatar']);
							 | 
						||
| 
								 | 
							
								            $item['create_time'] = friend_date(strtotime($item['create_time']));
							 | 
						||
| 
								 | 
							
								            $item['total_goods'] = count($item['goods']);
							 | 
						||
| 
								 | 
							
								            $item['total_shop'] = count($item['shop']);
							 | 
						||
| 
								 | 
							
								            $item['total_comment'] = 0;
							 | 
						||
| 
								 | 
							
								            $item['is_like'] = in_array($item['id'], $likes) ? 1 : 0;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 清除未读缓存
							 | 
						||
| 
								 | 
							
								        CommunityArticleLogic::delUnRead($user_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = [
							 | 
						||
| 
								 | 
							
								            'list' => $lists->toArray(),
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 文章关联商品或店铺
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param string $type
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/10 17:05
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getRelationGoodsOrShop($get, $type)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (empty($get['id'])) {
							 | 
						||
| 
								 | 
							
								            return [];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $article = CommunityArticle::findOrEmpty($get['id']);
							 | 
						||
| 
								 | 
							
								        if ($article->isEmpty() || $article['del'] == 1) {
							 | 
						||
| 
								 | 
							
								            return [];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($type == 'goods') {
							 | 
						||
| 
								 | 
							
								            $field = ['id', 'image', 'name', 'min_price' => 'goods_price', 'shop_id'];
							 | 
						||
| 
								 | 
							
								            $lists = Goods::field($field)
							 | 
						||
| 
								 | 
							
								                ->where('id', 'in', $article['goods'])
							 | 
						||
| 
								 | 
							
								                ->select()
							 | 
						||
| 
								 | 
							
								                ->toArray();
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            $field = ['id', 'name', 'logo'];
							 | 
						||
| 
								 | 
							
								            $lists = Shop::field($field)
							 | 
						||
| 
								 | 
							
								                ->where('id', 'in', $article['shop'])
							 | 
						||
| 
								 | 
							
								                ->select()
							 | 
						||
| 
								 | 
							
								                ->toArray();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            foreach ($lists as &$item) {
							 | 
						||
| 
								 | 
							
								                $item['logo'] = UrlServer::getFileUrl($item['logo']);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $lists;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取作品列表
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/6 10:46
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getWorksLists($user_id, $get, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $field = ['id', 'image', 'content', 'like', 'status', 'create_time', 'audit_remark'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // 文章查询条件
							 | 
						||
| 
								 | 
							
								        $where = [['user_id', '=', $user_id]];
							 | 
						||
| 
								 | 
							
								        if (!empty($get['user_id'])) {
							 | 
						||
| 
								 | 
							
								            $where = [['user_id', '=', $get['user_id']]];
							 | 
						||
| 
								 | 
							
								            $where[] = ['status', '=', CommunityArticleEnum::STATUS_SUCCESS];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $where[] = ['del', '=', 0];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = CommunityArticle::where($where)->count();
							 | 
						||
| 
								 | 
							
								        $lists = CommunityArticle::field($field)
							 | 
						||
| 
								 | 
							
								            ->where($where)
							 | 
						||
| 
								 | 
							
								            ->page($page, $size)
							 | 
						||
| 
								 | 
							
								            ->order(['id' => 'desc', 'like' => 'desc'])
							 | 
						||
| 
								 | 
							
								            ->append(['status_desc'])
							 | 
						||
| 
								 | 
							
								            ->select();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $likes = CommunityLike::where([
							 | 
						||
| 
								 | 
							
								            'user_id' => $user_id,
							 | 
						||
| 
								 | 
							
								            'type' => CommunityLikeEnum::TYPE_ARTICLE
							 | 
						||
| 
								 | 
							
								        ])->column('relation_id');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($lists as $item) {
							 | 
						||
| 
								 | 
							
								            $item['create_time'] = friend_date(strtotime($item['create_time']));
							 | 
						||
| 
								 | 
							
								            $item['is_like'] = in_array($item['id'], $likes) ? 1 : 0;
							 | 
						||
| 
								 | 
							
								            $item['audit_remark_desc'] = CommunityArticleEnum::getStatusRemarkDesc($item, false);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = [
							 | 
						||
| 
								 | 
							
								            'list' => $lists->toArray(),
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 获取点赞的列表
							 | 
						||
| 
								 | 
							
								     * @param $user_id
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/6 14:21
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getLikeLists($user_id, $get, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $where = [['user_id', '=', $user_id]];
							 | 
						||
| 
								 | 
							
								        if (!empty($get['user_id'])) {
							 | 
						||
| 
								 | 
							
								            $where = [['user_id', '=', $get['user_id']]];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $article_ids = CommunityLike::where($where)
							 | 
						||
| 
								 | 
							
								            ->where(['type' => CommunityLikeEnum::TYPE_ARTICLE])
							 | 
						||
| 
								 | 
							
								            ->column('relation_id');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $article_where[] = ['del', '=', 0];
							 | 
						||
| 
								 | 
							
								        $article_where[] = ['status', '=', CommunityArticleEnum::STATUS_SUCCESS];
							 | 
						||
| 
								 | 
							
								        $article_where[] = ['id', 'in', $article_ids];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $field = ['id', 'image', 'content', 'like', 'status', 'create_time', 'user_id'];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $count = CommunityArticle::where($article_where)->count();
							 | 
						||
| 
								 | 
							
								        $lists = CommunityArticle::with(['user' => function($query) {
							 | 
						||
| 
								 | 
							
								            $query->field(['id', 'nickname', 'avatar']);
							 | 
						||
| 
								 | 
							
								        }])->field($field)
							 | 
						||
| 
								 | 
							
								            ->where($article_where)
							 | 
						||
| 
								 | 
							
								            ->page($page, $size)
							 | 
						||
| 
								 | 
							
								            ->order(['id' => 'desc', 'like' => 'desc'])
							 | 
						||
| 
								 | 
							
								            ->select()
							 | 
						||
| 
								 | 
							
								            ->bindAttr('user', ['nickname', 'avatar'])
							 | 
						||
| 
								 | 
							
								            ->hidden(['user']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($lists as $item) {
							 | 
						||
| 
								 | 
							
								            $item['create_time'] = friend_date(strtotime($item['create_time']));
							 | 
						||
| 
								 | 
							
								            $item['is_like'] = 1;
							 | 
						||
| 
								 | 
							
								            $item['avatar'] = !empty($item['avatar']) ? UrlServer::getFileUrl($item['avatar']) : '';
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = [
							 | 
						||
| 
								 | 
							
								            'list' => $lists->toArray(),
							 | 
						||
| 
								 | 
							
								            'page' => $page,
							 | 
						||
| 
								 | 
							
								            'size' => $size,
							 | 
						||
| 
								 | 
							
								            'count' => $count,
							 | 
						||
| 
								 | 
							
								            'more' => is_more($count, $page, $size)
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @notes 话题关联文章
							 | 
						||
| 
								 | 
							
								     * @param $get
							 | 
						||
| 
								 | 
							
								     * @param $page
							 | 
						||
| 
								 | 
							
								     * @param $size
							 | 
						||
| 
								 | 
							
								     * @return array|false
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DataNotFoundException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\DbException
							 | 
						||
| 
								 | 
							
								     * @throws \think\db\exception\ModelNotFoundException
							 | 
						||
| 
								 | 
							
								     * @author 段誉
							 | 
						||
| 
								 | 
							
								     * @date 2022/5/6 16:22
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getTopicArticle($get, $page, $size)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $topic_id = $get['topic_id'] ?? 0;
							 | 
						||
| 
								 | 
							
								        $topic = CommunityTopic::findOrEmpty($topic_id);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if ($topic->isEmpty()) {
							 | 
						||
| 
								 | 
							
								            self::$error = '话题信息不存在';
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $result = [
							 | 
						||
| 
								 | 
							
								            'click' => $topic['click'],
							 | 
						||
| 
								 | 
							
								            'lists' => self::getArticleLists($get, $page, $size),
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |