cms-manage/app/controller/backend/SeoCheckController.php

243 lines
8.7 KiB
PHP

<?php
declare (strict_types=1);
namespace app\controller\backend;
use think\facade\Db;
class SeoCheckController extends BaseController
{
public function index()
{
$limit = input('param.limit');
$where = [];
$list = Db::name('seo_check_task')->where($where)->order('create_time desc')->paginate($limit);
return json(pageReturn(['code' => 0, 'data' => $list, 'msg' => lang('成功')]));
}
public function check()
{
$param = $this->request->param();
if ($param['flag'] == 'progress') {
$taskDetail = Db::name('seo_check_task_detail')->where('task_id', $param['task_id'])->select();
$isEnd = true;
$checkData = [];
$success = 0;
$error = 0;
foreach ($taskDetail as $vo) {
if ($vo['status'] == 1) {
$isEnd = false;
}
if (!empty($vo['remark'])) {
$data = json_decode($vo['remark'], true);
$checkData[] = $data;
if ($data['code'] == 101) {
foreach ($data['data'] as $key => $v) {
if ($v['status'] == 1) {
$success++;
continue;
}
if ($key == 'tags') {
$error += isset($v['msg']['ajax']) ? count($v['msg']['ajax']) : 0;
$error += isset($v['msg']['alt']) ? count($v['msg']['alt']) : 0;
continue;
}
if (is_array($v['msg'])) {
$error += count($v['msg']);
} else {
$error ++;
}
}
}
if ($data['code'] == 102) {
if ($data['data']['status'] == 1) {
$success++;
} else {
$error++;
}
}
if ($data['code'] == 103) {
$error += isset($data['data']['deadLink']) ? count($data['data']['deadLink']) : 0;
$error += isset($data['data']['keywords']) ? count($data['data']['keywords']) : 0;
}
if ($data['code'] == 104) {
if (isset($data['data']['inlinks']['linksHave'])) {
foreach ($data['data']['inlinks']['linksHave'] as $v) {
if ($v['status'] == 1) {
$success++;
} else {
$error++;
}
}
}
if (isset($data['data']['inlinks']['nofollow'])) {
foreach ($data['data']['inlinks']['nofollow'] as $v) {
if ($v['status'] == 1) {
$success++;
} else {
$error++;
}
}
}
if (isset($data['data']['outlinks']['linksHave'])) {
foreach ($data['data']['outlinks']['linksHave'] as $v) {
if ($v['status'] == 1) {
$success++;
} else {
$error++;
}
}
}
}
}
}
if ($isEnd) {
Db::name('seo_check_task')->where('id', $param['task_id'])->update([
'status' => 2,
'update_time' => date('Y-m-d H:i:s')
]);
}
return json(['code' => 0, 'data' => [
'success' => $success,
'error' => $error,
'check_data' => $checkData,
'is_end' => $isEnd,
'task' => Db::name('seo_check_task')->where('id', $param['task_id'])->find()
], 'msg' => 'success']);
}
$websiteId = input('param.website_id');
$list = Db::name('theme')->field('lang,theme')->where('is_active', 1)->where('website_id', $websiteId)->select();
return jsonReturn(0, 'success', $list);
}
public function start()
{
if (request()->isPost()) {
$param = input('post.');
$hasRun = Db::name('seo_check_task')->field('id')->where('website_id', $param['website_id'])->where('status', 1)->find();
if (!empty($hasRun)) {
return jsonReturn(-1, lang('该站点正在检测中'));
}
Db::startTrans();
try {
$taskId = Db::name('seo_check_task')->insertGetId([
'website_id' => $param['website_id'],
'website_url' => $param['website_url'],
'lang' => $param['lang'],
'theme' => $param['theme'],
'status' => 1,
'create_time' => date('Y-m-d H:i:s')
]);
$params = [
[
'task_id' => $taskId,
'status' => 1,
'code' => 'code',
'create_time' => date('Y-m-d H:i:s')
],
[
'task_id' => $taskId,
'status' => 1,
'code' => 'web',
'create_time' => date('Y-m-d H:i:s')
],
[
'task_id' => $taskId,
'status' => 1,
'code' => 'keywords',
'create_time' => date('Y-m-d H:i:s')
],
[
'task_id' => $taskId,
'status' => 1,
'code' => 'links',
'create_time' => date('Y-m-d H:i:s')
],
[
'task_id' => $taskId,
'status' => 1,
'code' => 'article',
'create_time' => date('Y-m-d H:i:s')
],
];
Db::name('seo_check_task_detail')->insertAll($params);
Db::commit();
} catch (\Exception $e) {
Db::rollback();
return jsonReturn(-2, $e->getMessage());
}
$taskData = [
'task_id' => $taskId,
'websiteId' => $param['website_id'],
'start_time' => date('Y-m-d H:i:s'),
'lang' => $param['lang'],
'theme' => $param['theme'],
'websiteUrl' => $param['website_url'],
'cate' => Db::name('category')->field('id,title,alias')->where('status', 1)
->where('lang', $param['lang'])
->where('type', '<>', 3)->where('website_id', $param['website_id'])->select(),
'keywords' => Db::name('keyword')->field('name')->where('is_del', 1)->where('website_id', $param['website_id'])->select()
];
// 以text协议发送$task_data数据
$taskData['cmd'] = 'code';
$this->sendData($taskData);
$taskData['cmd'] = 'web';
$this->sendData($taskData);
$taskData['cmd'] = 'keywords';
$this->sendData($taskData);
$taskData['cmd'] = 'links';
$this->sendData($taskData);
$taskData['cmd'] = 'article';
$this->sendData($taskData);
return jsonReturn(0, lang('启动成功'), $taskData);
}
}
public function del()
{
if (!request()->isPost()) {
return jsonReturn(-1, lang('请求错误'));
}
$param = $this->request->only(['id']);
Db::name('seo_check_task')->where('id', '=', $param['id'])->delete();
Db::name('seo_check_task_detail')->where('task_id', '=', $param['id'])->delete();
return jsonReturn(0, lang('删除成功'));
}
protected function sendData($data)
{
// 与服务端建立连接
$client = stream_socket_client('tcp://127.0.0.1:19890');
fwrite($client, json_encode($data) . "\n");
//关闭句柄
fclose($client);
}
}