作者 lyh

Merge branch 'master' of http://47.244.231.31:8099/zhl/globalso-v6 into lyh-server

1 <?php 1 <?php
2 2
  3 +use App\Helper\Translate;
3 use App\Models\File\Image; 4 use App\Models\File\Image;
4 use App\Models\File\File as FileModel; 5 use App\Models\File\File as FileModel;
5 use App\Models\Project\DeployOptimize; 6 use App\Models\Project\DeployOptimize;
@@ -851,7 +852,7 @@ function getCustomRouteMap($module_route,$route = '') @@ -851,7 +852,7 @@ function getCustomRouteMap($module_route,$route = '')
851 * @method :post 852 * @method :post
852 * @time :2023/11/10 14:29 853 * @time :2023/11/10 14:29
853 */ 854 */
854 -function getRouteMap($source,$source_id,$is_upgrade = 0){ 855 +function getRouteMap($source,$source_id,$is_upgrade = 0, $returnModel = false){
855 $route = ''; 856 $route = '';
856 $routeMapModel = new RouteMap(); 857 $routeMapModel = new RouteMap();
857 $info = $routeMapModel->read(['source'=>$source,'source_id'=>$source_id]); 858 $info = $routeMapModel->read(['source'=>$source,'source_id'=>$source_id]);
@@ -878,6 +879,9 @@ function getRouteMap($source,$source_id,$is_upgrade = 0){ @@ -878,6 +879,9 @@ function getRouteMap($source,$source_id,$is_upgrade = 0){
878 $route = $info['route']; 879 $route = $info['route'];
879 } 880 }
880 } 881 }
  882 + if($returnModel){
  883 + return $info;
  884 + }
881 return $route; 885 return $route;
882 } 886 }
883 887
@@ -1237,4 +1241,115 @@ function getDomain($url) { @@ -1237,4 +1241,115 @@ function getDomain($url) {
1237 } 1241 }
1238 1242
1239 1243
  1244 +/**
  1245 + * 解析url的 route
  1246 + * @param $pathInfo
  1247 + * @return string
  1248 + * @author zbj
  1249 + * @date 2025/5/24
  1250 + */
  1251 +function analysisRoute($pathInfo)
  1252 +{
  1253 + $language = '';
  1254 + $router = "";
  1255 + $page = null;
  1256 +
  1257 + $pathArr = explode("/", $pathInfo);
  1258 + $pathArr = array_filter($pathArr);
  1259 + $first = array_shift($pathArr);
  1260 + $last = array_pop($pathArr);
  1261 + $other = implode("/", $pathArr);
  1262 +
  1263 + $first = $first == "zh-ct" ? "zh-TW" : $first;
  1264 + $tlsLang = array_keys(Translate::$tls_list);
  1265 + if (in_array($first, $tlsLang)) {
  1266 + $language = $first;
  1267 + $first = '';
  1268 + }
  1269 + $lastIsRoute = RouteMap::select("id")->where("route", $last)->first();
  1270 + if (is_numeric($last) && empty($lastIsRoute)) {
  1271 + $page = $last;
  1272 + $last = '';
  1273 + }
  1274 + $router_array = compact('first', 'other', 'last');
  1275 + $router_array = array_filter($router_array);
  1276 +
  1277 + //解析路由5.0 + 6.0
  1278 + $keyword = new \App\Models\Product\Keyword();
  1279 + $topSearchRoute = $keyword->product_keyword_route;
  1280 + if (isset($router_array['first'])) {
  1281 + if (isset($router_array['other'])) {
  1282 + if ($router_array['other'] == "page") {
  1283 + $router = $router_array['first'];
  1284 + } else {
  1285 + $otherArr = explode("/", $router_array['other']);
  1286 + $otherArr = array_filter($otherArr);
  1287 + if (count($otherArr) >= 1) {
  1288 + $router = $otherArr[0];
  1289 + }
  1290 + }
  1291 + } else {
  1292 + if (isset($router_array['last'])) {
  1293 + if (in_array($router_array['first'], $topSearchRoute)) {
  1294 + $router = $router_array['first'];
  1295 + $page = (int)$router_array['last'];
  1296 + } else {
  1297 + $router = $router_array['last'];
  1298 + }
  1299 + } else {
  1300 + $router = $router_array['first'];
  1301 + }
  1302 + }
  1303 + } else {
  1304 + if (isset($router_array['last'])) {
  1305 + if ($router_array['last'] != "page") {
  1306 + if (isset($router_array['other']) && in_array($router_array['other'], $topSearchRoute)) {
  1307 + $router = $router_array['other'];
  1308 + $page = (int)$router_array['last'];
  1309 + } else {
  1310 + $router = $router_array['last'];
  1311 + }
  1312 + } else {
  1313 + $otherArr = explode("/", $router_array['other']);
  1314 + $otherArr = array_filter($otherArr);
  1315 + if (count($otherArr) == 1) {
  1316 + $router = $otherArr[0];
  1317 + } else {
  1318 + $router = $otherArr[1];
  1319 + }
  1320 + }
  1321 + } else {
  1322 + if (!empty($router_array)) {
  1323 + $otherArr = explode("/", $router_array['other']);
  1324 + $otherArr = array_filter($otherArr);
  1325 + if (count($otherArr) == 3) {
  1326 + $router = $otherArr[1];
  1327 + } else {
  1328 + $router = $otherArr[0];
  1329 + }
  1330 + }
  1331 + }
  1332 + }
1240 1333
  1334 + //路由算法处理,路由只有一级,route_map表中route(规定),不考虑小语种
  1335 + //新增考虑小语种,判断是否小语种访问,有页面不说,当nginx 404页面之后进程序,生成当前小语种页面
  1336 + $lang = $language;
  1337 + if ($page == null) {
  1338 + if ($router != null) {
  1339 + if ($lang != null) {
  1340 + $tlsLang = array_keys(Translate::$tls_list);
  1341 + $isLang = in_array($lang, $tlsLang);
  1342 + if (!$isLang) {
  1343 + $router = $lang;
  1344 + }
  1345 + }
  1346 + } else {
  1347 + $tlsLang = array_keys(Translate::$tls_list);
  1348 + $isLang = in_array($lang, $tlsLang);
  1349 + if (!$isLang) {
  1350 + $router = $lang;
  1351 + }
  1352 + }
  1353 + }
  1354 + return $router;
  1355 +}
