306 lines
8.8 KiB
PHP
306 lines
8.8 KiB
PHP
<?php
|
||
|
||
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
|
||
|
||
namespace app\common\repositories\system;
|
||
|
||
|
||
use app\common\dao\system\RelevanceDao;
|
||
use app\common\repositories\BaseRepository;
|
||
use think\exception\ValidateException;
|
||
use think\facade\Db;
|
||
|
||
/**
|
||
* @mixin RelevanceDao
|
||
*/
|
||
class RelevanceRepository extends BaseRepository
|
||
{
|
||
|
||
//文章关联商品
|
||
const TYPE_COMMUNITY_PRODUCT = 'community_product';
|
||
//社区关注
|
||
const TYPE_COMMUNITY_FANS = 'fans';
|
||
//社区文章点赞
|
||
const TYPE_COMMUNITY_START = 'community_start';
|
||
//社区评论点赞
|
||
const TYPE_COMMUNITY_REPLY_START = 'community_reply_start';
|
||
//商户权限
|
||
const TYPE_MERCHANT_AUTH = 'mer_auth';
|
||
|
||
//指定范围类型
|
||
//0全部商品
|
||
const TYPE_ALL = 'scope_type';
|
||
//指定商品
|
||
const SCOPE_TYPE_PRODUCT = 'scope_type_product';
|
||
//指定分类
|
||
const SCOPE_TYPE_CATEGORY = 'scope_type_category';
|
||
//指定商户
|
||
const SCOPE_TYPE_STORE = 'scope_type_store';
|
||
//指定商户标签
|
||
const SCOPE_TYPE_PRODUCT_LABEL = 'scope_type_product_label';
|
||
|
||
//价格说明关联分类
|
||
const PRICE_RULE_CATEGORY = 'price_rule_category';
|
||
|
||
//商品参数关联
|
||
const PRODUCT_PARAMES_CATE = 'product_params_cate';
|
||
|
||
|
||
//DIY默认模板适用范围 0. 指定店铺、1. 指定商户分类、2. 指定店铺类型、3. 指定商户类别
|
||
const MER_DIY_SCOPE = [
|
||
'mer_diy_scope_0',
|
||
'mer_diy_scope_1',
|
||
'mer_diy_scope_2',
|
||
'mer_diy_scope_3',
|
||
];
|
||
|
||
protected $dao;
|
||
/**
|
||
* RelevanceRepository constructor.
|
||
* @param RelevanceDao $dao
|
||
*/
|
||
public function __construct(RelevanceDao $dao)
|
||
{
|
||
$this->dao = $dao;
|
||
}
|
||
|
||
/**
|
||
* TODO 添加
|
||
* @param int $leftId
|
||
* @param int $rightId
|
||
* @param string $type
|
||
* @param $check
|
||
* @return bool
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function create(int $leftId, int $rightId, string $type, bool $check = false)
|
||
{
|
||
if ($check && $this->checkHas($leftId, $rightId, $type)) {
|
||
return false;
|
||
}
|
||
$data = [
|
||
'left_id' => $leftId,
|
||
'right_id'=> $rightId,
|
||
'type' => $type,
|
||
];
|
||
try{
|
||
$this->dao->create($data);
|
||
return true;
|
||
} catch (\Exception $exception) {
|
||
throw new ValidateException('创建失败');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* TODO 删除
|
||
* @param int $leftId
|
||
* @param string $type
|
||
* @param int $rightId
|
||
* @return bool
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function destory(int $leftId, int $rightId, string $type)
|
||
{
|
||
return $this->dao->getSearch([
|
||
'left_id' => $leftId,
|
||
'right_id'=> $rightId,
|
||
'type' => $type,
|
||
])->delete();
|
||
}
|
||
|
||
/**
|
||
* TODO 检测是否存在
|
||
* @param int $leftId
|
||
* @param int $rightId
|
||
* @param string $type
|
||
* @return int
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function checkHas(int $leftId, $rightId, string $type)
|
||
{
|
||
return $this->dao->getSearch([
|
||
'left_id' => $leftId,
|
||
'right_id'=> $rightId,
|
||
'type' => $type,
|
||
])->count();
|
||
}
|
||
|
||
/**
|
||
* TODO 根据左键批量删除
|
||
* @param int $leftId
|
||
* @param $type
|
||
* @return bool
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function batchDelete(int $leftId, $type)
|
||
{
|
||
return $this->dao->getSearch([
|
||
'left_id' => $leftId,
|
||
'type' => $type,
|
||
])->delete();
|
||
}
|
||
|
||
/**
|
||
* TODO 关注我的人
|
||
* @param int $uid
|
||
* @return array
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function getUserFans(int $uid, int $page, int $limit)
|
||
{
|
||
$query = $this->dao->getSearch([
|
||
'right_id' => $uid,
|
||
'type' => self::TYPE_COMMUNITY_FANS,
|
||
])->with([
|
||
'fans' => function($query) {
|
||
$query->field('uid,avatar,nickname,count_fans,count_content');
|
||
}
|
||
]);
|
||
$count = $query->count();
|
||
$list = $query->page($page, $limit)->select()->append(['is_start']);
|
||
$data = [];
|
||
foreach ($list as $item) {
|
||
if (!$item['fans']) {
|
||
$item->delete();
|
||
$count -= 1;
|
||
}
|
||
$data[] = $item;
|
||
}
|
||
$list = $data;
|
||
return compact('count','list');
|
||
}
|
||
|
||
/**
|
||
* TODO 我关注的人
|
||
* @param $uid
|
||
* @return array
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function getUserFocus(int $uid, int $page, int $limit)
|
||
{
|
||
$query = $this->dao->getSearch([
|
||
'left_id' => $uid,
|
||
'type' => self::TYPE_COMMUNITY_FANS,
|
||
])->with([
|
||
'focus' => function($query) {
|
||
$query->field('uid,avatar,nickname,count_fans,count_content');
|
||
}
|
||
]);
|
||
$count = $query->count();
|
||
$list = $query->page($page, $limit)->select()->append(['is_fans']);
|
||
$data = [];
|
||
foreach ($list as $item) {
|
||
if (!$item['focus']) {
|
||
$item->delete();
|
||
$count -= 1;
|
||
}
|
||
$data[] = $item;
|
||
}
|
||
$list = $data;
|
||
return compact('count','list');
|
||
}
|
||
|
||
|
||
/**
|
||
* TODO 我点赞过的文章
|
||
* @param int $uid
|
||
* @return \think\Collection
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function getUserStartCommunity(array $where, int $page, int $limit)
|
||
{
|
||
$query = $this->dao->joinUser($where)->with([
|
||
'community'=> function($query) use($where){
|
||
$query->with([
|
||
'author' => function($query){
|
||
$query->field('uid,real_name,status,avatar,nickname,count_start');
|
||
},
|
||
'is_start' => function($query) use ($where) {
|
||
$query->where('left_id',$where['uid']);
|
||
},
|
||
'topic' => function($query) {
|
||
$query->where('status', 1)->where('is_del',0);
|
||
$query->field('topic_id,topic_name,status,category_id,pic,is_del');
|
||
},
|
||
'relevance' => [
|
||
'spu' => function($query) {
|
||
$query->field('spu_id,store_name,image,price,product_type,activity_id,product_id');
|
||
}
|
||
],
|
||
'isFanss' => function($query) use($where){
|
||
$query->where('left_id',$where['uid']);
|
||
}]);
|
||
},
|
||
]);
|
||
$count = $query->count();
|
||
$list = $query->page($page, $limit)->select()->each(function ($item){
|
||
$item['time'] = date('m月d日', strtotime($item['create_time']));
|
||
$item['isFans'] = $item['isFanss'];
|
||
return $item;
|
||
});
|
||
|
||
return compact('count','list');
|
||
}
|
||
|
||
/**
|
||
* TODO 我点赞过的文章
|
||
* @param int $uid
|
||
* @return \think\Collection
|
||
* @author Qinii
|
||
* @day 10/28/21
|
||
*/
|
||
public function getUserStartCommunityByVideos(array $where, int $page, int $limit)
|
||
{
|
||
$query = $this->dao->joinUser($where)->with([
|
||
'community'=> function($query) {
|
||
$query->with(['author'=> function($query) {
|
||
$query->field('uid,avatar,nickname');
|
||
}]);
|
||
},
|
||
]);
|
||
$count = $query->count();
|
||
$list = $query->page($page, $limit)->select()->each(function ($item){
|
||
$item['time'] = date('m月d日', strtotime($item['create_time']));
|
||
return $item;
|
||
});
|
||
|
||
return compact('count','list');
|
||
}
|
||
|
||
public function getFieldCount(string $field, int $value, string $type)
|
||
{
|
||
return $this->dao->getSearch([$field => $value, 'type' => $type,])->count();
|
||
}
|
||
|
||
public function createMany(int $leftId, array $rightId, string $type)
|
||
{
|
||
if (!empty($rightId)) {
|
||
foreach ($rightId as $value) {
|
||
$res[] = [
|
||
'left_id' => $leftId,
|
||
'right_id' => $value,
|
||
'type' => $type,
|
||
];
|
||
}
|
||
$this->dao->insertAll($res);
|
||
}
|
||
}
|
||
|
||
}
|