作者 Your Name
... ... @@ -64,6 +64,6 @@ class TemplateLog extends Command
$startDate = date("Y-m-01 00:00:00");
$endDate = date("Y-m-t 23:59:59");
$templateLogModel = new BTemplateLog();
return $templateLogModel->del(['created_at'=>['not between'=>[$startDate,$endDate]]]);
return $templateLogModel->del(['created_at'=>['not between',[$startDate,$endDate]]]);
}
}
... ...
... ... @@ -2,12 +2,12 @@
namespace App\Console\Commands\Domain;
use App\Models\Devops\ServerConfig;
use App\Models\Devops\ServersIp;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
use App\Services\BatchExportService;
use Illuminate\Console\Command;
use Symfony\Component\Process\Process;
class ProjectDomainCheck extends Command
{
... ... @@ -16,7 +16,7 @@ class ProjectDomainCheck extends Command
public function handle()
{
$map = ['项目id', '名称', '域名', '项目所选IP'];
$map = ['项目id', '名称', '域名', '项目所选IP', '项目实际IP'];
//获取所有恢复项目
$domain_model = new DomainInfo();
... ... @@ -28,16 +28,26 @@ class ProjectDomainCheck extends Command
foreach ($domain_list as $value) {
$project_info = $project_model->read(['id' => $value->project_id], ['id', 'serve_id', 'company']);
$server_ip_info = $server_ip_model->read(['id' => $project_info['serve_id']], ['ip', 'domain']);
$server_ip_info = $server_ip_model->read(['id' => $project_info['serve_id']], ['servers_id', 'ip', 'domain']);
if (check_domain_record($value->domain, $server_ip_info)) {
if ($server_ip_info['servers_id'] == ServerConfig::SELF_SITE_ID) {
//过滤自建站项目
continue;
}
//获取域名解析
$records = dns_get_record($value->domain, DNS_A);
$record_ip = $records[0]['ip'] ?? '';
$record_domain = $records[0]['host'] ?? '';
if ($record_domain == $server_ip_info['domain'] || $record_ip == $server_ip_info['ip']) {
continue;
} else {
$data[] = [
$value->project_id,
$project_info['company'],
$value->domain,
$server_ip_info['ip']
$server_ip_info['ip'],
$record_ip,
];
}
}
... ...
... ... @@ -13,6 +13,7 @@ use App\Models\Inquiry\ReInquiryDetailLog;
use App\Models\Inquiry\ReInquiryForm;
use App\Models\Inquiry\ReInquiryTask;
use App\Models\Inquiry\ReInquiryText;
use App\Models\Project\InquiryFilterConfig;
use App\Models\Project\Project;
use App\Models\WebSetting\WebLanguage;
use Illuminate\Console\Command;
... ... @@ -177,10 +178,10 @@ class RelayInquiry extends Command
$this->output('开始处理本轮询盘!');
foreach ($inquiry as $key=>$val) {
$this->output('询盘ID:' . $val->id);
//询盘时间超过90分钟 就不处理了
if(time() - strtotime($val->inquiry_date) > 90 * 60){
//询盘时间超过2小时 就不处理了
if(time() - strtotime($val->inquiry_date) > 7200){
$val->status = ReInquiryForm::STATUS_FORGO;
$val->remark = '超时90分钟未处理!';
$val->remark = '超时2小时未处理!';
$val->save();
continue;
}
... ... @@ -200,6 +201,14 @@ class RelayInquiry extends Command
$val->save();
continue;
}
//是否要过滤
$filter_res = $this->filter($val);
if($filter_res !== true){
$val->status = ReInquiryForm::STATUS_FORGO;
$val->remark = $filter_res;
$val->save();
continue;
}
try {
$this->relayDetail($ad_task, $val);
... ... @@ -213,6 +222,46 @@ class RelayInquiry extends Command
return true;
}
public function filter($data)
{
//通用过滤规则
$config = InquiryFilterConfig::getCacheInfoByProjectId(Project::DEMO_PROJECT_ID);
//过滤内容
if(!empty($data['message']) && !empty($config['filter_contents'])) {
foreach ($config['filter_contents'] as $filter_content) {
if (Str::contains(strtolower($data['message']), strtolower($filter_content))) {
return '过滤内容:' . $filter_content;
}
}
}
//过滤邮箱
if(!empty($data['email']) && !empty($config['filter_emails'])){
foreach ($config['filter_emails'] as $filter_email){
if(Str::contains(strtolower($data['email']), strtolower($filter_email))){
return '过滤邮箱:' . $filter_email;
}
}
}
//过滤电话
if(!empty($data['phone']) && !empty($config['filter_mobiles'])){
foreach ($config['filter_mobiles'] as $filter_mobile){
if(Str::contains(strtolower($data['phone']), strtolower($filter_mobile))){
return '过滤电话:' . $filter_mobile;
}
}
}
//过滤姓名
if(!empty($data['full_name'] && !empty($config['filter_names']))){
foreach ($config['filter_names'] as $filter_name){
if(Str::contains(strtolower($data['full_name']), strtolower($filter_name))){
return '过滤姓名:' . $filter_name;
}
}
}
return true;
}
/**
* 创建转发详情
* TODO 通过任务生成转发对象, 更具转发对象获取对应数据, 写入着陆记录
... ...
... ... @@ -80,6 +80,7 @@ class postInquiry extends Command
}
public function visit(ReInquiryDetail $detail, ReInquiryDetailLog $log){
$website = 'https://' . $detail['re_website'] . '/';
if($detail['is_v6']) {
$data = [
'ip' => $detail['ip'],
... ... @@ -88,30 +89,27 @@ class postInquiry extends Command
'referrer_url' => $detail['referrer'],
'user_agent' => $detail['user_agent'],
];
$res = Http::withoutVerifying()->post($detail['re_website'] . 'api/traffic_visit/', $data)->json();
$res = Http::withoutVerifying()->post($website . 'api/traffic_visit/', $data)->json();
if (empty($res['status']) || $res['status'] != 200) {
$log->status = ReInquiryDetailLog::STATUS_FAIL;
$log->remark = $res['message'] ?? '';
$log->save();
Log::channel('inquiry_relay')->error('inquiry_relay visit error', [$res, $detail['re_website'] . 'api/traffic_visit/',$data]);
Log::channel('inquiry_relay')->error('inquiry_relay visit error', [$res, $website . 'api/traffic_visit/',$data]);
return false;
}
}else{
//v4 v5分离项目 往测试链接推
$website = $detail['re_website'];
$client = new \GuzzleHttp\Client();
$site_array = $client->request('GET', "https://www.quanqiusou.cn/extend_api/saas/split.php", [
'proxy' => env('CURL_PROXY'), // 代理服务器地址和端口号
])->getBody()->getContents();
$site_array = json_decode($site_array, true);
$mail_urls = array_column($site_array, 'main_url');
$key = array_search('https://' . $detail['re_website'] . '/', $mail_urls);
$key = array_search($website, $mail_urls);
if ($key !== false) {
// 分离项目 推送到测试链接
$website = $site_array[$key]['test_url'];
}else{
$website = 'https://' . $website . '/';
}
$data = [
... ... @@ -138,6 +136,7 @@ class postInquiry extends Command
}
public function inquiry(ReInquiryDetail $detail, ReInquiryDetailLog $log){
$website = 'https://' . $detail['re_website'] . '/';
// v6
if($detail['is_v6']) {
$data = [
... ... @@ -150,16 +149,16 @@ class postInquiry extends Command
if($detail->email){
$data['email'] = $detail->email;
}else{
$data['__amp_source_origin'] = trim($detail['re_website'], '/');
$data['__amp_source_origin'] = trim($website, '/');
}
$res = Http::withoutVerifying()->withHeaders(['User-Agent' => $detail['user_agent']])->post($detail['re_website'] . 'api/inquiryQd/', $data)->json();
$res = Http::withoutVerifying()->withHeaders(['User-Agent' => $detail['user_agent']])->post($website . 'api/inquiryQd/', $data)->json();
if(empty($res['code']) || $res['code'] != 200){
$log->status = ReInquiryDetailLog::STATUS_FAIL;
$log->remark = $res['message'] ?? '';
$log->save();
Log::channel('inquiry_relay')->error('inquiry_relay v6 inquiry error', [$res, $detail['website'] . 'api/inquiryQd/', $data]);
Log::channel('inquiry_relay')->error('inquiry_relay v6 inquiry error', [$res, $website . 'api/inquiryQd/', $data]);
return false;
}
}else{
... ...