helper.php 8.5 KB
<?php

use App\Utils\LogUtils;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
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;
    }
}

if (!function_exists('getPreviousDaysDate')) {
    /**
     * 获取当前指定前几天日期,默认获取前三天日期
     * @param int $day
     * @return array
     */
    function getPreviousDaysDate(int $day = 3)
    {
        $days = [];
        while ($day > 0) {
            $days[] = date("Y-m-d", strtotime("-{$day} days"));
            $day    -= 1;
        }
        return $days;
    }
}

if (!function_exists('getPreviousMonthsDate')) {
    /**
     * 获取当前指定前几天日期,默认获取前三天日期
     * @param int $month
     * @return array
     */
    function getPreviousMonthsDate(int $month = 3)
    {
        $months = [];
        while ($month > 0) {
            $months[] = date("Y-m", strtotime("-{$month} months"));
            $month    -= 1;
        }
        return $months;
    }
}

if (!function_exists('getInquiryInformation')) {
    /**
     * 获取第三方询盘信息
     * @return array|string
     * @throws GuzzleException
     */
    function getInquiryInformation($domain, $sta_date)
    {
        $token  = md5($domain . date("Y-m-d"));
        $source = '1,3';
        $url    = "https://form.globalso.com/api/external-interface/country_con/15243d63ed5a5738?domain={$domain}&token={$token}&source={$source}&sta_date={$sta_date}";
        $client = new Client(['verify' => false]);
        $http   = $client->get($url);
        $data   = [];
        if ($http->getStatusCode() != 200) {
            return $data;
        }
        $content = $http->getBody()->getContents();
        $json    = json_decode($content, true);
        if ($json['status'] != 200) {
            return $content;
        }
        $data['count'] = $json['data']['count'];
        $data['lists'] = $json['data']['data'];
        return $data;
    }
}

if (!function_exists('stringUnderlineLowercase')) {
    /**
     * 正则 - 名字转为小写并将空格转为下划线
     * @param $name
     * @return string
     */
    function stringUnderlineLowercase($name)
    {
        return trim(strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', $name)));
    }
}