limit(50) ->pluck('id') ->toArray(); if (empty($targetIds)) { return; // 没有待处理任务直接退出 } // 2. 批量锁定:将这批 ID 状态改为 3 SysOssTasks::whereIn('id', $targetIds)->update([ 'status' => SysOssTasks::status_three, 'upd_time' => time(), ]); // 3. 仅针对这批锁定的 ID 进行处理 // 使用 chunkById 预防大数据量下的分页偏移问题 SysOssTasks::whereIn('id', $targetIds) ->chunkById(50, function ($tasks) use ($service) { foreach ($tasks as $task) { $status_db = SysOssTasks::status_two; // 默认失败 try { if ($task->type == SysOssTasks::type_one) { // 类型1:删除/同步旧数据逻辑 list($status, $msg) = $service->createOssUploadOldSingle($task->url); if ($status) $status_db = SysOssTasks::status_one; } elseif ($task->type == SysOssTasks::type_two) { // 类型2:新增/上传逻辑 list($status, $msg) = $service->createOssUploadSingle($task->url); if ($status) $status_db = SysOssTasks::status_one; } else { $msg = "单条失败:类型不存在"; } } catch (\Exception $innerEx) { $status_db = SysOssTasks::status_two; $msg = "上传组件异常: " . $innerEx->getMessage(); } // 4. 更新最终状态 $task->update([ 'status' => $status_db, 'remark' => $msg ?? '', 'upd_time' => time() ]); } }); } catch (\Throwable $e) { if (!empty($targetIds)) { SysOssTasks::whereIn('id', $targetIds) ->where('status', SysOssTasks::status_three) ->update([ 'status' => SysOssTasks::status_two, 'remark' => $e->getMessage(), 'upd_time' => time(), ]); } $this->delete(); } } /** * 辅助输出方法 */ protected function echoMessage(OutputInterface $output, $data) { $output->writeln(json_encode($data)); } }