275 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			275 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
namespace app\controller\api;
 | 
						|
 | 
						|
use app\model\AccountRecord;
 | 
						|
use app\model\Disease;
 | 
						|
use app\repository\ArchivesRepository;
 | 
						|
use Exception;
 | 
						|
use think\db\exception\DataNotFoundException;
 | 
						|
use think\db\exception\DbException;
 | 
						|
use think\db\exception\ModelNotFoundException;
 | 
						|
use think\response\Json;
 | 
						|
use app\exception\RepositoryException;
 | 
						|
 | 
						|
class Archives extends Base
 | 
						|
{
 | 
						|
    protected $noNeedLogin = ['course', 'detail'];
 | 
						|
 | 
						|
    /**
 | 
						|
     * 病种列表
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws DataNotFoundException
 | 
						|
     * @throws DbException
 | 
						|
     * @throws ModelNotFoundException
 | 
						|
     */
 | 
						|
    public function disease(): Json
 | 
						|
    {
 | 
						|
        $data = Disease::getListByPid();
 | 
						|
 | 
						|
        return $this->json(0, 'success', $data);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 病种问题文章列表 分类问题
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     */
 | 
						|
    public function diseaseQuestion(): Json
 | 
						|
    {
 | 
						|
        $diseaseId = input('disease_id/d', 0);
 | 
						|
 | 
						|
        try {
 | 
						|
            $data = ArchivesRepository::getInstance()->diseaseQuestion($diseaseId);
 | 
						|
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '操作失败');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 恒美小课堂
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function course(): Json
 | 
						|
    {
 | 
						|
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						|
        $courseId  = input('course_id/d', 0);
 | 
						|
        $page      = input('page/d', 1);
 | 
						|
        $size      = input('size/d', 20);
 | 
						|
 | 
						|
        try {
 | 
						|
            $data = ArchivesRepository::getInstance()->course($accountId, $courseId, $page, $size);
 | 
						|
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '操作失败');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 热门推荐
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function hot(): Json
 | 
						|
    {
 | 
						|
        $categoryId = input('category_id/d', 0);
 | 
						|
        $page       = input('page/d', 1);
 | 
						|
        $size       = input('size/d', 20);
 | 
						|
        $keyword    = input('keyword/s', '');
 | 
						|
        $accountId  = $this->request->user['user_id'] ?? 0;
 | 
						|
 | 
						|
        try {
 | 
						|
            $where[] = ['hot', '=', 1];
 | 
						|
            if (!empty($keyword)) {
 | 
						|
 | 
						|
                $keyword = trim($keyword);
 | 
						|
                $where[] = ['title|subtitle|disease_name|doctor_name', 'like', '%'.$keyword.'%'];
 | 
						|
                AccountRecord::saveSearch($accountId, $keyword);
 | 
						|
            }
 | 
						|
 | 
						|
            $order = ['sort' => 'desc'];
 | 
						|
            $data = ArchivesRepository::getInstance()->category($accountId, $categoryId, $where, $page, $size, $order);
 | 
						|
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '操作失败');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取指定栏目内容列表
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function category(): Json
 | 
						|
    {
 | 
						|
        $categoryId = input('category_id/d', 0);
 | 
						|
        $page       = input('page/d', 1);
 | 
						|
        $size       = input('size/d', 20);
 | 
						|
        $keyword    = input('keyword/s', '');
 | 
						|
        $diseaseIds = input('disease_id/s', '');//病种 多个用逗号分隔
 | 
						|
        $accountId  = $this->request->user['user_id'] ?? 0;
 | 
						|
 | 
						|
        try {
 | 
						|
            $where = [];
 | 
						|
            if (!empty($keyword)) {
 | 
						|
                $keyword = trim($keyword);
 | 
						|
                $where[] = ['title|subtitle|disease_name|doctor_name', 'like', '%'.$keyword.'%'];
 | 
						|
                AccountRecord::saveSearch($accountId, $keyword);
 | 
						|
            }
 | 
						|
 | 
						|
            if (!empty($diseaseIds)) {
 | 
						|
                $where[] = ['disease_id', 'in', explode(',', $diseaseIds)];
 | 
						|
            }
 | 
						|
 | 
						|
            $order = ['sort' => 'desc'];
 | 
						|
            $data = ArchivesRepository::getInstance()->category($accountId, $categoryId, $where, $page, $size, $order);
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '操作失败');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 获取关于我们栏目内容列表
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function about(): Json
 | 
						|
    {
 | 
						|
        $categoryId = input('category_id/d', 0);
 | 
						|
        $page       = input('page/d', 1);
 | 
						|
        $size       = input('size/d', 20);
 | 
						|
        $exceptId   = input('except_id/d', 0);
 | 
						|
        $keyword    = input('keyword/s', '');
 | 
						|
        $accountId  = $this->request->user['user_id'] ?? 0;
 | 
						|
 | 
						|
        try {
 | 
						|
            $where = [];
 | 
						|
            if (!empty($keyword)) {
 | 
						|
                $keyword = trim($keyword);
 | 
						|
                $where[] = ['title|subtitle|disease_name|doctor_name', 'like', '%'.$keyword.'%'];
 | 
						|
                AccountRecord::saveSearch($accountId, $keyword);
 | 
						|
            }
 | 
						|
 | 
						|
            if ($exceptId > 0) {
 | 
						|
                $where[] = ['id', '<>', $exceptId];
 | 
						|
            }
 | 
						|
 | 
						|
            $order = ['published_at' => 'desc'];
 | 
						|
 | 
						|
            $data = ArchivesRepository::getInstance()->about($accountId, $categoryId, $where, $page, $size, $order);
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '操作失败');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 内容详情
 | 
						|
     *
 | 
						|
     * @return Json
 | 
						|
     * @throws Exception
 | 
						|
     */
 | 
						|
    public function detail(): Json
 | 
						|
    {
 | 
						|
        $id        = input('id/d', 0);
 | 
						|
        $shareId   = input('share_id/d', 0);//分享人ID
 | 
						|
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						|
 | 
						|
        try {
 | 
						|
            $data = ArchivesRepository::getInstance()->detail($id, $accountId, $shareId);
 | 
						|
            return $this->json(0, 'success', $data);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        } catch (Exception $e) {
 | 
						|
            ArchivesRepository::log($e->getMessage(), $e);
 | 
						|
            return $this->json(5000, '获取详情失败');
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 点赞、收藏
 | 
						|
     */
 | 
						|
    public function record(): Json
 | 
						|
    {
 | 
						|
        if (!$this->request->isPost()) {
 | 
						|
            return $this->json(4000, '无效请求');
 | 
						|
        }
 | 
						|
 | 
						|
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						|
        $archiveId = $this->request->param('archive_id/d', 0);
 | 
						|
        $action    = $this->request->param('action/s', '');
 | 
						|
 | 
						|
        try {
 | 
						|
            ArchivesRepository::getInstance()->record($accountId, $archiveId, $action);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->json();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 取消 点赞、收藏
 | 
						|
     */
 | 
						|
    public function unRecord(): Json
 | 
						|
    {
 | 
						|
        if (!$this->request->isPost()) {
 | 
						|
            return $this->json(4000, '无效请求');
 | 
						|
        }
 | 
						|
 | 
						|
        $accountId = $this->request->user['user_id'] ?? 0;
 | 
						|
        $archiveId = $this->request->param('archive_id/d', 0);
 | 
						|
        $action    = $this->request->param('action/s', '');
 | 
						|
 | 
						|
        try {
 | 
						|
            ArchivesRepository::getInstance()->unRecord($accountId, $archiveId, $action);
 | 
						|
        } catch (RepositoryException $e) {
 | 
						|
            return $this->json(4001, $e->getMessage());
 | 
						|
        }
 | 
						|
 | 
						|
        return $this->json();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 用户内容收藏列表
 | 
						|
     */
 | 
						|
    public function collects(): Json
 | 
						|
    {
 | 
						|
        $accountId  = $this->request->user['user_id'] ?? 0;
 | 
						|
        $categoryId = $this->request->param('category_id/d', 0);
 | 
						|
        $page       = $this->request->param('page/d', 1);
 | 
						|
        $size       = $this->request->param('size/d', 10);
 | 
						|
 | 
						|
        $page = $page <= 0 ? 1 : $page;
 | 
						|
        $size = $size <= 0 ? 10 : $size;
 | 
						|
        $data = ArchivesRepository::getInstance()->accountCollects($accountId, $categoryId, $page, $size);
 | 
						|
        return $this->json(0, 'success', $data);
 | 
						|
    }
 | 
						|
} |