作者 lyh

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

... ... @@ -252,13 +252,16 @@ class SyncInquiryRelay extends Command
//关键词查询项目着陆页:先精准匹配,没有数据再全文索引匹配
$inquiryForwardLogic = new InquiryForwardLogic();
$forward_list = $inquiryForwardLogic->searchKeywords($ai_keyword, 2, 3);
if (empty($forward_list)) {
$forward_list = $inquiryForwardLogic->searchKeywords($ai_keyword, 1, 3);
if (empty($forward_list)) {
$this->output('询盘ID:' . $form_id . ',根据关键词[' . $ai_keyword . ']查询项目着陆页为空');
return true;
if (count($forward_list) < 3) {
$forward_list_against = $inquiryForwardLogic->searchKeywords($ai_keyword, 1, 3 - count($forward_list));
foreach ($forward_list_against as $against) {
array_push($forward_list, $against);
}
}
if (empty($forward_list)) {
$this->output('询盘ID:' . $form_id . ',根据关键词[' . $ai_keyword . ']查询项目着陆页为空');
return true;
}
//重写询盘内容
$ai_message_list = [];
... ...
... ... @@ -54,7 +54,7 @@ class ExternalLinkMake extends Command
continue;
}
$yesterday = RankDataLog::where(['project_id' => $project->id, 'date' => date('Y-m-d', '-1 day')])->first();
$yesterday = RankDataLog::where(['project_id' => $project->id, 'date' => date('Y-m-d', strtotime('-1 day'))])->first();
if (FALSE == empty($yesterday) && $yesterday->is_compliance == 1){
$this->output('项目昨日达标: ' . $project->id . ', 跳过');
continue;
... ...
... ... @@ -3,13 +3,19 @@
namespace App\Console\Commands\Test;
use App\Helper\Arr;
use App\Helper\Common;
use App\Helper\Gpt;
use App\Http\Logic\Aside\Optimize\InquiryForwardLogic;
use App\Http\Logic\Bside\Product\CategoryLogic;
use App\Models\Ai\AiCommand;
use App\Models\Com\Notify;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\Devops\ServerConfig;
use App\Models\Devops\ServersIp;
use App\Models\Domain\DomainCreateTask;
use App\Models\Domain\DomainInfo;
use App\Models\Inquiry\InquiryInfo;
use App\Models\Inquiry\InquiryRelayAi;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
... ... @@ -43,7 +49,81 @@ class Temp extends Command
public function handle()
{
$this->inquiryAiCheck(17259, 27468);
}
/**
* AI预处理询盘
* @param $start_id
* @param $end_id
* @return bool
* @author Akun
* @date 2025/10/10 15:45
*/
public function inquiryAiCheck($start_id, $end_id)
{
//AI匹配询盘关键词
$ai_info = AiCommand::select(['ai'])->where('key', 'inquiry_keyword_extract')->first();
if (!$ai_info) {
$this->output('AI重写指令[inquiry_keyword_extract]未配置');
return true;
}
InquiryInfo::select(['id', 'message', 'url_title', 'url_keyword'])->whereBetween('id', [$start_id, $end_id])->where('status', InquiryInfo::STATUS_INIT)->chunk(100, function ($inquiries) use ($ai_info) {
foreach ($inquiries as $inquiry) {
$inquiry_ai_info = InquiryRelayAi::where('form_id', $inquiry['id'])->first();
if (!$inquiry_ai_info) {
$ai_command = $ai_info['ai'];
$ai_command = str_replace('{title}', $inquiry['url_title'], $ai_command);
$ai_command = str_replace('{keywords}', $inquiry['url_keyword'], $ai_command);
$ai_command = str_replace('{content}', $inquiry['message'], $ai_command);
$ai_keyword = Common::deal_str(Gpt::instance()->openai_chat_qqs($ai_command));
if (!$ai_keyword) {
$this->output('询盘ID:' . $inquiry['id'] . ',AI提取询盘关键词失败');
continue;
}
//关键词查询项目着陆页:先精准匹配,没有数据再全文索引匹配
$inquiryForwardLogic = new InquiryForwardLogic();
$forward_list = $inquiryForwardLogic->searchKeywords($ai_keyword, 2, 3);
if (count($forward_list) < 3) {
$forward_list_against = $inquiryForwardLogic->searchKeywords($ai_keyword, 1, 3 - count($forward_list));
foreach ($forward_list_against as $against) {
array_push($forward_list, $against);
}
}
if (empty($forward_list)) {
$this->output('询盘ID:' . $inquiry['id'] . ',根据关键词[' . $ai_keyword . ']查询项目着陆页为空');
continue;
}
//重写询盘内容
$ai_message_list = [];
for ($i = 0; $i < count($forward_list); $i++) {
$message_re = $inquiryForwardLogic->aiRewrite($inquiry['message'], $inquiry['url_title'], $inquiry['url_keyword']);
if (isset($message_re['ai_message']) && $message_re['ai_message']) {
$ai_message_list[] = $message_re['ai_message'];
}
}
if (empty($ai_message_list)) {
$this->output('询盘ID:' . $inquiry['id'] . ',AI重写询盘内容失败');
continue;
}
$inquiry_ai_info = new InquiryRelayAi();
$inquiry_ai_info->form_id = $inquiry['id'];
$inquiry_ai_info->keywords = $ai_keyword;
$inquiry_ai_info->forward_url = Arr::a2s($forward_list);
$inquiry_ai_info->message_ai = Arr::a2s($ai_message_list);
$inquiry_ai_info->save();
$this->output('询盘ID:' . $inquiry['id'] . ',success');
}
}
});
return true;
}
/**
... ...
... ... @@ -14,6 +14,7 @@ use App\Models\Inquiry\InquiryProjectRoute;
use App\Models\Inquiry\InquiryRelayAi;
use App\Models\Inquiry\InquiryRelayDetail;
use App\Models\Inquiry\InquiryRelayDetailLog;
use App\Models\Manage\Manage;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
... ... @@ -139,16 +140,28 @@ class InquiryForwardLogic extends BaseLogic
$this->fail('当前询盘状态无法转发');
}
if (is_array($this->param['message'])) {
$message_list = $this->param['message'];
} else {
$message_list = [$this->param['message']];
}
$message_count = count($message_list);
if ($message_count == 0) {
$this->fail('内容不能为空');
}
if (is_array($this->param['forward_url'])) {
$forward_url = $this->param['forward_url'];
} else {
$forward_url = explode(',', $this->param['forward_url']);
}
DB::beginTransaction();
try {
$num = 0;
$now = date('Y-m-d H:i:s');
if (is_array($this->param['forward_url'])) {
$forward_url = $this->param['forward_url'];
} else {
$forward_url = explode(',', $this->param['forward_url']);
}
foreach ($forward_url as $url) {
foreach ($forward_url as $key => $url) {
$url = trim($url);
$domain_array = parse_url($url);
$website = $domain_array['host'] ?? '';
... ... @@ -217,7 +230,10 @@ class InquiryForwardLogic extends BaseLogic
$start_at = $now;
}
InquiryRelayDetail::createInquiry($info['id'], $website, $country, $this->param['ip'], $this->param['name'], $this->param['email'], $this->param['phone'] ?? '', $this->param['message'], $is_v6, json_encode([$url]), $start_at);
//获取询盘内容
$message = $message_list[$key % $message_count] ?? $message_list[0];
InquiryRelayDetail::createInquiry($info['id'], $website, $country, $this->param['ip'], $this->param['name'], $this->param['email'], $this->param['phone'] ?? '', $message, $is_v6, json_encode([$url]), $start_at);
$num += 1;
}
... ... @@ -315,7 +331,8 @@ class InquiryForwardLogic extends BaseLogic
'route' => $vp->domain . $route,
'recent_inquiry' => $vp->recent_inquiry,
'remark' => $vp->remark ?: '',
'version' => $vp->version
'version' => $vp->version,
'type' => $type
];
}
}
... ... @@ -421,6 +438,23 @@ class InquiryForwardLogic extends BaseLogic
{
$model = new InquiryRelayDetail();
$lists = $model->listsWith($map, $page, $row, $order, $filed, 'desc', ['detailLog']);
//获取操作人
$inquiry_info_model = new InquiryInfo();
$manage_model = new Manage();
foreach ($lists['list'] as $k => $v) {
$operator_name = '';
$inquiry_info = $inquiry_info_model->read(['id' => $v['form_id']], ['operator_id']);
if ($inquiry_info) {
$manage_info = $manage_model->read(['id' => $inquiry_info['operator_id']], ['name']);
if ($manage_info) {
$operator_name = $manage_info['name'];
}
}
$lists['list'][$k]['operator_name'] = $operator_name;
}
return $this->success($lists);
}
... ... @@ -467,7 +501,8 @@ class InquiryForwardLogic extends BaseLogic
$data[$s_date] = [
'total' => 0,
'invalid' => 0,
'init' => 0
'init' => 0,
'finish' => 0
];
$s_date = date('Y-m-d', strtotime($s_date . ' + 1 day'));
}
... ... @@ -480,10 +515,10 @@ class InquiryForwardLogic extends BaseLogic
if ($value['status'] == InquiryInfo::STATUS_INVALID) {
$data[$inquiry_date]['invalid'] += 1;
}
if ($value['status'] == InquiryInfo::STATUS_INIT) {
} elseif ($value['status'] == InquiryInfo::STATUS_INIT) {
$data[$inquiry_date]['init'] += 1;
} else {
$data[$inquiry_date]['finish'] += 1;
}
}
... ...