CNoticeController.php 8.3 KB
<?php
/**
 * @remark :
 * @name   :CNoticeController.php
 * @author :lyh
 * @method :post
 * @time   :2023/9/12 10:04
 */

namespace App\Http\Controllers\Aside\Com;


use App\Enums\Common\Code;
use App\Http\Controllers\Aside\BaseController;
use App\Models\Blog\Blog;
use App\Models\Blog\BlogCategory;
use App\Models\CustomModule\CustomModuleCategory;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\Domain\DomainInfo;
use App\Models\News\News;
use App\Models\News\NewsCategory;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\Country as CountryModel;
use App\Models\Project\DeployBuild;
use App\Models\WebSetting\SettingNum;
use App\Models\WebSetting\TranslateBigProject;
use App\Models\WebSetting\WebLanguage;
use App\Services\ProjectServer;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;


/**
 * @remark :通知C端
 * @name   :CNoticeController
 * @author :lyh
 * @method :post
 * @time   :2023/9/12 10:38
 */
class CNoticeController extends BaseController
{
    /**
     * @remark :计算页面数量
     * @name   :countLanguagePage
     * @author :lyh
     * @method :post
     * @time   :2025/6/19 17:14
     */
    public function countLanguagePage(){
        $this->request->validate([
            'language'=>'required',
            'project_id'=>'required',
        ],[
            'language.required' => 'language不能为空',
            'project_id.required' => 'project_id不能为空',
        ]);
        $bigProjectModel = new TranslateBigProject();
        $project_id_arr = $bigProjectModel->selectField(['status'=>1],'project_id') ?? [];
        if(in_array($this->param['project_id'],$project_id_arr)){
            $this->response('success');
        }
        $lang_num = count($this->param['language']);
        ProjectServer::useProject($this->param['project_id']);
        $keyword_num = (new Keyword())->counts(['route'=>['!=',null]]);
        $data_num = $this->productNum() + $this->customNum() + $this->newsNum() + $this->blogNum();
        DB::disconnect('custom_mysql');
        $number = $keyword_num * 18 + $lang_num * $data_num;
        if($number >= 450000){
            $this->response('success',Code::SUCCESS,['msg'=>'翻译数量过多, 大概页面数量:'.$number.', 磁盘空间占用可能会超过40G,请联系管理员操作!']);
        }
        $this->response('success');
    }

    /**
     * @remark :产品分类页面数量
     * @name   :productCateNum
     * @author :lyh
     * @method :post
     * @time   :2025/1/4 10:43
     */
    public function productNum(){
        $number = (new Product())->counts(['status'=>1]);
        $settingModel = new SettingNum();
        $info = $settingModel->read(['type'=>1]);
        if($info === false){
            $product_page_number = 15;
        }else{
            $product_page_number = $info['num'];
        }
        $productCateModel = new Category();
        $productCateList = $productCateModel->list(['status'=>1]);
        if(!empty($productCateList)){
            $cateReModel = new CategoryRelated();
            foreach ($productCateList as $v){
                $cate_num = $cateReModel->counts(['cate_id'=>$v['id']]);
                if($cate_num == 0){
                    $number += 1;
                }else{
                    $number += ceil($cate_num / $product_page_number);
                }
            }
        }
        return $number;
    }
    /**
     * 更新通知C端
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function sendNotify(Request $request)
    {
        //获取当前项目的域名
        $domainModel = new DomainInfo();
        $domainInfo = $domainModel->read(['project_id'=>$this->param['project_id']]);
        if($domainInfo === false){
            //获取测试域名
            $deployBuildModel = new DeployBuild();
            $buildInfo = $deployBuildModel->read(['project_id'=>$this->param['project_id']]);
            $this->param['domain'] = $buildInfo['test_domain'];
        }else{
            $this->param['domain'] = 'https://'.$domainInfo['domain'].'/';
        }
        $url = $this->param['domain'].'api/update_page/';
        $param = [
            'project_id' => $this->param['project_id'],
            'type' => intval($request->input('type', 1)),
            'route' => intval($request->input('page', 1)),
            'url' => $request->input('url', []),
            'language'=> $request->input('language', []),
        ];
        http_post($url, json_encode($param));
        $this->response('更新中请稍后, 更新完成将会发送站内信通知更新结果!');
    }
    /**
     * @remark :新闻数量
     * @name   :newsNum
     * @author :lyh
     * @method :post
     * @time   :2025/1/4 11:21
     */
    public function newsNum(){
        $newsModel = new News();
        $number = $newsModel->counts(['status'=>1]);
        $settingModel = new SettingNum();
        $info = $settingModel->read(['type'=>2]);
        if($info === false){
            $news_page_number = 10;
        }else{
            $news_page_number = $info['num'];
        }
        $newsCateModel = new NewsCategory();
        $newsCateList = $newsCateModel->list(['status'=>0]);
        if(!empty($newsCateList)){
            foreach ($newsCateList as $v){
                $cate_num = $newsModel->counts(['category_id'=>['like',','.$v['id'].',']]);
                if($cate_num == 0){
                    $number += 1;
                }else{
                    $number += ceil($cate_num / $news_page_number);
                }
            }
        }
        return $number;
    }

