<?php
/**
 * Created by PhpStorm.
 * User: ICHUNT
 * Date: 2019-03-28
 * Time: 18:51
 */

/**
 * 二维数组根据字段进行排序
 * @params array $array 需要排序的数组
 * @params string $field 排序的字段
 * @params string $sort 排序顺序标志 SORT_DESC 降序;SORT_ASC 升序
 */
function arraySequence($array, $field, $sort = 'SORT_DESC')
{
    $arrSort = array();
    foreach ($array as $uniqid => $row) {
        foreach ($row as $key => $value) {
            $arrSort[$key][$uniqid] = $value;
        }
    }
    array_multisort($arrSort[$field], constant($sort), $array);
    return $array;
}


/**
 * 钉钉发送请求curl方法
 */
function SendAlarm($e){
    if(stripos($e->getFile(),'RouteCollection.php')) return false;
    $message='时间:'.date('Y-m-d H:i:s')."\r\n".'任务:'.$e->getFile()."\r\n".'错误信息:'.$e->getMessage()."\r\n".'行号:'.$e->getLine();
    SendRobot('',$message,false,Config('website.SystemName'));
}

/**
 * @param string $webhook 机器人地址
 * @param string $message 消息内容
 * @param bool|array $at 需要@的人
 * @param string $sign 系统标记
 * @return mixed
 */
function SendRobot($webhook='',$message,$at=false,$sign='未设置系统')
{
    if(empty($webhook)) $webhook = "https://oapi.dingtalk.com/robot/send?access_token=d1e3ec2e48d250721276accbadb8defcf28ba8e6fd8644ee3f4c3ea4cf417bca";
    $data = array ('msgtype' => 'text','text' => array ('content' => $message."\r\n系统:".$sign));
    if($at!==true && is_array($at)) $data['at']=['atMobiles'=>$at];
    $data_string = json_encode($data);
    $result = dtcurl($webhook, $data_string,true);
    return $result;
}

/**
 * 钉钉发送请求curl方法
 */
function dtcurl($url,$data=null){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: application/json;charset=UTF-8'));
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return json_decode($output,true);
}

/**
 * @param 错误码 $ErrCode
 * @param 错误描述 $ErrMsg
 * @return bool
 */

function ErrorLog($ErrCode=null,$ErrMsg=null){
    $Route=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
    $ErrFile=$Route[1]['file'];
    $line=$Route[1]['line'];
    $Action=$_SERVER['PHP_SELF'];
    if(empty($ErrCode)) return true;
    $ErrInfo=\LogReport::anlyError($ErrMsg,$ErrFile,$line,$ErrCode,$Action);//错误内容, 错误文件, 错误行数, 错误码, 错误方法名); 返回固定格式字符串,第一个参数可传数组
    \LogReport::write($ErrInfo); //将anlyError返回的数据作参数传入
    return true;
}

/**
 * @param array|bool $arr 指定收集的字段
 * @param bool $empty 是否过滤空值
 * @param array $data 需要过滤数据,不指定从get、post拿指定字段
 * @return array|string
 */

function TrimX($arr = false, $empty = true, $data = [])
{
    if (empty($data)) $data = \Illuminate\Support\Facades\Request::only($arr);
    if (is_array($data)) {
        foreach ($data as $k => $v) {
            if (!empty($v) && $v != '0' && !is_array($v)) {
                $data[$k] = trim($v);
                $data[$k] = trim($v, ' ');
            }
            if ($empty == true) if ((empty($v) && $v != 0) || $v == 'undefined' || $v == null) unset($data[$k]);
            if (is_array($arr) && count($arr) > 0 && count($data) > 0) {
                if (!in_array($k, $arr)) unset($data[$k]);
            }
        }
    } else {
        $data = trim($data);
        $data = trim($data, ' ');
    }
    return $data;
}

/**
 * @param string $url
 * @param array|bool $params
 * @param int|bool $ispost
 * @param array $header
 * @return bool|mixed
 */

function curl($url, $params = false, $ispost = 0, $header=[])
{
    $httpInfo = array();
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36');
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
    if(!empty($header)){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    }
    if ($ispost) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        curl_setopt($ch, CURLOPT_URL, $url);
    } else {
        if ($params) {
            if (is_array($params)) {
                $params = http_build_query($params);
            }
            curl_setopt($ch, CURLOPT_URL, $url . '?' . $params);
        } else {
            curl_setopt($ch, CURLOPT_URL, $url);
        }
    }
    $response = curl_exec($ch);

    if ($response === FALSE) {
//        echo "cURL Error: " . curl_error($ch);
        return false;
    }
    curl_close($ch);
    return $response;
}

/**
 * @param array $data
 * @param string $key
 * @return mixed
 */
function ApiRequest($data,$key){
    $data['k1']=time();
    $data['k2']=MD5(MD5($data['k1']).$key);
    return $data;
}

function HproseClient($Url,$action,$data=''){
    $connect=new \Hprose\Swoole\Http\Client($Url,false);
    $result=$connect->$action($data);
    $connect->close();
    return $result;
}