|
|
@@ -2857,8 +2857,8 @@ class DeepSeekService
|
|
|
$generated_scenes = isset($episode_arr['scenes']) && is_array($episode_arr['scenes']) ? $episode_arr['scenes'] : [];
|
|
|
$merged_roles = $this->mergeEpisodeResourceItems($existing_roles, $generated_roles, 'role');
|
|
|
$merged_scenes = $this->mergeEpisodeResourceItems($existing_scenes, $generated_scenes, 'scene');
|
|
|
- dLog('deepseek')->info('修改后的数据: ', [$merged_roles, $merged_scenes]);
|
|
|
- exit();
|
|
|
+ // dLog('deepseek')->info('修改后的数据: ', [$existing_roles, $generated_roles, $merged_roles]);
|
|
|
+ // exit();
|
|
|
$now = date('Y-m-d H:i:s');
|
|
|
|
|
|
try {
|
|
|
@@ -3104,33 +3104,65 @@ class DeepSeekService
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (!$this->isEpisodeResourceChanged($existingMap[$itemKey], $item, $nameKey)) {
|
|
|
- $merged[] = $existingMap[$itemKey];
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 重置资源项,并尝试从现有项中继承URL
|
|
|
- $resetItem = $this->resetEpisodeResourceItem($item, $nameKey);
|
|
|
-
|
|
|
- // 如果现有项存在且有URL,而生成项没有URL,则继承现有URL
|
|
|
- if (isset($existingMap[$itemKey])) {
|
|
|
- $existingUrl = getProp($existingMap[$itemKey], 'url');
|
|
|
- $generatedUrl = getProp($item, 'url');
|
|
|
+ // 检查内容是否发生变化
|
|
|
+ $isChanged = $this->isEpisodeResourceChanged($existingMap[$itemKey], $item, $nameKey);
|
|
|
|
|
|
- // 条件:1.现有URL存在 2.生成URL不存在 3.名称和描述一致(已通过itemKey和上面的逻辑保证)
|
|
|
- if (!empty($existingUrl) && empty($generatedUrl)) {
|
|
|
- $resetItem['url'] = $existingUrl;
|
|
|
+ if (!$isChanged) {
|
|
|
+ // nameKey 和 description 一致,继承现有项的 URL
|
|
|
+ $mergedItem = [
|
|
|
+ $nameKey => trim((string)getProp($item, $nameKey)),
|
|
|
+ 'description' => trim((string)getProp($item, 'description')),
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 继承现有项的 URL
|
|
|
+ $existingUrl = getProp($existingMap[$itemKey], 'url');
|
|
|
+ if (!empty($existingUrl)) {
|
|
|
+ $mergedItem['url'] = $existingUrl;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保留生成项的音色字段
|
|
|
+ $timbreName = getProp($item, 'timbre_name');
|
|
|
+ if (!empty($timbreName)) {
|
|
|
+ $mergedItem['timbre_name'] = $timbreName;
|
|
|
+ }
|
|
|
+
|
|
|
+ $timbreType = getProp($item, 'timbre_type');
|
|
|
+ if (!empty($timbreType)) {
|
|
|
+ $mergedItem['timbre_type'] = $timbreType;
|
|
|
+ }
|
|
|
+
|
|
|
+ $merged[] = $mergedItem;
|
|
|
+ } else {
|
|
|
+ // nameKey 或 description 不一致,重置 URL 但保留音色字段
|
|
|
+ $mergedItem = [
|
|
|
+ $nameKey => trim((string)getProp($item, $nameKey)),
|
|
|
+ 'description' => trim((string)getProp($item, 'description')),
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 保留生成项的音色字段
|
|
|
+ $timbreName = getProp($item, 'timbre_name');
|
|
|
+ if (!empty($timbreName)) {
|
|
|
+ $mergedItem['timbre_name'] = $timbreName;
|
|
|
+ }
|
|
|
+
|
|
|
+ $timbreType = getProp($item, 'timbre_type');
|
|
|
+ if (!empty($timbreType)) {
|
|
|
+ $mergedItem['timbre_type'] = $timbreType;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 不继承 URL(重置状态)
|
|
|
+ $merged[] = $mergedItem;
|
|
|
}
|
|
|
+ } else {
|
|
|
+ // 新增项,保留生成项的所有字段
|
|
|
+ $merged[] = $this->resetEpisodeResourceItem($item, $nameKey, ['timbre_name', 'timbre_type']);
|
|
|
}
|
|
|
-
|
|
|
- $merged[] = $resetItem;
|
|
|
}
|
|
|
|
|
|
return $merged ?: array_values($existingItems);
|
|
|
}
|
|
|
|
|
|
- private function resetEpisodeResourceItem(array $item, string $nameKey): array
|
|
|
+ private function resetEpisodeResourceItem(array $item, string $nameKey, array $preserveFields = []): array
|
|
|
{
|
|
|
$resetItem = [
|
|
|
$nameKey => trim((string)getProp($item, $nameKey)),
|
|
|
@@ -3143,6 +3175,14 @@ class DeepSeekService
|
|
|
$resetItem['url'] = $url;
|
|
|
}
|
|
|
|
|
|
+ // 保留指定的字段
|
|
|
+ foreach ($preserveFields as $field) {
|
|
|
+ $value = getProp($item, $field);
|
|
|
+ if (!empty($value)) {
|
|
|
+ $resetItem[$field] = $value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return $resetItem;
|
|
|
}
|
|
|
|