2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码
系统介绍
基于ThinkPHP与LayUI构建的全方位进销存解决方案
本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效率。
技术框架
- 后端:采用ThinkPHP框架,确保系统稳定可靠、易于扩展。
- 前端:运用LayUI前端框架,打造美观、易用的用户界面。
功能概览
采购管理
- 支持采购订单、采购入库单等操作,实现采购流程的全程跟踪与管理。
销售管理
- 包括销货单、销货退货单等功能,助力企业提升销售效率和客户满意度。
零售管理
- 支持零售单、零售退货单、服务单、积分兑换单等多种零售场景,满足企业多样化需求。
仓库管理
- 提供库存查询、库存盘点、库存预警等功能,确保库存数据的准确性和及时性。
财务管理
- 涵盖收款单、付款单、其他收入单、其他支出单等财务操作,实现财务精细化管理。
报表分析
- 提供详尽的数据报表和单据核销功能,为企业决策提供有力支持。
系统设置
- 包括基础资料、辅助资料、高级设置等选项,助力企业轻松完成系统配置和个性化定制。
开源版下载与联系方式
下载地址:
点可云ERP-V6.0开源进销存系统https://gitee.com/yimiaoOpen/nodcloud
功能概览与截图:点可云-专注于行业软件开发与综合服务 – 一秒云软件中心化繁为简,引领高效新纪元!点可云公司及一秒开源团队感谢您的支持,开源地址在下方 文字不多,但可能对您的业务有帮助,辛苦您花费几分钟阅读一下!如果多我们有什么建议和反馈 可以联系下面的客服微信。购买等…https://2024.okmg.cn/277.html
安装教程
- 下载代码:
- 点击GIT开源社区里的右侧发行版,下载所需版本(任选一种压缩方式)。
- 点击GIT开源社区里的右侧发行版,下载所需版本(任选一种压缩方式)。
- 配置站点:
- 打开宝塔面板,点击添加站点。
- 配置站点信息,输入域名,勾选创建MySQL,选择PHP版本5.6-7.3。
- 确定后,进入刚创建的站点目录。
- 打开宝塔面板,点击添加站点。
- 上传并解压代码:
- 上传下载好的代码压缩包。
- 解压后,将代码从
nodcloud-6.0.6
目录剪切到根目录。
- 上传下载好的代码压缩包。
- 检查与配置:
- 确保代码在根目录。
- 检查下方检测项目,确保均为绿色(如有红色项,按要求修改)。
- 伪静态勾选
thinkphp
,避免登录无反应问题。伪静态勾选 thinkphp,否则会出现点击登录没有反应的问题
至此安装完成,请尽情的使用吧!!!
- 确保代码在根目录。
至此,安装完成!请尽情使用!
附带部分代码参考
<?php
//通用函数库
//获取系统版本号
function get_ver(){return file_get_contents($_SERVER['DOCUMENT_ROOT'].DS.'application'.DS.'index'.DS.'ver');
}
//获取文件夹大小
function get_dir_size($dir){static $sizeResult = 0;$handle = opendir($dir);while (false!==($FolderOrFile = readdir($handle))) { if($FolderOrFile != "." && $FolderOrFile != "..") { if(is_dir("$dir/$FolderOrFile")){ $sizeResult += get_dir_size("$dir/$FolderOrFile"); }else{ $sizeResult += filesize("$dir/$FolderOrFile"); } } } closedir($handle); return round(($sizeResult/1048576),2);
}
//二维数组返回指定键名集合
function array_field($arr,$key){$data=array();foreach ($arr as $arr_vo) {$arr=array();foreach ($key as $key_vo) {if(isset($arr_vo[$key_vo])){$arr[$key_vo]=$arr_vo[$key_vo];}}$data[]=$arr;}return $data;
}
//递归获取指定ID树状数组结构
function find_tree_arr($mode,$arr){static $tree=array();foreach ($arr as $vo) {$sub=db($mode)->where(['pid'=>$vo])->select()->toarray();array_push($tree,$vo);if(!empty($sub)){$more=find_tree_arr($mode,array_column($sub,'id'));}}return $tree;
}
//获取文件目录列表,该方法返回数组
function getDir($dir){$dirArray[]=NULL;if (false!=($handle=opendir($dir))){$i=0;while(false!==($file = readdir($handle))){//去掉.|..|以及带.xxx后缀的文件if($file!="."&&$file!=".."&&!strpos($file,".")){$dirArray[$i]=$file;$i++;}}closedir ($handle);//关闭句柄}return $dirArray;
}
//数组指定条件搜索
//$data数据内容,$arr搜索条件['key|key1'=>['in|eq','val']]
//in是包含,eq是等于
function searchdata($data,$arr){$info=[];if(is_array($data) && is_array($arr)){foreach ($data as $data_vo){$nod=true;//初始化状态foreach ($arr as $key=>$arr_vo){//判断多键值$val='nod_initial';foreach (explode('|',$key) as $key_vo) {$val=$val==='nod_initial'?$data_vo[$key_vo]:$val[$key_vo];}//val取值成功if($val!=='nod_initial'){if($arr_vo[0]=='in'){//包含判断strstr($val, $arr_vo[1])||($nod=false);}else if($arr_vo[0]=='eq'){//相等判断$val==$arr_vo[1]||($nod=false);}}}$nod&&(array_push($info,$data_vo));//加入数据}}return $info;
}
//多表多条件find查询
//$arr [['table'=>'plug','where'=>['only'=>1]]]]
function more_table_find($arr){$resule=false;//默认未找到foreach ($arr as $vo) {$find=db($vo['table'])->where($vo['where'])->find();if(!empty($find)){$resule=true;//找到数据break;}}return $resule;
}
//删除目录
function removedir($dirName){if(!is_dir($dirName)){return false;}$handle=@opendir($dirName);while(($file=@readdir($handle))!==false){if($file!='.'&&$file != '..'){$dir=$dirName.DS.$file;is_dir($dir)?removedir($dir):@unlink($dir);}}closedir($handle);return rmdir($dirName);
}
//生成插件秘钥
function get_plug_key($time){$key=config('api_key');//私有秘钥return md5($time.'|'.$key);
}
//HTML代码压缩
function compress_html($string) {$string = str_replace("\r\n", '', $string);$string = str_replace("\n", '', $string);$string = str_replace("\t", '', $string);$pattern = ["/> *([^ ]*) *</","/[\s]+/","/<!--[^!]*-->/","/\" /","/ \"/","'/\*[^*]*\*/'"];$replace = [">\\1<"," ","","\"","\"",""];return preg_replace($pattern, $replace, $string);
}
//CSS代码压缩
function compress_css($string) {$string = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $string);$string = str_replace(["", "\r", "\n", "\t", ' ', ' ', ' '], '', $string);return $string;
}
//构造SQL-返回设置项的指定处理方式
//$info原始数据内容,$set设置项,$model数据表,$full是否允许为空(默认不允许)
//md5:MD5加密|like:包含查询|full_like:不为空包含查询|in:包含查询(传入数组)
//full_dec_1:不为空内容减1|stime和etime:时间区间查询|full_eq:不为空等于数据
//full_name_py_link:不为空扩展包含查询|full_division_in:不为空分割集合查询
//full_goodsclass_tree_sub:不为空商品分类集合查询//continue:不处理跳过
function get_sql($info,$set=[],$model,$full=true){$sql=[];//预设返回数据$field=db($model)->getTableFields();//读取数据表字段信息array_push($field,'start_time','end_time');//加入时间字段//循环数据foreach ($info as $info_key=>$info_vo) {//判断数据字段是否存在if(!in_array($info_key,$field)){continue;}//判断字段是否需要单独处理if(isset($set[$info_key])){//需要处理,判断类型if($set[$info_key]=='md5'){//md5加密$sql[$info_key]=md5($info_vo);}elseif($set[$info_key]=='like'){//包含查询$sql[$info_key]=['like','%'.$info_vo.'%'];}elseif($set[$info_key]=='full_like'){//不为空包含查询empty($info_vo)||($sql[$info_key]=['like','%'.$info_vo.'%']);}elseif($set[$info_key]=='in'){//包含查询$sql[$info_key]=['in',$info_vo];}elseif($set[$info_key]=='full_dec_1'){//不为空内容减1empty($info_vo)||($sql[$info_key]=$info_vo-1);}elseif($set[$info_key]=='stime' || $set[$info_key]=='etime'){//时间查询if(!isset($sql['time'])){$time_key='time';//时间字段KEY$start_time=$info[array_search("stime",$set)];//取出开始时间KEY并读取数值$end_time=$info[array_search("etime",$set)];//取出结束时间KEY并读取数值$egt=['egt',strtotime($start_time)];//大于等于$elt=['elt',strtotime($end_time)+86399];//小于等于(加当天)if(!empty($start_time) && empty($end_time)){//开始时间不为空,结束时间为空$sql[$time_key]=$egt;}elseif(!empty($end_time) && empty($start_time)){//结束时间不为空,开始时间为空.$sql[$time_key]=$elt;}elseif(!empty($end_time) && !empty($start_time)){//开始时间不为空,结束时间不为空$sql[$time_key]=[$egt,$elt];}}}elseif($set[$info_key]=='full_eq'){//不为空等于数据empty($info_vo)||($sql[$info_key]=$info_vo);}elseif($set[$info_key]=='full_name_py_link'){//不为空扩展包含查询empty($info_vo)||($sql['name|py']=['like','%'.$info_vo.'%']);}elseif($set[$info_key]=='full_division_in'){//不为空分割集合查询empty($info_vo)||($sql[$info_key]=['in',explode(",",$info_vo)]);}elseif($set[$info_key]=='full_goodsclass_tree_sub'){//不为空分割集合查询empty($info_vo)||($sql[$info_key]=['in',tree_sub('goodsclass',$info_vo)]);}elseif($set[$info_key]=='continue'){//不处理跳过continue;}}else{//无需单独处理//判断是否允许空值if($full){if(is_array($info_vo)||!preg_match('/^\s*$/',$info_vo)){$sql[$info_key]=$info_vo;}}else{$sql[$info_key]=$info_vo;}}}return $sql;
}
//同步SQL字段
//$exclude:需要排除的字段
function syn_sql($info,$model,$exclude=[]){$sql=[];//读取数据表字段信息if(empty(Session('syn_sql_'.$model))){$field=db($model)->getTableFields();Session('syn_sql_'.$model,$field);}else{$field=Session('syn_sql_'.$model);}foreach ($info as $key=>$vo) {//判断数据字段是否存在if(in_array($key,$field) && !in_array($key,$exclude)){//排除ID等于0的if($key=='id' && empty($vo)){continue;}else{$sql[$key]=$vo;}}else{continue;}}return $sql;
}
//判断字段存在并不为空
function isset_full($arr,$key){if(isset($arr[$key])&&!empty($arr[$key])){return true;}else{return false;}
}
//计算多维数组最多数组数量
function CalArrMaxCount($arr){static $nums = 0;//对多维数组进行循环foreach ($arr as $vo) {if(is_array($vo)){$count=count($vo);//判断是否多维数组if ($count==count($vo,1)) {$count > $nums&&($nums=$count);}else{CalArrMaxCount($vo);}}}return $nums;
}
//删除超时文件|危险功能-慎用
//$path='skin/upload/xlsx/'del_time_file
function del_time_file($path,$time=30){$filesnames=scandir($path);//获取文件目录$now=time();//当前时间foreach ($filesnames as $key=>$name){//排除掉..if ($key>1){$nod=$path.$name;//文件路径if ($now-filectime($nod)>$time){unlink($nod);}}}
}
//优化小数位
function opt_decimal($val){$val=bcsub($val,0,config('decimal'));//统一小数位$arr=explode('.',$val);if(count($arr)>1){if($arr[1]=='00'){$val=$arr[0];}else{$nod=str_split($arr[1]);foreach (array_reverse($nod,true) as $key=>$vo) {if($vo=='0'){unset($nod[$key]);}else{break;}}$val=$arr[0].'.'.implode('',$nod);}}return $val;
}
//计算二维数组字段总和
//$tab_data,['total','actual','money']
function get_sums($arr,$keys){$resule=[];foreach ($keys as $key) {$list = array_column($arr, $key);$resule[$key]=array_sum($list);}return $resule;
}
//导出EXCEL
function export_excel($file_name,$data,$down=true){vendor("Execl.PHPExcel");$PHPExcel=new PHPExcel();//实例化$cellname=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ'];//列标识$shell=$PHPExcel->getActiveSheet (0);//当前工作簿$shell->setTitle ('NODCLOUD.COM');//工作簿名称$shell->getDefaultColumnDimension()->setWidth(13);//设置默认行宽$shell->getDefaultRowDimension()->setRowHeight(16);//设置默认行高$shell->getDefaultStyle()->getFont()->setName('宋体');//设置默认字体$shell->getPageMargins ()->setTop (0.2);//设置上边距$shell->getPageMargins ()->setBottom (0.2);//设置下边距$shell->getPageMargins ()->setLeft (0.2);//设置左边距$shell->getPageMargins ()->setRight (0.2);//设置右边距//循环加入数据$rownums=1;//初始化行数$max_cell=CalArrMaxCount($data);//获取多维数组最多数组数量//循环增加数据foreach ($data as $data_vo) {//判断数据类型if($data_vo['type']=='title'){//标题行$cellnums=0;//初始化列数$shell->mergeCells ($cellname[$cellnums].$rownums.':'.$cellname[$max_cell-1].$rownums);//合并单元格$shell->setCellValue ($cellname[$cellnums].$rownums,$data_vo['info'])->getStyle ($cellname[$cellnums].$rownums)->applyFromArray (['font'=>['bold'=>true,'size'=>12],'alignment'=>['horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER]]);//设置内容|居中|粗体|12号$shell->getRowDimension($rownums)->setRowHeight(28);//设置行高$rownums++;//自增行数}elseif($data_vo['type']=='node'){//节点行$cellnums=0;//初始化列数//设置背景色$shell->getStyle($cellname[$cellnums].$rownums.':'.$cellname[$max_cell-1].$rownums)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('e7e6e6');;//设置背景颜色;foreach ($data_vo['info'] as $data_info) {$shell->setCellValue ($cellname[$cellnums].$rownums,$data_info);$cellnums++;//自增列数}$shell->getRowDimension($rownums)->setRowHeight(16);//设置行高$rownums++;//自增行数}elseif($data_vo['type']=='table'){//表格数据$key_arr=[];//循环增加表头$cellnums=0;//初始化列数foreach ($data_vo['info']['cell'] as $cell_key=>$cell_vo) {$shell->setCellValue ($cellname[$cellnums].$rownums,$cell_vo)->getStyle ($cellname[$cellnums].$rownums)->applyFromArray (['font'=>['bold'=>true],'alignment'=>['horizontal'=>PHPExcel_Style_Alignment::HORIZONTAL_CENTER]]);//设置内容|居中|粗体;array_push($key_arr,$cell_key);//加入键值$cellnums++;//自增列数}$shell->getRowDimension($rownums)->setRowHeight(16);//设置标题行高$rownums++;//自增行数//循环增加表格数据头foreach ($data_vo['info']['data'] as $data_vo) {$cellnums=0;//初始化列数$RowHeight=16;//是否存在扩展信息foreach ($key_arr as $key_vo) {if(is_array($data_vo[$key_vo])){//扩展信息if($data_vo[$key_vo]['type']=='img'){//图像$drawing=new PHPExcel_Worksheet_Drawing();$drawing->setPath ($data_vo[$key_vo]['info']);//设置图像路径$drawing->setOffsetX (3);//设置X偏移距离$drawing->setOffsetY (3);//设置Y偏移距离$drawing->setWidth (98);//设置图像宽度$drawing->setCoordinates ($cellname[$cellnums].$rownums)->setWorksheet ($shell);//设置内容$imginfo=getimagesize($data_vo[$key_vo]['info']);//读取图像信息$NodHeight=$imginfo[1]/($imginfo[0]/86);//计算行高|按照宽度缩放比例缩放$NodHeight>16&&($RowHeight=$NodHeight);//最小高度16}}else{//文本信息$shell->setCellValueExplicit($cellname[$cellnums].$rownums,$data_vo[$key_vo],PHPExcel_Cell_DataType::TYPE_STRING);//设置内容并指定文本格式}$cellnums++;//自增列数}$shell->getRowDimension($rownums)->setRowHeight($RowHeight);//设置数据行高$rownums++;//自增行数}}}//设置边框$shell->getStyle ('A1:'.$cellname[$max_cell-1].($rownums-1))->applyFromArray (['borders'=>['allborders'=>['style'=>PHPExcel_Style_Border::BORDER_THIN]],'alignment'=>['vertical'=>PHPExcel_Style_Alignment::VERTICAL_CENTER]]);//输出文件ob_get_contents()&&(ob_end_clean());//清除缓冲区,避免乱码$writer=PHPExcel_IOFactory::createWriter ($PHPExcel,'Excel2007');//判断文件操作if($down==true){//直接下载header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$file_name.'.xlsx"');header("Content-Disposition:attachment;filename=$file_name.xlsx");//attachment新窗口打印inline本窗口打印$writer->save ('php://output');exit;}else{//保存文件$file_path=ROOT_PATH.'skin/file/xlsx/'.$file_name.'.xlsx';$writer->save ($file_path);return $file_path;//返回文件路径}
}
//获取xlsx文件数据
function get_xlsx($file){vendor("Execl.PHPExcel");$reader=PHPExcel_IOFactory::createReader ('Excel2007')->setReadDataOnly (true)->load ($file);//简易方式加载xlsx文件$resule=$reader->getSheet (0)->toArray (null,false,false,true);//获取首个工作簿信息并转为数组//过滤空白行foreach ($resule as $key=>$vo) {if(count(array_unique($vo))==1){unset($resule[$key]);}}array_walk_recursive($resule,function(&$nod){$nod===null?($nod=''):$nod=htmlentities($nod);});//NULL转空白字符|拦截XSSreturn $resule;
}
//获取通用正则
function get_regex($nod){$regex=['empty'=>"/^\s*$/g",//空判断'tel'=>"/^1\d{10}$/",//手机号判断'phone'=>"/^(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}$/",//座机号判断'tax'=>"/^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/",//税号判断'number'=>"/^[0-9]*$/",//数字组合判断'plus'=>"/^\d+(\.\d{1,2})?$/",//含0正数判断最多2位小数'email'=>"/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/",//邮箱判断'time'=>"/^(19|20)\d{2}-(0?\d|1[012])-(0?\d|[12]\d|3[01])$/",//时间正则"numerical"=>"/^(\-)?\d+(\.\d{1,2})?$/",//正负数值2位小数];return $regex[$nod];
}
//汉字转拼音
//$type[head:首字母|all:全拼音]
function zh2py($text,$type='head'){$nod=new \org\zh2py();$resule=$nod::encode($text,$type);return strtolower($resule);//返回结果转小写}
//生成条形码
//$type[true:直接输出|false:保存文件]
function txm($text,$type=true){$file_name=time().'_'.mt_rand();//当前时间戳加随机数$file_path=$_SERVER['DOCUMENT_ROOT'].'/skin/images/code/'.$file_name.'.png';$root=$_SERVER['DOCUMENT_ROOT'];require_once($root.'/vendor/Barcode/BCGFontFile.php');require_once($root.'/vendor/Barcode/BCGColor.php');require_once($root.'/vendor/Barcode/BCGDrawing.php');// 条形码的编码格式require_once($root.'/vendor/Barcode/BCGcode128.barcode.php');// 加载字体大小$font=new \BCGFontFile ($_SERVER['DOCUMENT_ROOT'].'/vendor/Barcode/Arial.ttf',18);//颜色条形码$color_black=new \BCGColor (0,0,0);$color_white=new \BCGColor (255,255,255);$drawException=null;try {$code=new \BCGcode128 ();$code->setScale (2);$code->setThickness (30);// 条形码的厚度$code->setForegroundColor ($color_black);// 条形码颜色$code->setBackgroundColor ($color_white);// 空白间隙颜色$code->setFont ($font);// $code->parse ($text);// 条形码需要的数据内容}catch (Exception $exception){$drawException=$exception;}//根据以上条件绘制条形码$drawing=new \BCGDrawing ('',$color_white);if ($drawException){$drawing->drawException ($drawException);}else {$drawing->setBarcode ($code);$drawing->draw ();}// 生成PNG格式的图片if ($type){$drawing->finish (\BCGDrawing::IMG_FORMAT_PNG ,$file_path,$type);exit;}else {$drawing->finish (\BCGDrawing::IMG_FORMAT_PNG ,$file_path,$type);return $file_path;}
}
//生成二维码
//$type[true:直接输出|false:返回文件地址]
function ewm ($text,$type=true){$file_name=time().'_'.mt_rand();//当前时间戳加随机数vendor ("phpqrcode.phpqrcode");$size='6';$level='H';$padding=2;$nod=$_SERVER['DOCUMENT_ROOT'].'/skin/images/code/'.$file_name.'.png';$re=QRcode::png ($text,$nod,$level,$size,$padding);if ($type){ob_end_clean();//清除缓冲区,避免乱码header('Content-Type:image/png');imagepng(imagecreatefromstring(file_get_contents($nod)));exit ;}else {return $nod;}
}
//递归查询数据表树结构归属数据
function tree_sub ($model,$id){static $resule=[];$db=db($model);$info=$db->where(['pid'=>$id])->column ('id');foreach ($info as $vo) {$sub=$db->where(['pid'=>$vo])->column ('id');if(empty($sub)){array_push($resule,$vo);}else{tree_sub($model,$vo);}}array_push($resule,$id);return $resule;
}
//多维数组重组指定字段一维数组
function arraychange($arr,$key){return array_unique(array_column($arr,$key));
}
//查询数组指定字段合并赋值
//$type merge 组合 intersect 交集
function sql_assign(&$sql,$field,$data,$type='merge'){if(isset($sql[$field])){if($type=='merge'){$arr=array_merge($sql[$field][1],$data);}elseif($type=='intersect'){$arr=array_intersect($sql[$field][1],$data);}$data=array_unique($arr);}$sql[$field]=['in',$data];
}
//合并单个二维数组
function arr_merge($arr){$resule=[];foreach ($arr as $vo) {$resule=array_merge($resule,$vo);}return array_unique($resule);
}
//压缩文件为ZIP并下载
function file_to_zip($zip_name,$file_arr,$down=true){del_time_file('skin/file/zip/');empty($file_arr)&&(die('[ 文件数据为空 ]'));//空数据检验$path="skin/file/zip/".$zip_name.".zip";$zip=new ZipArchive();if ($zip->open($path,ZIPARCHIVE::CREATE)!==TRUE) {exit('创建压缩文件失败!');}foreach ($file_arr as $file_vo) {$zip->addFile($file_vo,basename($file_vo));}$zip->close();if($down){header("Cache-Control: max-age=0");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($path)); //文件名header("Content-Type: application/zip"); //zip格式的header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件header('Content-Length: '.filesize($path)); //告诉浏览器,文件大小@readfile($path);//输出文件;exit;}else{return true;}
}
//二维数组删除KEY指定条件数组
function arrs_key_del(&$arr,$condition){foreach ($arr as $key=>$vo) {//匹配数据if(isset($vo[$condition[0]]) && $vo[$condition[0]]==$condition[1]){unset($arr[$key]);}}
}
//GET POST提交
function http($url,$param,$action="GET"){$ch=curl_init();$config=array(CURLOPT_RETURNTRANSFER=>true,CURLOPT_URL=>$url); if($action=="POST"){$config[CURLOPT_POST]=true; }$config[CURLOPT_POSTFIELDS]=http_build_query($param);curl_setopt_array($ch,$config);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$result=curl_exec($ch); curl_close($ch);return $result;
}
相关文章:
2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码
系统介绍 基于ThinkPHP与LayUI构建的全方位进销存解决方案 本系统集成了采购、销售、零售、多仓库管理、财务管理等核心功能模块,旨在为企业提供一站式进销存管理体验。借助详尽的报表分析和灵活的设置选项,企业可实现精细化管理,提升运营效…...
基于Docker的Minio分布式集群实践
目录 1. 说明 2. 配置表 3. 步骤 3.1 放行服务端口 3.2 docker-compose 编排 4. 入口反向代理与负载均衡配置 4.1 api入口 4.2 管理入口 5. 用例 6. 参考 1. 说明 以多节点的Docker容器方式实现minio存储集群,并配以nginx反向代理及负载均衡作为访问入口。…...
解决node.js的req.body为空的问题
从昨晚一直在试,明明之前用的封装的axios发送请求给其他的后端(springboot)是可以的,但昨天用了新项目的后端(node.js)就不行。 之前用了代理,所以浏览器发送的post请求不会被拦截,…...
数据结构期末算法复习:树、查找、排序
一、树 1.二叉链-定义 typedef struct BiTNode{ ElemType data;//数据域 struct BiTNode *lchild ,*rchild;//左、右孩子指针 }BiTNode , *BiTree ;2.查找值为x的结点 BTNode FindNode(BTNode b,ElemType x) { BTNode *p;if (bNULL) return NULL;else if (…...
复习打卡Linux篇
目录 1. Linux常用操作命令 2. vim编辑器 3. 用户权限 4. Linux系统信息查看 1. Linux常用操作命令 基础操作: 命令说明history查看历史执行命令ls查看指定目录下内容ls -a查看所有文件 包括隐藏文件ls -l ll查看文件详细信息,包括权限类型时间大小…...
OpenAI API深度解析:参数、Token、计费与多种调用方式
随着人工智能技术的飞速发展,OpenAI API已成为许多开发者和企业的得力助手。本文将深入探讨OpenAI API的参数、Token、计费方式,以及如何通过Rest API(以Postman为例)、Java API调用、工具调用等方式实现与OpenAI的交互࿰…...
Centos7 部署ZLMediakit
1、拉取代码 #国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit #千万不要忘记执行这句命令 git submodule update --init 2、安装编译器 sudo yum -y install gcc 3、安装cmake sudo yum -y install cmake 4…...
python:用 sklearn.metrics 评价 K-Means 聚类模型
sklearn 的 metrics 模块提供的聚类模型评价指标如下: ARI 评价法(兰德系数): adjusted_rand_score AMI 评价法(相互信息): adjusted_mutual_info_score V-measure 评分 : completeness_score FMI 评价法 : fowlkes_m…...
谁说C比C++快?
看到这个问题,我我得说:这事儿没有那么简单。 1. 先把最大的误区打破 "C永远比C快" —— 某位1990年代的程序员 这种说法就像"自行车永远比汽车省油"一样荒谬。我们来看个例子: // C风格 char* str (char*)malloc(100…...
算法刷题Day23:BM60 括号生成
题目链接 描述:给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合。 例如,给出n3,解集为: “((()))”, “(()())”, “(())()”, “()()()”, “()(())” 思路: 回溯左子树不断添加‘&#…...
基于Redis实现令牌桶算法
基于Redis实现令牌桶算法 令牌桶算法算法流程图优点缺点 实现其它限流算法 令牌桶算法 令牌桶是一种用于分组交换和电信网络的算法。它可用于检查数据包形式的数据传输是否符合定义的带宽和突发性限制(流量不均匀或变化的衡量标准)。它还可以用作调度算…...
XXE练习
pikachu-XXE靶场 1.POC:攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a">]> <foo>&xxe;</foo> 2.EXP:查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SY…...
Mac上使用ln指令创建软链接、硬链接
在Mac、Linux和Unix系统中,软连接(Symbolic Link)和硬连接(Hard Link)是两种不同的文件链接方式。它们的主要区别如下: 区别: 硬连接: 不能跨文件系统。不能链接目录(为…...
单元测试-Unittest框架实践
文章目录 1.Unittest简介1.1 自动化测试用例编写步骤1.2 相关概念1.3 用例编写规则1.4 断言方法 2.示例2.1 业务代码2.2 编写测试用例2.3 生成报告2.3.1 方法12.3.2 方法2 1.Unittest简介 Unittest是Python自带的单元测试框架,适用于:单元测试、Web自动…...
JAVA没有搞头了吗?
前言 今年的Java程序员群体似乎承受着前所未有的焦虑。投递简历无人问津,难得的面试机会也难以把握,即便成功入职,也往往难以长久。于是,不少程序员感叹:互联网的寒冬似乎又一次卷土重来,环境如此恶劣&…...
ECharts 饼图:数据可视化的重要工具
ECharts 饼图:数据可视化的重要工具 引言 在数据分析和可视化的领域,ECharts 是一个广受欢迎的开源库。它由百度团队开发,用于在网页中创建交互式图表。ECharts 提供了多种图表类型,包括柱状图、折线图、散点图等,而饼图则是其中最常用的一种。本文将深入探讨 ECharts 饼…...
arcGIS使用笔记(无人机tif合并、导出、去除黑边、重采样)
无人机航拍建图之后,通过大疆智图软件可以对所飞行的区域的进行拼图,但是如果需要对拼好的图再次合并,则需要利用到arcGIS软件。下面介绍arcGIS软件在这个过程中常用的操作。 1.导入tif文件并显示的方法:点击“”图标进行导入操作…...
0 前言
ArCS作为一个基于Rust的CAD(计算机辅助设计)开源系统,尽管已经有四年未更新,但其设计理念和技术实现仍然具有很高的学习和参考价值。以下是对ArCS项目的进一步分析和解读: 一、项目亮点与技术优势 高效与安全的Rust语…...
ubuntu server 安装
1 获取ubuntu https://ubuntu.com/download/server 2 安装ubuntu 详细教程查看视频: ubunut server 安装_哔哩哔哩_bilibili...
linux 添加默认网关
在linux 可以使用 route 命令添加默认网关,假设添加的默认网关是192.168.159.2 添加方式如下: route add default gw 192.168.159.2 以上命令只需要把add 改成 del ,就能删除刚才添加的路由 route del default gw 192.168.159.2 #该命…...
一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器
大家好,今天给大家分享一个开源的自托管虚拟浏览器项目Neko,旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,提供…...
Qt之修改窗口标题、图标以及自定义标题栏(九)
Qt开发 系列文章 - titles-icons-titlebars(九) 目录 前言 一、修改标题 二、添加图标 三、更换标题栏 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 在我们利用Qt设计软件时,经常需要修改窗口标题、更改软…...
can总线相关概念---frame-signal-message
1、frame 帧是数据链路层的传输单元。它将上层传入的数据添加一个头部和尾部,组成了帧。它的起始点和目的点都是数据链路层。 2、signal 3、message-报文 我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元,也是网络传输的单元。…...
全排列 dfs
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有 a<b<…<y<z ,而且给定的字符串中的字母已经按照从小到大的顺序排列。 输入格式 输入只有一行,是一个由不同的小写字母组成的字符串…...
画图,matlab,
clear;close all;clc;tic;dirOutput dir(*.dat); % 罗列所有后缀-1.dat的文件列表,罗列BDDATA的数据 filenames string({dirOutput.name}); % 提取文件名%% 丢包统计 FILENAMES [""]; LOSS_YTJ [ ]; LOSS_RAD [ ]; LOSS_ETH [ ]…...
any/all 子查询优化规则的原理与解析 | OceanBase查询优化
背景 在通常情况下,当遇到包含any/all子查询的语句时,往往需要遵循嵌套执行的方式,因此其查询效率较低。Oceanbase中制定了相应的any/all子查询优化规则,能够能够识别并优化符合条件的any/all子查询,从而有效提升查询…...
Visio——导出的PDF文件缺乏嵌入字体的解决办法 / 设置导出的PDF文件添加嵌入字体的方法
导出PDF时,勾选 “符合PDF/A” 选项 这样就导出的PDF文件添加了嵌入字体了。...
python:用 sklearn SVM 构建分类模型,并评价
编写 test_sklearn_5.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 估计器构建分类模型,并评价 """ import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.svm import SVC from sk…...
【Python】制作函数,并且实现【注册】【登录】功能
这段代码是一个简单的命令行论坛模拟系统,包含了用户注册、登录和退出的功能。让我们逐行分析代码,并解释每个部分的功能与逻辑: ### 1. 引入 hashlib 模块 python import hashlib - **功能**:引入 Python 内置的 hashlib 模块…...
【大模型】LLaMA-2:Open Foundation and Fine-Tuned Chat Models, July. 2023.
论文:LLaMA-2:Open Foundation and Fine-Tuned Chat Models, July. 2023. 链接:https://arxiv.org/abs/2307.09288 Introduction 创新点 7B - 70B 预训练 微调 开源Llama 2 和Llama 2-Chat,针对对话用例进行了优化Motivation A…...
WebRTC服务质量(04)- 重传机制(01) RTX NACK概述
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
Qt之connectSlotsByName分析
简介 用于界面设置信号槽自动生成,要求槽函数定义形式为on_< objectName >_< signal > connectSlotsByName 其定义在QMetaObject类中,为静态方法,在文件qobjectdefs.h struct Q_CORE_EXPORT QMetaObject {....static void c…...
【Unity3D】无限循环列表(扩展版)
基础版:【Unity技术分享】UGUI之ScrollRect优化_ugui scrollrect 优化-CSDN博客 using UnityEngine; using UnityEngine.UI; using System.Collections.Generic;public delegate void OnBaseLoopListItemCallback(GameObject cell, int index); public class BaseLo…...
校园点餐订餐外卖跑腿Java源码
简介: 一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…...
如何使用 Python 连接 PostgreSQL 数据库?
在Python开发中,连接PostgreSQL数据库是一个常见的需求。 我们可以使用多种库来实现这一功能,其中最常用的是psycopg2。 下面我将详细介绍如何使用psycopg2来连接PostgreSQL数据库,并提供一些实际开发中的建议和注意事项。 1. 使用 psycop…...
音频开发中常见的知识体系
在 Linux 系统中,/dev/snd 目录包含与声音设备相关的文件。每个文件代表系统中的一部分音频硬件或音频控制接口。以下是你列出的文件及其含义: 一.基本术语 样本长度(sample):样本是记录音频数据最基本的单位,计算机对每个通道采…...
国内外人工智能AI工具网站大全(一键收藏,应有尽有)
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 国内外人工智能AI工具网站大全(一键收藏,应有尽有) 摘要一、AI写作工具二、AI图像工具2.1、常用AI图像工具2.2、AI图片插画生成2.3、AI图片背景移…...
HB1910数字IP程控交换机generate.php存在RCE漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
基于Spring Boot的社区药房系统
一、系统背景与目的 随着医疗改革的深入和社区医疗服务的不断完善,社区药房在居民健康保障中扮演着越来越重要的角色。然而,传统的药房管理方式存在着库存管理混乱、药品销售不透明、客户信息管理不规范等问题。为了解决这些问题,基于Spring…...
level2逐笔委托查询接口
沪深逐笔委托队列查询 前置步骤 分配数据库服务器 查询模板 以下是沪深委托队列查询的请求模板: http://<数据库服务器>/sql?modeorder_book&code<股票代码>&offset<offset>&token<token>查询参数说明 参数名类型说明mo…...
固定资产分类,提升资产盘活效益
固定资产是企业长期使用的重要资源,涵盖范围广、种类多,不同的资产需要针对性管理。通过科学的分类与高效的盘活策略,不仅可以优化资源配置,还能提升企业资产的利用效率和经济效益。以下将详细解析固定资产的分类方式和盘活效益的…...
图像根据mask拼接时,边缘有色差 解决
目录 渐变融合(Feathering) 沿着轮廓线模糊: 代码: 泊松融合 效果比较好: 效果图: 源代码: 泊松融合,mask不扩大试验 效果图: 源代码: 两个图像根据mask拼接时,边缘有色差 渐变融合(Feathering) import numpy as np import cv2# 假设 img1, img2 是两个…...
练习题:一维数组
练习题 第一题 键盘录入一组数列,利用冒泡排序将数据由大到小排序 代码 #include <stdio.h>int arr_home01() {int arr[10];int i,j,temp;printf("请输入10个测试整数:\n");int len sizeof(arr) / sizeof(arr[0]);for(i 0;i < …...
Linux系统安装node.js
一、node官网下载想要的node版本 https://nodejs.org/en/download/package-manager 二、将tar.xz文件解压 tar -xvf node-vxxx.tar.xz 三、改文件夹的名字,改成nodejs mv node-xxx nodejs 四、复制nodejs文件,并上传到linux 服务器 /usr/local 目录下…...
lettuce 默认情况下连接池参数不生效,源码分析
先说结论: 1.LettuceConnectionFactory 属性 shareNativeConnection 默认为true,要想连接池生效,该参数设置为false; 2.使用redisTemplate模版封装的pipeline没有意义,autoFlashCommands 默认为true;spring2.0开始默认使用lettuc…...
三维无人机航迹算法的目标函数如何确定
一、定义目标函数 在三维无人机航迹算法中,目标函数的确定通常基于具体的任务需求和飞行约束。以下是一个简单的例子,展示了如何为三维无人机航迹规划定义一个目标函数。 例子:最小化飞行时间和避障的三维无人机航迹规划 1.任务描述:无人机需要从起点飞到终点,同时避开一些…...
Linux docker离线部署
1. Docker下载 Docker下载地址:https://mirrors.dahuatech.com/docker-ce/。本文下载当前最新版本,链接如下:https://mirrors.dahuatech.com/docker-ce/linux/static/stable/aarch64/docker-27.4.0.tgz。 2. 安装Docker 将压缩包上传到服务器…...
短剧系统开发教程概要
引言 随着移动互联网的快速发展,短剧内容因其简短、精炼、情节紧凑的特点,吸引了大量观众的喜爱。为了满足市场需求,开发一款功能完善、体验优良的短剧平台显得尤为重要。本文将详细介绍短剧源码的开发搭建过程,包括需求分析、技…...
MySQL分区建表例子
以下为MySQL分区建表的例子 CREATE TABLE mz_mjzcfxxmx (SERIALNUM_ID varchar(96) NOT NULL COMMENT 业务角度唯一性ID,DATAGENERATE_DATE datetime NOT NULL COMMENT 业务数据产生时间,ROW_ID varchar(300) DEFAULT NULL COMMENT 数据角度唯一性ID,TASK_ID varchar(96) DEFAU…...
nginx变量
一、Nginx 变量概述 Nginx 变量是一种在 Nginx 配置中用于存储和操作数据的机制,它们可以在不同的配置块(如 http、server、location 等)中使用,以实现动态配置和灵活的请求处理。变量的值可以根据各种条件(如请求头信…...