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']];
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |