BlogLogic.php 7.5 KB
<?php

namespace App\Http\Logic\Bside\Blog;

use App\Enums\Common\Code;
use App\Helper\Common;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\Blog;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use App\Models\RouteMap\RouteMap;
use Illuminate\Support\Facades\DB;

class BlogLogic extends BaseLogic
{
    const STATUS_TWO = 2;

    public function __construct()
    {
        parent::__construct();

        $this->model = new Blog();
        $this->param = $this->requestAll;
    }

    /**
     * @name :获取分类列表
     * @return array
     * @throws \App\Exceptions\BsideGlobalException
     * @author :liyuhang
     * @method
     */
    public function blog_get_category_list(){
        $this->map['status'] = 0;
        $this->map['project_id'] = $this->user['project_id'];
        $blogCategoryModel = new BlogCategoryModel();
        $cate_list = $blogCategoryModel->list($this->map,'sort');
        if($cate_list === false){
            $this->fail('error',Code::USER_ERROR);
        }
        $list = [];
        foreach ($cate_list as $v){
            $v = (array)$v;
            if ($v['pid'] == 0) {
                $v['sub'] = _get_child($v['id'], $cate_list);
                $list[]   = $v;
            }
        }
        return $this->success($list);
    }

    /**
     * @remark :保存数据
     * @name   :blogSave
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 11:49
     */
    public function blogSave(){
        //拼接参数
        DB::beginTransaction();
        try {
            $this->param = $this->paramProcessing($this->param);
            if(isset($this->param['id']) && !empty($this->param['id'])){
                //是否更新路由
                $id = $this->editNewsRoute($this->param['id'],$this->param['url']);
                $this->edit($this->param,['id'=>$this->param['id']]);
            }else{
                $id = $this->model->addReturnId($this->param);
            }
            $route = RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_BLOG, $id, $this->user['project_id']);
            $this->edit(['url'=>$route],['id'=>$id]);
            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
            $this->fail('error');
        }
        //通知更新
        $this->updateNotify(['project_id'=>$this->user['project_id'], 'type'=>RouteMap::SOURCE_BLOG, 'route'=>$route]);
        return $this->success();
    }

    /**
     * @remark :查看是否编辑路由
     * @name   :editCategoryRoute
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 11:05
     */
    public function editNewsRoute($id,$route){
        //生成一条删除路由记录
        $info = $this->model->read(['id'=>$id],['id','url']);
        if($info['url'] != $route){
            $data = [
                'source'=>RouteMap::SOURCE_BLOG,
                'route'=>$info['url'],
            ];
            $this->setRouteDeleteSave($data);
        }
        return $id;
    }

    /**
     * @name :编辑seo
     * @return void
     * @author :liyuhang
     * @method
     */
    public function edit_seo(){
        $this->param['operator_id'] = $this->user['id'];
        $rs = $this->edit($this->param,['id'=>$this->param['id']]);
        if($rs ===  false){
            $this->fail('error');
        }
        return $this->success();
    }


    /**
     * @name :获取数据详情
     * @return array
     * @author :liyuhang
     * @method
     */
    public function blog_info(){
        //读取缓存
        $info = Common::get_user_cache($this->model->getTable(),$this->param['id']);
        if(empty($info)){
            $info = $this->model->read($this->param);
            if($info === false){
                $this->fail('error');
            }
            //获取分类名称
            $blogCategoryLogic = new BlogCategoryLogic();
            $info = $blogCategoryLogic->get_category_name($info);
            //获取标签名称
            $blogLabelLogic = new BlogLabelLogic();
            $info = $blogLabelLogic->get_label_name($info);
            $info['url'] = $this->user['domain'] . $info['url'];
            $info['image_link'] = getImageUrl($info['image']);
            //写入缓存
            Common::set_user_cache($info,$this->model->getTable(),$this->param['id']);
        }
        return $this->success($info);
    }

    /**
     * @name :修改状态
     * @return array
     * @throws \App\Exceptions\BsideGlobalException
     * @author :liyuhang
     * @method
     */
    public function blog_status(){
        $this->param['operator_id'] = $this->user['id'];
        $rs = $this->model->edit($this->param,['id'=>['in',$this->param['id']]]);
        if($rs ===  false){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @name :删除
     * @return void
     * @author :liyuhang
     * @method
     */
    public function blog_del(){
        $ids = $this->param['id'];
        DB::beginTransaction();
        try {
            $this->param['id'] = ['in',$this->param['id']];
            $this->del($this->param,$ids);
            foreach ($ids as $id){
                $this->delRoute($id);
            }
            DB::commit();
        }catch (Exception $e){
            DB::rollBack();
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :删除路由
     * @name   :delRoute
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 10:50
     */
    public function delRoute($id){
        //删除路由映射
        RouteMap::delRoute(RouteMap::SOURCE_BLOG, $id, $this->user['project_id']);
        //生成一条删除路由记录
        $info = $this->model->read(['id'=>$id],['id','url']);
        $data = [
            'source'=>RouteMap::SOURCE_BLOG,
            'route'=>$info['url'],
        ];
        $this->setRouteDeleteSave($data);
        return $this->success();
    }

    /**
     * @name   :(参数处理)paramProcessing
     * @author :lyh
     * @method :post
     * @time   :2023/6/13 11:30
     */
    public function paramProcessing($param){
        if(isset($this->param['id'])){
            $param['operator_id'] = $this->user['id'];
            $param['category_id'] = ','.trim($param['category_id'],',').',';
        }else{
            $param['create_id'] = $this->user['id'];
            $param['operator_id'] = $this->user['id'];
            $param['project_id'] = $this->user['project_id'];
            $param['category_id'] = ','.$param['category_id'].',';
        }
        return $this->success($param);
    }

    /**
     * @remark :根据状态获取数量
     * @name   :getStatusNumber
     * @author :lyh
     * @method :post
     * @time   :2023/6/19 9:42
     */
    public function getStatusNumber(){
        //三种状态 0:草稿 1:发布 2:回收站
        $data = ['dra'=>0,'pub'=>1,'del'=>2,'tal'=>3];
        foreach ($data as $k => $v){
            if($v == 3){
                $data[$k] = $this->model->where(['project_id'=>$this->user['project_id']])->count();
            }else{
                $data[$k] = $this->model->where(['status'=>$v,'project_id'=>$this->user['project_id']])->count();
            }
        }
        return $this->success($data);
    }

    /**
     * @remark :排序
     * @name   :setSort
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 11:16
     */
    public function setSort(){
        $rs = $this->model->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }

}