Common.php 8.1 KB
<?php

namespace App\Helper;

use App\Models\Ai\AiCommand as AiCommandModel;
use App\Models\Project\Project;
use App\Models\User\UserLog as UserLogModel;
use App\Models\User\UserLogin as UserLoginModel;
use Illuminate\Encryption\Encrypter;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

/**
 * @name:
 */
class Common
{
    public $key = '66537a12d4fff992f6d8b67fdda6192f';
    public $method = 'AES-256-CBC';
    /**
     * @name :生成用户操作日志
     * @return void
     * @author :liyuhang
     * @method
     */
    public static function set_user_log($param = []){
        $data = [
            'operator_id'=>$param['operator_id'],
            'model'=>$param['model'],
            'remark'=>$param['remark'],
            'project_id'=>$param['project_id']
        ];
        $model = new UserLogModel();
        return $model->add($data);
    }

    /**
     * @name :写入登录日志
     * @return void
     * @author :liyuhang
     * @method
     */
    public static function set_user_login($param = []){
        $data = [
            'user_id'=>$param['user_id'],
            'ip'=>$param['ip'],
            'project_id'=>$param['project_id'] ?: 0,
            'remark'=>$param['remark'] ?? '',
        ];
        $model = new UserLoginModel();
        return $model->add($data);
    }

    /**
     * @name :ai自动生成
     * @return mixed
     * @author :liyuhang
     * @method
     */
    public static function send_openai_msg($url,$param,$name = ''){
        $url = HTTP_OPENAI_URL.$url;
        $aiCommandModel = New AiCommandModel();
        //指定库获取指令
        $info = $aiCommandModel->read(['key'=>$param['key']]);
        if($info === false){
            response('指令不存在',400);
        }
        if (strpos($param['keywords'], '{') !== false && strpos($param['keywords'], '}') !== false) {
            $pattern = '/\{([^}]+)\}/'; // 匹配大括号及其内容
            if (preg_match($pattern, $param['keywords'], $matches)) {
                $lang = $matches[1]; // 获取捕获的内容
            }
        } else {
            //带原语种翻译
            $result = Translate::translateSl($param['keywords']);
            if (isset($result['texts']['sl']) && isset(Translate::$tls_list[$result['texts']['sl']])) {
                $lang = Translate::$tls_list[$result['texts']['sl']]['text'];
            } else {
                $lang = 'English';
            }
        }
        $str = 'Please answer in '.$lang;
        //替换关键字
        $content = str_replace('$keyword$', $param['keywords'], $info['ai']);
        //获取公司名称
        //$company$变量时替换为公司名
        $content = str_replace('$company$', $name , $content);
        $data = [
            'messages'=>[
//                ['role'=>'system','content'=>$info['scene']],
                ['role'=>'user','content'=>$content.$str],
            ]
        ];
        return http_post($url,json_encode($data));
    }

    /**
     * @name  :获取缓存
     * @return void
     * @author :liyuhang
     * @method
     */
    public static function get_user_cache($table,$id,$type = 'B'){
        $data = [];
        $cache = config('cache.user_is_cache');
        if(isset($cache) && ($cache['is_cache'] == true)){
            $key = 'cache_'.$table.'_'.$id.'_type';
            $data = Cache::store('file')->get($key);
        }
        return $data;
    }

    /**
     * @name :写入缓存
     * @return bool
     * @author :liyuhang
     * @method
     */
    public static function set_user_cache($data = [],$table,$id,$type = 'B'){
        $cache = config('cache.user_is_cache');
        if(isset($cache) && ($cache['is_cache'] == true)){
            $key = 'cache_'.$table.'_'.$id.'_type';
            Cache::store('file')->set($key,$data,3600);
        }
        return true;
    }

