BlogCategoryLogic.php 10.9 KB
<?php

namespace App\Http\Logic\Bside\Blog;

use App\Helper\Translate;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Blog\Blog;
use App\Models\Blog\Blog as BlogModel;
use App\Models\Blog\BlogCategory;
use App\Models\Blog\BlogCategory as BlogCategoryModel;
use App\Models\News\NewsCategory as NewsCategoryModel;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplate;
use Illuminate\Support\Facades\DB;

class BlogCategoryLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();

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

    /**
     * @remark :保存数据
     * @name   :categorySave
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 13:42
     */
    public function categorySave(){
        //验证名称是否存在
        $this->verifyParamName($this->param['name']);
        DB::beginTransaction();
        try {
            if(isset($this->param['id']) && !empty($this->param['id'])){
                $this->param['alias'] = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_BLOG_CATE, $this->param['id'], $this->user['project_id']);
                $route = $this->param['alias'];
                $this->param['operator_id'] = $this->user['id'];
                $this->edit($this->param,['id'=>$this->param['id']]);
            }else{
                //路由拼接
                if(!isset($this->param['alias']) || empty($this->param['alias'])){
                    $this->param['alias'] = Translate::tran($this->param['name'], 'en');
                }
                //拼接参数
                $this->param = $this->addParamProcessing($this->param);
                $id = $this->model->addReturnId($this->param);
                $route = RouteMap::setRoute($this->param['alias'], RouteMap::SOURCE_BLOG_CATE, $id, $this->user['project_id']);
                $this->edit(['alias'=>$route],['id'=>$id]);
            }
            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
            $this->fail('系统错误,请联系管理');
        }
        $this->addUpdateNotify(RouteMap::SOURCE_BLOG_CATE,$route);
        $this->curlDelRoute(['new_route'=>$route]);
        return $this->success();
    }

    /**
     * @name :详情
     * @return array
     * @author :liyuhang
     * @method
     */
    public function info_blog_category(){
        $info = $this->model->read($this->param);
        return $this->success($info);
    }

    /**
     * @name :编辑状态与排序
     * @return void
     * @author :liyuhang
     * @method
     */
    public function status_blog_category(){
        $this->param['operator_id'] = $this->user['id'];
        $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('error');
        }
        return $this->success();
    }
    /**
     * @name :删除博客分类
     * @return void
     * @author :liyuhang
     * @method
     */
    public function delBlogCategory(){
        foreach ($this->param['id'] as $id){
            //删除路由
            $this->delRoute($id);
            $this->model->del(['id'=>$id]);
            //同步删除产品字段category_id
            $blogModel = new Blog();
            $blogModel->edit(['category_id'=>DB::raw("REPLACE(category_id, ',$id,' , ',')")],['category_id'=>['like','%,'.$id.',%']]);
            $blogModel->edit(['category_id'=>null],['category_id'=>',']);
        }
        return $this->success();
    }

    /**
     * @name   :(添加分类时获取1级分类)categoryTopList
     * @author :lyh
     * @method :post
     * @time   :2023/6/13 9:09
     */
    public function categoryTopList(){
        $this->param['project_id'] = $this->user['project_id'];
        $this->param['status'] = 0;
        if(isset($this->param['id']) && !empty($this->param['id'])){
            $str = [];
            //排序掉当前id下所有子集
            $str = $this->getAllSub($this->param['id'],$str);
            $str[] = (int)$this->param['id'];
            $this->param['id'] = ['not in',$str];
        }
        $menu = array();
        $list = $this->model->list($this->param);
        if(!empty($list)){
            foreach ($list as $k => $v){
                if($v['pid'] == 0){
                    $v['sub'] = _get_child($v['id'],$list);
                    $menu[]   = $v;
                }
            }
        }
        return $this->success($menu);
    }

    /**
     * @remark :获取当前id下所有子集
     * @name   :getAllSub
     * @author :lyh
     * @method :post
     * @time   :2023/10/18 15:10
     */
    public function getAllSub($id,&$str = []){
        $list = $this->model->list(['pid'=>$id,'status'=>0],['id','pid']);
        if(!empty($list)){
            foreach ($list as $v){
                $str[] = $v['id'];
                $this->getAllSub($v['id'],$str);
            }
        }
        return $str;
    }

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

    /**
     * @name   :(验证名称是否存在)verifyParamName
     * @author :lyh
     * @method :post
     * @time   :2023/6/13 11:41
     */
    public function verifyParamName($name){
        if(isset($this->param['id']) && !empty($this->param['id'])){
            $condition = [
                'id'=>['!=',$this->param['id']],
                'name'=>$name,
            ];
        }else{
            $condition = ['name'=>$name];
        }
        $info = $this->model->read($condition);
        if($info !== false){
            $this->fail('当前分类名称已存在');
        }
        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_CATE, $id, $this->user['project_id']);
        //生成一条删除路由记录
        $info = $this->model->read(['id'=>$id],['id','alias']);
        $this->curlDelRoute(['route'=>$info['alias']]);
        return $this->success();
    }

    /**
     * 新闻导入:分类处理
     * @param $project_id
     * @param $user_id
     * @param $category
     * @return string
     * @throws \Exception
     * @author Akun
     * @date 2023/09/20 17:35
     */
    public function importBlogCategory($project_id,$user_id,$category){
        $return = [];
        $cate_arr = explode('^v6sp$',$category);
        $pid = 0;
        foreach ($cate_arr as $v){
            if($v){
                $category_info = $this->model->read(['name'=>$v,'pid'=>$pid]);
                if(!$category_info){
                    $id = $this->model->addReturnId(['name'=>$v,'pid'=>$pid,'project_id'=>$project_id,'operator_id'=>$user_id,'create_id'=>$user_id]);
                    $route = RouteMap::setRoute($v, RouteMap::SOURCE_BLOG_CATE, $id, $project_id);
                    $this->model->edit(['alias'=>$route],['id'=>$id]);
                }else{
                    $id = $category_info['id'];
                }
                $return[] = $id;
                $pid = $id;
            }
        }
        return $this->getCategory($return);
    }

    /**
     * @remark :获取最后一级分类id
     * @name   :getLastCategory
     * @author :lyh
     * @method :post
     * @time   :2023/10/20 9:02
     */
    public function getCategory($category){
        $str = '';
        foreach ($category as $v){
            $str .= $v.',';
        }
        return !empty($str) ? ','.$str : '';
    }

    /**
     * @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();
    }


    /**
     * @remark :设置批量排序
     * @name   :setAllSort
     * @author :lyh
     * @method :post
     * @time   :2024/1/10 15:40
     */
    public function setAllSort(){
        foreach ($this->param['data'] as $k => $v){
            $this->model->edit(['sort'=>$v['sort']],['id'=>$v['id']]);
        }
        return $this->success();
    }

    /**
     * @remark :复制新闻分类
     * @name   :copyCategory
     * @author :lyh
     * @method :post
     * @time   :2024/5/9 9:16
     */
    public function copyCategory(){
        $info = $this->model->read(['id'=>$this->param['id']]);
        $param = [
            'name'=>$info['name']."-copy",
            'status'=>0,
            'sort'=>$info['sort'],
            'pid'=>0,
            'remark'=>$info['remark'],
            'alias'=>$info['alias'],
            'project_id'=>$info['project_id'],
            'operator_id'=>$this->user['id'],
            'create_id'=>$this->user['id'],
            'created_at'=>date('Y-m-d H:i:s'),
            'updated_at'=>date('Y-m-d H:i:s'),
        ];
        $save_id = $this->model->insertGetId($param);
        $route = RouteMap::setRoute($param['alias'], RouteMap::SOURCE_BLOG_CATE, $save_id, $this->user['project_id']);
        $this->model->edit(['alias'=>$route],['id'=>$save_id]);
        //同步可视化装修数据
        $this->copyTemplate($this->param['id'],$info['project_id'],$save_id);
        return $this->success(['id'=>$save_id]);
    }

    /**
     * @remark :同步模版数据
     * @name   :copyTemplate
     * @author :lyh
     * @method :post
     * @time   :2023/7/29 15:53
     */
    public function copyTemplate($id,$project_id,$save_id){
        $BTemplateModel = new BTemplate();
        $list = $BTemplateModel->list(['source'=>BTemplate::SOURCE_BLOG,'is_list'=>BTemplate::IS_LIST,'is_custom'=>BTemplate::IS_NO_CUSTOM,'source_id'=>$id,'project_id'=>$project_id]);
        if(!empty($list)){
            $data = [];
            foreach ($list as $v){
                $data[] = [
                    'html'=>$v['html'],
                    'project_id'=>$v['project_id'],
                    'source'=>$v['source'],
                    'source_id'=>$save_id,
                    'template_id'=>$v['template_id'],
                    'section_list_id'=>$v['section_list_id'],
                    'main_html'=>$v['main_html'],
                    'main_css'=>$v['main_css'],
                    'is_list'=>$v['is_list'],
                    'type'=>$v['type'],
                    'created_at'=>date('Y-m-d H:i:s'),
                    'updated_at'=>date('Y-m-d H:i:s'),
                ];
            }
            $rs = $BTemplateModel->insert($data);
            if($rs === false){
                $this->fail('error');
            }
        }
        return $this->success();
    }
}