CustomModuleCategoryLogic.php 10.6 KB
<?php
/**
 * @remark :
 * @name   :CustomModuleCategoryLogic.php
 * @author :lyh
 * @method :post
 * @time   :2023/12/4 16:07
 */

namespace App\Http\Logic\Bside\CustomModule;

use App\Http\Logic\Bside\BaseLogic;
use App\Models\Com\NoticeLog;
use App\Models\CustomModule\CustomModule;
use App\Models\CustomModule\CustomModuleCategory;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplate;

class CustomModuleCategoryLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->param = $this->requestAll;
        $this->model = new CustomModuleCategory();
    }

    /**
     * @remark :添加/编辑获取分类列表
     * @name   :getCateList
     * @author :lyh
     * @method :post
     * @time   :2023/12/5 17:12
     */
    public function getCateList(){
        $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 $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;
    }

    /**
     * @remark :获取当前数据详情
     * @name   :getCustomModuleInfo
     * @author :lyh
     * @method :post
     * @time   :2023/12/4 16:10
     */
    public function categoryInfo(){
        $info = $this->model->read($this->param);
        if($info === false){
            $this->fail('当前数据不存在或已被删除');
        }
        $info['image'] = getImageUrl($info['image'],$this->user['storage_type'],$this->user['project_location']);
        $info['banner_image'] = getImageUrl($info['banner_image'],$this->user['storage_type'] ?? 0,$this->user['project_location']);
        return $this->success($info);
    }

    /**
     * @remark :保存数据
     * @name   :ModuleSave
     * @author :lyh
     * @method :post
     * @time   :2023/12/4 15:47
     */
    public function categorySave(){
        $this->param = $this->handleParam($this->param);
        if(isset($this->param['id']) && !empty($this->param['id'])){
            $data = $this->categoryEdit();
        }else{
            $data = $this->categoryAdd();
        }
        return $this->success($data);
    }

    /**
     * @name   :(参数处理)paramProcessing
     * @author :lyh
     * @method :post
     * @time   :2023/6/13 11:30
     */
    public function handleParam($param)
    {
        $param['operator_id'] = $this->user['id'];
        if(!isset($param['id']) || empty($param['id'])){
            $param['project_id'] = $this->user['project_id'];
        }
        if(isset($param['banner_image']) && !empty($param['banner_image'])){
            $param['banner_image'] = str_replace_url($param['banner_image']);
        }
        if(isset($param['image']) && !empty($param['image'])){
            $param['image'] = str_replace_url($param['image']);
        }
        return $this->success($param);
    }

    /**
     * @remark :添加分类
     * @name   :categoryAdd
     * @author :lyh
     * @method :post
     * @time   :2023/12/5 10:55
     */
    public function categoryAdd(){
        try {
            $id = $this->model->addReturnId($this->param);
            $route = RouteMap::setRoute($this->param['route'], RouteMap::SOURCE_MODULE_CATE,
                $id, $this->user['project_id']);
            $this->addUpdateNotify(RouteMap::SOURCE_MODULE_CATE,$route);
            $this->curlDelRoute(['new_route'=>$route]);
            $this->edit(['route' => $route], ['id' => $id]);
        }catch (\Exception $e){
            $this->fail('系统错误,请联系管理员');
        }
        return $this->success(['id'=>$id]);
    }

    /**
     * @remark :编辑分类
     * @name   :categoryEdit
     * @author :lyh
     * @method :post
     * @time   :2023/12/5 10:55
     */
    public function categoryEdit(){
        $route = RouteMap::setRoute($this->param['route'], RouteMap::SOURCE_MODULE_CATE,
            $this->param['id'], $this->user['project_id']);
        $this->editRoute($this->param['id'],$route);
        $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('系统错误,请连续管理员');
        }
        return $this->success(['id'=>$this->param['id']]);
    }

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

    /**
     * @remark :删除数据
     * @name   :ModuleDel
     * @author :lyh
     * @method :post
     * @time   :2023/12/4 15:47
     */
    public function categoryDel(){
        $ids = $this->param['id'];
        foreach ($ids as $id){
            $str = [];
            $this->getAllSub($id,$str);
            $str[] = $id;
            foreach ($str as $value){
                //删除路由
                $this->delRoute($value);
                $this->model->del(['id'=>$value]);
            }
        }
        NoticeLog::createLog(NoticeLog::DELETE_CUSTOM_CATEGORY, ['project_id' => $this->user['project_id']]);
        return $this->success();
    }

    /**
     * @remark :删除路由
     * @name   :delRoute
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 10:50
     */
    public function delRoute($id)
    {
        $info = $this->model->read(['id' => $id], ['id', 'route','module_id']);
        if($info === false){
            return $this->success();
        }
        RouteMap::delRoute(RouteMap::SOURCE_MODULE_CATE, $id, $this->user['project_id']);
        //通知
        //获取模块路由
        $customModuleModel = new CustomModule();
        $moduleInfo = $customModuleModel->read(['id'=>$info['module_id']]);
        $this->curlDelRoute(['old_route'=>$info['route'],'path'=>getCustomRouteMap($moduleInfo['route'],$info['route'],$this->user['is_upgrade'])]);
        return $this->success();
    }

    /**
     * @remark :排序
     * @name   :categorySort
     * @author :lyh
     * @method :post
     * @time   :2023/9/26 17:38
     */
    public function categorySort(){
        $rs = $this->model->edit(['sort'=>$this->param['sort']],['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('系统错误,请联系管理员');
        }
        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   :copyModuleContentInfo
     * @author :lyh
     * @method :post
     * @time   :2024/4/28 16:32
     */
    public function copyCategory(){
        $info = $this->model->read(['id'=>$this->param['id']]);
        $param = $this->setContentParams($info);
        $save_id = $this->model->insertGetId($param);
        $this->copyTemplate($this->param['id'],$info['project_id'],$save_id,$info['module_id']);
        $this->success(['id'=>$save_id]);
    }

    /**
     * @remark :字段处理
     * @name   :setContentParams
     * @author :lyh
     * @method :post
     * @time   :2024/4/28 16:33
     */
    public function setContentParams($info){
        return [
            'name'=>$info['name'].'-copy',
            'status'=>$info['status'],
            'sort'=>$info['sort'],
            'pid'=>0,
            'remark'=>$info['remark'],
            'route'=>$info['route'],
            'project_id'=>$info['project_id'],
            'operator_id'=>$this->user['id'],
            'module_id'=>$info['module_id'],
            'image'=>$info['image'],
            'created_at'=>date('Y-m-d H:i:s'),
            'updated_at'=>date('Y-m-d H:i:s')
        ];
    }

    /**
     * @remark :同步模版数据
     * @name   :copyTemplate
     * @author :lyh
     * @method :post
     * @time   :2023/7/29 15:53
     */
    public function copyTemplate($id,$project_id,$save_id,$module_id){
        $BTemplateModel = new BTemplate();
        $list = $BTemplateModel->list(['source'=>$module_id,'source_id'=>$id,'is_list'=>BTemplate::IS_LIST,'is_custom'=>BTemplate::IS_CUSTOM,'project_id'=>$project_id]);
        if(!empty($list)){
            $data = [];
            foreach ($list as $v){
                $data[] = $this->setTemplateParams($v,$project_id,$save_id);
            }
            $rs = $BTemplateModel->insert($data);
            if($rs === false){
                $this->fail('error');
            }
        }
        return $this->success();
    }

    /**
     * @remark :组装模版数据
     * @name   :setTemplateParams
     * @author :lyh
     * @method :post
     * @time   :2023/7/29 15:54
     */
    public function setTemplateParams($v,$project_id,$save_id){
        $param = [
            'html'=>$v['html'],
            'project_id'=>$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_custom'=>$v['is_custom'],
            'is_list'=>$v['is_list'],
            'type'=>$v['type'],
            'created_at'=>$v['created_at'],
            'updated_at'=>$v['updated_at']
        ];
        return $this->success($param);
    }
}