    /**
     * @remark :博客数量
     * @name   :blogNum
     * @author :lyh
     * @method :post
     * @time   :2025/1/4 11:21
     */
    public function blogNum(){
        $blogModel = new Blog();
        $number = $blogModel->counts(['status'=>1]);
        $settingModel = new SettingNum();
        $info = $settingModel->read(['type'=>3]);
        if($info === false){
            $news_page_number = 10;
        }else{
            $news_page_number = $info['num'];
        }
        $blogCateModel = new BlogCategory();
        $blogCateList = $blogCateModel->list(['status'=>0]);
        if(!empty($blogCateList)){
            foreach ($blogCateList as $v){
                $cate_num = $blogModel->counts(['category_id'=>['like',','.$v['id'].',']]);
                if($cate_num == 0){
                    $number += 1;
                }else{
                    $number += ceil($cate_num / $news_page_number);
                }
            }
        }
        return $number;
    }

    /**
     * @remark :扩展模块数量
     * @name   :blogNum
     * @author :lyh
     * @method :post
     * @time   :2025/1/4 11:21
     */
    public function customNum(){
        $contentModel = new CustomModuleContent();
        $number = $contentModel->counts(['status'=>0]);
        $settingModel = new SettingNum();
        $info = $settingModel->read(['type'=>2]);
        if($info === false){
            $news_page_number = 10;
        }else{
            $news_page_number = $info['num'];
        }
        $cateModel = new CustomModuleCategory();
        $cateList = $cateModel->list(['status'=>0]);
        if(!empty($cateList)){
            foreach ($cateList as $v){
                $cate_num = $contentModel->counts(['category_id'=>['like',','.$v['id'].',']]);
                if($cate_num == 0){
                    $number += 1;
                }else{
                    $number += ceil($cate_num / $news_page_number);
                }
            }
        }
        return $number;
    }
    /**
     * @remark :获取当前项目选中的语种
     * @name   :getCountry
     * @author :lyh
     * @method :post
     * @time   :2023/9/12 15:20
     */
    public function getCountry(){
        $countryModel = new CountryModel();
        $info = $countryModel->read(['project_id'=>$this->param['project_id']],['id','country_lists']);
        $ids = [];
        if($info !== false){
            $ids = explode(',',$info['country_lists']);
        }
        $languageModel = new WebLanguage();
        //根据排序查询选中的小语种
        $lists = $languageModel->whereIn('id', $ids)->orderByRaw(DB::raw("FIND_IN_SET(id,'" . implode(',', $ids) . "'" . ')'))->get()->toArray();
        $this->response('success',Code::SUCCESS,$lists);
    }
}