@@ -61,7 +61,9 @@ class ProductController extends BaseController @@ -61,7 +61,9 @@ class ProductController extends BaseController
61 $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL);//获取模版id 61 $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL);//获取模版id
62 $userModel = new User(); 62 $userModel = new User();
63 foreach ($lists['list'] as $k=>$v){ 63 foreach ($lists['list'] as $k=>$v){
64 - $v['url'] = $this->user['domain'] . getRouteMap(RouteMap::SOURCE_PRODUCT,$v['id']); 64 + $route = getRouteMap(RouteMap::SOURCE_PRODUCT,$v['id'], 0, true);
  65 + $v['url'] = $this->user['domain'] . $route['route'];
  66 + $v['pv'] = $route['pv'];
65 $v['category_id_text'] = $this->categoryName($v['id'],$cate_data); 67 $v['category_id_text'] = $this->categoryName($v['id'],$cate_data);
66 $v['keyword_id_text'] = $this->keywordName($v['keyword_id'],$key_data); 68 $v['keyword_id_text'] = $this->keywordName($v['keyword_id'],$key_data);
67 $v['created_uid_text'] = $userModel->getName($v['created_uid']); 69 $v['created_uid_text'] = $userModel->getName($v['created_uid']);
@@ -97,7 +99,9 @@ class ProductController extends BaseController @@ -97,7 +99,9 @@ class ProductController extends BaseController
97 $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL);//获取模版id 99 $template_id = $this->getTemplateId(BTemplate::SOURCE_PRODUCT,BTemplate::IS_DETAIL);//获取模版id
98 $userModel = new User(); 100 $userModel = new User();
99 foreach ($lists['list'] as $k=>$v){ 101 foreach ($lists['list'] as $k=>$v){
100 - $v['url'] = $this->user['domain'] . getRouteMap(RouteMap::SOURCE_PRODUCT,$v['id']); 102 + $route = getRouteMap(RouteMap::SOURCE_PRODUCT,$v['id'], 0, true);
  103 + $v['url'] = $this->user['domain'] . $route['route'];
  104 + $v['pv'] = $route['pv'];
101 $v['category_id_text'] = $this->categoryName($v['id'],$cate_data); 105 $v['category_id_text'] = $this->categoryName($v['id'],$cate_data);
102 $v['keyword_id_text'] = $this->keywordName($v['keyword_id'],$key_data); 106 $v['keyword_id_text'] = $this->keywordName($v['keyword_id'],$key_data);
103 $v['created_uid_text'] = $userModel->getName($v['created_uid']); 107 $v['created_uid_text'] = $userModel->getName($v['created_uid']);
@@ -197,4 +197,35 @@ class Keyword extends Base @@ -197,4 +197,35 @@ class Keyword extends Base
197 $string_key = array_search($first_title, $this->firstNumWord); 197 $string_key = array_search($first_title, $this->firstNumWord);
198 return $string_key ?: 27; 198 return $string_key ?: 27;
199 } 199 }
  200 +
  201 + public $product_keyword_route = [
  202 + "top-search",
  203 + "top-search-a",
  204 + "top-search-b",
  205 + "top-search-c",
  206 + "top-search-d",
  207 + "top-search-e",
  208 + "top-search-f",
  209 + "top-search-g",
  210 + "top-search-h",
  211 + "top-search-i",
  212 + "top-search-j",
  213 + "top-search-k",
  214 + "top-search-l",
  215 + "top-search-m",
  216 + "top-search-n",
  217 + "top-search-o",
  218 + "top-search-p",
  219 + "top-search-q",
  220 + "top-search-r",
  221 + "top-search-s",
  222 + "top-search-t",
  223 + "top-search-u",
  224 + "top-search-v",
  225 + "top-search-w",
  226 + "top-search-x",
  227 + "top-search-y",
  228 + "top-search-z",
  229 + "top-search-0",
  230 + ];
200 } 231 }
@@ -13,6 +13,7 @@ use App\Models\Project\AutoEmail; @@ -13,6 +13,7 @@ use App\Models\Project\AutoEmail;
13 use App\Models\Project\AutoEmailLog; 13 use App\Models\Project\AutoEmailLog;
14 use App\Models\Project\InquiryFilterConfig; 14 use App\Models\Project\InquiryFilterConfig;
15 use App\Models\Project\Project; 15 use App\Models\Project\Project;
  16 +use App\Models\RouteMap\RouteMap;
