作者 刘锟

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

@@ -16,9 +16,12 @@ use App\Models\Product\Keyword; @@ -16,9 +16,12 @@ use App\Models\Product\Keyword;
16 use App\Models\Product\Product; 16 use App\Models\Product\Product;
17 use App\Services\ProjectServer; 17 use App\Services\ProjectServer;
18 use Illuminate\Console\Command; 18 use Illuminate\Console\Command;
  19 +use Illuminate\Support\Carbon;
  20 +use Illuminate\Support\Facades\Cache;
19 use Illuminate\Support\Facades\DB; 21 use Illuminate\Support\Facades\DB;
20 use Illuminate\Support\Facades\Http; 22 use Illuminate\Support\Facades\Http;
21 use Illuminate\Support\Facades\Log; 23 use Illuminate\Support\Facades\Log;
  24 +use Illuminate\Support\Facades\Redis;
22 25
23 class VideoTask extends Command 26 class VideoTask extends Command
24 { 27 {
@@ -50,15 +53,19 @@ class VideoTask extends Command @@ -50,15 +53,19 @@ class VideoTask extends Command
50 * @var int 最大子任务 53 * @var int 最大子任务
51 */ 54 */
52 public $max_sub_task = 200; 55 public $max_sub_task = 200;
53 - 56 + public $max_num = 49000;
54 /** 57 /**
55 * @return bool 58 * @return bool
56 */ 59 */
57 public function handle() 60 public function handle()
58 { 61 {
59 - echo '开始:'.PHP_EOL;  
60 Log::info('开始视频推广任务'); 62 Log::info('开始视频推广任务');
61 - $this->createSubTask(); 63 + $number = KeywordVideoTaskLog::getMonthVideoNum();
  64 + if($number >= $this->max_num){
  65 + Log::info('当月以达到最大视频生成数,任务执行数:' . $number);
  66 + return true;
  67 + }
  68 + $this->createSubTask($number);
62 $this->sendSubTask(); 69 $this->sendSubTask();
63 Log::info('结束视频推广任务'); 70 Log::info('结束视频推广任务');
64 return true; 71 return true;
@@ -69,13 +76,16 @@ class VideoTask extends Command @@ -69,13 +76,16 @@ class VideoTask extends Command
69 * TODO 获取需要生成子任务的项目,获取项目中未生成视频的关键词,通过关键词生成初始化子任务 76 * TODO 获取需要生成子任务的项目,获取项目中未生成视频的关键词,通过关键词生成初始化子任务
70 * @return bool 77 * @return bool
71 */ 78 */
72 - public function createSubTask() 79 + public function createSubTask($number)
73 { 80 {
74 $sub_task_num = $this->max_sub_task; 81 $sub_task_num = $this->max_sub_task;
75 while (true) { 82 while (true) {
76 if ($sub_task_num <= 0){ 83 if ($sub_task_num <= 0){
77 break; 84 break;
78 } 85 }
  86 + if($number >= $this->max_num){
  87 + break;
  88 + }
79 $task_project = KeywordVideoTask::where(['status' => KeywordVideoTask::STATUS_OPEN])->orderBy('sort', 'desc')->orderBy('id', 'desc')->first(); 89 $task_project = KeywordVideoTask::where(['status' => KeywordVideoTask::STATUS_OPEN])->orderBy('sort', 'desc')->orderBy('id', 'desc')->first();
80 if (empty($task_project)){ 90 if (empty($task_project)){
81 break; 91 break;
@@ -124,6 +134,7 @@ class VideoTask extends Command @@ -124,6 +134,7 @@ class VideoTask extends Command
124 } 134 }
125 } 135 }
126 } 136 }
  137 + Cache::put('video_keyword_number_month',$number + count($keyword),3600);
127 $task_project->status = KeywordVideoTask::STATUS_CLOSE; 138 $task_project->status = KeywordVideoTask::STATUS_CLOSE;
128 $task_project->save(); 139 $task_project->save();
129 } 140 }
@@ -48,15 +48,14 @@ class Demo extends Command @@ -48,15 +48,14 @@ class Demo extends Command
48 protected $description = 'demo'; 48 protected $description = 'demo';
49 49
50 public function handle(){ 50 public function handle(){
51 - $p = new PurchaserInfo();  
52 - $lists = $p->list();  
53 - foreach ($lists as $k => $v){  
54 - $info = $p->read(['project_id'=>$v['project_id'],'keyword'=>$v['keyword'],'buyer'=>$v['buyer']]);  
55 - if($info === false){  
56 - continue;  
57 - }  
58 - $p->del(['project_id'=>$v['project_id'],'keyword'=>$v['keyword'],'buyer'=>$v['buyer'],'id'=>['!=',$v['id']]]);  
59 - }  
60 - return true; 51 + $this->synchronizationFile('/upload/p/1720/file/2024-07/4d.mp4');
  52 + }
  53 +
  54 + public function synchronizationFile($path_name){
  55 + //同步到大文件
  56 + $file_path = config('filesystems.disks.cos')['cdn1'].$path_name;
  57 + $directoryPath = pathinfo($path_name, PATHINFO_DIRNAME);
  58 + $cmd = 'curl -F "file_path='.$file_path.'" -F "save_path=/www/wwwroot/cos'.$directoryPath.'" https://v6-file.globalso.com/upload.php';
  59 + return shell_exec($cmd);
61 } 60 }
62 } 61 }
@@ -36,7 +36,7 @@ class Kernel extends ConsoleKernel @@ -36,7 +36,7 @@ class Kernel extends ConsoleKernel
36 $schedule->command('recommended_suppliers')->dailyAt('03:00')->withoutOverlapping(1); //每天凌晨1点执行一次生成推荐商 36 $schedule->command('recommended_suppliers')->dailyAt('03:00')->withoutOverlapping(1); //每天凌晨1点执行一次生成推荐商
37 $schedule->command('update_keyword_content')->hourly()->withoutOverlapping(1); 37 $schedule->command('update_keyword_content')->hourly()->withoutOverlapping(1);
38 // 每月15号执行任务 38 // 每月15号执行任务
39 - $schedule->command('delete_template_log')->monthlyOn(15, '00:00')->withoutOverlapping(); 39 + $schedule->command('delete_template_log')->monthlyOn(15, '00:01')->withoutOverlapping();
40 // 每日推送已完成视频任务项目生成对应界面 40 // 每日推送已完成视频任务项目生成对应界面
41 $schedule->command('notice_c')->dailyAt('04:00')->withoutOverlapping(1); 41 $schedule->command('notice_c')->dailyAt('04:00')->withoutOverlapping(1);
42 } 42 }
@@ -473,7 +473,7 @@ class ProductLogic extends BaseLogic @@ -473,7 +473,7 @@ class ProductLogic extends BaseLogic
473 $v['updated_at'] = date('Y-m-d H:i:s'); 473 $v['updated_at'] = date('Y-m-d H:i:s');
474 $data[] = $v; 474 $data[] = $v;
475 } 475 }
476 - return $extendList->insert($data); 476 + return $extendInfoModel->insert($data);
477 } 477 }
478 return $this->success(); 478 return $this->success();
479 } 479 }
@@ -10,6 +10,8 @@ @@ -10,6 +10,8 @@
10 namespace App\Models\Com; 10 namespace App\Models\Com;
11 11
12 use App\Models\Base; 12 use App\Models\Base;
  13 +use Illuminate\Support\Carbon;
  14 +use Illuminate\Support\Facades\Cache;
