Merge branch 'master' of http://47.244.231.31:8099/zhl/globalso-v6
正在显示
6 个修改的文件
包含
100 行增加
和
46 行删除
| @@ -66,11 +66,41 @@ class Demo extends Command | @@ -66,11 +66,41 @@ class Demo extends Command | ||
| 66 | protected $description = 'demo'; | 66 | protected $description = 'demo'; |
| 67 | 67 | ||
| 68 | public function handle(){ | 68 | public function handle(){ |
| 69 | - echo date('Y-m-d H:i:s') . 'project_id:' . PHP_EOL; | ||
| 70 | - ProjectServer::useProject(3092); | ||
| 71 | - $this->delProduct(); | ||
| 72 | - DB::disconnect('custom_mysql'); | 69 | +// echo date('Y-m-d H:i:s') . 'project_id:' . PHP_EOL; |
| 70 | +// ProjectServer::useProject(3092); | ||
| 71 | +// $this->delProduct(); | ||
| 72 | +// DB::disconnect('custom_mysql'); | ||
| 73 | +// echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; | ||
| 74 | + return $this->projectList(); | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + public function projectList(){ | ||
| 78 | + $data = '深圳澄通睿视科技有限公司, 日照源洋包装材料有限公司, 河北途铂机电设备有限责任公司, 宁波市海曙玖鼎纸制品有限公司, 青岛众瑞智能仪器有限公司, 河北新秋国际贸易有限公司, 江西乔森电气有限公司, 沧州艾斯克粉业制造有限公司, 上海希然化工科技有限公司, 石家庄中创进出口有限公司, 东光县恒创利纸箱机械有限公司2021, 天津正能管业有限公司, 河北帷幄纺织有限公司, 广东顺德宝绅源环保科技有限公司, 石家庄艾文尔生物科技有限公司, 浙江福俄电气有限公司, 深圳市嘉盛数据科技有限公司, 江西米德实业有限公司, 苏州稼瑞机械有限公司, 青岛卓亚塑料机械有限公司, 宁波中力螺栓制造有限公司, 中山市万格电器有限公司, 廊坊禹神节水灌溉技术有限公司, 山东索玛特制帽有限公司, 蓝启生物技术(深圳)有限公司, 南宁奥展五金紧固件有限公司, 河北茉悠科技有限公司, 莱科阀门(天津)有限公司, 四川零点自动化系统有限公司, 厦门市戴尔乐新能源汽车有限公司, 宁波爱克利浦电器有限公司, 扬州天定成玩具礼品有限公司, 宁波市金典照明电器有限公司, 杭州法埃姆斯钢构有限公司, 北京迪文科技有限公司, 无锡动为储能科技有限公司, 河北唐蕴生物科技有限公司, 绍兴苏尔黛纺织品有限公司, 河北祈强金属制品有限公司, 上池诊断科技(深圳)有限公司, 泉州市三颖超硬工具有限公司, 宁波杰广电子有限公司, 石家庄德烨管业有限公司, 山东凯特钻具有限公司, 北京思普瑞特科技发展有限公司, 广州市印科标识科技有限公司, 优之科技(深圳)有限公司, 南通赫美特国际贸易有限公司, 天津誉瑞特品科技有限公司, 河北坤焰建材科技有限公司, 绍兴睿博机械有限公司, 西安法斯拓进出口有限公司, 深圳市德诺威电子有限公司, 百润(中国)有限公司, 达时科科技有限责任公司, 陈海英, 四川蓉腾自动化设备有限公司, 石家庄晋吉建材科技有限公司, 石家庄安瑞科气体机械有限公司, 深圳市扬帆纸制品有限公司, 舟山威尔曼机械科技有限公司, 佰纳通科技(北京)有限公司, 宁波嘉佑行科技有限公司, 东莞市凯信脚轮有限公司, 宝鸡轩泰颜料科技有限公司, 东莞市华腾五金制品有限公司, 深圳市思锐宇光电有限公司, 东莞市奥彩数码科技有限公司, 上海垂普国际贸易有限公司, 扬州爱拓户外用品有限公司, 余姚市立鑫电子有限公司, 晋州市金昌盛化工有限公司, 广东阿酷达箱包科技有限公司, 泉州市杰斯特仪器设备有限公司, 三和长兴科技有限公司, 佛山市精一家具有限公司谷腾分公司, 天津市洁雅妇女卫生保健制品有限公司, 江西海瑞天然植物有限公司, 九江贝海玻纤有限公司(客户做新站), 瑞安市齐笙科技有限公司, 石家庄华圣方洲国际贸易有限公司, 深圳市方成教学设备有限公司, 连云港索娜斯贸易有限公司, 睿華電子有限公司, 扬州市极盛照明有限公司, 天津市实丰国际贸易有限责任公司, 厦门亚迅工贸有限公司, 威海旺展旅游用品有限公司, 宁波首安纸业有限公司, 浙江乐马电气有限公司, 广东金莱特智能科技有限公司, 河北科星药业有限公司, 宁波迈可森汽配有限公司, 邯郸市常岚紧固件制造有限公司, 宁波市晶艳贸易有限公司, 苏州荃华生物材料有限公司, 青岛洛城通信息科技有限公司, 合肥领派克机械设备有限公司, 广西绿城工贸有限公司, 一元电气科技有限公司【主站】, 立圣丰(厦门)纺织科技有限公司, 深圳市汉瑞通科技有限公司, 扬州市润芳塑胶包装材料有限公司, 扬州浩邦新能源科技有限公司项目2, 深圳市锦昊安科技有限公司, 四川途乐乐科技有限公司, 天津广大纸业股份有限公司, 西安禾为生物科技有限公司, 西安奥谷生物科技有限公司, 佛山市三水歌谷电器有限公司, 西安麦克斯农用化学有限公司, 瑞安市富锐思进出口有限公司(黑格客户), 北京新科以仁科技发展有限公司, 镇江市惠灵顿膜业有限公司'; | ||
| 79 | + $arr = explode(',',$data); | ||
| 80 | + $projectModel = new Project(); | ||
| 81 | + $opModel = new DeployOptimize(); | ||
| 82 | + foreach ($arr as $k => $v){ | ||
| 83 | + $v = trim($v); | ||
| 84 | + $info = $projectModel->read(['title'=>['like','%'.$v.'%']],['id']); | ||
| 85 | + if($info === false){ | ||
| 86 | + echo date('Y-m-d H:i:s') . '未查询到的项目--'.$v . PHP_EOL; | ||
| 87 | + }else{ | ||
| 88 | + $opInfo = $opModel->read(['project_id'=>$info['id']]); | ||
| 89 | + if (strpos($opInfo['special'], '15') !== false) { | ||
| 90 | + echo date('Y-m-d H:i:s') . '已包含' . PHP_EOL; | ||
| 91 | + } else { | ||
| 92 | + if(!empty($opInfo['special'])){ | ||
| 93 | + $special = ','.trim($opInfo['special'],',').',15,'; | ||
| 94 | + }else{ | ||
| 95 | + $special = ',15,'; | ||
| 96 | + } | ||
| 97 | + $opModel->edit(['special'=>$special],['id'=>$opInfo['id']]); | ||
| 98 | + echo date('Y-m-d H:i:s') . '未包含AI案例的project_id:'.$opInfo['project_id'] . PHP_EOL; | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + } | ||
| 73 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; | 102 | echo date('Y-m-d H:i:s') . 'end' . PHP_EOL; |
| 103 | + return true; | ||
| 74 | } | 104 | } |
| 75 | 105 | ||
| 76 | /** | 106 | /** |
| @@ -295,18 +295,18 @@ class UpdateRoute extends Command | @@ -295,18 +295,18 @@ class UpdateRoute extends Command | ||
| 295 | if(!empty($lists)){ | 295 | if(!empty($lists)){ |
| 296 | foreach ($lists as $v){ | 296 | foreach ($lists as $v){ |
| 297 | if(!empty($v['route'])){ | 297 | if(!empty($v['route'])){ |
| 298 | -// $tag = "-product"; | ||
| 299 | -// if (!(substr($v['route'], -strlen($tag)) === $tag)) { | ||
| 300 | -// echo date('Y-m-d H:i:s') . '拼接'.$tag . PHP_EOL; | ||
| 301 | -// $route = $v['route'].$tag; | ||
| 302 | -// // 如果不是以 '-product' 结尾,则拼接上 '-product' | ||
| 303 | -// $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); | ||
| 304 | -// $productModel->edit(['route'=>$route],['id'=>$v['id']]); | 298 | + $tag = "-product"; |
| 299 | + if (!(substr($v['route'], -strlen($tag)) === $tag)) { | ||
| 300 | + echo date('Y-m-d H:i:s') . '拼接'.$tag . PHP_EOL; | ||
| 301 | + $route = $v['route'].$tag; | ||
| 302 | + // 如果不是以 '-product' 结尾,则拼接上 '-product' | ||
| 303 | + $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); | ||
| 304 | + $productModel->edit(['route'=>$route],['id'=>$v['id']]); | ||
| 305 | // }else{ | 305 | // }else{ |
| 306 | // echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL; | 306 | // echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL; |
| 307 | // $route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); | 307 | // $route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); |
| 308 | // $productModel->edit(['route'=>$route],['id'=>$v['id']]); | 308 | // $productModel->edit(['route'=>$route],['id'=>$v['id']]); |
| 309 | -// } | 309 | + } |
| 310 | // $route = RouteMap::setRoute($v['route'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); | 310 | // $route = RouteMap::setRoute($v['route'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']); |
| 311 | // $productModel->edit(['route'=>$route],['id'=>$v['id']]); | 311 | // $productModel->edit(['route'=>$route],['id'=>$v['id']]); |
| 312 | // continue; | 312 | // continue; |
| @@ -66,60 +66,83 @@ class FileManageController extends BaseController | @@ -66,60 +66,83 @@ class FileManageController extends BaseController | ||
| 66 | { | 66 | { |
| 67 | // 检查参数 | 67 | // 检查参数 |
| 68 | if (!isset($this->param['path']) || empty($this->param['path'])) { | 68 | if (!isset($this->param['path']) || empty($this->param['path'])) { |
| 69 | - $this->response('参数错误', Code::SYSTEM_ERROR); | 69 | + $this->response('参数错误:path 参数缺失或为空', Code::SYSTEM_ERROR); |
| 70 | } | 70 | } |
| 71 | - // 获取文件名 | 71 | + // 获取文件名和完整 URL |
| 72 | $username = basename($this->param['path']); | 72 | $username = basename($this->param['path']); |
| 73 | $parsed_url = parse_url($this->param['path']); | 73 | $parsed_url = parse_url($this->param['path']); |
| 74 | - // 构造文件 URL | ||
| 75 | $fileUrl = isset($parsed_url['scheme']) | 74 | $fileUrl = isset($parsed_url['scheme']) |
| 76 | ? $this->param['path'] | 75 | ? $this->param['path'] |
| 77 | : 'https://file.globalso.com' . $this->param['path']; | 76 | : 'https://file.globalso.com' . $this->param['path']; |
| 78 | - // 初始化 cURL | 77 | + // 使用 cURL 获取文件头信息 |
| 79 | $ch = curl_init(); | 78 | $ch = curl_init(); |
| 80 | curl_setopt($ch, CURLOPT_URL, $fileUrl); | 79 | curl_setopt($ch, CURLOPT_URL, $fileUrl); |
| 81 | - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); | ||
| 82 | - curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); | ||
| 83 | - curl_setopt($ch, CURLOPT_HEADER, false); | ||
| 84 | - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | 80 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 不直接输出,而是返回结果 |
| 81 | + curl_setopt($ch, CURLOPT_HEADER, true); // 获取响应头 | ||
| 82 | + curl_setopt($ch, CURLOPT_NOBODY, true); // 只请求头部,不下载实际文件 | ||
| 83 | + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向 | ||
| 84 | + curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时时间 | ||
| 85 | + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用 SSL 验证 | ||
| 85 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | 86 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); |
| 86 | - curl_setopt($ch, CURLOPT_BUFFERSIZE, 8192); // 设置缓冲区大小 | ||
| 87 | - curl_setopt($ch, CURLOPT_TIMEOUT, 60); // 设置超时时间 | ||
| 88 | - curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时时间 | 87 | + $response = curl_exec($ch); |
| 88 | + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
| 89 | + $fileSize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); | ||
| 90 | + curl_close($ch); | ||
| 91 | + // 检查文件大小和状态码 | ||
| 92 | + if ($httpCode != 200 || $fileSize <= 0) { | ||
| 93 | + $this->response('无法获取文件信息或文件不存在', Code::SYSTEM_ERROR); | ||
| 94 | + } | ||
| 89 | 95 | ||
| 90 | - // 设置为分块输出 | ||
| 91 | - curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) { | ||
| 92 | - echo $data; | ||
| 93 | - flush(); // 强制刷新缓冲区 | ||
| 94 | - return strlen($data); | ||
| 95 | - }); | ||
| 96 | - // 检查文件头信息 | ||
| 97 | - $headers = get_headers($fileUrl, 1); | ||
| 98 | - if ($headers === false || !isset($headers['Content-Length'])) { | ||
| 99 | - $this->response('无法获取文件信息', Code::SYSTEM_ERROR); | 96 | + // 获取文件类型 |
| 97 | + $contentType = 'application/octet-stream'; // 默认类型为二进制流 | ||
| 98 | + if (preg_match('/Content-Type: (.+)/i', $response, $matches)) { | ||
| 99 | + $contentType = $matches[1]; | ||
| 100 | } | 100 | } |
| 101 | // 设置响应头 | 101 | // 设置响应头 |
| 102 | header('Content-Description: File Transfer'); | 102 | header('Content-Description: File Transfer'); |
| 103 | - header('Content-Type: ' . ($headers['Content-Type'] ?? 'application/octet-stream')); | 103 | + header('Content-Type: ' . $contentType); |
| 104 | header('Content-Disposition: attachment; filename="' . $username . '"'); | 104 | header('Content-Disposition: attachment; filename="' . $username . '"'); |
| 105 | - header('Content-Length: ' . $headers['Content-Length']); | 105 | + header('Content-Length: ' . $fileSize); |
| 106 | header('Cache-Control: must-revalidate'); | 106 | header('Cache-Control: must-revalidate'); |
| 107 | header('Pragma: public'); | 107 | header('Pragma: public'); |
| 108 | + header('Expires: 0'); | ||
| 109 | + // 清空输出缓冲区 | ||
| 110 | + while (ob_get_level() > 0) { | ||
| 111 | + ob_end_clean(); | ||
| 112 | + } | ||
| 113 | + // 初始化 cURL 下载文件 | ||
| 114 | + $ch = curl_init(); | ||
| 115 | + curl_setopt($ch, CURLOPT_URL, $fileUrl); | ||
| 116 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); // 直接输出内容 | ||
| 117 | + curl_setopt($ch, CURLOPT_HEADER, false); | ||
| 118 | + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向 | ||
| 119 | + curl_setopt($ch, CURLOPT_BUFFERSIZE, 8192); // 设置缓冲区大小 | ||
| 120 | + curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 设置超时时间 | ||
| 121 | + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 连接超时时间 | ||
| 122 | + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 禁用 SSL 验证 | ||
| 123 | + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); | ||
| 124 | + // 分块输出文件内容 | ||
| 125 | + curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $data) { | ||
| 126 | + echo $data; | ||
| 127 | + flush(); // 强制输出缓冲 | ||
| 128 | + return strlen($data); | ||
| 129 | + }); | ||
| 108 | // 执行 cURL | 130 | // 执行 cURL |
| 109 | - ob_end_clean(); // 清空之前的输出缓冲区 | ||
| 110 | curl_exec($ch); | 131 | curl_exec($ch); |
| 111 | - | ||
| 112 | - // 检查 cURL 错误 | ||
| 113 | - if (curl_errno($ch)) { | 132 | + // 检查 cURL 错误或 HTTP 状态码 |
| 133 | + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); | ||
| 134 | + if (curl_errno($ch) || $httpCode != 200) { | ||
| 135 | + $errorMsg = curl_errno($ch) | ||
| 136 | + ? 'cURL 错误: ' . curl_error($ch) | ||
| 137 | + : 'HTTP 错误: ' . $httpCode; | ||
| 114 | curl_close($ch); | 138 | curl_close($ch); |
| 115 | - $this->response('文件下载失败: ' . curl_error($ch), Code::SYSTEM_ERROR); | 139 | + $this->response('文件下载失败: ' . $errorMsg, Code::SYSTEM_ERROR); |
| 116 | } | 140 | } |
| 141 | + // 关闭 cURL | ||
| 117 | curl_close($ch); | 142 | curl_close($ch); |
| 118 | exit; | 143 | exit; |
| 119 | } | 144 | } |
| 120 | 145 | ||
| 121 | - | ||
| 122 | - | ||
| 123 | public function upload(Request $request, FileManage $fileManage){ | 146 | public function upload(Request $request, FileManage $fileManage){ |
| 124 | $request->validate([ | 147 | $request->validate([ |
| 125 | 'file'=>['required'], | 148 | 'file'=>['required'], |
| @@ -77,6 +77,7 @@ class TranslateLogic extends BaseLogic | @@ -77,6 +77,7 @@ class TranslateLogic extends BaseLogic | ||
| 77 | if($val == ' ' || $val == ''){ | 77 | if($val == ' ' || $val == ''){ |
| 78 | continue; | 78 | continue; |
| 79 | } | 79 | } |
| 80 | + $val = str_replace(' ','',urldecode($val));//处理特殊字符 | ||
| 80 | $val = trim(str_replace(' ','',$val)); | 81 | $val = trim(str_replace(' ','',$val)); |
| 81 | if (FALSE == in_array($val, $old_key)){ | 82 | if (FALSE == in_array($val, $old_key)){ |
| 82 | $arr2[] = $val; | 83 | $arr2[] = $val; |
| @@ -36,7 +36,7 @@ class NavRequest extends FormRequest | @@ -36,7 +36,7 @@ class NavRequest extends FormRequest | ||
| 36 | 'pid' => ['required','integer'], | 36 | 'pid' => ['required','integer'], |
| 37 | 'name' => ['required','max:100'], | 37 | 'name' => ['required','max:100'], |
| 38 | 'url' => ['required'], | 38 | 'url' => ['required'], |
| 39 | - 'remark'=> ['max:500'] | 39 | + 'remark'=> ['max:1500'] |
| 40 | ]; | 40 | ]; |
| 41 | return $rule; | 41 | return $rule; |
| 42 | } | 42 | } |
| @@ -52,7 +52,7 @@ class NavRequest extends FormRequest | @@ -52,7 +52,7 @@ class NavRequest extends FormRequest | ||
| 52 | 'name.required' => '名称必须', | 52 | 'name.required' => '名称必须', |
| 53 | 'name.max' => '名称不能超过100个字符', | 53 | 'name.max' => '名称不能超过100个字符', |
| 54 | 'url.required' => '链接不能为空', | 54 | 'url.required' => '链接不能为空', |
| 55 | - 'remark.max' => '描述超过最长500字符', | 55 | + 'remark.max' => '描述超过最长1500字符', |
| 56 | ]; | 56 | ]; |
| 57 | } | 57 | } |
| 58 | } | 58 | } |
| @@ -25,7 +25,7 @@ class NewsRequest extends FormRequest | @@ -25,7 +25,7 @@ class NewsRequest extends FormRequest | ||
| 25 | { | 25 | { |
| 26 | return [ | 26 | return [ |
| 27 | 'name'=>'required|max:200', | 27 | 'name'=>'required|max:200', |
| 28 | - 'remark'=>'max:1000', | 28 | + 'remark'=>'max:2000', |
| 29 | 'url'=>'required', | 29 | 'url'=>'required', |
| 30 | ]; | 30 | ]; |
| 31 | } | 31 | } |
| @@ -36,7 +36,7 @@ class NewsRequest extends FormRequest | @@ -36,7 +36,7 @@ class NewsRequest extends FormRequest | ||
| 36 | 'name.required'=>'请填写名称', | 36 | 'name.required'=>'请填写名称', |
| 37 | 'name.max'=>'名称超过最长长度200', | 37 | 'name.max'=>'名称超过最长长度200', |
| 38 | 'url.required'=>'链接不能为空', | 38 | 'url.required'=>'链接不能为空', |
| 39 | - 'remark.max'=>'描述超过最长长度1000' | 39 | + 'remark.max'=>'描述超过最长长度2000' |
| 40 | ]; | 40 | ]; |
| 41 | } | 41 | } |
| 42 | } | 42 | } |
-
请 注册 或 登录 后发表评论