16 use App\Models\Subscribe\Email; 17 use App\Models\Subscribe\Email;
17 use App\Models\SyncSubmitTask\SyncSubmitTask; 18 use App\Models\SyncSubmitTask\SyncSubmitTask;
18 use App\Models\Visit\Visit; 19 use App\Models\Visit\Visit;
@@ -20,6 +21,7 @@ use App\Models\WebSetting\WebLanguage; @@ -20,6 +21,7 @@ use App\Models\WebSetting\WebLanguage;
20 use App\Models\Workchat\MessagePush; 21 use App\Models\Workchat\MessagePush;
21 use App\Utils\LogUtils; 22 use App\Utils\LogUtils;
22 use Illuminate\Support\Facades\Cache; 23 use Illuminate\Support\Facades\Cache;
  24 +use Illuminate\Support\Facades\DB;
23 use Illuminate\Support\Facades\Http; 25 use Illuminate\Support\Facades\Http;
24 use Illuminate\Support\Facades\Log; 26 use Illuminate\Support\Facades\Log;
25 use Illuminate\Support\Facades\URL; 27 use Illuminate\Support\Facades\URL;
@@ -337,6 +339,20 @@ class SyncSubmitTaskService @@ -337,6 +339,20 @@ class SyncSubmitTaskService
337 } 339 }
338 Visit::saveData($visit_data, $visit_data['updated_date']); 340 Visit::saveData($visit_data, $visit_data['updated_date']);
339 341
  342 + //pv
  343 + try {
  344 + $url_path = trim(parse_url($visit_data['url'], PHP_URL_PATH), '/');
  345 + if($url_path){
  346 + $route = analysisRoute($url_path);
  347 + $row = RouteMap::where('route', $route)->increment('pv');
  348 + if(!$row){
  349 + Log::channel('visit')->info('route not found:' . $visit_data['url'] );
  350 + }
  351 + }
  352 + }catch (\Exception $e){
  353 + Log::channel('visit')->info('pv inc error:' . $visit_data['url'], [$e->getMessage(), $e->getFile(), $e->getLine()]);
  354 + }
  355 +
340 return true; 356 return true;
341 } 357 }
342 358
@@ -191,6 +191,12 @@ return [ @@ -191,6 +191,12 @@ return [
191 'level' => 'debug', 191 'level' => 'debug',
192 'days' => 14, 192 'days' => 14,
193 ], 193 ],
  194 + 'visit' => [
  195 + 'driver' => 'daily',
  196 + 'path' => storage_path('logs/visit/laravel.log'),
  197 + 'level' => 'debug',
  198 + 'days' => 14,
  199 + ],
194 'ai_blog' => [ 200 'ai_blog' => [
195 'driver' => 'daily', 201 'driver' => 'daily',
196 'path' => storage_path('logs/ai_blog/laravel.log'), 202 'path' => storage_path('logs/ai_blog/laravel.log'),