13 15
14 class KeywordVideoTaskLog extends Base 16 class KeywordVideoTaskLog extends Base
15 { 17 {
@@ -19,4 +21,26 @@ class KeywordVideoTaskLog extends Base @@ -19,4 +21,26 @@ class KeywordVideoTaskLog extends Base
19 const STATUS_ERROR = 3; 21 const STATUS_ERROR = 3;
20 22
21 protected $table = 'gl_keyword_video_task_log'; 23 protected $table = 'gl_keyword_video_task_log';
  24 +
  25 + /**
  26 + * 获取当月视频生成数量
  27 + * FIXME 混剪视频订阅计划 50000/m
  28 + * @return mixed
  29 + */
  30 + public static function getMonthVideoNum()
  31 + {
  32 + $key = 'video_keyword_number_month';
  33 + $num = Cache::get($key, function () use ($key) {
  34 + $this_day = date('d');
  35 + if($this_day >= 13) {
  36 + $start_date = Carbon::now()->day(13)->format('Y-m-d 00:00:00');
  37 + } else {
  38 + $start_date = Carbon::now()->subMonth()->day(13)->format('Y-m-d 00:00:00');
  39 + }
  40 + $num = self::where('created_at', '>', $start_date)->count();
  41 + Cache::put($key, $num, 3600);
  42 + return $num;
  43 + });
  44 + return $num;
  45 + }
22 } 46 }
@@ -9,10 +9,10 @@ use Illuminate\Support\Facades\Route; @@ -9,10 +9,10 @@ use Illuminate\Support\Facades\Route;
9 9
10 10
11 Route::middleware(['aloginauth'])->group(function () { 11 Route::middleware(['aloginauth'])->group(function () {
12 - Route::get('/', [Aside\Com\IndexController::class, 'index'])->name('admin.home.white');  
13 - Route::get('/get_menu', [Aside\Com\IndexController::class, 'get_menu'])->name('admin.get_menu.white'); 12 + Route::any('/', [Aside\Com\IndexController::class, 'index'])->name('admin.home.white');
  13 + Route::any('/get_menu', [Aside\Com\IndexController::class, 'get_menu'])->name('admin.get_menu.white');
14 Route::any('/editPassword', [Aside\Com\IndexController::class, 'editPassword'])->name('admin.editPassword.white'); 14 Route::any('/editPassword', [Aside\Com\IndexController::class, 'editPassword'])->name('admin.editPassword.white');
15 - Route::get('/logout', [Aside\LoginController::class, 'logout'])->name('admin.logout.white'); 15 + Route::any('/logout', [Aside\LoginController::class, 'logout'])->name('admin.logout.white');
16 Route::any('/getAccessAddress', [Aside\LoginController::class, 'getAccessAddress'])->name('admin.getAccessAddress');//获取B端地址 16 Route::any('/getAccessAddress', [Aside\LoginController::class, 'getAccessAddress'])->name('admin.getAccessAddress');//获取B端地址
17 Route::any('/sendNotify', [Aside\Com\CNoticeController::class, 'sendNotify'])->name('admin.sendNotify'); 17 Route::any('/sendNotify', [Aside\Com\CNoticeController::class, 'sendNotify'])->name('admin.sendNotify');
18 Route::any('/getCountry', [Aside\Com\CNoticeController::class, 'getCountry'])->name('admin.getCountry'); 18 Route::any('/getCountry', [Aside\Com\CNoticeController::class, 'getCountry'])->name('admin.getCountry');
@@ -106,8 +106,8 @@ Route::middleware(['aloginauth'])->group(function () { @@ -106,8 +106,8 @@ Route::middleware(['aloginauth'])->group(function () {
106 106
107 //菜单 107 //菜单
108 Route::prefix('menu')->group(function () { 108 Route::prefix('menu')->group(function () {
109 - Route::get('/', [Aside\Manage\MenuController::class, 'list'])->name('admin.menu');  
110 - Route::get('/info', [Aside\Manage\MenuController::class, 'info'])->name('admin.menu_info'); 109 + Route::any('/', [Aside\Manage\MenuController::class, 'list'])->name('admin.menu');
  110 + Route::any('/info', [Aside\Manage\MenuController::class, 'info'])->name('admin.menu_info');
111 Route::post('/save', [Aside\Manage\MenuController::class, 'save'])->name('admin.menu_save'); 111 Route::post('/save', [Aside\Manage\MenuController::class, 'save'])->name('admin.menu_save');
112 Route::any('/delete', [Aside\Manage\MenuController::class, 'delete'])->name('admin.menu_delete'); 112 Route::any('/delete', [Aside\Manage\MenuController::class, 'delete'])->name('admin.menu_delete');
113 Route::any('/sort', [Aside\Manage\MenuController::class, 'setSort'])->name('admin.menu_sort'); 113 Route::any('/sort', [Aside\Manage\MenuController::class, 'setSort'])->name('admin.menu_sort');
@@ -122,27 +122,27 @@ Route::middleware(['aloginauth'])->group(function () { @@ -122,27 +122,27 @@ Route::middleware(['aloginauth'])->group(function () {
122 }); 122 });
123 //权限组 123 //权限组
124 Route::prefix('group')->group(function () { 124 Route::prefix('group')->group(function () {
125 - Route::get('/', [Aside\Manage\GroupController::class, 'list'])->name('admin.group');  
126 - Route::get('/info', [Aside\Manage\GroupController::class, 'info'])->name('admin.group_info'); 125 + Route::any('/', [Aside\Manage\GroupController::class, 'list'])->name('admin.group');
  126 + Route::any('/info', [Aside\Manage\GroupController::class, 'info'])->name('admin.group_info');
127 Route::post('/save', [Aside\Manage\GroupController::class, 'save'])->name('admin.group_save'); 127 Route::post('/save', [Aside\Manage\GroupController::class, 'save'])->name('admin.group_save');
128 Route::any('/delete', [Aside\Manage\GroupController::class, 'delete'])->name('admin.group_delete'); 128 Route::any('/delete', [Aside\Manage\GroupController::class, 'delete'])->name('admin.group_delete');
129 }); 129 });
130 130
131 //部门 131 //部门
132 Route::prefix('dept')->group(function () { 132 Route::prefix('dept')->group(function () {
133 - Route::get('/', [Aside\Manage\DeptController::class, 'lists'])->name('admin.dept');  
134 - Route::get('/info', [Aside\Manage\DeptController::class, 'info'])->name('admin.dept_info'); 133 + Route::any('/', [Aside\Manage\DeptController::class, 'lists'])->name('admin.dept');
  134 + Route::any('/info', [Aside\Manage\DeptController::class, 'info'])->name('admin.dept_info');
135 Route::post('/save', [Aside\Manage\DeptController::class, 'save'])->name('admin.dept_save'); 135 Route::post('/save', [Aside\Manage\DeptController::class, 'save'])->name('admin.dept_save');
136 Route::any('/delete', [Aside\Manage\DeptController::class, 'delete'])->name('admin.dept_delete'); 136 Route::any('/delete', [Aside\Manage\DeptController::class, 'delete'])->name('admin.dept_delete');
137 }); 137 });
138 138
139 //人事管理 139 //人事管理
140 Route::prefix('hr')->group(function () { 140 Route::prefix('hr')->group(function () {
141 - Route::get('/', [Aside\Manage\HrController::class, 'list'])->name('admin.hr');  
142 - Route::get('/info', [Aside\Manage\HrController::class, 'info'])->name('admin.hr_info'); 141 + Route::any('/', [Aside\Manage\HrController::class, 'list'])->name('admin.hr');
  142 + Route::any('/info', [Aside\Manage\HrController::class, 'info'])->name('admin.hr_info');
143 Route::post('/save', [Aside\Manage\HrController::class, 'save'])->name('admin.hr_save'); 143 Route::post('/save', [Aside\Manage\HrController::class, 'save'])->name('admin.hr_save');
144 Route::post('/sort', [Aside\Manage\HrController::class, 'sort'])->name('admin.hr_sort'); 144 Route::post('/sort', [Aside\Manage\HrController::class, 'sort'])->name('admin.hr_sort');
145 - Route::get('/getSearchParamsList', [Aside\Manage\HrController::class, 'getSearchParamsList'])->name('admin.hr_getSearchParamsList'); 145 + Route::any('/getSearchParamsList', [Aside\Manage\HrController::class, 'getSearchParamsList'])->name('admin.hr_getSearchParamsList');
146 }); 146 });
147 147
148 //管理员日志 148 //管理员日志
@@ -159,8 +159,8 @@ Route::middleware(['aloginauth'])->group(function () { @@ -159,8 +159,8 @@ Route::middleware(['aloginauth'])->group(function () {
159 159
160 //项目管理 160 //项目管理
161 Route::prefix('project')->group(function () { 161 Route::prefix('project')->group(function () {
162 - Route::get('/', [Aside\Project\ProjectController::class, 'lists'])->name('admin.project');  
163 - Route::get('/info', [Aside\Project\ProjectController::class, 'info'])->name('admin.project_info'); 162 + Route::any('/', [Aside\Project\ProjectController::class, 'lists'])->name('admin.project');
  163 + Route::any('/info', [Aside\Project\ProjectController::class, 'info'])->name('admin.project_info');
164 Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save'); 164 Route::post('/save', [Aside\Project\ProjectController::class, 'save'])->name('admin.project_save');
165 Route::any('/deleteMinorLanguages', [Aside\Project\ProjectController::class, 'deleteMinorLanguages'])->name('admin.project_deleteMinorLanguages'); 165 Route::any('/deleteMinorLanguages', [Aside\Project\ProjectController::class, 'deleteMinorLanguages'])->name('admin.project_deleteMinorLanguages');
166 Route::any('/inquiry_set', [Aside\Project\ProjectController::class, 'inquiry_set'])->name('admin.project_inquiry_set'); 166 Route::any('/inquiry_set', [Aside\Project\ProjectController::class, 'inquiry_set'])->name('admin.project_inquiry_set');
@@ -220,8 +220,8 @@ Route::middleware(['aloginauth'])->group(function () { @@ -220,8 +220,8 @@ Route::middleware(['aloginauth'])->group(function () {
220 }); 220 });
221 //工单管理 221 //工单管理
222 Route::prefix('task')->group(function () { 222 Route::prefix('task')->group(function () {
223 - Route::get('/', [Aside\Task\TaskController::class, 'list'])->name('admin.task');  
224 - Route::get('/info', [Aside\Task\TaskController::class, 'info'])->name('admin.task_info'); 223 + Route::any('/', [Aside\Task\TaskController::class, 'list'])->name('admin.task');
  224 + Route::any('/info', [Aside\Task\TaskController::class, 'info'])->name('admin.task_info');
225 Route::post('/save', [Aside\Task\TaskController::class, 'save'])->name('admin.task_save'); 225 Route::post('/save', [Aside\Task\TaskController::class, 'save'])->name('admin.task_save');
226 Route::post('/status', [Aside\Task\TaskController::class, 'status'])->name('admin.task_status'); 226 Route::post('/status', [Aside\Task\TaskController::class, 'status'])->name('admin.task_status');
227 Route::post('/save_follow', [Aside\Task\TaskController::class, 'save_follow'])->name('admin.task_save_follow'); 227 Route::post('/save_follow', [Aside\Task\TaskController::class, 'save_follow'])->name('admin.task_save_follow');