    /**
     * @name :清除缓存
     * @return bool
     * @author :liyuhang
     * @method
     */
    public static function del_user_cache($table,$id,$type = 'B'){
        $cache = config('cache.user_is_cache');
        if(isset($cache) && ($cache['is_cache'] == true)){
            if(is_array($id)){
                foreach ($id as $v){
                    if(is_array($v)){
                        continue;
                    }
                    $key = 'cache_'.$table.'_'.$v.'_type';
                    Cache::store('file')->pull($key);
                }
            }else{
                $key = 'cache_'.$table.'_'.$id.'_type';
                Cache::store('file')->pull($key);
            }
        }
        return true;
    }

    /**
     * @name   :(多维数组去重)array_deduplication
     * @author :lyh
     * @method :post
     * @time   :2023/5/9 10:47
     */
    public static function uniqueMultiArray($arr) {
        $arr = array_map('serialize', $arr);
        $arr = array_unique($arr);
        $arr = array_map('unserialize', $arr);
        return $arr;
    }

    /**
     * @param $targetDateTime
     * @name   :(获取时间差,精确时分秒,返回天数)getDaysToTargetDate
     * @author :lyh
     * @method :post
     * @time   :2023/5/24 9:38
     */
    public static function getDaysToTargetDate($targetDateTime)
    {
        $currentTimestamp = time();
        $targetTimestamp = strtotime($targetDateTime);
        $days = floor(($currentTimestamp - $targetTimestamp) / (60 * 60 * 24));
        return (int)$days;
    }

    // 生成授授权码
    public function encrypt($data)
    {
        $crypt = new Encrypter($this->key, $this->method);
        return $crypt->encrypt($data);
    }

    // 解密授权码
    public function decrypt($string)
    {
        $crypt = new Encrypter($this->key, $this->method);
        return $crypt->decrypt($string);
    }

    //处理关键词
    public static function deal_keywords($data){
        $str = ['1. ','2. ','3. ','4. ','5. ','6. ','7. ','8. ','1) ','2) ','3) ','4) ','5) ','6) ','7) ','7) ','8) '];
        $ar_keywords_t = explode("\n",$data);
        $ar_keywords = [];
        foreach ($ar_keywords_t as $v){
            if(trim($v)){
                $keyword = trim($v);
                if(strpos($keyword,'search keyword') !== false){
                    $tmp_first = explode('1. ',$keyword);
                    if(count($tmp_first) > 1){
                        $keyword = $tmp_first[1];
                    }else{
                        $tmp_first = explode('1) ',$keyword);
                        if(count($tmp_first) > 1){
                            $keyword = $tmp_first[1];
                        }
                    }
                }
                $keyword = str_replace($str,'',$keyword);
                $keyword = trim($keyword,'.');

                if(Str::contains($keyword, ['search keywords', 'here are 8', 'thank you'])){
                    continue;
                }
                $keyword_words = explode(' ', $keyword);

                $is_contains = false;
                foreach ($keyword_words as $word){
                    if(in_array($word, ['hope', 'remember', 'help', 'website', 'thanks', 'copywriter'])){
                        $is_contains = true;
                        break;
                    }
                }
                if($is_contains){
                    continue;
                }
                $ar_keywords[] = $keyword;
            }
        }
        return implode(', ',$ar_keywords);
    }


//过滤特殊字符
    public static function deal_str($str){
        $str = str_replace([',,'],',',$str);
        return str_replace(['{','}','”','“','"', '**SEO Title:**'],'',$str);
    }

    /**
     * 获取网页 title
     * @param $url
     * @author zbj
     * @date 2024/12/31
     */
    public static function getUrlTitle($url)
    {
        try {
            $response = Http::withoutVerifying()->get($url);
            $html = $response->body();
            $dom = new \DOMDocument();
            @$dom->loadHTML($html); // 加载 HTML
            $title = $dom->getElementsByTagName('title')->item(0); // 获取 <title> 标签
            return $title->nodeValue;
        } catch (\Exception $e) {
            return '';
        }
    }
}