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

namespace App\Http\Controllers\Bside\BCom;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Setting\WebSettingLogic;
use App\Models\Com\UpdateNotify;
use App\Models\Com\UpdateProgress;
use App\Models\Project\Country as CountryModel;
use App\Models\RouteMap\RouteMap;
use App\Models\WebSetting\WebSettingCountry;
use Illuminate\Http\Request;

/**
 * @remark :通知C端
 * @name   :CNoticeController
 * @author :lyh
 * @method :post
 * @time   :2023/9/12 10:38
 */
class CNoticeController extends BaseController
{
    /**
     * 更新通知C端
     * @param Request $request
     * @param WebSettingLogic $webSettingLogic
     */
    public function sendNotify(){
        $updateProgressModel = new UpdateProgress();
        $progressInfo = $updateProgressModel->formatQuery(['project_id'=>$this->user['project_id'],'type'=>$this->param['type']])->orderBy('id','desc')->first();
        if((!empty($progressInfo))){
            $progressInfo = $progressInfo->toArray();
            if(($progressInfo['total_num'] > $progressInfo['current_num'])){
                $this->response('当前页面正在生成了,请完成后再点击',Code::SUCCESS,$progressInfo);
            }
        }
        //通知更新
        if($this->param['type'] == UpdateNotify::TYPE_MASTER){
            $this->updateMaster();
        }else{
            $this->updateMinorLanguages();
        }
        $urlStr = $this->getString($this->param['type'],$this->param['page']);
        @file_put_contents(storage_path('logs/lyh_error.log'), var_export($urlStr, true) . PHP_EOL, FILE_APPEND);
        curlGet($urlStr);
        $this->response('更新成功');
    }

    /**
     * @remark :主站通知
     * @name   :updateMaster
     * @author :lyh
     * @method :post
     * @time   :2023/9/12 14:46
     */
    public function updateMaster(){
        try {
            $updateNotifyModel = new UpdateNotify();
            if($this->param['page'] == UpdateNotify::PAGE_ALL){
                //如果是更新所有
                $routeMapModel = new RouteMap();
                $count = $routeMapModel->formatQuery(['project_id'=>$this->user['project_id']])->count();
                $updateNotifyModel->edit(['status' => 1], ['project_id' => $this->user['project_id'], 'status' => 0]);
                $this->addProgress($count,$this->param['type'],$this->param['page']);
            }elseif($this->param['page'] == UpdateNotify::PAGE_SINGLE){
                //更新所有已修改的更新
                $count = $updateNotifyModel->formatQuery(['project_id' => $this->user['project_id'], 'status' => 0])->count();
                $updateNotifyModel->edit(['status' => 1], ['project_id' => $this->user['project_id'], 'status' => 0]);
                $this->addProgress($count,$this->param['type'],$this->param['page']);
            }else{
                //根据传递的参数更新
                $count = count($this->param['url']);
                $extent = json_encode(['url'=>$this->param['url']]);
                $this->addProgress($count,$this->param['type'],$this->param['page'],$extent);
            }
        }catch (\Exception $e){
            $this->response('error',Code::USER_ERROR);
        }
        return true;
    }

    /**
     * @remark :更新小语种
     * @name   :updateMinorLanguages
     * @author :lyh
     * @method :post
     * @time   :2023/9/12 14:48
     */
    public function updateMinorLanguages(){
        $updateNotifyModel = new UpdateNotify();
        try {
            if($this->param['page'] == UpdateNotify::PAGE_ALL){
                //如果是更新所有
                $routeMapModel = new RouteMap();
                $count = $routeMapModel->formatQuery(['project_id'=>$this->user['project_id']])->count();
                $updateNotifyModel->edit(['minor_languages_status' => 1], ['project_id' => $this->user['project_id'], 'minor_languages_status' => 0]);
                $extent = json_encode(['language'=>$this->param['language']]);
                $this->addProgress($count,$this->param['type'],$this->param['page'],$extent);
            }else{
                //根据传递的参数更新
                $count = count($this->param['url']);
                $extent = json_encode(['url'=>$this->param['url'],'language'=>$this->param['language']]);
                $this->addProgress($count,$this->param['type'],$this->param['page'],$extent);
            }
        }catch (\Exception $e){
            $this->response('error',Code::USER_ERROR);
        }
        return true;
    }

    /**
     * @remark :生成一条更新记录
     * @name   :addProgress
     * @author :lyh
     * @method :post
     * @time   :2023/9/6 17:01
     */
    public function addProgress($count,$type,$page,$extend = ''){
        $data = [
            'total_num'=>$count,
            'current_num'=>0,
            'type'=>$type,
            'page'=>$page,
            'extends'=>!empty($extend) ? $extend : json_encode([]),
            'project_id'=>$this->user['project_id'],
            'created_at'=>date('Y-m-d H;i:s')
        ];
        $updateProgressModel = new UpdateProgress();
        return $updateProgressModel->insert($data);
    }

    /**
     * @remark :通知参数处理
     * @name   :getString
     * @author :lyh
     * @method :post
     * @time   :2023/9/6 17:03
     */
    public function getString($type,$page){
        $param = [
            'project_id' => $this->user['project_id'],
            'type' => $type,
            'route' => $page
        ];
        $string = http_build_query($param);
        return $this->user['domain'].'api/updateHtmlNotify/?' . $string;
    }

    /**
     * @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->user['project_id']],['id','country_lists']);
        $ids = [];
        if($info !== false){
            $ids = explode(',',$info['country_lists']);
        }
        $webSettingCountryModel = new WebSettingCountry();
        $lists = $webSettingCountryModel->list(['id'=>['in',$ids]],'id',['id','name','country_img']);
        if (!empty($lists)){
            foreach ($lists as $k => $v){
                $lists[$k]['image_link'] = url('upload/country/' . $v['country_img']);
            }
        }
        $this->response('success',Code::SUCCESS,$lists);
    }

}