TranslateController.php 13.8 KB
<?php
/**
 * @remark :
 * @name   :TranslateController.php
 * @author :lyh
 * @method :post
 * @time   :2024/1/12 9:39
 */

namespace App\Http\Controllers\Bside\Setting;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Setting\TranslateLogic;
use App\Models\Blog\Blog;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\News\News;
use App\Models\Product\Product;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\WebSetting\SettingNum;
use App\Models\WebSetting\Translate;

class TranslateController extends BaseController
{
    /**
     * @remark :获取翻译校队列表
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2024/1/12 9:39
     */
    public function lists(TranslateLogic $logic){
        $this->request->validate([
            'type'=>'required',
            'language_id'=>'required',
            'url'=>'required',
        ],[
            'type.required' => 'type不能为空',
            'language_id.required' => 'language_id不能为空',
            'url.required' => 'url不能为空',
        ]);
        $data = $logic->getTranslateList();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :根据语种获取翻译校队内容
     * @name   :getLanguageList
     * @author :lyh
     * @method :post
     * @time   :2024/5/8 16:08
     */
    public function getLanguageList(Translate $translate){
        $this->request->validate([
            'language_id'=>'required',
        ],[
            'language_id.required' => 'language_id不能为空',
        ]);
        $this->map['type'] = 1;
        $data = $translate->formatQuery($this->map)->with('translate_data')->get()->toArray();
        foreach ($data as $k=>$v){
            $v['data'] = json_decode($v['translate_data']['data'],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
            $data[$k] = $v;
        }
        $this->response('success',Code::SUCCESS,$data);
    }


    /**
     * @remark :图片列表
     * @name   :imageList
     * @author :lyh
     * @method :post
     * @time   :2024/1/12 11:18
     */
    public function imageList(TranslateLogic $logic){
        $this->request->validate([
            'type'=>'required',
            'language_id'=>'required',
            'url'=>'required',
        ],[
            'type.required' => 'type不能为空',
            'language_id.required' => 'language_id不能为空',
            'url.required' => 'url不能为空',
        ]);
        $data = $logic->getTranslateImageList();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :保存数据
     * @name   :save
     * @author :lyh
     * @method :post
     * @time   :2024/1/12 11:19
     */
    public function save(TranslateLogic $logic){
        $this->request->validate([
            'type'=>'required',
            'language_id'=>'required',
            'url'=>'required',
            'alias'=>'required',
        ],[
            'type.required' => 'type不能为空',
            'language_id.required' => 'language_id不能为空',
            'url.required' => 'url不能为空',
            'alias.required' => 'url不能为空',
        ]);
        $rs = $logic->translateSave();
        $this->response('success',Code::SUCCESS,$rs);
    }

    /**
     * @remark :获取所有路由
     * @name   :getUrl
     * @author :lyh
     * @method :post
     * @time   :2024/1/12 14:34
     */
    public function getUrl(){
        //查看项目是5.0还是6.0
        if($this->user['is_upgrade'] == Project::IS_UPGRADE_TRUE){//升级项目
            $data = $this->getFiveUrl($this->map);
        }else {
            $data = $this->getSixUrl($this->map);
        }
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :5.0路由
     * @name   :getFiveUrl
     * @author :lyh
     * @method :post
     * @time   :2024/1/17 16:27
     */
    public function getFiveUrl($map){
        $data = [];
        $routeMapModel = new RouteMap();
        $list = $routeMapModel->list($map);
        foreach ($list as $k => $v){
            switch ($v['source']){
                case RouteMap::SOURCE_PAGE:
                    if($v['route'] == 'index'){
                        $data[] = '/';
                    }else{
                        $data[] = $v['route'];
                    }
                    break;
                case RouteMap::SOURCE_PRODUCT_CATE:
                    //获取当前产品分类关联多少产品
                    $productModel = new Product();
                    if($v['route'] == 'products'){
                        $count = $productModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $productModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageList($data,$count,$v,1,15);
                    break;
                case RouteMap::SOURCE_BLOG:
                    $data[] = 'blogs/'.$v['route'];
                    break;
                case RouteMap::SOURCE_NEWS:
                    $data[] = 'news/'.$v['route'];
                    break;
                case RouteMap::SOURCE_BLOG_CATE:
                    $blogModel = new Blog();
                    if($v['route'] == 'blog'){
                        $count = $blogModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $blogModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageList($data,$count,$v,2,10);
                    break;
                case RouteMap::SOURCE_NEWS_CATE:
                    $newsModel = new News();
                    if($v['route'] == 'news'){
                        $count = $newsModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $newsModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageList($data,$count,$v,3,10);
                    break;
                case RouteMap::SOURCE_MODULE:
                    $customModel = new CustomModuleContent();
                    $contentInfo = $customModel->read(['id'=>$v['source_id']]);
                    if(!empty($contentInfo) && !empty($contentInfo['category_id'])){
                        $categoryIdArr = $contentInfo['category_id'];
                        $cate_id = (int)array_shift($categoryIdArr);
                        $routeInfo = $routeMapModel->read(['source'=>RouteMap::SOURCE_MODULE_CATE,'source_id'=>$cate_id]);
                        $v['path'] = ($routeInfo['route'] ?? '');
                        if(!empty($v['path'])){
                            $v['path'] = $v['path'].'/';
                        }
                    }
                    $data[] = $v['path'].$v['route'];
                    break;
                case RouteMap::SOURCE_MODULE_CATE:
                    $customModel = new CustomModuleContent();
                    $count = $customModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%']])->count();
                    $this->pageSixList($data,$count,$v,3,10);
                    break;
                default:
                    $data[] = $v['route'];
                    break;
            }
        }
        return $this->success($data);
    }

    /**
     * @remark :获取6.0的url
     * @name   :getSixUrl
     * @author :lyh
     * @method :post
     * @time   :2024/1/17 15:04
     */
    public function getSixUrl($map){
        $data = [];
        $routeMapModel = new RouteMap();
        //查询路由中是否包含products
        $list = $routeMapModel->list($map);
        $productInfo = $routeMapModel->read(['route'=>'products']);
        if($productInfo === false){
            $productModel = new Product();
            $count = $productModel->formatQuery(['status'=>1])->count();
            $v['route'] = 'products';
            $this->pageSixList($data,$count,$v,1,15);
        }
        $newsInfo = $routeMapModel->read(['route'=>'news']);
        if($newsInfo === false){
            $newsModel = new News();
            $count = $newsModel->formatQuery(['status'=>1])->count();
            $v['route'] = 'news';
            $this->pageSixList($data,$count,$v,1,15);
        }
        $blogInfo = $routeMapModel->read(['route'=>'blog']);
        if($blogInfo === false){
            $blogModel = new Blog();
            $count = $blogModel->formatQuery(['status'=>1])->count();
            $v['route'] = 'blog';
            $this->pageSixList($data,$count,$v,1,15);
        }
        foreach ($list as $k => $v){
            switch ($v['source']){
                case RouteMap::SOURCE_PAGE:
                    if($v['route'] == 'index'){
                        $data[] = '/';//首页
                    }else{
                        $data[] = $v['route'];
                    }
                    break;
                case RouteMap::SOURCE_PRODUCT_CATE:
                    //获取当前产品分类关联多少产品
                    $productModel = new Product();
                    if($v['route'] == 'products'){
                        $count = $productModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $productModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageSixList($data,$count,$v,1,15);
                    break;
                case RouteMap::SOURCE_BLOG:
                    $data[] = 'blogs/'.$v['route'];
                    break;
                case RouteMap::SOURCE_NEWS:
                    $data[] = 'news/'.$v['route'];
                    break;
                case RouteMap::SOURCE_BLOG_CATE:
                    $blogModel = new Blog();
                    if($v['route'] == 'blog'){
                        $count = $blogModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $blogModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageSixList($data,$count,$v,2,10);
                    break;
                case RouteMap::SOURCE_NEWS_CATE:
                    $newsModel = new News();
                    if($v['route'] == 'news'){
                        $count = $newsModel->formatQuery(['status'=>1])->count();
                    }else{
                        $count = $newsModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%'],'status'=>1])->count();
                    }
                    $this->pageSixList($data,$count,$v,3,10);
                    break;
                case RouteMap::SOURCE_MODULE:
                    $customModel = new CustomModuleContent();
                    $contentInfo = $customModel->read(['id'=>$v['source_id']]);
                    if(!empty($contentInfo) && !empty($contentInfo['category_id'])){
                        $categoryIdArr = $contentInfo['category_id'];
                        $cate_id = (int)array_shift($categoryIdArr);
                        $routeInfo = $routeMapModel->read(['source'=>RouteMap::SOURCE_MODULE_CATE,'source_id'=>$cate_id]);
                        $v['path'] = ($routeInfo['route'] ?? '');
                        if(!empty($v['path'])){
                            $v['path'] = $v['path'].'/';
                        }
                    }
                    $data[] = $v['path'].$v['route'];
                    break;
                case RouteMap::SOURCE_MODULE_CATE:
                    $customModel = new CustomModuleContent();
                    $count = $customModel->formatQuery(['category_id'=>['like','%,'.$v['source_id'].',%']])->count();
                    $this->pageSixList($data,$count,$v,3,10);
                    break;
                default:
                    $data[] = $v['route'];
                    break;
            }
        }
        return $this->success($data);
    }

    /**
     * @remark :获取默认数据
     * @name   :getDefaultData
     * @author :lyh
     * @method :post
     * @time   :2024/7/16 15:28
     */
    public function getDefaultData(){

    }

    /**
     * @remark :
     * @name   :pageList
     * @author :lyh
     * @method :post
     * @time   :2024/1/17 14:15
     */
    public function pageList(&$data,$count,$v,$type = 1,$pageNum = 15){
        $page = 1;
        if($count != 0){
            //获取默认条数
            $settingNumModel = new SettingNum();
            $numInfo = $settingNumModel->read(['type'=>$type],['num']);
            if(!empty($numInfo)){
                $pageNum = $numInfo['num'];
            }else{
                $pageNum = $pageNum;
            }
            $page = ceil($count / $pageNum);//向上取整
        }
        for ($i = 1;$i <= $page;$i++){
            if($i == 1){
                $data[] = $v['route'];
            }else{
                $data[] = $v['route'].'/page/'.$i;
            }
        }
        return true;
    }

    /**
     * @remark :
     * @name   :pageList
     * @author :lyh
     * @method :post
     * @time   :2024/1/17 14:15
     */
    public function pageSixList(&$data,$count,$v,$type = 1,$pageNum = 15){
        $page = 1;
        if($count != 0){
            //获取默认条数
            $settingNumModel = new SettingNum();
            $numInfo = $settingNumModel->read(['type'=>$type],['num']);
            if(!empty($numInfo)){
                $pageNum = $numInfo['num'];
            }else{
                $pageNum = $pageNum;
            }
            $page = ceil($count / $pageNum);//向上取整
        }
        for ($i = 1;$i <= $page;$i++){
            if($i == 1){
                $data[] = $v['route'];
            }else{
                $data[] = $v['route'].'/'.$i;
            }
        }
        return true;
    }
}