作者 赵彬吉
@@ -71,14 +71,20 @@ class AfterDayCount extends Command @@ -71,14 +71,20 @@ class AfterDayCount extends Command
71 ->where('gl_project.created_at','<=',$todayMidnight) 71 ->where('gl_project.created_at','<=',$todayMidnight)
72 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr) 72 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
73 ->whereIn('gl_project.type',[2,4]) 73 ->whereIn('gl_project.type',[2,4])
74 - ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count(); 74 + ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
  75 + ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
  76 + ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
  77 + ->count();
75 $qualified_count = $projectModel->where('gl_project.extend_type',0) 78 $qualified_count = $projectModel->where('gl_project.extend_type',0)
76 ->where('gl_project.delete_status',0) 79 ->where('gl_project.delete_status',0)
77 ->where('gl_project.created_at','<=',$todayMidnight) 80 ->where('gl_project.created_at','<=',$todayMidnight)
78 ->where('gl_project.is_remain_today',1) 81 ->where('gl_project.is_remain_today',1)
79 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr) 82 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
80 ->whereIn('gl_project.type',[2,4]) 83 ->whereIn('gl_project.type',[2,4])
81 - ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count(); 84 + ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
  85 + ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
  86 + ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
  87 + ->count();
82 $rate = number_format($qualified_count / $project_count, 2); 88 $rate = number_format($qualified_count / $project_count, 2);
83 $threeMonthsAgo = date('Y-m-d 00:00:00', strtotime('-3 months')); 89 $threeMonthsAgo = date('Y-m-d 00:00:00', strtotime('-3 months'));
84 $three_project_count = $projectModel->where('gl_project.extend_type',0) 90 $three_project_count = $projectModel->where('gl_project.extend_type',0)
@@ -86,14 +92,20 @@ class AfterDayCount extends Command @@ -86,14 +92,20 @@ class AfterDayCount extends Command
86 ->where('gl_project.created_at','<=',$threeMonthsAgo) 92 ->where('gl_project.created_at','<=',$threeMonthsAgo)
87 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr) 93 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
88 ->whereIn('gl_project.type',[2,4]) 94 ->whereIn('gl_project.type',[2,4])
89 - ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count(); 95 + ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
  96 + ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
  97 + ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
  98 + ->count();
90 $three_qualified_count = $projectModel->where('gl_project.extend_type',0) 99 $three_qualified_count = $projectModel->where('gl_project.extend_type',0)
91 ->whereIn('gl_project.id',$projectIdArr) 100 ->whereIn('gl_project.id',$projectIdArr)
92 ->where('gl_project.delete_status',0) 101 ->where('gl_project.delete_status',0)
93 ->where('gl_project.created_at','<=',$threeMonthsAgo) 102 ->where('gl_project.created_at','<=',$threeMonthsAgo)
94 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr) 103 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
95 ->whereIn('gl_project.type',[2,4]) 104 ->whereIn('gl_project.type',[2,4])
96 - ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')->count(); 105 + ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
  106 + ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
  107 + ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
  108 + ->count();
97 $three_rate = number_format($three_qualified_count / $three_project_count, 2); 109 $three_rate = number_format($three_qualified_count / $three_project_count, 2);
98 $data = $projectModel->where('gl_project.extend_type',0) 110 $data = $projectModel->where('gl_project.extend_type',0)
99 ->where('gl_project.delete_status',0) 111 ->where('gl_project.delete_status',0)
@@ -102,6 +114,8 @@ class AfterDayCount extends Command @@ -102,6 +114,8 @@ class AfterDayCount extends Command
102 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr) 114 ->whereIn('gl_project_deploy_optimize.optimist_mid',$idArr)
103 ->whereIn('gl_project.type',[2,4]) 115 ->whereIn('gl_project.type',[2,4])
104 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id') 116 ->leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
  117 + ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
  118 + ->whereRaw("FIND_IN_SET('7', gl_project_deploy_optimize.special) = 0 AND FIND_IN_SET('8', gl_project_deploy_optimize.special) = 0")
