|
|
@@ -10139,11 +10139,12 @@ class AnimeService
|
|
|
$props = json_decode(getProp($episode, 'props'), true) ?: [];
|
|
|
|
|
|
$updated = false;
|
|
|
- $pendingAssets = [];
|
|
|
+ $waitingAssets = []; // 任务仍在处理中,可等待后续轮询
|
|
|
+ $missingAssets = []; // 无任务或任务已失败/不存在,无法通过等待自动恢复
|
|
|
|
|
|
- $this->refreshEpisodeAssetsImageTasks($roles, 'role', '旁白', $pendingAssets, $updated);
|
|
|
- $this->refreshEpisodeAssetsImageTasks($scenes, 'scene', '', $pendingAssets, $updated);
|
|
|
- $this->refreshEpisodeAssetsImageTasks($props, 'prop', '', $pendingAssets, $updated);
|
|
|
+ $this->refreshEpisodeAssetsImageTasks($roles, 'role', '旁白', $waitingAssets, $missingAssets, $updated);
|
|
|
+ $this->refreshEpisodeAssetsImageTasks($scenes, 'scene', '', $waitingAssets, $missingAssets, $updated);
|
|
|
+ $this->refreshEpisodeAssetsImageTasks($props, 'prop', '', $waitingAssets, $missingAssets, $updated);
|
|
|
|
|
|
// 有图片任务结果更新时写回分集表
|
|
|
if ($updated) {
|
|
|
@@ -10156,10 +10157,15 @@ class AnimeService
|
|
|
}
|
|
|
|
|
|
// 所有需要图片的资产都已生成,允许继续 confirmActs 后续逻辑
|
|
|
- if (empty($pendingAssets)) {
|
|
|
+ if (empty($waitingAssets) && empty($missingAssets)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ // 其他任务都已处理完毕,仍有角色、场景或道具图片未生成,统一报错阻止后续逻辑
|
|
|
+ if (empty($waitingAssets)) {
|
|
|
+ Utils::throwError('20003:还有主体、场景或道具图片未生成,请等待图片生成后重试');
|
|
|
+ }
|
|
|
+
|
|
|
// 超过1分钟仍未生成完毕,阻止 confirmActs 后续逻辑
|
|
|
if (time() - $startTime >= $maxWaitSeconds) {
|
|
|
Utils::throwError('20003:还有主体、场景或道具图片未生成,请等待图片生成后重试');
|
|
|
@@ -10171,9 +10177,10 @@ class AnimeService
|
|
|
|
|
|
/**
|
|
|
* 参照 episodePicsInfo:遍历单个资产列表,对有图片任务但还没有图片URL的资产查询图片任务结果并回填。
|
|
|
- * 任务成功但没有可用的结果URL、或任务不存在/生成失败时,直接阻止继续(抛出图片未生成的错误)。
|
|
|
+ * 无任务、任务不存在或生成失败的资产记录为缺失项,不在此处直接报错;
|
|
|
+ * 仍在处理中的任务记录为等待项,由外层统一等待所有任务完成后,再对缺失资产统一报错。
|
|
|
*/
|
|
|
- private function refreshEpisodeAssetsImageTasks(&$assets, $nameKey, $skipName, &$pendingAssets, &$updated) {
|
|
|
+ private function refreshEpisodeAssetsImageTasks(&$assets, $nameKey, $skipName, &$waitingAssets, &$missingAssets, &$updated) {
|
|
|
foreach ($assets as &$asset) {
|
|
|
$assetName = getProp($asset, $nameKey);
|
|
|
if ($assetName === '' || ($skipName !== '' && $assetName === $skipName)) {
|
|
|
@@ -10186,9 +10193,9 @@ class AnimeService
|
|
|
}
|
|
|
|
|
|
$task_id = getProp($asset, 'task_id');
|
|
|
- // 没有图片任务且没有图片URL,说明图片尚未生成
|
|
|
+ // 没有图片任务且没有图片URL:记录为缺失项,继续遍历其他资产,待其他任务都完成后再统一报错
|
|
|
if (!$task_id) {
|
|
|
- $pendingAssets[] = $assetName;
|
|
|
+ $missingAssets[] = $assetName;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -10197,8 +10204,10 @@ class AnimeService
|
|
|
->select('status', 'result_url')
|
|
|
->first();
|
|
|
|
|
|
+ // 任务不存在:同样记录为缺失项,不在此处直接报错
|
|
|
if (!$task) {
|
|
|
- Utils::throwError('20003:还有主体、场景或道具图片未生成,请等待图片生成后重试');
|
|
|
+ $missingAssets[] = $assetName;
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
if ($task->status === 'success') {
|
|
|
@@ -10212,13 +10221,14 @@ class AnimeService
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
- // 任务成功但没有可用的结果URL,仍视为未生成
|
|
|
- $pendingAssets[] = $assetName;
|
|
|
+ // 任务成功但没有可用的结果URL,仍视为未生成,继续等待后续轮询结果
|
|
|
+ $waitingAssets[] = $assetName;
|
|
|
} elseif ($task->status === 'failed') {
|
|
|
- Utils::throwError('20003:还有主体、场景或道具图片未生成,请等待图片生成后重试');
|
|
|
+ // 生成失败:记录为缺失项,待其他任务处理完后统一报错
|
|
|
+ $missingAssets[] = $assetName;
|
|
|
} else {
|
|
|
// 任务仍在生成中,等待下一次轮询
|
|
|
- $pendingAssets[] = $assetName;
|
|
|
+ $waitingAssets[] = $assetName;
|
|
|
}
|
|
|
}
|
|
|
unset($asset);
|