GoogleKeywordInsightController.php 4.4 KB
<?php
/**
 * @remark :
 * @name   :GoogleKeywordInsightController.php
 * @author :lyh
 * @method :post
 * @time   :2025/3/25 14:23
 */

namespace App\Http\Controllers\Bside\GoogleKeyword;

use App\Enums\Common\Code;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\GoogleKeywordInsight\GoogleKeywordInsightLogic;
use App\Models\GoogleKeywordInsight\GoogleKeywordInsightDetail;
use App\Models\Project\ProjectKeyword;

/**
 * @remark :谷歌洞察数据
 * @name   :GoogleKeywordInsightController
 * @author :lyh
 * @method :post
 * @time   :2025/3/25 14:24
 */
class GoogleKeywordInsightController extends BaseController
{
    /**
     * @remark :保存数据
     * @name   :saveKeywordInsight
     * @author :lyh
     * @method :post
     * @time   :2025/3/25 14:30
     */
    public function getKeywordInsight(GoogleKeywordInsightLogic $logic){
        $this->request->validate([
            'keyword' => 'required'
        ],[
            'keyword.required' => '关键词不能为空',
        ]);
        $logic->getGoogleInsight();
        $detailModel = new GoogleKeywordInsightDetail();
        $data = $detailModel->lists(['search'=>$this->param['keyword']],$this->page,$this->row);
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :获取优化关键词列表
     * @name   :getOptimizeList
     * @author :lyh
     * @method :post
     * @time   :2025/4/1 9:12
     */
    public function getOptimizeList(){
        $this->request->validate([
            'field' => 'required'
        ],[
            'field.required' => 'field不能为空',
        ]);
        $projectKeywordModel = new ProjectKeyword();
        $info = $projectKeywordModel->read(['project_id'=>$this->user['project_id']],[$this->param['filed']]);
        if($info === false){
            $this->response('success');
        }
        $array = explode("\r\n", $info[$this->param['filed']]);
        $detailModel = new GoogleKeywordInsightDetail();
        $resultData = [];
        if(!empty($array)){
            $resultData = $this->paginateArray($array,$this->page,$this->row);
            $detailList = $detailModel->list(['search'=>['in',$resultData['list']]]);
            foreach ($resultData['list'] as $key => $item){
                $result['keyword'] = $item;
                $searchKeyword = $this->getSearchDetail($item,$detailList);
                if($searchKeyword === false){
                    $result['data'] = [];
                }else{
                    $result['data'] = $searchKeyword;
                }
                $resultData['list'][$key] = $result;
            }

        }
        $this->response('success',Code::SUCCESS,$resultData);
    }

    /**
     * @remark :保存一条关键字数据
     * @name   :getKeywordInsightDetail
     * @author :lyh
     * @method :post
     * @time   :2025/4/1 11:23
     */
    public function getKeywordInsightDetail(GoogleKeywordInsightLogic $logic){
        $this->request->validate([
            'keyword' => 'required'
        ],[
            'keyword.required' => '关键词不能为空',
        ]);
        $result = $logic->getGoogleInsightDetail();
        $detailModel = new GoogleKeywordInsightDetail();
        $data = $detailModel->read(['id'=>$result['id']]);
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :查看当前数据是否存在数组中
     * @name   :getSearchDetail
     * @author :lyh
     * @method :post
     * @time   :2025/4/1 9:56
     */
    public function getSearchDetail($keyword,$detailList){
        if(!empty($detailList)){
            foreach ($detailList as $value){
                if($keyword == $value['search']){
                    return $value;
                }
            }
        }
        return [];
    }

    /**
     * @remark :返回分页数据
     * @name   :paginateArray
     * @author :lyh
     * @method :post
     * @time   :2025/4/1 9:41
     */
    public function paginateArray($array, $page = 1, $pageSize = 20) {
        $totalItems = count($array);
        $totalPages = ceil($totalItems / $pageSize);
        // 确保页码有效
        $page = max(1, min($page, $totalPages));
        $offset = ($page - 1) * $pageSize;
        $data = array_slice($array, $offset, $pageSize);
        return [
            'list' => $data,
            'page' => $page,
            'size' => $pageSize,
            'total_page' => $totalPages,
            'total' => $totalItems,
        ];
    }
}