作者 周海龙

合并分支 'zhl' 到 'master'

zhl



查看合并请求 !597
  1 +<?php
  2 +/**
  3 + * Created by PhpStorm.
  4 + * User: zhl
  5 + * Date: 2024/5/28
  6 + * Time: 14:25
  7 + */
  8 +namespace App\Http\Controllers\Aside\Task;
  9 +
  10 +use App\Enums\Common\Code;
  11 +use App\Http\Controllers\Aside\BaseController;
  12 +use App\Models\Com\Notify;
  13 +use App\Models\Project\Project;
  14 +use App\Models\WebSetting\WebLanguage;
  15 +use Illuminate\Http\Request;
  16 +
  17 +/**
  18 + * 自动任务信息
  19 + * Class AutoTaskController
  20 + * @package App\Http\Controllers\Aside\Task
  21 + */
  22 +class AutoTaskController extends BaseController
  23 +{
  24 + /**
  25 + * 页面生成任务
  26 + * @param Request $request
  27 + * @return \Illuminate\Http\JsonResponse
  28 + */
  29 + public function createHtmlTask(Request $request)
  30 + {
  31 + // 接收信息
  32 + $project_id = intval($request->input('project_id'));
  33 + $status = intval($request->input('status'));
  34 + $route = intval($request->input('route'));
  35 + $type = intval($request->input('type'));
  36 + $row = intval($request->input('row', 20));
  37 + // 所有参数都有初始化数据, 无数据验证
  38 + // 查询初始数据
  39 + $where = compact('project_id', 'route', 'type');
  40 + $where = array_filter($where);
  41 + if ($status)
  42 + $where['status'] = $status - 1;
  43 + $result = Notify::select(['id','project_id', 'type', 'data', 'status', 'route', 'num', 'updated_at', 'created_at'])
  44 + ->where('id', '>', 84000) // 查询有效数据
  45 + ->where('server_id', '<>', 9) // 过滤测试环境数据
  46 + ->where('server_id', '>', 0) // 过滤测试环境数据
  47 + ->where($where)
  48 + ->orderBy('id', 'desc')
  49 + ->paginate($row);
  50 +
  51 + // 数据中需要处理项目信息
  52 + $project_ids = $result->pluck('project_id')->toArray();
  53 + $projects = Project::whereIN('id', $project_ids)->pluck('title', 'id')->toArray();
  54 + // 数据中需要处理的语种信息
  55 + $language = WebLanguage::pluck('chinese', 'id')->toArray();
  56 + // 数据中需要映射的参数信息
  57 + $type = Notify::typeMap();
  58 + $route = Notify::routeMap();
  59 + $status = Notify::statusMap();
  60 + // 转数组操作, 如果是对象, 添加字段会报错
  61 + $result = $result->toArray();
  62 + foreach ($result['list'] as &$val) {
  63 + // 解析data信息, 以后数据库尽量不要存需要处理的JSON信息, 拆分成指定字段
  64 + $data = json_decode($val['data'], true);
  65 + $val['language'] = [];
  66 + // 小语种 并且 有语种信息, 将语种转换成中文
  67 + if ($val['type'] == Notify::TYPE_MINOR && FALSE == empty($data['language'])) {
  68 + foreach ($data['language'] as $v) {
  69 + $val['language'][] = $language[$v];
  70 + }
  71 + }
  72 + // 映射信息 以及解析信息
  73 + $val['type'] = $type[$val['type']];
  74 + $val['route'] = $route[$val['route']];
  75 + $val['status'] = $status[$val['status']];
  76 + $val['project_title'] = $projects[$val['project_id']] ?? '';
  77 + $val['domain'] = $data['domain'] ?? '';
  78 + $val['url'] = FALSE == empty($data['url']) ? json_decode($data['url'], true) : [];
  79 +
  80 + }
  81 + return $this->response('success', Code::SUCCESS, $result);
  82 + }
  83 +
  84 + /**
  85 + * 页面生成任务参数
  86 + * @return \Illuminate\Http\JsonResponse
  87 + */
  88 + public function createHtmlTaskParam()
  89 + {
  90 + $status = Notify::statusMap();
  91 + $status_new = [];
  92 + foreach ($status as $key=>$val) {
  93 + $status_new[$key+1] = $val;
  94 + }
  95 + $result = [
  96 + 'status' => $status_new,
  97 + 'type' => Notify::typeMap(),
  98 + 'route' => Notify::routeMap()
  99 + ];
  100 + return $this->response('success', Code::SUCCESS, $result);
  101 + }
  102 +}
@@ -13,6 +13,7 @@ class Notify extends Base @@ -13,6 +13,7 @@ class Notify extends Base
13 const STATUS_INIT = 0; 13 const STATUS_INIT = 0;
14 const STATUS_FINISH_ROUTE = 1; 14 const STATUS_FINISH_ROUTE = 1;
15 const STATUS_FINISH_PAGE = 2; 15 const STATUS_FINISH_PAGE = 2;
  16 + const STATUS_FINISH_SITEMAP = 3;
16 17
17 /** 18 /**
18 * 类型 1:主站, 2:小语种, 3:amp 19 * 类型 1:主站, 2:小语种, 3:amp
@@ -36,4 +37,47 @@ class Notify extends Base @@ -36,4 +37,47 @@ class Notify extends Base
36 const ROUTE_PRODUCT_KEYWORD = 4; 37 const ROUTE_PRODUCT_KEYWORD = 4;
37 const ROUTE_NOT_TRANSLATE = 5; 38 const ROUTE_NOT_TRANSLATE = 5;
38 const ROUTE_PRODUCT_VIDEO_KEYWORD = 6; 39 const ROUTE_PRODUCT_VIDEO_KEYWORD = 6;
  40 +
  41 + /**
  42 + * 类型
  43 + * @return array
  44 + */
  45 + public static function typeMap()
  46 + {
  47 + return [
  48 + self::TYPE_MASTER => '主站',
  49 + self::TYPE_MINOR => '小语种',
  50 + self::TYPE_AMP => 'AMP',
  51 + ];
  52 + }
  53 +
  54 + /**
  55 + * 生成目标页面
  56 + * @return array
  57 + */
  58 + public static function routeMap()
  59 + {
  60 + return [
  61 + self::ROUTE_ALL => '主站页面',
  62 + self::ROUTE_NEED => '更新页面',
  63 + self::ROUTE_URL => '指定路由',
  64 + self::ROUTE_PRODUCT_KEYWORD => '聚合页面',
  65 + self::ROUTE_NOT_TRANSLATE => '漏翻检查',
  66 + self::ROUTE_PRODUCT_VIDEO_KEYWORD => '视频聚合页'
  67 + ];
  68 + }
  69 +
  70 + /**
  71 + * 状态
  72 + * @return array
  73 + */
  74 + public static function statusMap()
  75 + {
  76 + return [
  77 + self::STATUS_INIT => '排队中',
  78 + self::STATUS_FINISH_ROUTE => '页面生成中',
  79 + self::STATUS_FINISH_PAGE => 'sitemap生成中',
  80 + self::STATUS_FINISH_SITEMAP => '完成',
  81 + ];
  82 + }
39 } 83 }
@@ -412,6 +412,10 @@ Route::middleware(['aloginauth'])->group(function () { @@ -412,6 +412,10 @@ Route::middleware(['aloginauth'])->group(function () {
412 412
413 Route::any('/generate_aicc_token', [Aside\Com\IndexController::class, 'generateAiCCToken'])->name('admin.generate_aicc_token'); 413 Route::any('/generate_aicc_token', [Aside\Com\IndexController::class, 'generateAiCCToken'])->name('admin.generate_aicc_token');
414 Route::any('/getAutoToken', [Aside\Com\IndexController::class, 'getAutoToken'])->name('admin.getAutoToken'); 414 Route::any('/getAutoToken', [Aside\Com\IndexController::class, 'getAutoToken'])->name('admin.getAutoToken');
  415 +
  416 + // 生成页面任务
  417 + Route::any('/create_html_task', [Aside\Task\AutoTaskController::class, 'createHtmlTask'])->name('admin.create_html_task');
  418 + Route::any('/create_html_param', [Aside\Task\AutoTaskController::class, 'createHtmlTaskParam'])->name('admin.create_html_param');
415 }); 419 });
416 420
417 //无需登录验证的路由组 421 //无需登录验证的路由组