$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); } 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('get_company_list') == false){ function get_company_list(array $data=[]){ $host = Config::get("app"); $url = $host["api_host"]."/get_company_list"; $response=curl_request($url,$data); echo $response;exit; // return json_decode($response,true); } } if(!function_exists("UserHandle")){ function UserHandle($uri='',$param=[]){ $host = env("user.hosturl"); $url = $host.$uri; $response=curl_request($url,$param); 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',"in",$roleid],["status","=",1]])->json(["private_data"])->find(); if(!empty($roleinfo['private_data'])){ if(in_array($menu,$roleinfo['private_data'])){ 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]??''; } } function startTime($time){ return date('Y-m-d 00:00:00',strtotime($time)); } function endTime($time){ return date('Y-m-d 23:59:59',strtotime($time)); } 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; $rows=is_array($rows)?$rows:$rows->toArray(); 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,weight,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); } //检查供应商是否有开通账号 if (!function_exists('check_has_account_by_supplierNos')) { function check_has_account_by_supplierNos(array $supplierNo = []): array { $host = Config::get("app"); $url = $host["api_host"]."/check_has_account_by_supplierNos"; $response=curl_request($url,['supplierNo' => $supplierNo]); return json_decode($response,true); } } if(!function_exists("getUidByDepartId")){ /** * @param $depart_id * @return array|mixed */ function getUidByDepartId($depart_id=0):array{ $uidArr=Cache::get("Depart_Uid_Arr_$depart_id"); if($uidArr==false){ $uidArr = Db::connect("mysql_sys")->name("account_item")->where(["itemid"=>$depart_id])->column("account_id"); Cache::set("Depart_Uid_Arr_$depart_id",$uidArr, new \DateTime(date("Y-m-d 23:59:59"))); } return $uidArr; } } if(!function_exists("getDepartByUid")){ /** * @param $depart_id * @return array|mixed */ function getDepartByUid($uid=0,$get_tops=2):array{ $host = Config::get("app"); $url = $host["api_host"]."/get_company_name_by_uid"; $response=curl_request($url,['uid'=>$uid,'get_tops'=>$get_tops]); return json_decode($response,true); } } if(!function_exists("getPayRate")){ /** * @param $payday * @return array|mixed */ function getPayRate($payday=0){ $rate=0; switch ($payday){ case 0: case 1: case 2: case 3: $rate=1; break; case 4: $rate=0.6; break; case 5: $rate=0.4; break; default: break; } return $rate; } } if(!function_exists("getLadderRate")){ function getLadderRate($rate){ if($rate>=0 && $rate<10){ return 0; } if($rate>=10 && $rate<=18){ return 0.003; } if($rate>18 && $rate<=20){ return 0.006; } if($rate>20 && $rate<=25){ return 0.012; } if($rate>25 && $rate<=30){ return 0.02; } if($rate>30 ){ return 0.035; } return 0; } } if(!function_exists("CheckTax")){ // 1.如果YHZCBS为1, 则ZZSTSGL必须填; 如果YHZCBS为0,ZZSTSGL不填。 // 2.如果YHZCBS为1, 且税率为0, 则LSLBS只能根据实际情况选择"1或2"中的一种, 不能选择3, 且ZZSTSGL内容也只能写与1/2对应的"免税/不征税"; // 3.如果税率为0,但并不属于优惠政策(即普通的零税率),则YHZCBS填0,LSLBS填3,ZZSTSGL为空; // 4.如果税率不为0, 但属于优惠政策,则YHZCBS填1,LSLBS填空或不填,ZZSTSGL根据实际情况填写; // 5.如果税率不为0, 且不属于优惠政策, 则YHZCBS填0,LSLBS填空或不填,ZZSTSGL不填或空. // 优惠政策下 税率标识只能选择 0非零说率 1免税 2不征税 增值税管理为空"出口零税/免税/不征税" // 优惠政策 1 1 0 0 // 税率 0 13 0 13 // 零税率标识 1/2 0 3 0 // 增值税管理 免税/不征税 空值 空值 空值 /** * @param $is_discount 优惠政策 0/1 * @param $tax 税率 * @param $invTag 零税率标识 0非零说率 1免税 2不征税 * @param $addTax 增值税管理 出口零税/免税/不征税 * @param string $message * @return false */ function CheckTax($is_discount,$tax,$invTag,&$addTax,&$message=""){ // 有优惠政策 if($is_discount==1){ if($tax==0){ if($invTag==3){ $message = "税率标识不能选择零税率"; return false; } if($addTax==''){ $message = '增值税管理不能为空'; return false; } if($addTax!==\app\admin\model\Good::$Tax[$invTag]){ $message = '税率标识与增值税管理内容不符'; return false; } } }else{ // 非优惠政策下 零税率 税率标识只能选择 3 普通零税率 增值税管理为空 // 非优惠政策下 非零税率 税率标识只能选择 0 非零税率 增值税管理为空 if($tax==0 && $invTag!=3){ $message = '税率不为零时税率标识只能选择零税率'; return false; } if($tax!=0 && $invTag!=0){ $message = '税率为零时税率标识只能选择非零税率'; return false; } $addTax=''; } return true; } }