105 ->pluck('gl_project.title')->toArray(); 119 ->pluck('gl_project.title')->toArray();
106 $saveData[] = [ 120 $saveData[] = [
107 'date'=>date('Y-m-d', strtotime('yesterday')), 121 'date'=>date('Y-m-d', strtotime('yesterday')),
@@ -113,6 +113,7 @@ class SyncInquiryProject extends Command @@ -113,6 +113,7 @@ class SyncInquiryProject extends Command
113 $result = http_get($route_domain . 'k_u_api.php'); 113 $result = http_get($route_domain . 'k_u_api.php');
114 if (empty($result)) { 114 if (empty($result)) {
115 $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php'); 115 $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php');
  116 + $this->deleteExpire([$project->id]);
116 continue; 117 continue;
117 } 118 }
118 file_put_contents(storage_path('logs/sync_inquiry_project_route/' . $project->id . '.json'), json_encode($result)); 119 file_put_contents(storage_path('logs/sync_inquiry_project_route/' . $project->id . '.json'), json_encode($result));
@@ -120,6 +121,7 @@ class SyncInquiryProject extends Command @@ -120,6 +121,7 @@ class SyncInquiryProject extends Command
120 } catch (\Exception $e) { 121 } catch (\Exception $e) {
121 $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage()); 122 $this->log('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage());
122 $this->output('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage()); 123 $this->output('syncGloV5Route 未获取到路由信息:' . $project->id . ', 路由获取地址:' . $route_domain . 'k_u_api.php' . ', 错误信息:' . $e->getMessage());
  124 + $this->deleteExpire([$project->id]);
123 continue; 125 continue;
124 } 126 }
125 } 127 }
@@ -67,7 +67,7 @@ class UpdateRoute extends Command @@ -67,7 +67,7 @@ class UpdateRoute extends Command
67 */ 67 */
68 public function handle() 68 public function handle()
69 { 69 {
70 - return $this->keyword_actions(); 70 + return $this->settingSeo();
71 } 71 }
72 72
73 public function keyword_actions(){ 73 public function keyword_actions(){
@@ -592,270 +592,23 @@ class UpdateRoute extends Command @@ -592,270 +592,23 @@ class UpdateRoute extends Command
592 } 592 }
593 593
594 /** 594 /**
595 - * @remark :更新产品分类前后缀  
596 - * @name :updateSeo 595 + * @remark :设置seo_前后缀
  596 + * @name :settingSeo
597 * @author :lyh 597 * @author :lyh
598 * @method :post 598 * @method :post
599 - * @time :2025/3/14 14:39 599 + * @time :2025/4/15 15:14
600 */ 600 */
601 - public function insertData(){  
602 - $countries = [  
603 - 'AFG' => 'Afghanistan',  
604 - 'ALB' => 'Albania',  
605 - 'DZA' => 'Algeria',  
606 - 'AND' => 'Andorra',  
607 - 'AGO' => 'Angola',  
608 - 'ATG' => 'Antigua and Barbuda',  
609 - 'ARG' => 'Argentina',  
610 - 'ARM' => 'Armenia',  
611 - 'AUS' => 'Australia',  
612 - 'AUT' => 'Austria',  
613 - 'AZE' => 'Azerbaijan',  
614 - 'BHS' => 'Bahamas',  
615 - 'BHR' => 'Bahrain',  
616 - 'BGD' => 'Bangladesh',  
617 - 'BRB' => 'Barbados',  
618 - 'BLR' => 'Belarus',  
619 - 'BEL' => 'Belgium',  
620 - 'BLZ' => 'Belize',  
621 - 'BEN' => 'Benin',  
622 - 'BTN' => 'Bhutan',  
623 - 'BOL' => 'Bolivia',  
624 - 'BES' => 'Bonaire, Sint Eustatius and Saba',  
625 - 'BIH' => 'Bosnia and Herzegovina',  
626 - 'BWA' => 'Botswana',  
627 - 'BVT' => 'Bouvet Island',  
628 - 'BRA' => 'Brazil',  
629 - 'IOT' => 'British Indian Ocean Territory',  
630 - 'BRN' => 'Brunei Darussalam',  
631 - 'BGR' => 'Bulgaria',  
632 - 'BFA' => 'Burkina Faso',  
633 - 'BDI' => 'Burundi',  
634 - 'CPV' => 'Cabo Verde',  
635 - 'KHM' => 'Cambodia',  
636 - 'CMR' => 'Cameroon',  
637 - 'CAN' => 'Canada',  
638 - 'CYM' => 'Cayman Islands',  
639 - 'CAF' => 'Central African Republic',  
640 - 'TCD' => 'Chad',  
641 - 'CHL' => 'Chile',  
642 - 'CHN' => 'China',  
643 - 'CXR' => 'Christmas Island',  
644 - 'CCK' => 'Cocos (Keeling) Islands',  
645 - 'COL' => 'Colombia',  
646 - 'COM' => 'Comoros',  
647 - 'COD' => 'Congo (Democratic Republic of the)',  
648 - 'COG' => 'Congo',  
649 - 'COK' => 'Cook Islands',  
650 - 'CRI' => 'Costa Rica',  
651 - 'CIV' => 'Côte d\'Ivoire',  
652 - 'HRV' => 'Croatia',  
653 - 'CUB' => 'Cuba',  
654 - 'CUW' => 'Curaçao',  
655 - 'CYP' => 'Cyprus',  
656 - 'CZE' => 'Czech Republic',  
657 - 'DNK' => 'Denmark',  
658 - 'DJI' => 'Djibouti',  
659 - 'DMA' => 'Dominica',  
660 - 'DOM' => 'Dominican Republic',  
661 - 'ECU' => 'Ecuador',  
662 - 'EGY' => 'Egypt',  
663 - 'SLV' => 'El Salvador',  
664 - 'GNQ' => 'Equatorial Guinea',  
665 - 'ERI' => 'Eritrea',  
666 - 'EST' => 'Estonia',  
667 - 'SWZ' => 'Eswatini',  
668 - 'ETH' => 'Ethiopia',  
669 - 'FLK' => 'Falkland Islands (Malvinas)',  
670 - 'FRO' => 'Faroe Islands',  
671 - 'FJI' => 'Fiji',  
672 - 'FIN' => 'Finland',  
673 - 'FRA' => 'France',  
674 - 'GUF' => 'French Guiana',  
675 - 'PYF' => 'French Polynesia',  
676 - 'ATF' => 'French Southern Territories',  
677 - 'GAB' => 'Gabon',  
678 - 'GMB' => 'Gambia',  
679 - 'GEO' => 'Georgia',  
680 - 'DEU' => 'Germany',  
681 - 'GHA' => 'Ghana',  
682 - 'GIB' => 'Gibraltar',  
683 - 'GRC' => 'Greece',  
684 - 'GRL' => 'Greenland',  
685 - 'GRD' => 'Grenada',  
686 - 'GLP' => 'Guadeloupe',  
687 - 'GUM' => 'Guam',  
688 - 'GTM' => 'Guatemala',  
689 - 'GGY' => 'Guernsey',  
690 - 'GIN' => 'Guinea',  
691 - 'GNB' => 'Guinea-Bissau',  
692 - 'GUY' => 'Guyana',  
693 - 'HTI' => 'Haiti',  
694 - 'HMD' => 'Heard Island and McDonald Islands',  
695 - 'VAT' => 'Holy See',  
696 - 'HND' => 'Honduras',  
697 - 'HKG' => 'Hong Kong',  
698 - 'HUN' => 'Hungary',  
699 - 'ISL' => 'Iceland',  
700 - 'IND' => 'India',  
701 - 'IDN' => 'Indonesia',  
702 - 'IRN' => 'Iran (Islamic Republic of)',  
703 - 'IRQ' => 'Iraq',  
704 - 'IRL' => 'Ireland',  
705 - 'IMN' => 'Isle of Man',  
706 - 'ISR' => 'Israel',  
707 - 'ITA' => 'Italy',  
708 - 'JAM' => 'Jamaica',  
709 - 'JPN' => 'Japan',  
710 - 'JEY' => 'Jersey',  
711 - 'JOR' => 'Jordan',  
712 - 'KAZ' => 'Kazakhstan',  
713 - 'KEN' => 'Kenya',  
714 - 'KIR' => 'Kiribati',  
715 - 'KOR' => 'Korea (Republic of)',  
716 - 'KWT' => 'Kuwait',  
717 - 'KGZ' => 'Kyrgyzstan',  
718 - 'LAO' => 'Lao People\'s Democratic Republic',  
719 - 'LVA' => 'Latvia',  
720 - 'LBN' => 'Lebanon',  
721 - 'LSO' => 'Lesotho',  
722 - 'LBR' => 'Liberia',  
723 - 'LBY' => 'Libya',  
724 - 'LIE' => 'Liechtenstein',  
725 - 'LTU' => 'Lithuania',  
726 - 'LUX' => 'Luxembourg',  
727 - 'MAC' => 'Macao',  
728 - 'MDG' => 'Madagascar',  
729 - 'MWI' => 'Malawi',  
730 - 'MYS' => 'Malaysia',  
731 - 'MDV' => 'Maldives',  
732 - 'MLI' => 'Mali',  
733 - 'MLT' => 'Malta',  
734 - 'MHL' => 'Marshall Islands',  
735 - 'MTQ' => 'Martinique',  
736 - 'MRT' => 'Mauritania',  
737 - 'MUS' => 'Mauritius',  
738 - 'MYT' => 'Mayotte',  
739 - 'MEX' => 'Mexico',  
740 - 'FSM' => 'Micronesia (Federated States of)',  
741 - 'MDA' => 'Moldova (Republic of)',  
742 - 'MCO' => 'Monaco',  
743 - 'MNG' => 'Mongolia',  
744 - 'MNE' => 'Montenegro',  
745 - 'MSR' => 'Montserrat',  
746 - 'MAR' => 'Morocco',  
747 - 'MOZ' => 'Mozambique',  
748 - 'MMR' => 'Myanmar',  
749 - 'NAM' => 'Namibia',  
750 - 'NRU' => 'Nauru',  
751 - 'NPL' => 'Nepal',  
752 - 'NLD' => 'Netherlands',  
753 - 'NCL' => 'New Caledonia',  
754 - 'NZL' => 'New Zealand',  
755 - 'NIC' => 'Nicaragua',  
756 - 'NER' => 'Niger',  
757 - 'NGA' => 'Nigeria',  
758 - 'NIU' => 'Niue',  
759 - 'NFK' => 'Norfolk Island',  
760 - 'MNP' => 'Northern Mariana Islands',  
761 - 'NOR' => 'Norway',  
762 - 'OMN' => 'Oman',  
763 - 'PAK' => 'Pakistan',  
764 - 'PLW' => 'Palau',  
765 - 'PSE' => 'Palestine, State of',  
766 - 'PAN' => 'Panama',  
767 - 'PNG' => 'Papua New Guinea',  
768 - 'PRY' => 'Paraguay',  
769 - 'PER' => 'Peru',  
770 - 'PHL' => 'Philippines',  
771 - 'PCN' => 'Pitcairn',  
772 - 'POL' => 'Poland',  
773 - 'PRT' => 'Portugal',  
774 - 'PRI' => 'Puerto Rico',  
775 - 'QAT' => 'Qatar',  
776 - 'REU' => 'Réunion',  
777 - 'ROU' => 'Romania',  
778 - 'RUS' => 'Russian Federation',  
779 - 'RWA' => 'Rwanda',  
780 - 'BLM' => 'Saint Barthélemy',  
781 - 'SHN' => 'Saint Helena, Ascension and Tristan da Cunha',  
782 - 'KNA' => 'Saint Kitts and Nevis',  
783 - 'LCA' => 'Saint Lucia',  
784 - 'MAF' => 'Saint Martin (French part)',  
785 - 'SPM' => 'Saint Pierre and Miquelon',  
786 - 'VCT' => 'Saint Vincent and the Grenadines',  
787 - 'WSM' => 'Samoa',  
788 - 'SMR' => 'San Marino',  
789 - 'STP' => 'Sao Tome and Principe',  
790 - 'SAU' => 'Saudi Arabia',  
791 - 'SEN' => 'Senegal',  
792 - 'SRB' => 'Serbia',  
793 - 'SYC' => 'Seychelles',  
794 - 'SLE' => 'Sierra Leone',  
795 - 'SGP' => 'Singapore',  
796 - 'SXM' => 'Sint Maarten (Dutch part)',  
797 - 'SVK' => 'Slovakia',  
798 - 'SVN' => 'Slovenia',  
799 - 'SLB' => 'Solomon Islands',  
800 - 'SOM' => 'Somalia',  
801 - 'ZAF' => 'South Africa',  
802 - 'SGS' => 'South Georgia and the South Sandwich Islands',  
803 - 'SSD' => 'South Sudan',  
804 - 'ESP' => 'Spain',  
805 - 'LKA' => 'Sri Lanka',  
806 - 'SDN' => 'Sudan',  
807 - 'SUR' => 'Suriname',  
808 - 'SJM' => 'Svalbard and Jan Mayen',  
809 - 'SWE' => 'Sweden',  
810 - 'CHE' => 'Switzerland',  
811 - 'SYR' => 'Syrian Arab Republic',  
812 - 'TWN' => 'Taiwan, Province of China',  
813 - 'TJK' => 'Tajikistan',  
814 - 'TZA' => 'Tanzania, United Republic of',  
815 - 'THA' => 'Thailand',  
816 - 'TLS' => 'Timor-Leste',  
817 - 'TGO' => 'Togo',  
818 - 'TKL' => 'Tokelau',  
819 - 'TON' => 'Tonga',  
820 - 'TTO' => 'Trinidad and Tobago',  
821 - 'TUN' => 'Tunisia',  
822 - 'TUR' => 'Turkey',  
823 - 'TKM' => 'Turkmenistan',  
824 - 'TCA' => 'Turks and Caicos Islands',  
825 - 'TUV' => 'Tuvalu',  
826 - 'UGA' => 'Uganda',  
827 - 'UKR' => 'Ukraine',  
828 - 'ARE' => 'United Arab Emirates',  
829 - 'GBR' => 'United Kingdom',  
830 - 'USA' => 'United States',  
831 - 'URY' => 'Uruguay',  
832 - 'UZB' => 'Uzbekistan',  
833 - 'VUT' => 'Vanuatu',  
834 - 'VEN' => 'Venezuela (Bolivarian Republic of)',  
835 - 'VNM' => 'Viet Nam',  
836 - 'WLF' => 'Wallis and Futuna',  
837 - 'ESH' => 'Western Sahara',  
838 - 'YEM' => 'Yemen',  
839 - 'ZMB' => 'Zambia',  
840 - 'ZWE' => 'Zimbabwe',  
841 - ];  
842 - $codeCountryModel = new GoogleCodeCountry();  
843 - $data = [];  
844 - foreach ($countries as $key =>$val){  
845 - $wordModel = new WordCountry();  
846 - $info = $wordModel->read(['iso3'=>$key]);  
847 - if($info === false){  
848 - $zh = Translate::tran($val,'zh');  
849 - }else{  
850 - $zh = $info['chinese_name']; 601 + public function settingSeo(){
  602 + $list = (new Project())->formatQuery(['delete_status'=>0,'type'=>[2,4]])->pluck('id')->unique()->values()->toArray();
  603 + foreach ($list as $val){
  604 + ProjectServer::useProject($val);
  605 + $seoModel = new WebSettingSeo();
  606 + $results = $seoModel->whereRaw('product_category_prefix = product_category_suffix')->get();
  607 + if(!empty($results)){
  608 + echo '项目id:'.$val.PHP_EOL;
851 } 609 }
852 - $data[] = [  
853 - 'code'=>$key,  
854 - 'en_country'=>$val,  
855 - 'zh_country'=>$zh,  
856 - ]; 610 + DB::disconnect('custom_mysql');
857 } 611 }
858 - $codeCountryModel->insertAll($data);  
859 - return true; 612 +
860 } 613 }
861 } 614 }
@@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
7 * @time :2025/2/21 9:55 7 * @time :2025/2/21 9:55
8 */ 8 */
9 9
10 -namespace App\Console\Commands\RequestUrlLog; 10 +namespace App\Console\Commands\Monitor;
11 11
12 use App\Helper\FormGlobalsoApi; 12 use App\Helper\FormGlobalsoApi;
13 use App\Models\Com\RequestUrl; 13 use App\Models\Com\RequestUrl;
@@ -42,15 +42,15 @@ class RequestUrlLog extends Command @@ -42,15 +42,15 @@ class RequestUrlLog extends Command
42 //获取需要请求的接口 42 //获取需要请求的接口
43 $requestUrlModel = new RequestUrl(); 43 $requestUrlModel = new RequestUrl();
44 $urlList = $requestUrlModel->list(['status'=>0]); 44 $urlList = $requestUrlModel->list(['status'=>0]);
45 - //随机获取一个项目,需要验证的其他方法  
46 - $projectModel = new Project();  
47 - $projectInfo = $projectModel->formatQuery(['type'=>2,'delete_status'=>0])->inRandomOrder()->first();  
48 - //获取对应项目的域名  
49 - $domainModel = new DomainInfo();  
50 - $domainInfo = $domainModel->read(['project_id'=>$projectInfo['id']]);  
51 foreach ($urlList as $v){ 45 foreach ($urlList as $v){
52 //需要单独验证的方法 46 //需要单独验证的方法
53 if($v['url'] == 'getMonthInquiry'){ 47 if($v['url'] == 'getMonthInquiry'){
  48 + //随机获取一个项目,需要验证的其他方法
  49 + $projectModel = new Project();
  50 + $projectInfo = $projectModel->formatQuery(['type'=>2,'delete_status'=>0])->inRandomOrder()->first();
  51 + //获取对应项目的域名
  52 + $domainModel = new DomainInfo();
  53 + $domainInfo = $domainModel->read(['project_id'=>$projectInfo['id']]);
54 $result = $this->getMonthInquiry($domainInfo['domain'],date('Y-m'), 0); 54 $result = $this->getMonthInquiry($domainInfo['domain'],date('Y-m'), 0);
55 $requestUrlModel->edit(['text'=>json_encode($result,true),'time'=>$result['$requestTime'],'http_code'=>$result['http_code']],['id'=>$v['id']]); 55 $requestUrlModel->edit(['text'=>json_encode($result,true),'time'=>$result['$requestTime'],'http_code'=>$result['http_code']],['id'=>$v['id']]);
56 continue; 56 continue;
@@ -60,8 +60,16 @@ class RequestUrlLog extends Command @@ -60,8 +60,16 @@ class RequestUrlLog extends Command
60 $result = $this->postRequest($v['url'],$v['param']); 60 $result = $this->postRequest($v['url'],$v['param']);
61 echo '执行的url:' . $v['url'] . PHP_EOL . '返回的结果:'.json_encode($result,true) . date('Y-m-d H:i:s').PHP_EOL; 61 echo '执行的url:' . $v['url'] . PHP_EOL . '返回的结果:'.json_encode($result,true) . date('Y-m-d H:i:s').PHP_EOL;
62 //更新请求结果 62 //更新请求结果
63 - $requestUrlModel->edit(['text'=>json_encode($result,true),'time'=>$result['$requestTime'],'http_code'=>$result['http_code']],['id'=>$v['id']]); 63 + $requestUrlModel->edit(['text'=>json_encode($result,true),'time'=>$result['requestTime'],'http_code'=>$result['http_code']],['id'=>$v['id']]);
  64 + continue;
  65 + }else if($v['method'] == 'get'){
  66 + $result = $this->getRequest($v['url']);
  67 + echo '执行的url:' . $v['url'] . PHP_EOL . '返回的结果:'.json_encode($result,true) . date('Y-m-d H:i:s').PHP_EOL;
  68 + //更新请求结果
  69 + $requestUrlModel->edit(['text'=>json_encode($result,true),'time'=>$result['requestTime'],'http_code'=>$result['http_code']],['id'=>$v['id']]);
64 continue; 70 continue;
  71 + }else{
  72 + //todo::其他方式的验证
65 } 73 }
66 } 74 }
67 return true; 75 return true;
@@ -44,6 +44,7 @@ class CopyProject extends Command @@ -44,6 +44,7 @@ class CopyProject extends Command
44 public function handle() 44 public function handle()
45 { 45 {
46 while (true) { 46 while (true) {
  47 + $projectModel = new Project();
47 $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get(); 48 $list = NoticeLog::where('type', NoticeLog::TYPE_COPY_PROJECT)->where('status', NoticeLog::STATUS_PENDING)->get();
48 if(empty($list)){ 49 if(empty($list)){
49 sleep(30); 50 sleep(30);
@@ -71,10 +72,12 @@ class CopyProject extends Command @@ -71,10 +72,12 @@ class CopyProject extends Command
71 sleep(60); 72 sleep(60);
72 try { 73 try {
73 $this->copyMysql($old_project_id,$project_id); 74 $this->copyMysql($old_project_id,$project_id);
  75 + $this->output('CopyProjectJob end, old project_id: ' . $old_project_id . ', new project_id: ' . $project_id);
74 }catch (\Exception $e){ 76 }catch (\Exception $e){
75 echo '复制数据库失败:'.$old_project_id . '<->'.$project_id; 77 echo '复制数据库失败:'.$old_project_id . '<->'.$project_id;
76 } 78 }
77 - $this->output('CopyProjectJob end, old project_id: ' . $old_project_id . ', new project_id: ' . $project_id); 79 + //修改项目状态
  80 + $projectModel->edit(['delete_status'=>0],['id'=>$project_id]);
78 } 81 }
79 } 82 }
80 return true; 83 return true;
@@ -206,13 +209,62 @@ class CopyProject extends Command @@ -206,13 +209,62 @@ class CopyProject extends Command
206 } 209 }
207 //复制数据库 210 //复制数据库
208 public function copyMysql($project_id,$new_project_id){ 211 public function copyMysql($project_id,$new_project_id){
209 - Artisan::call("php artisan copy_project_s $project_id $new_project_id"); 212 + //切换数据库配置
  213 + $project = ProjectServer::useProject($new_project_id);
  214 + //创建数据库
  215 + ProjectServer::createDatabase($project);
  216 + //创建表
  217 + $this->initTable($project_id,$new_project_id);
210 //修改项目状态 218 //修改项目状态
211 $projectModel = new Project(); 219 $projectModel = new Project();
212 $projectModel->edit(['delete_status'=>0],['id'=>$new_project_id]); 220 $projectModel->edit(['delete_status'=>0],['id'=>$new_project_id]);
213 } 221 }
214 222
215 /** 223 /**
  224 + * @remark :创建数据库
  225 + * @name :initTable
  226 + * @author :lyh
  227 + * @method :post
  228 + * @time :2023/12/11 10:09
  229 + */
  230 + public function initTable($project_id, $news_project_id)
  231 + {
  232 + // 设置源数据库
  233 + config(['database.connections.custom_tmp_mysql_copy.database' => 'gl_data_' . $project_id]);
  234 + $database_name = DB::connection('custom_tmp_mysql_copy')->getDatabaseName();
  235 + // 获取源数据库的所有表
  236 + $tables = Schema::connection('custom_tmp_mysql_copy')->getAllTables();
  237 + $tables = array_column($tables, 'Tables_in_' . $database_name);
  238 + foreach ($tables as $table) {
  239 + // 1. 删除目标数据库中的表
  240 + DB::connection('custom_mysql')->statement("DROP TABLE IF EXISTS {$table}");
  241 + // 2. 重新创建表
  242 + $sql = DB::connection('custom_tmp_mysql_copy')->select("SHOW CREATE TABLE {$table}");
  243 + DB::connection('custom_mysql')->statement(get_object_vars($sql[0])['Create Table']);
  244 + // 3. 跳过指定的表
  245 + if (in_array($table, ['gl_customer_visit', 'gl_customer_visit_item', 'gl_inquiry_other', 'gl_inquiry_form_data', 'gl_inquiry_form'])) {
  246 + continue;
  247 + }
  248 + try {
  249 + // 4. 重新插入数据
  250 + DB::connection('custom_mysql')->table($table)->insertUsing(
  251 + [], // 插入所有列
  252 + function ($query) use ($table, $project_id) {
  253 + $name = 'gl_data_' . $project_id . '.' . $table;
  254 + $query->select('*')->from("{$name}");
  255 + }
  256 + );
  257 + }catch (\Exception $e){
  258 + continue;
  259 + }
  260 + // 5. 更新 project_id(如果存在)
  261 + if (Schema::connection('custom_mysql')->hasColumn($table, 'project_id')) {
  262 + DB::connection('custom_mysql')->table($table)->update(['project_id' => $news_project_id]);
  263 + }
  264 + }
  265 + return true;
  266 + }
  267 + /**
216 * @param $message 268 * @param $message
217 * @return bool 269 * @return bool
218 */ 270 */
@@ -207,7 +207,7 @@ class SyncProject extends Command @@ -207,7 +207,7 @@ class SyncProject extends Command
207 $data = [ 207 $data = [
208 'project'=>[ 208 'project'=>[
209 'title' => $title, 209 'title' => $title,
210 - 'company' => $param['company_name'], 210 + 'company' => preg_replace('/【.*?】/', '', $param['company_name']),
211 'lead_name' => $param['principal_name'], 211 'lead_name' => $param['principal_name'],
212 'mobile' => $param['principal_mobile'], 212 'mobile' => $param['principal_mobile'],
213 'mysql_id'=>Project::MYSQL_ID, 213 'mysql_id'=>Project::MYSQL_ID,
@@ -185,6 +185,9 @@ class KeywordController extends BaseController @@ -185,6 +185,9 @@ class KeywordController extends BaseController
185 */ 185 */
186 public function batchKeywordFiled(){ 186 public function batchKeywordFiled(){
187 $param = []; 187 $param = [];
  188 + if(isset($this->param['seo_title'])){
  189 + $param['seo_title'] = null;
  190 + }
188 if(isset($this->param['keyword'])){ 191 if(isset($this->param['keyword'])){
189 $param['seo_keywords'] = null; 192 $param['seo_keywords'] = null;
190 } 193 }
@@ -444,7 +444,7 @@ class InquiryForwardLogic extends BaseLogic @@ -444,7 +444,7 @@ class InquiryForwardLogic extends BaseLogic
444 } 444 }
445 445
446 //统计数据赋值 446 //统计数据赋值
447 - $result = $this->model->list(['inquiry_date' => ['between', [$start_date, $end_date]]], 'id', ['status', 'inquiry_date'], 'asc'); 447 + $result = $this->model->list(['inquiry_date' => ['between', [$start_date . ' 00:00:00', $end_date . ' 23:59:59']]], 'id', ['status', 'inquiry_date'], 'asc');
448 foreach ($result as $value) { 448 foreach ($result as $value) {
449 $inquiry_date = substr($value['inquiry_date'], 0, 10); 449 $inquiry_date = substr($value['inquiry_date'], 0, 10);
450 $data[$inquiry_date]['total'] += 1; 450 $data[$inquiry_date]['total'] += 1;
@@ -159,13 +159,17 @@ class ProjectLogic extends BaseLogic @@ -159,13 +159,17 @@ class ProjectLogic extends BaseLogic
159 * @param :1->建站中 2->优化中 3->建站完成 6-》错误单 159 * @param :1->建站中 2->优化中 3->建站完成 6-》错误单
160 */ 160 */
161 public function projectSave(){ 161 public function projectSave(){
162 - $this->saveSeoPlan($this->param['id'],$this->param['type'],$this->param['deploy_build']['plan'],$this->param['deploy_build']['seo_plan'],$this->param['deploy_optimize']['optimist_mid'] ?? 0,$this->param['deploy_optimize']['quality_mid'] ?? 0);  
163 - $this->checkAiBlog($this->param['main_lang_id'],$this->param['is_ai_blog'],$this->param['company'],$this->param['deploy_optimize']['company_en_name'] ?? '',$this->param['deploy_optimize']['company_en_description'] ?? '');  
164 - DB::beginTransaction();  
165 - try {  
166 - if($this->param['type'] == Project::TYPE_SEVEN){  
167 - $this->setTypeSevenEdit($this->param);  
168 - }else{ 162 + if($this->param['type'] == Project::TYPE_SEVEN){
  163 + $this->setTypeSevenEdit($this->param);
  164 + }else{
  165 + //优化设置默认关闭
  166 + $this->param['is_ai_blog'] = 0;
  167 + $this->param['deploy_optimize']['is_ai_blog_send'] = 0;
  168 + $this->param['deploy_optimize']['is_auto_keywords'] = 0;
  169 + $this->saveSeoPlan($this->param['id'],$this->param['type'],$this->param['deploy_build']['plan'],$this->param['deploy_build']['seo_plan'],$this->param['deploy_optimize']['optimist_mid'] ?? 0,$this->param['deploy_optimize']['quality_mid'] ?? 0);
  170 + $this->checkAiBlog($this->param['main_lang_id'],$this->param['is_ai_blog'],$this->param['company'],$this->param['deploy_optimize']['company_en_name'] ?? '',$this->param['deploy_optimize']['company_en_description'] ?? '');
  171 + DB::beginTransaction();
  172 + try {
169 //初始化项目 173 //初始化项目
170 $this->param = $this->createProjectData($this->param); 174 $this->param = $this->createProjectData($this->param);
171 //双向绑定服务器,需放到保存项目的上方 175 //双向绑定服务器,需放到保存项目的上方
@@ -191,11 +195,11 @@ class ProjectLogic extends BaseLogic @@ -191,11 +195,11 @@ class ProjectLogic extends BaseLogic
191 $this->syncImageFile($this->param['project_location'],$this->param['id']); 195 $this->syncImageFile($this->param['project_location'],$this->param['id']);
192 //同步信息表 196 //同步信息表
193 (new SyncService())->projectAcceptAddress($this->param['id']); 197 (new SyncService())->projectAcceptAddress($this->param['id']);
  198 + DB::commit();
  199 + }catch (\Exception $e){
  200 + DB::rollBack();
  201 + $this->fail('保存失败,请联系管理员');
194 } 202 }
195 - DB::commit();  
196 - }catch (\Exception $e){  
197 - DB::rollBack();  
198 - $this->fail('保存失败,请联系管理员');  
199 } 203 }
200 return $this->success(); 204 return $this->success();
201 } 205 }
@@ -30,12 +30,12 @@ class InquiryProjectRoute extends Base @@ -30,12 +30,12 @@ class InquiryProjectRoute extends Base
30 */ 30 */
31 public static function saveProjectRoute($project_id, $title, $route, $date) 31 public static function saveProjectRoute($project_id, $title, $route, $date)
32 { 32 {
33 - $log = self::where(compact('project_id', 'title'))->first();  
34 - if ($log) {  
35 - $log->date = $date;  
36 - $log->save();  
37 - return $log;  
38 - } 33 +// $log = self::where(compact('project_id', 'title'))->first();
  34 +// if ($log) {
  35 +// $log->date = $date;
  36 +// $log->save();
  37 +// return $log;
  38 +// }
39 39
40 $self = new self(); 40 $self = new self();
41 $self->project_id = $project_id; 41 $self->project_id = $project_id;
1 -<?php  
2 -/**  
3 - * @remark :  
4 - * @name :RequestUrlLog.php  
5 - * @author :lyh  
6 - * @method :post  
7 - * @time :2025/2/21 9:38  
8 - */  
9 -  
10 -namespace App\Models\RequestUrlLog;  
11 -  
12 -use App\Models\Base;  
13 -  
14 -/**  
15 - * @remark :url请求日志  
16 - * @name :RequestUrlLog  
17 - * @author :lyh  
18 - * @method :post  
19 - * @time :2025/2/21 9:48  
20 - */  
21 -class RequestUrlLog extends Base  
22 -{  
23 - protected $table = 'gl_request_url_log';  
24 -}  
@@ -84,7 +84,7 @@ class RouteMap extends Base @@ -84,7 +84,7 @@ class RouteMap extends Base
84 } 84 }
85 $i=1;//路由重复时拼接 85 $i=1;//路由重复时拼接
86 $route = $sign.$suffix; 86 $route = $sign.$suffix;
87 - while(self::isExist($route, $source_id, $project_id)){ 87 + while(self::isExist($route, $source_id, $project_id,$source)){
88 $route = $sign .'-'.$i.$suffix; 88 $route = $sign .'-'.$i.$suffix;
89 $i++; 89 $i++;
90 } 90 }
@@ -99,7 +99,7 @@ class RouteMap extends Base @@ -99,7 +99,7 @@ class RouteMap extends Base
99 * @time :2025/3/12 9:51 99 * @time :2025/3/12 9:51
100 * @param :route:路由 source:模块类型 source_id:对应数据id 100 * @param :route:路由 source:模块类型 source_id:对应数据id
101 */ 101 */
102 - protected static function isExist($route, $source_id, $project_id){ 102 + protected static function isExist($route, $source_id, $project_id,$source){
103 $fixed = ['api']; //固定的路由 103 $fixed = ['api']; //固定的路由
104 if(in_array($route, $fixed)){ 104 if(in_array($route, $fixed)){
105 return true; 105 return true;
@@ -109,8 +109,13 @@ class RouteMap extends Base @@ -109,8 +109,13 @@ class RouteMap extends Base
109 ]; 109 ];
110 $route = self::where($where)->first(); 110 $route = self::where($where)->first();
111 if($route){ 111 if($route){
112 - if($route->source_id != $source_id){ 112 + if(($route->source_id != $source_id)){
113 return true; 113 return true;
  114 + }else{
  115 + if($source != $route->source){
  116 + //source_id想同,source不相同,继续循环
  117 + return true;
  118 + }
114 } 119 }
115 } 120 }
116 return false; 121 return false;