124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
<?php
 | 
						|
 | 
						|
namespace app\traits\account;
 | 
						|
 | 
						|
use Exception;
 | 
						|
use think\Collection;
 | 
						|
use app\model\AccountRecord;
 | 
						|
use think\db\exception\DbException;
 | 
						|
use app\exception\RepositoryException;
 | 
						|
use think\db\exception\DataNotFoundException;
 | 
						|
use think\db\exception\ModelNotFoundException;
 | 
						|
 | 
						|
trait AccountRecordTrait
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * 收藏|关注
 | 
						|
     *
 | 
						|
     * @param  int  $accountId
 | 
						|
     * @param  int  $goodsId
 | 
						|
     * @param  string  $type
 | 
						|
     * @return bool
 | 
						|
     * @throws DataNotFoundException
 | 
						|
     * @throws DbException
 | 
						|
     * @throws ModelNotFoundException
 | 
						|
     */
 | 
						|
    public function collectGoods(int $accountId, int $goodsId, string $type): bool
 | 
						|
    {
 | 
						|
        return AccountRecord::collect($accountId, $goodsId, $type);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 取消收藏|关注
 | 
						|
     *
 | 
						|
     * @param  int  $accountId
 | 
						|
     * @param  int  $goodsId
 | 
						|
     * @return bool
 | 
						|
     * @throws DataNotFoundException
 | 
						|
     * @throws DbException
 | 
						|
     * @throws ModelNotFoundException
 | 
						|
     */
 | 
						|
    public function unCollectGoods(int $accountId, int $goodsId): bool
 | 
						|
    {
 | 
						|
        return AccountRecord::unCollect($accountId, $goodsId);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取指定账户收藏列表
 | 
						|
     *
 | 
						|
     * @param  int  $accountId
 | 
						|
     * @param  string  $type  goods|auction|special
 | 
						|
     * @return array
 | 
						|
     * @throws RepositoryException|Exception
 | 
						|
     */
 | 
						|
    public function getCollectedIds(int $accountId, string $type = ''): array
 | 
						|
    {
 | 
						|
        if ($type) {
 | 
						|
            $where[] = ['type', '=', $type];
 | 
						|
        }
 | 
						|
        $where[] = ['account_id', '=', $accountId];
 | 
						|
        $where[] = ['action', '=', AccountRecord::ACTION_COLLECT];
 | 
						|
        $where[] = ['is_collected', '=', 1];
 | 
						|
        return AccountRecord::findList($where)['list']->column('goods_id');
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 是否收藏
 | 
						|
     *
 | 
						|
     * @param  int  $accountId
 | 
						|
     * @param  int  $goodsId
 | 
						|
     * @param  string  $type  goods|auction|special
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function isCollected(int $accountId, int $goodsId, string $type): bool
 | 
						|
    {
 | 
						|
        return AccountRecord::where('account_id', $accountId)
 | 
						|
                ->where('goods_id', $goodsId)
 | 
						|
                ->where('type', $type)
 | 
						|
                ->where('action', AccountRecord::ACTION_COLLECT)
 | 
						|
                ->where('is_collected', AccountRecord::COLLECTED)
 | 
						|
                ->count() > 0;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取用户收藏记录
 | 
						|
     *
 | 
						|
     * @param  int  $accountId
 | 
						|
     * @param  string  $type
 | 
						|
     * @param  int  $page
 | 
						|
     * @param  int  $size
 | 
						|
     * @return Collection
 | 
						|
     * @throws DataNotFoundException
 | 
						|
     * @throws DbException
 | 
						|
     * @throws ModelNotFoundException
 | 
						|
     */
 | 
						|
    public function fetchCollection(int $accountId, string $type = '', int $page = 1, int $size = 20): Collection
 | 
						|
    {
 | 
						|
        return AccountRecord::with(['goods'])
 | 
						|
            ->when(!empty($type), function ($q) use ($type) {
 | 
						|
                $q->where('type', $type);
 | 
						|
            })
 | 
						|
            ->where('account_id', $accountId)
 | 
						|
            ->where('is_collected', AccountRecord::COLLECTED)
 | 
						|
            ->where('type', $type)
 | 
						|
            ->page($page, $size)
 | 
						|
            ->select();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 批量查询是否收藏
 | 
						|
     * 返回收藏的ID列表
 | 
						|
     *
 | 
						|
     * @param  int  $accountId 用户ID
 | 
						|
     * @param  array  $ids 记录ID
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function findCollectionByIds(int $accountId, array $ids): array
 | 
						|
    {
 | 
						|
        return AccountRecord::where('account_id', $accountId)
 | 
						|
            ->where('id', 'in', $ids)
 | 
						|
            ->where('is_collected', AccountRecord::COLLECTED)
 | 
						|
            ->where('type', AccountRecord::ACTION_COLLECT)
 | 
						|
            ->column('id');
 | 
						|
    }
 | 
						|
} |