KeywordLogic.php 6.3 KB
<?php

namespace App\Http\Logic\Bside\Product;

use App\Exceptions\BsideGlobalException;
use App\Helper\Arr;
use App\Helper\Common;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\Product\Keyword;
use App\Models\Product\KeywordRelated;
use App\Models\Product\Product;
use App\Models\RouteMap\RouteMap;
use Illuminate\Support\Facades\DB;

/**
 * Class KeywordLogic
 * @package App\Http\Logic\Bside\APublicModel
 * @author zbj
 * @date 2023/4/15
 */
class KeywordLogic extends  BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->param = $this->requestAll;
        $this->model = new Keyword();
    }

    /**
     * @remark :获取数据详情
     * @name   :getInfo
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 16:50
     */
    public function getKeywordInfo()
    {
        $info = $this->model->read($this->param);
        $info['url'] = $this->user['domain'] . $info['route'];
        return $this->success($info);
    }

    /**
     * @remark :保存
     * @name   :keywordSave
     * @author :lyh
     * @method :post
     * @time   :2023/8/23 16:50
     */
    public function keywordSave(){
        DB::beginTransaction();
        try {
            $this->param = $this->handleSaveParam($this->param);
            if(isset($this->param['id']) && !empty($this->param['id'])){
                $info = $this->model->read(['id'=>$this->param['id']],['id','route']);
                $route = $info['route'];
                $this->model->edit($this->param,['id'=>$info['id']]);
            }else{
                $this->param['project_id'] = $this->user['project_id'];
                $this->param['created_at'] = date('Y-m-d H:i:s');
                $this->param['updated_at'] = $this->param['created_at'];
                $id = $this->model->insertGetId($this->param);
                //路由映射
                $route = RouteMap::setRoute($this->param['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
                $this->model->edit(['route'=>$route],['id'=>$id]);
            }
            //清除缓存
            Common::del_user_cache('product_keyword',$this->user['project_id']);
            DB::commit();
        }catch (\Exception $e){
            DB::rollBack();
            $this->fail('保存失败');
        }
        //通知更新
        $this->updateNotify(['project_id'=>$this->user['project_id'], 'type'=>RouteMap::SOURCE_PRODUCT_KEYWORD, 'route'=>$route]);
        return $this->success();
    }

    /**
     * @remark :保存数据时参数处理
     * @name   :handleSaveParam
     * @author :lyh
     * @method :post
     * @time   :2023/10/23 14:47
     */
    public function handleSaveParam($param){
        if(isset($param['keyword_top_banner']) && !empty($param['keyword_top_banner'])){
            $param['keyword_top_banner'] = str_replace_url($param['keyword_top_banner']);
        }
        if(isset($param['keyword_foot_banner']) && !empty($param['keyword_foot_banner'])){
            $param['keyword_foot_banner'] = str_replace_url($param['keyword_foot_banner']);
        }
        if(isset($param['keyword_video']) && !empty($param['keyword_video'])){
            $param['keyword_video'] = Arr::a2s($param['keyword_video']);
        }
        return $param;
    }

    /**
     * @remark :批量添加数据
     * @name   :batchAdd
     * @author :lyh
     * @method :post
     * @time   :2023/8/28 14:03
     */
    public function batchAdd(){
        if(!empty($this->param['title']) && is_array($this->param['title'])){
            foreach ($this->param['title'] as $v){
                $param['project_id'] = $this->user['project_id'];
                $param['created_at'] = date('Y-m-d H:i:s');
                $param['updated_at'] = $param['created_at'];
                $param['title'] = $v;
                $id = $this->model->insertGetId($param);
                $route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
                $this->model->edit(['route'=>$route],['id'=>$id]);
            }
        }
        return $this->success();
    }

    /**
     * @remark :删除标签
     * @name   :keywordDelete
     * @author :lyh
     * @method :post
     * @time   :2023/8/28 11:28
     */
    public function keywordDelete(){
        $ids = $this->param['ids'];
        $productModel = new Product();
        foreach ($ids as $id){
            $product_info = $productModel->read(['keyword_id'=>['like','%,'.$id.',%']]);
            if($product_info !== false){
                $this->fail('当前关键词拥有产品不允许删除');
            }
            $this->delRoute($id);
            $this->model->del(['id'=>$id]);
        }
        //清除缓存
        Common::del_user_cache('product_keyword',$this->user['project_id']);
        return $this->success();
    }

    /**
     * @remark :删除路由
     * @name   :delRoute
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 10:50
     */
    public function delRoute($id){
        //删除路由映射
        RouteMap::delRoute(RouteMap::SOURCE_PRODUCT_KEYWORD, $id, $this->user['project_id']);
        //生成一条删除路由记录
        $info = $this->model->read(['id'=>$id],['id','route']);
        $data = [
            'source'=>RouteMap::SOURCE_PRODUCT_KEYWORD,
            'route'=>$info['route'],
        ];
        $this->setRouteDeleteSave($data);
        return $this->success();
    }

    /**
     * 产品导入:关键词处理
     * @param $project_id
     * @param $keyword
     * @return string
     * @throws \Exception
     * @author Akun
     * @date 2023/09/21 14:55
     */
    public function importProductKeyword($project_id,$keyword){
        $return = [];

        $keyword_arr = explode(',',$keyword);

        foreach ($keyword_arr as $v){
            $keyword_info = $this->model->read(['title'=>$v]);
            if(!$keyword_info){
                $k_id = $this->model->addReturnId(['title'=>$v,'project_id'=>$project_id]);
                $route = RouteMap::setRoute($v, RouteMap::SOURCE_PRODUCT_KEYWORD, $k_id, $project_id);
                $this->model->edit(['route'=>$route],['id'=>$k_id]);
            }else{
                $k_id = $keyword_info['id'];
            }
            $return[] = $k_id;
        }

        //清除缓存
        Common::del_user_cache('product_keyword',$project_id);

        return ','.implode(',',$return).',';
    }
}