作者 刘锟

Merge remote-tracking branch 'origin/master' into akun

... ... @@ -996,14 +996,16 @@ class RelayInquiry extends Command
//按概率
$res = $this->get_rand([$task->second_push_rate, 100 - $task->second_push_rate]);
if($res == 1){
$this->output('非广告投放日第一封询盘 概率' . (100 - $task->second_push_rate) . '%延迟推送');
//随机分配到未投放广告日期
$now = Carbon::now();
// 随机开始时间(本周四或现在)
$startTime = max($now->timestamp, $now->startOfWeek(4)->timestamp);
$random = mt_rand($startTime, $now->endOfWeek()->timestamp);
return $random - $now->timestamp;
$delay = $random - time();
$this->output('非广告投放日第一封询盘 概率' . (100 - $task->second_push_rate) . '%延迟推送' . $delay);
return $delay;
}
}
}
... ...
... ... @@ -127,4 +127,21 @@ class GeoLinkController extends BaseController
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @remark :执行da值返回数据
* @name :daResultData
* @author :lyh
* @method :post
* @time :2025/10/9 09:39
*/
public function daResultData(){
$this->request->validate([
'id'=>'required',
],[
'id.required' => 'ID不能为空',
]);
$data = $this->logic->daResultData();
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -109,6 +109,7 @@ class ProjectController extends BaseController
'gl_project_deploy_build.dept_id AS dept_id',
'gl_project_deploy_build.keyword_num AS key',
'gl_project_deploy_build.service_duration AS day',
'gl_project_deploy_build.seo_service_duration AS seo_day',
'gl_project_deploy_build.is_comment AS is_comment',
'gl_project_deploy_build.leader_mid AS leader_mid',
'gl_project_deploy_build.manager_mid AS manager_mid',
... ... @@ -845,6 +846,9 @@ class ProjectController extends BaseController
$domain_array = parse_url($domain_pro ? $domain_pro->domain : '');
$domain = $domain_array['host'] ?? $domain_array['path'];
}
$item['channel']['channel'] = Channel::where('id', $item['channel']['channel_id'])->value('title');
$item['channel']['zone'] = Zone::where('id', $item['channel']['zone_id'])->value('title');
$item['channel']['user'] = User::where('id', $item['channel']['user_id'])->value('name');
$manageHr = new ManageHr();
$param = [
"id" => $item['id'],
... ...
... ... @@ -79,4 +79,21 @@ class LinkDataController extends BaseController
$result = $linkData->del(['id'=>['in',$this->param['id']]]);
$this->response('success',Code::SUCCESS,$result);
}
/**
* @remark :执行da值返回数据
* @name :daResultData
* @author :lyh
* @method :post
* @time :2025/10/9 09:39
*/
public function daResultData(LinkDataLogic $logic){
$this->request->validate([
'id'=>'required',
],[
'id.required' => 'ID不能为空',
]);
$data = $logic->daResultData();
$this->response('success',Code::SUCCESS,$data);
}
}
... ...
... ... @@ -11,6 +11,7 @@ namespace App\Http\Logic\Aside\Geo;
use App\Http\Logic\Aside\BaseLogic;
use App\Models\Geo\GeoLink;
use App\Services\Geo\GeoService;
/**
* @remark :geo权威新闻(链接数据)
... ... @@ -101,4 +102,64 @@ class GeoLinkLogic extends BaseLogic
}
return $this->success();
}
/**
* @remark :返回数据data
* @name :daResultData
* @author :lyh
* @method :post
* @time :2025/10/9 09:43
*/
public function daResultData()
{
$info = $this->model->read(['id'=>$this->param['id']]);
if($info === false){
$this->fail('当前数据不存在或者已被删除');
}
$geoService = new GeoService();
if(!empty($info['time'])){
$date1 = new DateTime($info['time']);
$date2 = new DateTime(date('Y-m-d'));
$diff = $date1->diff($date2);
if($diff >= 60){
$host = $this->getDomainWithWWW($info['url']);
$result = $geoService->daResult($host);
}else{
return $this->success($info);
}
}else{
$host = $this->getDomainWithWWW($info['url']);
$result = $geoService->daResult($host);
}
if(!isset($result['data']) || empty($result['data'])){
$this->model->edit(['time'=>date('Y-m-d')], ['id'=>$info['id']]);
return $this->success($info);
}
$info['da'] = (int)$result['data']['mozDA'];//获取数据中的da值
$this->model->edit(['time'=>date('Y-m-d'),'da'=>$info['da']], ['id'=>$info['id']]);
return $this->success($result);
}
/**
* @remark :获取域名
* @name :getDomainWithWWW
* @author :lyh
* @method :post
* @time :2025/10/9 10:28
*/
public function getDomainWithWWW($url) {
// 获取 host
$host = parse_url($url, PHP_URL_HOST);
// 去掉端口号等情况
$host = preg_replace('/:\d+$/', '', $host);
// 分割域名
$parts = explode('.', $host);
// 判断是几段
$count = count($parts);
// 如果只有两段,比如 fox8.com、theamericawatch.com,就拼接 www.
if ($count === 2) {
return 'www.' . $host;
}
return $host;
}
}
... ...
... ... @@ -11,6 +11,7 @@ namespace App\Http\Logic\Bside\SeoSetting;
use App\Http\Logic\Bside\BaseLogic;
use App\Models\SeoSetting\LinkData;
use App\Services\Geo\GeoService;
/**
* @remark :获取外链数据
... ... @@ -50,4 +51,64 @@ class LinkDataLogic extends BaseLogic
}
return $this->success();
}
/**
* @remark :返回数据data
* @name :daResultData
* @author :lyh
* @method :post
* @time :2025/10/9 09:43
*/
public function daResultData()
{
$info = $this->model->read(['id'=>$this->param['id']]);
if($info === false){
$this->fail('当前数据不存在或者已被删除');
}
$geoService = new GeoService();
if(!empty($info['time'])){
$date1 = new DateTime($info['time']);
$date2 = new DateTime(date('Y-m-d'));
$diff = $date1->diff($date2);
if($diff >= 60){
$host = $this->getDomainWithWWW($info['da_values']);
$result = $geoService->daResult($host);
}else{
return $this->success($info);
}
}else{
$host = $this->getDomainWithWWW($info['da_values']);
$result = $geoService->daResult($host);
}
if(!isset($result['data']) || empty($result['data'])){
$this->model->edit(['time'=>date('Y-m-d')], ['id'=>$info['id']]);
return $this->success($info);
}
$info['da_values'] = (int)$result['data']['mozDA'];//获取数据中的da值
$this->model->edit(['time'=>date('Y-m-d'),'da_values'=>$info['da_values']], ['id'=>$info['id']]);
return $this->success($result);
}
/**
* @remark :获取域名
* @name :getDomainWithWWW
* @author :lyh
* @method :post
* @time :2025/10/9 10:28
*/
public function getDomainWithWWW($url) {
// 获取 host
$host = parse_url($url, PHP_URL_HOST);
// 去掉端口号等情况
$host = preg_replace('/:\d+$/', '', $host);
// 分割域名
$parts = explode('.', $host);
// 判断是几段
$count = count($parts);
// 如果只有两段,比如 fox8.com、theamericawatch.com,就拼接 www.
if ($count === 2) {
return 'www.' . $host;
}
return $host;
}
}
... ...
... ... @@ -137,4 +137,18 @@ class GeoService
$result = Http::post($url, $param);
return $result->json();
}
/**
* @remark :根据域名获取da值
* @name :daResult
* @author :lyh
* @method :post
* @time :2025/10/9 09:33
*/
public function daResult($domain)
{
$url = 'https://www.cmer.site/api/get_domain_da?domain='.$domain;
$result = http_get($url);
return $result;
}
}
... ...
... ... @@ -450,6 +450,21 @@ class SyncSubmitTaskService
if(empty($data['referer']) || empty($data['user_agent']) || empty($data['data'])){
throw new InquiryFilterException( '数据异常:' . $data['country']);
}
//关杰 全局过滤 满足 name、message 8-16 纯字母不含空格 ip 荷兰 mobile 10位纯数字 过滤
if(
strlen($data['data']['name']) <= 16 && strlen($data['data']['name']) >= 8 &&
strlen($data['data']['message']) <= 16 && strlen($data['data']['message']) >= 8 &&
preg_match('/^[a-zA-Z]+$/', $data['data']['name']) &&
preg_match('/^[a-zA-Z]+$/', $data['data']['message']) &&
preg_match('/^\d+$/', $data['data']['phone']) &&
strlen($data['data']['phone']) == 10 &&
in_array($data['country'], ['荷兰', '俄罗斯'])
){
throw new InquiryFilterException( '全局过滤');
}
$config = InquiryFilterConfig::getCacheInfoByProjectId($project_id);
//没配置 则默认开启且使用全局
if(!$config){
... ...
... ... @@ -583,6 +583,7 @@ Route::middleware(['aloginauth'])->group(function () {
Route::any('/info', [Aside\Geo\GeoLinkController::class, 'info'])->name('admin.geo_link_info');
Route::any('/del', [Aside\Geo\GeoLinkController::class, 'del'])->name('admin.geo_link_del');
Route::any('/downloadGeoLink', [Aside\Geo\GeoLinkController::class, 'downloadGeoLink'])->name('admin.geo_link_downloadGeoLink');
Route::any('/daResultData', [Aside\Geo\GeoLinkController::class, 'daResultData'])->name('admin.geo_link_daResultData');
});
});
// 任务相关
... ...
... ... @@ -715,6 +715,7 @@ Route::middleware(['bloginauth'])->group(function () {
Route::any('/batchSave', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'batchSave'])->name('link_data_batchSave');
Route::any('/info', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'info'])->name('link_data_info');
Route::any('/del', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'del'])->name('link_data_del');
Route::any('/daResultData', [\App\Http\Controllers\Bside\SeoSetting\LinkDataController::class, 'daResultData'])->name('link_data_daResultData');
});
//seo白帽 域名设置
... ...