203 lines
5.5 KiB
PHP
203 lines
5.5 KiB
PHP
<?php
|
|
|
|
|
|
namespace app\admin\logic\community;
|
|
|
|
|
|
use app\common\basics\Logic;
|
|
use app\common\enum\CommunityLikeEnum;
|
|
use app\common\model\community\CommunityArticle;
|
|
use app\common\model\community\CommunityComment;
|
|
use app\common\model\community\CommunityLike;
|
|
use app\common\model\community\CommunityTopic;
|
|
use app\common\logic\CommunityArticleLogic as CommonArticleLogic;
|
|
use app\common\server\UrlServer;
|
|
use think\Exception;
|
|
use think\facade\Db;
|
|
|
|
|
|
/**
|
|
* 种草社区文章逻辑
|
|
* Class CommunityArticleLogic
|
|
* @package app\admin\logic\community
|
|
*/
|
|
class CommunityArticleLogic extends Logic
|
|
{
|
|
|
|
/**
|
|
* @notes 文章列表
|
|
* @param $get
|
|
* @return array
|
|
* @author 段誉
|
|
* @date 2022/5/10 11:07
|
|
*/
|
|
public static function lists($get)
|
|
{
|
|
$where = [
|
|
['a.del', '=', 0]
|
|
];
|
|
|
|
if (!empty($get['keyword'])) {
|
|
$where[] = ['u.sn|u.nickname|u.mobile', 'like', '%' . $get['keyword'] . '%'];
|
|
}
|
|
|
|
if (!empty($get['content'])) {
|
|
$where[] = ['a.content', 'like', '%' . $get['content'] . '%'];
|
|
}
|
|
|
|
if (isset($get['status']) && $get['status'] != '') {
|
|
$where[] = ['a.status', '=', $get['status']];
|
|
}
|
|
|
|
if (isset($get['start_time']) && $get['start_time'] != '') {
|
|
$where[] = ['a.audit_time', '>=', strtotime($get['start_time'])];
|
|
}
|
|
|
|
if (isset($get['end_time']) && $get['end_time'] != '') {
|
|
$where[] = ['a.audit_time', '<=', strtotime($get['end_time'])];
|
|
}
|
|
|
|
$model = new CommunityArticle();
|
|
$lists = $model->with(['images'])->alias('a')
|
|
->field('a.*,u.nickname,u.avatar,u.sn')
|
|
->join('user u', 'u.id = a.user_id')
|
|
->where($where)
|
|
->order(['id' => 'desc'])
|
|
->append(['status_desc'])
|
|
->paginate([
|
|
'page' => $get['page'],
|
|
'list_rows' => $get['limit'],
|
|
'var_page' => 'page'
|
|
])
|
|
->toArray();
|
|
|
|
foreach ($lists['data'] as &$item) {
|
|
$item['avatar'] = !empty($item['avatar']) ? UrlServer::getFileUrl($item['avatar']) : '';
|
|
}
|
|
|
|
return ['count' => $lists['total'], 'lists' => $lists['data']];
|
|
}
|
|
|
|
|
|
/**
|
|
* @notes 文章详情
|
|
* @param $id
|
|
* @return array
|
|
* @author 段誉
|
|
* @date 2022/5/10 16:53
|
|
*/
|
|
public static function detail($id)
|
|
{
|
|
$detail = CommunityArticle::with(['images', 'topic', 'user' => function ($query) {
|
|
$query->field(['id', 'nickname', 'sn']);
|
|
}])
|
|
->append(['shop_data', 'goods_data', 'status_desc'])
|
|
->findOrEmpty($id);
|
|
|
|
$detail['cate_name'] = $detail['topic']['cate']['name'] ?? '';
|
|
$detail['audit_time'] = date('Y-m-d H:i:s', $detail['audit_time']);
|
|
return $detail->toArray();
|
|
}
|
|
|
|
|
|
/**
|
|
* @notes 删除文章
|
|
* @param $id
|
|
* @return bool
|
|
* @author 段誉
|
|
* @date 2022/5/10 16:34
|
|
*/
|
|
public static function del($id)
|
|
{
|
|
Db::startTrans();
|
|
try {
|
|
$article = CommunityArticle::find($id);
|
|
$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 $post
|
|
* @return bool
|
|
* @author 段誉
|
|
* @date 2022/5/12 16:57
|
|
*/
|
|
public static function audit($post)
|
|
{
|
|
Db::startTrans();
|
|
try {
|
|
$article = CommunityArticle::findOrEmpty($post['id']);
|
|
$article->status = $post['status'];
|
|
$article->audit_remark = $post['audit_remark'] ?? '';
|
|
$article->audit_time = time();
|
|
$article->save();
|
|
|
|
// 通知粉丝有新文章发布
|
|
CommonArticleLogic::noticeFans($article['user_id'], $post['status']);
|
|
|
|
Db::commit();
|
|
return true;
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
self::$error = $e->getMessage();
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* @notes 文章关联评论及点赞
|
|
* @param $get
|
|
* @return array
|
|
* @throws \think\db\exception\DbException
|
|
* @author 段誉
|
|
* @date 2022/5/11 10:14
|
|
*/
|
|
public static function getRelationData($get)
|
|
{
|
|
$type = $get['type'] ?? 'comment';
|
|
if ($type == 'comment') {
|
|
$lists = CommunityComment::with(['user'])
|
|
->where([
|
|
'del' => 0,
|
|
'article_id' => $get['id'],
|
|
])->paginate([
|
|
'page' => $get['page'],
|
|
'list_rows' => $get['limit'],
|
|
'var_page' => 'page'
|
|
])
|
|
->toArray();
|
|
} else {
|
|
$lists = CommunityLike::with(['user'])
|
|
->where([
|
|
'relation_id' => $get['id'],
|
|
'type' => CommunityLikeEnum::TYPE_ARTICLE
|
|
])
|
|
->paginate([
|
|
'page' => $get['page'],
|
|
'list_rows' => $get['limit'],
|
|
'var_page' => 'page'
|
|
])
|
|
->toArray();
|
|
}
|
|
return ['count' => $lists['total'], 'lists' => $lists['data']];
|
|
}
|
|
|
|
|
|
} |