helper.php 6.3 KB
<?php

use App\Utils\LogUtils;
use Illuminate\Support\Carbon;

define('HTTP_OPENAI_URL','http://openai.waimaoq.com/');
/**
 * 生成路由标识
 * @param $string
 * @return string
 * @author zbj
 * @date 2023/4/15
 */

if (!function_exists('generateRoute')) {
    function generateRoute($string)
    {
        return trim(strtolower(preg_replace('/[\W]+/', '-', trim($string))), '-');
    }
}


/**
 * 手动记录错误日志
 * @param $title
 * @param $params
 * @param Throwable $exception
 * @author zbj
 * @date 2023/4/27
 */
function errorLog($title, $params, Throwable $exception){
    $exceptionMessage = "错误CODE:" . $exception->getCode() .
        "-----错误message:" . $exception->getMessage() .
        '------错误文件:' . $exception->getFile() .
        '-------错误行数:' . $exception->getLine();

    LogUtils::error($title, $params, $exceptionMessage);
}

if(!function_exists('http_post')){
    /**
     * 发送http post请求
     * @param type $url
     * @param type $post_data
     */
    function http_post($url, $post_data,$header = [])
    {
        if(empty($header)){
            $header = array(
                "Accept: application/json",
                "Content-Type:application/json;charset=utf-8",
            );
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $res = curl_exec($ch);
        if (curl_errno($ch)) {
            \Illuminate\Support\Facades\Log::write(print_r(curl_errno($ch),1),'debug---1');
        }
        curl_close($ch);
        return json_decode($res, true);
    }
}

if(!function_exists('http_get')){
    /**
     * 发送http get请求
     * @param type $url
     * @return type
     */
    function http_get($url,$header = [])
    {
        if(empty($header)){
            $header[] = "content-type: application/json;
            charset = UTF-8";
        }
        $ch1     = curl_init();
        $timeout = 5;
        curl_setopt($ch1, CURLOPT_URL, $url);
        curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch1, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch1, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, false);
        $access_txt = curl_exec($ch1);
        curl_close($ch1);
        return json_decode($access_txt, true);
    }
}


if(!function_exists('_get_child')){
    /**
     * 菜单权限->得到子级数组
     * @param int
     * @return array
     */
    function _get_child($my_id, $arr)
    {
        $new_arr = array();
        foreach ($arr as $k => $v) {
            $v = (array)$v;
            if ($v['pid'] == $my_id) {
                $v['sub'] = _get_child($v['id'],$arr);
                $new_arr[] = $v;
            }
        }
        return $new_arr ? $new_arr : false;
    }
}



if (!function_exists('checkDomain')) {
    /**
     * 检查并补全域名协议
     * @return false|string
     * @author zbj
     * @date 2023/5/5
     */
    function checkDomain($value)
    {
        $urlParts = parse_url(strtolower($value));
        if(empty($urlParts['host'])){
            $urlParts = parse_url('https://' . $value);
        }
        $host = $urlParts['host'] ?? '';
        $scheme = $urlParts['scheme'] ?? 'https';
        if(!in_array($scheme, ['http', 'https'])){
            return false;
        }
        if (preg_match('/^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$/', $host)) {
            return $scheme . '://' . $host . '/';
        } else {
            return false;
        }
    }
}



/**
 * 把返回的数据集转换成Tree
 * @param $list array 数据列表
 * @param string|int $pk 主键|root
 * @param string $pid 父id
 * @param string $child 子键
 * @param int $root 获取哪个id下面
 * @param bool $empty_child 当子数据不存在,是否要返回空子数据
 * @return array
 */
function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0,$empty_child=true) {
    // 如果是数字,则是root
    if(is_numeric($pk)){
        $root  =   $pk;
        $pk    =   'id';
    }
    // 创建Tree
    $tree = array();
    if(is_array($list)) {
        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $data) {
            if($empty_child){
                $list[$key][$child] =   [];
            }
            $refer[$data[$pk]] =& $list[$key];
        }
        foreach ($list as $key => $data) {
            // 判断是否存在parent
            $parentId = $data[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            }else{
                if (isset($refer[$parentId])) {
                    $refer[$parentId][$child][] =   & $list[$key];
                }
            }
        }
    }
    return $tree;
}

/**
 * tree数据转list
 * @param $tree
 * @param string $child
 * @return array
 * @author:dc
 * @time 2022/1/11 10:13
 */
function tree_to_list($tree, $child='_child'){
    $lists  =   [];
    foreach ($tree as $item){
        $c = $item[$child]??[];
        unset($item[$child]);
        $lists[] = $item;
        if ($c){
            $lists = array_merge($lists,tree_to_list($c, $child));
        }
    }
    return $lists;
}

if (!function_exists('getThisWeekStarDate')) {
    /**
     * 获取本周一的日期
     * @return mixed
     * @author zbj
     * @date 2023/5/11
     */
    function getThisWeekStarDate()
    {
        return Carbon::now()->startOfWeek()->toDateString();
    }
}

if (!function_exists('object_to_array')) {
    /**
     * 获取本周一的日期
     * @return mixed
     * @author zbj
     * @date 2023/5/11
     */
    function object_to_array($data)
    {
        if(is_object($data)){
            $data = (array)$data;
        }else{
            foreach ($data as $k => $v){
                $data[$k] = object_to_array($v);
            }
        }
        return $data;
    }
}