$code,"message"=>$message,"data"=>$data]; return json($result); } // 应用公共文件 function error_show($code=0,$message=""){ $result = ['code'=>$code,"message"=>$message]; return json($result); } function GetUserInfo($token){ $host = Config::get("app"); $url = $host["api_host"]."/verifyToken"; $data=[ "token"=>$token ]; $response=curl_request($url,$data); return json_decode($response,true); } function setUserCompany($condition){ $host = Config::get("app"); $url = $host["api_host"]."/setcompany"; $response=curl_request($url,$condition); return json_decode($response,true); } function setCompanyStatus($condition){ $host = Config::get("app"); $url = $host["api_host"]."/companystatus"; $response=curl_request($url,$condition); return json_decode($response,true); } function setStatus($condition){ $host = Config::get("app"); $url = $host["api_host"]."/userstatus"; $response=curl_request($url,$condition); return json_decode($response,true); } /**手机号验证 * @param $mobile * @return bool */ function checkMobile($mobile){ if (!is_numeric($mobile)) { return false; } return preg_match('#^1[3,4,5,6,7,8,9]{1}[\d]{9}$#', $mobile) ? true : false; } function checkTel($tel){ if (!$tel) { return false; } return preg_match('/^(0[0-9]{2,3}\-)([0-9]{7,8})+(\-[0-9]{1,4})?$/', $tel) ? true : false; } /**邮箱验证 * @param $email * @return bool */ function checkEmail($email){ if (!$email) { return false; } return preg_match('#[a-z0-9&\-_.]+@[\w\-_]+([\w\-.]+)?\.[\w\-]+#is', $email) ? true : false; } /** * @param * @return int */ function makeSalt(){ $salt = rand(10000000,99999999); return $salt; } /** * @param $token * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ function VerifyTokens($token){ $host = Config::get("app"); $url = $host["api_host"]."/verifyToken"; $data=[ "token"=>$token ]; $response=curl_request($url,$data); return json_decode($response,true); } /** * @param $token * @param $condition * @return mixed */ function GetUserlist($condition){ $host = Config::get("app"); $url = $host["api_host"]."/userlistbycompany"; $response=curl_request($url,$condition); return json_decode($response,true); } ///** // * @param $token // * @param $condition // * @return mixed // */ //function GetAccountall($token, $condition){ // $host = Config::get("app"); // // $url = $host["api_host"]."/Api/userall"; // $condition['token']=$token; // $response=curl_request($url,$condition); // // return json_decode($response,true); //} function GetList($condition){ $host = Config::get("app"); $url = $host["api_host"]."/userlist"; $response=curl_request($url,$condition); return json_decode($response,true); } /** * @param $token * @param $condition ['id'=>1] * @return mixed */ function GetInfoById($token,$condition){ $host = Config::get("app"); $url = $host["api_host"]."/userinfo"; $condition['token']=$token; $response=curl_request($url,$condition); return json_decode($response,true); } /** * @param $str * @return string */ function makeNo($str){ $date=date("mdHis"); $year = date("Y")-2000; $msec=rand(1000,9999); return $str.$year.$date.$msec; } function makeStr($str){ $date=date("mdHis"); $year = date("Y")-2000; $msec=randomkeys(4); return $str.$msec.$year.$date; } function randomkeys($length) { $returnStr=''; $pattern = '1234567890abcdefghijklmnopqrstuvwxyz';//ABCDEFGHIJKLOMNOPQRSTUVWXYZ for($i = 0; $i < $length; $i ++) { $returnStr .= $pattern[mt_rand ( 0, strlen($pattern)-1 )]; //生成php随机数 } return $returnStr; } /** * @param $token * @param $condition * @return mixed */ function resetpwd($condition){ $host = Config::get("app"); $url = $host["api_host"]."/setpasswd"; $response=curl_request($url,$condition); return json_decode($response,true); } function resetpasswd($token,$condition){ $host = Config::get("app"); $url = $host["api_host"]."/Api/passsave"; $condition['token']=$token; $response=curl_request($url,$condition); return json_decode($response,true); } /** * @param $condition * @return array|bool|float|int|mixed|\stdClass|string|null */ function checkLogin($condition){ $host = Config::get("app"); $url = $host["api_host"]."/login"; $response=curl_request($url,$condition); return json_decode($response,true); } /** * @param $token * @param $condition * @return mixed */ function resetinfo($condition){ $host = Config::get("app"); $url = $host["api_host"]."/usersave"; $response=curl_request($url,$condition); return json_decode($response,true); } /** * @param $condition * @return array|bool|float|int|mixed|\stdClass|string|null */ function addacount($condition){ $host = Config::get("app"); $url = $host["api_host"]."/useradd"; $response=curl_request($url,$condition); return json_decode($response,true); } //添加超管账号 if(function_exists('add_admin_account') == false){ function add_admin_acount(array $data=[]){ $host = Config::get("app"); $url = $host["api_host"]."/add_admin_account"; $response=curl_request($url,$data); return json_decode($response,true); } } if(!function_exists("headerSign")){ function headerSign($post){ $config = Config::get("sign"); $appid=$config['appid']; $appkey=$config['appkey']; $headerArr=["appid"=>'123',"noce"=>randomkeys(16),"sign"=>'',"timestamp"=>time()]; $value =array_merge($post,$headerArr); $Sign= new \Sign($appid,$appkey); $headerArr['sign'] = $Sign->makeSign($value); $list=["Content-Type"=>"multipart/json;charset=utf-8"]; foreach ($headerArr as $key=>$value){ $list[]=$key.":".$value; } return $list; } } //参数1:访问的URL,参数2:post数据(不填则为GET),参数3:提交的$cookies,参数4:是否返回$cookies function curl_request($url,$post='',$header=[]){ // $header = empty($header) ? '' : $header; $header = headerSign($post); if(is_array($post)) $post=http_build_query($post); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_AUTOREFERER, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); if($post) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post); } curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); $data = curl_exec($curl); if (curl_errno($curl)) { return curl_error($curl); } curl_close($curl); return $data; } /** * @param $roleid * @param $menu * @return bool * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ function checkRole($roleid,$menu){ $roleinfo = \think\facade\Db::name("role_action")->where([['role_id',"=",$roleid],["status","=",1]])->find(); if($roleinfo['private_data']!=""){ $private = explode(",",$roleinfo['private_data']); if(in_array($menu,$private)){ return true; } } return false; } /** * @param $row * @param $list */ function makeMenu($row,&$list){ $list[$row['id']]=$row; if($row['pid']==0){ return $list; } $parent =Db::name("admin_menu")->where(["id"=>$row['pid'],"status"=>1,"is_del"=>0])->field("id,menu_name,menu_img,menu_url,menu_route,pid,is_show,is_private,menu_type,weight")->find(); if($parent==false) return $list; makeMenu($parent,$list); } /** * 遍历集合处理 * @param $menuArr */ function MenuTree(&$menuArr,$pid=0){ $meun=[]; foreach ($menuArr as $value){ if($value['pid']==$pid){ if($value['menu_type']==1)$value['child']=MenuTree($menuArr,$value['id']); $meun[]=$value ; } } return $meun; }; function upload($files,$extend="xls") { // 获取表单上传文件 try { validate([ 'file' => [ 'fileExt' => 'xlsx,xls' ] ], [ 'file.fileExt' => '不支持的文件', ] )->check(['file' => $files]); if ($extend == 'xlsx') { $objReader = PHPExcel_IOFactory::createReader('Excel2007'); } else { $objReader = PHPExcel_IOFactory::createReader('Excel5'); } $savename = Filesystem::disk('public')->putFile('topic/excel', $files); $import_path = root_path() . 'public/storage/' . $savename; $spreadsheet = $objReader->load($import_path); $sheet = $spreadsheet->getActiveSheet(); $sheetData = $sheet->toArray(); if (empty($sheetData) || !is_array($sheetData)) { return ['code' => 1003, "msg" => '数据不能为空']; } return ['code' => 0, "msg" => '数据解析成功', 'data' => $sheetData]; } catch (think\exception\ValidateException $e) { // echo $e->getMessage(); return ['code' => 1003, "msg" => $e->getMessage()]; } } /** * @param $files * @return array */ function UploadImg($files) { $savename = []; $files = !is_array($files) ? [$files] : $files; try { //验证 validate(['imgFile' => ['fileSize' => 10240000, 'fileExt' => 'jpg,jpeg,png,bmp,gif', 'fileMime' => 'image/jpeg,image/png,image/gif']])->check(['imgFile' => $files]); foreach ($files as $file) { $url = Filesystem::disk('public')->putFile('img/' . date("Ymd"), $file, function () use ($file) { return str_replace('.' . $file->getOriginalExtension(), '', $file->getOriginalName() . "_" . date('YmdHis')); }); $name = str_replace('.' . $file->getOriginalExtension(), '', $file->getOriginalName()); $temp = ["url" =>"storage/".$url, "name" => $name]; $savename[] = $temp; } return $savename; } catch (\think\exception\ValidateException $e) { return $e->getMessage(); } } if(!function_exists("invoiceType")){ //发票类型 1 专用2普通3电子普通4 电子专用 5 q全电子发票 function invoiceType($key=0){ $panda= ['',"004",'007','026','028','000']; return $panda[$key]??''; } } if(!function_exists('excelExport')){ /** * @param string $fileName * @param array $headArr * @param array $data * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception * @throws \PHPExcel_Writer_Exception */ function excelExport($fileName = '', $headArr = [], $data = []) { $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties(); $keyA = 0; // 设置表头 foreach ($headArr as $v) { $colum = PHPExcel_Cell::stringFromColumnIndex($keyA); $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v); $keyA += 1; } $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); foreach ($data as $key => $rows) { // 行写入 $span = 0; foreach ($rows as $keyName => $value) { // 列写入 //判断数据是否有数组,如果有数组,转换成字符串 if(is_array($value)){ $value = implode("、", $value); } $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value); $span++; } $column++; } // var_dump($objActSheet->getActiveCell()); $fileName .= "_" . date("Y_m_d", time()) . ".xls"; //$fileName .= "_" . date("Y_m_d", Request()->instance()->time()) . ".xls"; //$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表 $objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表 // Redirect output to a client’s web browser (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="'.$fileName.'"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header ('Pragma: public'); // HTTP/1.0 header("Content-Type: application/octet-stream"); # 流文件输出 header("Content-Transfer-Encoding: binary"); # 告诉浏览器,这是二进制文件 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); // 文件通过浏览器下载 exit(); } } if(!function_exists("Csv_save")){ function Csv_save($fileName,$headArr =[],$data=[],$num=10000){ /* * 导出数据生成csv文件 * @param file_name string 文件名 * @param headArr array 表头 * @param $db \think\db\Query 使用Db方法后生成的对象实例 * @param callback 回调函数,一般用在对查询结果进行二次处理的时候(例如二次计算,将状态等值由数字转变为文本,额外添加字段等) */ set_time_limit(0);//让程序一直运行 $fileName .= date('_Y_m_d');//文件名拼接日期 header('Content-Encoding:UTF-8'); header("Content-type:application/vnd.ms-excel;charset=UTF-8"); header('Content-Disposition:attachment;filename="' . $fileName . '.csv"'); $fp = fopen('php://output', 'a');//打开php标准输出流 fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));//添加bom头,以UTF-8编码导出的csv文件,如果文件头未添加bom头,打开会出现乱码 try { if (!empty($headArr)) fputcsv($fp, $headArr);//添加导出标题 $max = PHP_INT_MAX; $count=0;//阈值 //写入数据 for ($i = 1; $i > 0; $i++) { $has_data = false;//默认没有查询到数据 foreach ($data as $k => $value) { // $max = $value[$pk];//维护最大值 // $has_data = true;//存在查询数据 // if ($function) $value = $function($value);//调用回调函数处理 if (empty($headArr)) { $headArr = array_keys($value); fputcsv($fp, $headArr);//添加导出标题 } fputcsv($fp, $value); if (($k + 1) % $num == 0) { ob_flush();//清空缓存,释放内存 flush(); } $count++;//阈值自增 } if ($has_data === false) break;//结束循环 if($count>=1000000) throw new \think\Exception('超出文件的最大显示行数,请根据条件分批次导出数据或使用预约导出功能,更多问题请联系开发人员'); } }catch (\think\Exception $exception){ fputcsv($fp,[$exception->getMessage()]); } ob_flush(); flush(); ob_end_clean(); fclose($fp); exit(); } } if(!function_exists('menuAction')){ function menuAction($row,&$list=[]){ $temp=[]; foreach ($row as $key=>$value){ if($value['pid']==0){ $list[]=$value; }else{ $menu=Db::name("admin_menu")->where(["id"=>$value['pid'],"is_del"=>0,"status"=>1])->field("id,menu_name,menu_img,menu_route,menu_url,pid,level,is_show,is_private,menu_type,status")->findOrEmpty(); if(empty($menu)) continue; if(!isset($temp[$value['pid']]))$temp[$value['pid']]=$menu; $temp[$value['pid']]['child'][]=$value; } } // $list=$temp; if (!empty($temp)){ menuAction($temp,$list); } } } /** * 批量生成多个文件excel,生成压缩包,保存到本地,返回文件链接 * datas 生成器 * header array 头部字段 * filename string 文件名 */ if (!function_exists('excelSaveFile')) { function excelSaveFile($datas, string $filename = '') { // $urls = []; $dir = root_path() . 'public/storage/report/' . date("YmdHis") . "/"; if (!is_dir($dir)) mkdir($dir, 0777, true); // foreach ($datas as $item) { PHPExcel_Settings::setCacheStorageMethod(); PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;//单元格缓存为MemoryGZip $objPHPExcel = new PHPExcel(); $keyA = 0; // 设置表头 $column = 2; $objActSheet = $objPHPExcel->getActiveSheet(); foreach ($datas as $key => $rows) { // 行写入 //第一行取key作表头 if($key==0){ $objPHPExcel->getProperties(); foreach ($rows as $k=>$v) { $colum = PHPExcel_Cell::stringFromColumnIndex($keyA); $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $k); $keyA += 1; } } //写入列 $span = 0; foreach ($rows as $keyName => $value) { //判断数据是否有数组,如果有数组,转换成字符串 if (is_array($value)) $value = implode("、", $value); $objActSheet->setCellValue(PHPExcel_Cell::stringFromColumnIndex($span) . $column, $value); $span++; } $column++; } $file = $filename . ".xls"; $objPHPExcel->setActiveSheetIndex(0); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save($dir . $file); // 文件通过浏览器下载 $url = $dir . $file; if (!file_exists($url)) throw new Exception('文件生成失败'); $saveDir = root_path() . "public/storage/zip/" . date('Ymd') . '/'; if (!is_dir($saveDir)) mkdir($saveDir, 0777, true); $file_dir = $saveDir . $filename . ".zip"; # 5.1 文件打包,提示:使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释 $zip = new \ZipArchive (); # 5.2 文件不存在则生成一个新的文件 用CREATE打开文件会追加内容至zip if ($zip->open($file_dir, \ZipArchive::OVERWRITE) !== true && $zip->open($file_dir, \ZipArchive::CREATE) !== true) echo '无法打开文件或者文件创建失败'; # 5.3 批量写入压缩包 // $zip->addEmptyDir($fileName);//往zip压缩包写入空目录 // foreach ($urls as $fileName) { @$zip->addFile($url, DIRECTORY_SEPARATOR . basename($url)); // } // @$zip->addFile($v['file_path'], 'resume'.DIRECTORY_SEPARATOR.basename($headername)); # 5.4 关闭压缩包写入 $zip->close(); @deldir($dir);//删除已生成的文件及目录 //6. 检查文件是否存在,并输出文件 if (!file_exists($file_dir)) throw new Exception('压缩包文件不存在'); return str_replace(root_path()."public/" , env("host.host"), $file_dir); } } //读取大文件 if (!function_exists('read_big_file')){ function read_big_file(string $file=''){ $handle = fopen($file, 'rb'); while (feof($handle) === false) { yield fgets($handle); } fclose($handle); } } function deldir($path){ //如果是目录则继续 if(is_dir($path)){ //扫描一个文件夹内的所有文件夹和文件并返回数组 $p = scandir($path); //如果 $p 中有两个以上的元素则说明当前 $path 不为空 if(count($p)>2){ foreach($p as $val){ //排除目录中的.和.. if($val !="." && $val !=".."){ //如果是目录则递归子目录,继续操作 if(is_dir($path.$val)){ //子目录中操作删除文件夹和文件 deldir($path.$val.'/'); }else{ //如果是文件直接删除 unlink($path.$val); } } } } } //删除目录 return rmdir($path); }