CNoticeController.php 6.4 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\Models\Com\UpdateNotify;
use App\Models\Com\UpdateProgress;
use App\Models\Project\Country as CountryModel;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\WebSetting\WebLanguage;
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
{
    /**
     * 更新通知C端
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function sendNotify(Request $request)
    {
        $url = $this->user['domain'].'api/update_page/';
        $param = [
            'project_id' => $this->user['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   :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);
            }
            //更新小语种,同步更新项目表已翻译小语种
            if(isset($this->user['is_domain']) && ($this->user['is_domain'] != 0)){
                $projectModel = new Project();
                $projectModel->edit(['is_language'=>$this->user['is_domain']],['id'=>$this->user['project_id']]);
            }
        }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();
        $updateProgressModel->insert($data);
        return true;
    }

    /**
     * @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']);
        }
        $languageModel = new WebLanguage();
        //根据排序查询选中的小语种
        $lists = $languageModel->whereIn('id', $ids)->orderByRaw(DB::raw("FIND_IN_SET(id,'" . implode(',', $ids) . "'" . ')'))->get()->toArray();
//        $lists = $languageModel->list(['id'=>['in',$ids]]);
        $this->response('success',Code::SUCCESS,$lists);
    }

}