KeywordController.php 4.5 KB
<?php

namespace App\Http\Controllers\Bside\Product;

use App\Enums\Common\Code;
use App\Helper\Arr;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Product\KeywordLogic;
use App\Http\Requests\Bside\Product\KeywordRequest;
use App\Models\Product\Keyword;
use App\Models\Product\KeywordRelated;
use App\Models\Product\Product;
use App\Models\RouteMap\RouteMap;
use App\Rules\Ids;
use Illuminate\Http\Request;

/**
 * Class KeywordController
 * @package App\Http\Controllers\Bside
 * @author zbj
 * @date 2023/4/15
 */
class KeywordController extends BaseController
{

    /**
     * @remark :关键字列表
     * @name   :index
     * @author :lyh
     * @method :post
     * @time   :2023/8/17 10:57
     */
    public function index(Keyword $keyword)
    {
        $this->map = $this->searchParam($this->map);
        $filed =  ['id', 'project_id', 'title', 'seo_title', 'seo_keywords', 'seo_description', 'status', 'created_at','route','keyword_title'];
        $data = $keyword->lists($this->map,$this->page,$this->row,$this->order,$filed);
        if(!empty($data)){
            foreach ($data['list'] as &$v){
                $v['product_num'] = Product::where('keyword_id','like' ,'%,'.$v['id'].',%')->count();
                if(!empty($v['seo_title']) || !empty($v['seo_keywords']) || !empty($v['seo_description'])){
                    $v['tdk'] = 1;
                }else{
                    $v['tdk'] = 0;
                }
                $v['url'] = $this->user['domain'] . $v['route'].'/';
            }
        }
        return $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :搜索
     * @name   :searchParam
     * @author :lyh
     * @method :post
     * @time   :2023/12/21 17:40
     */
    public function searchParam($map){
        if(!empty($map['title'])){
            $map['title'] = ['like','%'.$map['title'].'%'];
        }
        if(!empty($map['keyword_title'])){
            $map['keyword_title'] = ['like','%'.$map['keyword_title'].'%'];
        }
        $map['route'] = ['<>',''];
        $map['project_id'] = $this->user['project_id'];
        return $this->success($map);
    }

    /**
     * @remark :获取数据详情
     * @name   :info
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 16:57
     */
    public function info(Request $request, KeywordLogic $logic){
        $request->validate([
            'id'=>'required'
        ],[
            'id.required' => 'ID不能为空'
        ]);
        $data = $logic->getKeywordInfo();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * @remark :保存
     * @name   :save
     * @author :lyh
     * @method :post
     * @time   :2023/8/28 14:24
     */
    public function save(KeywordRequest $request, KeywordLogic $logic)
    {
        $request->validated();
        $data = $logic->keywordSave();
        $this->response('success',Code::SUCCESS,$data);
    }

    /**
     * 批量添加关键词
     * FIXME 添加通知, 异步处理任务
     * @param KeywordLogic $logic
     * @throws \App\Exceptions\AsideGlobalException
     * @throws \App\Exceptions\BsideGlobalException
     */
    public function batchAdd(KeywordLogic $logic){
        $this->request->validate([
            'title'=>['required','array', 'max:1000']
        ],[
            'title.required' => 'title不能为空',
            'title.array' => 'title为数组',
            'title.max' => '批量操作不能超过1000条数据'
        ]);
        $logic->batchAdd();
        $this->response('关键词后台异步添加中,请稍后刷新查看!');
    }

    /**
     * @remark :删除数据
     * @name   :delete
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 17:44
     */
    public function delete(KeywordLogic $logic)
    {
        $this->request->validate([
            'ids'=>['required', new Ids()]
        ],[
            'ids.required' => 'ID不能为空'
        ]);
        $logic->keywordDelete();
        $this->response('success');
    }

    /**
     * 批量删除
     * @param KeywordLogic $logic
     * @author zbj
     * @date 2023/11/22
     */
    public function batchDel(KeywordLogic $logic){
        $this->request->validate([
            'title'=>['required','array', 'max:1000']
        ],[
            'title.required' => 'title不能为空',
            'title.array' => 'title为数组',
            'title.max' => '批量操作不能超过1000条数据'
        ]);
        $logic->batchDel();
        $this->response('success');
    }

}