作者 lyh

gx

... ... @@ -5,7 +5,7 @@ namespace App\Console\Commands\DayCount;
use App\Helper\Common;
use App\Helper\FormGlobalsoApi;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquiryOther;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\DeployBuild;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
... ... @@ -102,7 +102,7 @@ class Count extends Command
* @time :2023/6/14 15:40
*/
public function pv_num($yesterday,$domain){
$pv = DB::connection('custom_mysql')->table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
$pv = DB::connection('custom_mysql')->table('gl_customer_visit_item')->whereDate('updated_date', $yesterday)->count();
return $pv;
}
... ... @@ -113,7 +113,7 @@ class Count extends Command
* @time :2023/6/14 15:40
*/
public function ip_num($yesterday,$domain){
$ip = DB::connection('custom_mysql')->table('gl_customer_visit')->whereDate('updated_date', $yesterday)->where('domain',$domain)->count();
$ip = DB::connection('custom_mysql')->table('gl_customer_visit')->whereDate('updated_date', $yesterday)->count();
return $ip;
}
... ... @@ -146,8 +146,8 @@ class Count extends Command
//加上其他询盘
ProjectServer::useProject($project_id);
$arr['inquiry_num'] = InquiryOther::count();
$countryData = InquiryOther::select("country",DB::raw('COUNT(*) as count'))->groupBy('country')->get()->toArray();
$arr['inquiry_num'] += InquiryFormData::getCount();
$countryData = InquiryFormData::getCountryCount();
foreach ($countryData as $v1){
if(isset($countryArr[$v1['country']])){
$countryArr[$v1['country']] += $v1['count'];
... ...
... ... @@ -3,7 +3,7 @@
namespace App\Console\Commands;
use App\Helper\FormGlobalsoApi;
use App\Models\Inquiry\InquiryOther;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\Project;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
... ... @@ -56,7 +56,7 @@ class LastInquiry extends Command
$last_time = $res['data']['data'][0] ?? '';
//其他询盘的最新时间
ProjectServer::useProject($item['id']);
$other_last_time = InquiryOther::orderBy('id', 'desc')->value('submit_time');
$other_last_time = InquiryFormData::orderBy('id', 'desc')->value('submit_at');
$last_inquiry_time = $last_time > $other_last_time ? $last_time : $other_last_time;
... ...
... ... @@ -4,7 +4,7 @@ namespace App\Console\Commands\MonthlyCount;
use App\Helper\FormGlobalsoApi;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquiryOther;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\Project;
use App\Services\ProjectServer;
use Carbon\Carbon;
... ... @@ -107,11 +107,9 @@ class InquiryMonthlyCount extends Command
}
//加上其他询盘
ProjectServer::useProject($project_id);
$arr['total'] += InquiryOther::count();
$arr['month_total'] += InquiryOther::whereBetween('submit_time',[$startTime, $endTime])->count();
$countryData = InquiryOther::whereBetween('submit_time',[$startTime, $endTime])
->select("country",DB::raw('COUNT(*) as count'))
->groupBy('country')->get()->toArray();
$arr['total'] += InquiryFormData::count();
$arr['month_total'] += InquiryFormData::getCount([$startTime, $endTime]);
$countryData = InquiryFormData::getCountryCount([$startTime, $endTime]);
foreach ($countryData as $v1){
if(isset($countryArr[$v1['country']])){
$countryArr[$v1['country']] += $v1['count'];
... ...
... ... @@ -2,30 +2,24 @@
namespace App\Console\Commands;
use App\Http\Logic\Aside\Project\DomainInfoLogic;
use App\Models\Com\UpdateNotify;
use App\Models\Devops\DevopsTask as DevopsTaskModel;
use App\Models\Devops\DevopsTaskLog;
use App\Helper\FormGlobalsoApi;
use App\Models\Domain\DomainInfo;
use App\Models\File\File;
use App\Models\File\Image;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Product;
use App\Models\HomeCount\Count;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BCustomTemplate;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Database\QueryException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use mysql_xdevapi\Exception;
/**
* 测试
* Class Traffic
* Class Test
* @package App\Console\Commands
* @author zbj
* @date 2023/5/18
* @date 2023/4/25
*/
class Test extends Command
{
... ... @@ -41,7 +35,7 @@ class Test extends Command
*
* @var string
*/
protected $description = '测试';
protected $description = '';
/**
* Create a new command instance.
... ... @@ -58,52 +52,70 @@ class Test extends Command
*/
public function handle()
{
$domains = DB::table('gl_customer_visit')->groupBy('domain')->select('domain')->pluck('domain')->toArray();
foreach($domains as $domain){
if(!Str::contains($domain, 'globalso.site')){
$this->sync($domain);
$projects = Project::all();
foreach ($projects as $project){
echo "project " . $project->id;
if(!ProjectServer::useProject($project->id)){
echo '未配置数据库' . PHP_EOL;
continue;
}
$test_domain = $project->deploy_build['test_domain'];
$domainInfo = new DomainInfo();
$info = $domainInfo->read(['id'=>$project->deploy_optimize['domain']]);
if($info !== false){
$test_domain = $info['domain'];
}
try {
$list = Count::where('date', '2023-12-11')->where('project_id', $project->id)->get();
foreach ($list as $v){
$arr = $this->inquiry([],$test_domain, $v['id']);
$v->inquiry_num = $arr['inquiry_num'];
$v->country = $arr['country'];
$v->save();
echo $v['date'] . ':' . $v->pv_num .':'. $v->ip_num . PHP_EOL;
}
}catch (\Exception $e){
echo '保存失败' . $e->getMessage() . PHP_EOL;
}
}
echo "finish";
}
public function sync($domain){
echo date('Y-m-d H:i:s') . "同步项目{$domain}" . PHP_EOL;
if(!Str::startsWith($domain,'www.')){
$domain = 'www.'.$domain;
}
$project_id = DomainInfo::where('domain', $domain)->value('project_id');
if(!$project_id){
echo date('Y-m-d H:i:s') . "项目{$domain}不存在" . PHP_EOL;
return true;
}
if(!ProjectServer::useProject($project_id)){
echo date('Y-m-d H:i:s') . "项目{$domain}数据库配置无效" . PHP_EOL;
return true;
public function inquiry($arr,$domain,$project_id){
$inquiry_list = (new FormGlobalsoApi())->getInquiryList($domain,'',1,100000000);
if($inquiry_list['status'] == 400){
$arr['inquiry_num'] = 0;
$countryArr = [];
}else{
$arr['inquiry_num'] = $inquiry_list['data']['total'];
//询盘国家统计
$countryData = $inquiry_list['data']['data'];
$countryArr = [];
foreach ($countryData as $v1){
if(isset($countryArr[$v1['country']])){
$countryArr[$v1['country']]++;
}else{
$countryArr[$v1['country']] = 1;
}
}
}
$visit = 0;
$visit_item = 0;
$list = DB::table('gl_customer_visit')->whereIn('domain', [$domain, str_replace('www.','',$domain)])->get();
foreach ($list as $v){
$v = (array) $v;
$items = DB::table('gl_customer_visit_item')->where('customer_visit_id', $v['id'])->get();
unset($v['id']);
$id = DB::connection('custom_mysql')->table('gl_customer_visit')->insertGetId($v);
$visit++;
$data = [];
foreach ($items as $item){
$item = (array) $item;
unset($item['id']);
$item['customer_visit_id'] = $id;
$data[] = $item;
$visit_item++;
//加上其他询盘
$arr['inquiry_num'] += InquiryFormData::getCount();
$countryData = InquiryFormData::getCountryCount();
foreach ($countryData as $v1){
if(isset($countryArr[$v1['country']])){
$countryArr[$v1['country']] += $v1['count'];
}else{
$countryArr[$v1['country']] = $v1['count'];
}
DB::connection('custom_mysql')->table('gl_customer_visit_item')->insert($data);
}
echo date('Y-m-d H:i:s') . "visit:{$visit};item:{$visit_item}" . PHP_EOL;exit;
}
arsort($countryArr);
$top20 = array_slice($countryArr, 0, 20, true);
$arr['country'] = json_encode($top20);
return $arr;
}
}
... ...
... ... @@ -9,7 +9,6 @@ use App\Models\RouteMap\RouteMap;
use App\Services\CosService;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
... ... @@ -77,8 +76,8 @@ class HtmlCollect extends Command
$collect_info->status = CollectTask::STATUS_ING;
$collect_info->save();
//获取站点正式和测试域名
$old_info = $this->getOldDomain($project_id, $collect_info->domain);
//获取站点原始域名信息
$old_info = getOldDomain($project_id, $collect_info->domain);
//采集html页面,下载资源到本地并替换
try {
... ... @@ -183,42 +182,6 @@ class HtmlCollect extends Command
return $task_id;
}
//获取站点老域名
protected function getOldDomain($project_id, $domain)
{
$key = 'project_collect_domain_' . $project_id;
$data = Cache::get($key);
if (!$data) {
$web_url_domain = $domain;
$home_url = $domain;
$url_web_config = 'https://' . $domain . '/wp-content/cache/user_config.text';
$data_config = curl_c($url_web_config);
if ($data_config) {
$web_url_arr = parse_url($data_config['web_url_domain'] ?? '');
if (isset($web_url_arr['host'])) {
$web_url_domain = $web_url_arr['host'];
}
$home_url_arr = parse_url($data_config['home_url'] ?? '');
if (isset($home_url_arr['host'])) {
$home_url = $home_url_arr['host'];
}
}
$data = [
'web_url_domain' => $web_url_domain,
'home_url' => $home_url,
];
Cache::add($key, $data, 3600);//缓存1小时
}
return $data;
}
//正则匹配html资源
protected function html_preg($html, $project_id, $domain, $web_url_domain, $home_url)
{
... ...
... ... @@ -9,7 +9,6 @@ use App\Models\RouteMap\RouteMap;
use App\Services\CosService;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
... ... @@ -78,7 +77,7 @@ class HtmlLanguageCollect extends Command
$collect_info->save();
//获取站点正式和测试域名
$old_info = $this->getOldDomain($project_id, $collect_info->domain);
$old_info = getOldDomain($project_id, $collect_info->domain);
//采集html页面,下载资源到本地并替换
try {
... ... @@ -183,42 +182,6 @@ class HtmlLanguageCollect extends Command
return $task_id;
}
//获取站点老域名
protected function getOldDomain($project_id, $domain)
{
$key = 'project_collect_lan_domain_' . $project_id;
$data = Cache::get($key);
if (!$data) {
$web_url_domain = $domain;
$home_url = $domain;
$url_web_config = 'https://' . $domain . '/wp-content/cache/user_config.text';
$data_config = curl_c($url_web_config);
if ($data_config) {
$web_url_arr = parse_url($data_config['web_url_domain'] ?? '');
if (isset($web_url_arr['host'])) {
$web_url_domain = $web_url_arr['host'];
}
$home_url_arr = parse_url($data_config['home_url'] ?? '');
if (isset($home_url_arr['host'])) {
$home_url = $home_url_arr['host'];
}
}
$data = [
'web_url_domain' => $web_url_domain,
'home_url' => $home_url,
];
Cache::add($key, $data, 3600);//缓存1小时
}
return $data;
}
//正则匹配html资源
protected function html_preg($html, $project_id, $domain, $web_url_domain, $home_url)
{
... ...
... ... @@ -73,6 +73,7 @@ class ProjectUpdate extends Command
$api_type = $task->api_type;
$api_url_arr = explode('?', $task->api_url);
$api_url = $api_url_arr[0];
$domain_arr = parse_url($api_url);
$page_size = 20;
... ... @@ -81,26 +82,12 @@ class ProjectUpdate extends Command
$task->status = UpdateLog::STATUS_ING;//同步中
$task->save();
$domain_arr = parse_url($api_url);
//获取网站配置
$link_type = 0;
$web_url_domain = $domain_arr['host'];
$home_url = $domain_arr['host'];
$url_web_config = 'https://' . $domain_arr['host'] . '/wp-content/cache/user_config.text';
$data_config = curl_c($url_web_config);
if ($data_config) {
$link_type = $data_config['link_type'] ?? 0;
$web_url_arr = parse_url($data_config['web_url_domain'] ?? '');
if (isset($web_url_arr['host'])) {
$web_url_domain = $web_url_arr['host'];
}
//获取站点原始域名信息
$old_info = getOldDomain($project_id, $domain_arr['host']);
$link_type = $old_info['link_type'];
$web_url_domain = $old_info['web_url_domain'];
$home_url = $old_info['home_url'];
$home_url_arr = parse_url($data_config['home_url'] ?? '');
if (isset($home_url_arr['host'])) {
$home_url = $home_url_arr['host'];
}
}
//获取所有语种
$language_list = [];
$url_language = 'https://' . $domain_arr['host'] . '/wp-content/plugins/proofreading/json/user_language.json';
... ... @@ -108,6 +95,7 @@ class ProjectUpdate extends Command
if ($data_language) {
$language_list = array_column($data_language, 'short');
}
//获取所有页面
$page_list = [];
$url_page = 'https://' . $domain_arr['host'] . '/wp-content/cache/pages_list.json';
... ... @@ -480,16 +468,19 @@ class ProjectUpdate extends Command
//获取地址路由
protected function get_url_route($url)
{
$arr = parse_url(urldecode($url));
if (strpos($url, '%ec') !== false) {
$url = str_replace('%ec', 'v6SpecialStr', $url);
$url = urldecode($url);
$url = str_replace('v6SpecialStr', '%ec', $url);
} else {
$url = urldecode($url);
}
$arr = parse_url($url);
if (empty($arr['path'])) {
return '';
}
$path = $arr['path'];
if (strpos($path, '.') !== false) {
$path = substr($path, 0, strpos($path, '.'));
}
$path_arr = explode('/', $path);
return end($path_arr) ? end($path_arr) : $path_arr[count($path_arr) - 2];
... ... @@ -623,8 +614,11 @@ class ProjectUpdate extends Command
$url_complete = ($scheme ?: 'https') . '://' . ($host ?: $domain) . $path;
if ((empty($host) || $host == $web_url_domain || $host == $home_url) && $path) {
if (
(empty($scheme) || $scheme == 'https' || $scheme == 'http')
&& (empty($host) || (strpos($web_url_domain, $host) !== false) || (strpos($home_url, $host) !== false))
&& $path
) {
$source = CollectSource::where('project_id', $project_id)->where('origin', $url)->first();
if (!$source) {
$new_url = CosService::uploadRemote($project_id, 'image_product', $url_complete);
... ...
... ... @@ -68,6 +68,7 @@ class UpdateRoute extends Command
*/
public function getProductKeyword(){
$keywordModel = new Keyword();
<<<<<<< HEAD
$lists = $keywordModel->list(['route'=>'']);
if(!empty($lists)){
foreach ($lists as $v){
... ... @@ -75,9 +76,32 @@ class UpdateRoute extends Command
$route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $v['id'], $this->user['project_id']);
$this->curlDelRoute(['new_route'=>$route]);
$this->model->edit(['route'=>$route],['id'=>$v['id']]);
=======
$lists = $keywordModel->list(['route'=>null]);
if(!empty($lists)){
foreach ($lists as $v){
echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL;
$route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT_KEYWORD, $v['id'], 75);
$this->curlDelRoute(['new_route'=>$route]);
$keywordModel->edit(['route'=>$route],['id'=>$v['id']]);
>>>>>>> 8178402b9bc03df4ea9fefb41f4f06aaeb5f6cb5
echo date('Y-m-d H:i:s') . 'end :'.$route . PHP_EOL;
}
}
}
/**
* @remark :删除路由通知C端
* @name :curlDelRoute
* @author :lyh
* @method :post
* @time :2023/11/30 14:43
*/
public function curlDelRoute($data){
$data['project_id'] = 75;
$str = http_build_query($data);
$url = 'https://www.zrutong.com/api/delHtml/?'.$str;
curlGet($url);
return true;
}
}
... ...
... ... @@ -9,6 +9,7 @@ use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Carbon;
use App\Models\File\File;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Redis;
define('HTTP_OPENAI_URL', 'http://openai.waimaoq.com/');
... ... @@ -654,6 +655,7 @@ function redis_add($key,$val,$ttl=3600){
* 判断远程地址是否需要下载
* @param $url
* @author Akun
* @return bool
* @date 2023/12/08 14:17
*/
function check_remote_url_down($url){
... ... @@ -689,3 +691,50 @@ function check_remote_url_down($url){
return true;
}
/**
* 获取升级项目原始域名
* @param $project_id
* @param $domain
* @return array
* @author Akun
* @date 2023/12/12 10:52
*/
function getOldDomain($project_id, $domain)
{
$key = 'project_collect_domain_' . $project_id;
$data = Cache::get($key);
if (!$data) {
$link_type = 0;
$web_url_domain = $domain;
$home_url = $domain;
$url_web_config = 'https://' . $domain . '/wp-content/cache/user_config.text';
$data_config = curl_c($url_web_config);
if ($data_config) {
$link_type = $data_config['link_type'] ?? 0;
$web_url_arr = parse_url($data_config['web_url_domain'] ?? '');
if (isset($web_url_arr['host'])) {
$web_url_domain = $web_url_arr['host'];
}
$home_url_arr = parse_url($data_config['home_url'] ?? '');
if (isset($home_url_arr['host'])) {
$home_url = $home_url_arr['host'];
}
}
$data = [
'link_type' => $link_type,
'web_url_domain' => $web_url_domain,
'home_url' => $home_url,
];
Cache::add($key, $data, 3600);//缓存1小时
}
return $data;
}
... ...
... ... @@ -65,7 +65,7 @@ class ProjectLogic extends BaseLogic
public function getProjectInfo($id){
$info = $this->model->with('payment')->with('deploy_build')->with('deploy_optimize')->with('online_check')
->with('project_after')->where(['id'=>$id])->first()->toArray();
$info['online_check']['name'] = (new Manage())->getName(!empty($info['online_check']['created_manage_id']) ?? '');
$info['online_check']['name'] = (new Manage())->getName($info['online_check']['created_manage_id']);
$info['deploy_optimize']['minor_keywords'] = !empty($info['deploy_optimize']['minor_keywords']) ? json_decode($info['deploy_optimize']['minor_keywords']) : [];
$info['init_domain'] = $this->getInitDomain($info['serve_id'])['domain'];
if($info['extend_type'] != 0){
... ...
... ... @@ -138,12 +138,17 @@ class CountLogic extends BaseLogic
$customerVisitModel = new Visit();
$data = $customerVisitModel->select('referrer_url', DB::raw('COUNT(*) as count'))
->groupBy('referrer_url')->where(['domain'=>$this->user['domain']])
->orderByDesc('count')->limit(8)->get()->toArray();
->orderByDesc('count')->limit(9)->get()->toArray();
$total = $customerVisitModel->count();
if(!empty($data)){
foreach ($data as $k=>$v){
if(empty($v['referrer_url'])){
unset($data[$k]);
continue;
}
$data[$k]['proportion'] = ($v['count']/$total) * 100;
}
$data = array_values($data);
}
return $this->success($data);
}
... ...
... ... @@ -6,7 +6,7 @@ use App\Helper\FormGlobalsoApi;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\HomeCount\Count;
use App\Models\HomeCount\MonthCount;
use App\Models\Inquiry\InquiryOther;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Project\DeployOptimize;
use App\Services\ProjectServer;
use Carbon\Carbon;
... ... @@ -86,11 +86,9 @@ class MonthCountLogic extends BaseLogic
}
}
//加上其他询盘
$arr['total'] += InquiryOther::count();
$arr['month_total'] += InquiryOther::whereBetween('submit_time',[$startTime, $endTime])->count();
$countryData = InquiryOther::whereBetween('submit_time',[$startTime, $endTime])
->select("country",DB::raw('COUNT(*) as count'))
->groupBy('country')->get()->toArray();
$arr['total'] += InquiryFormData::getCount();
$arr['month_total'] += InquiryFormData::getCount([$startTime, $endTime]);
$countryData = InquiryFormData::getCountryCount([$startTime, $endTime]);
foreach ($countryData as $v1){
if(isset($countryArr[$v1['country']])){
$countryArr[$v1['country']] += $v1['count'];
... ...
... ... @@ -95,6 +95,11 @@ class InquiryLogic extends BaseLogic
->select($fields)->orderBy('id', 'desc')->paginate($page_size, ['*'], 'page', $page);
$data = $lists->toArray();
foreach ($data['list'] as &$v){
foreach ($v['data'] as &$field){
if(is_array($field) && !empty($field['path'])){
$field['path'] = getImageUrl($field['path']);
}
}
$v = array_merge($v, $v['data']);
}
return $this->success($data);
... ...
... ... @@ -4,6 +4,7 @@ namespace App\Models\Inquiry;
use App\Models\Base;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
/**
* Class InquiryFormData
... ... @@ -26,4 +27,32 @@ class InquiryFormData extends Base
{
return json_decode($value, true);
}
/**
* 非默认表单的数量统计
* @author zbj
* @date 2023/12/12
*/
public static function getCount($submit_at = []){
return self::leftjoin('gl_inquiry_form', 'gl_inquiry_form.id', '=', 'gl_inquiry_form_data.form_id')
->where('gl_inquiry_form.is_default', 0)
->when($submit_at, function ($query, $submit_at) {
$query->whereBetween('submit_at',[$submit_at[0], $submit_at[1]]);
})
->count();
}
/**
* 非默认表单的国家统计
* @author zbj
* @date 2023/12/12
*/
public static function getCountryCount($submit_at = []){
return self::leftjoin('gl_inquiry_form', 'gl_inquiry_form.id', '=', 'gl_inquiry_form_data.form_id')
->where('gl_inquiry_form.is_default', 0)
->when($submit_at, function ($query, $submit_at) {
$query->whereBetween('submit_at',[$submit_at[0], $submit_at[1]]);
})
->select("country",DB::raw('COUNT(*) as count'))->groupBy('country')->get()->toArray();
}
}
... ...
... ... @@ -38,9 +38,11 @@ class Manage extends Base
*/
public function getName($id){
$name = '';
$info = $this->read(['id'=>$id],['id','name']);
if($info !== false){
$name = $info['name'];
if(!empty($id)){
$info = $this->read(['id'=>$id],['id','name']);
if($info !== false){
$name = $info['name'];
}
}
return $name;
}
... ...