|
@@ -3249,6 +3249,9 @@ class DeepSeekService
|
|
|
$this->batchSetGlobalSceneImg([
|
|
$this->batchSetGlobalSceneImg([
|
|
|
'anime_id' => $anime_id,
|
|
'anime_id' => $anime_id,
|
|
|
]);
|
|
]);
|
|
|
|
|
+
|
|
|
|
|
+ // 将全局角色和场景的task_id、task_status和url继承给当前分集
|
|
|
|
|
+ $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
|
|
|
}
|
|
}
|
|
|
$table_data['anime_id'] = $anime_id;
|
|
$table_data['anime_id'] = $anime_id;
|
|
|
$table_data['roles'] = json_decode($table_data['roles'], true);
|
|
$table_data['roles'] = json_decode($table_data['roles'], true);
|
|
@@ -3919,6 +3922,9 @@ class DeepSeekService
|
|
|
$this->batchSetGlobalSceneImg([
|
|
$this->batchSetGlobalSceneImg([
|
|
|
'anime_id' => $anime_id,
|
|
'anime_id' => $anime_id,
|
|
|
]);
|
|
]);
|
|
|
|
|
+
|
|
|
|
|
+ // 将全局角色和场景的task_id、task_status和url继承给当前分集
|
|
|
|
|
+ $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
|
|
|
}
|
|
}
|
|
|
$table_data['anime_id'] = $anime_id;
|
|
$table_data['anime_id'] = $anime_id;
|
|
|
$table_data['roles'] = json_decode($table_data['roles'], true);
|
|
$table_data['roles'] = json_decode($table_data['roles'], true);
|
|
@@ -4383,6 +4389,9 @@ class DeepSeekService
|
|
|
$this->batchSetGlobalSceneImg([
|
|
$this->batchSetGlobalSceneImg([
|
|
|
'anime_id' => $anime_id,
|
|
'anime_id' => $anime_id,
|
|
|
]);
|
|
]);
|
|
|
|
|
+
|
|
|
|
|
+ // 将全局角色和场景的task_id、task_status和url继承给当前分集
|
|
|
|
|
+ $this->inheritGlobalImagesToEpisodes($anime_id, $episode_id);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$episode['episode_id'] = $episode_id;
|
|
$episode['episode_id'] = $episode_id;
|
|
@@ -4925,6 +4934,165 @@ class DeepSeekService
|
|
|
return $boolen;
|
|
return $boolen;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将全局角色和场景的task_id、task_status和url继承给指定分集
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param int $anime_id 动漫对话ID
|
|
|
|
|
+ * @param int $episode_id 分集ID
|
|
|
|
|
+ * @return bool
|
|
|
|
|
+ */
|
|
|
|
|
+ private function inheritGlobalImagesToEpisodes($anime_id, $episode_id) {
|
|
|
|
|
+ // 获取全局角色和场景数据
|
|
|
|
|
+ $anime = DB::table('mp_animes')->where('id', $anime_id)->where('is_deleted', 0)->first();
|
|
|
|
|
+ if (!$anime) {
|
|
|
|
|
+ dLog('deepseek')->warning('动漫对话不存在', ['anime_id' => $anime_id]);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $global_roles = json_decode(getProp($anime, 'roles'), true) ?: [];
|
|
|
|
|
+ $global_scenes = json_decode(getProp($anime, 'scenes'), true) ?: [];
|
|
|
|
|
+
|
|
|
|
|
+ // 获取指定的分集
|
|
|
|
|
+ $episode = DB::table('mp_anime_episodes')->where('id', $episode_id)->where('anime_id', $anime_id)->first();
|
|
|
|
|
+
|
|
|
|
|
+ if (!$episode) {
|
|
|
|
|
+ dLog('deepseek')->warning('分集不存在', ['anime_id' => $anime_id, 'episode_id' => $episode_id]);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $episode_roles = json_decode(getProp($episode, 'roles'), true) ?: [];
|
|
|
|
|
+ $episode_scenes = json_decode(getProp($episode, 'scenes'), true) ?: [];
|
|
|
|
|
+
|
|
|
|
|
+ $roles_updated = false;
|
|
|
|
|
+ $scenes_updated = false;
|
|
|
|
|
+
|
|
|
|
|
+ // 继承角色的task_id、task_status和url
|
|
|
|
|
+ foreach ($episode_roles as &$episode_role) {
|
|
|
|
|
+ $episode_role_name = getProp($episode_role, 'role');
|
|
|
|
|
+ $episode_description = getProp($episode_role, 'description');
|
|
|
|
|
+ $episode_url = getProp($episode_role, 'url');
|
|
|
|
|
+
|
|
|
|
|
+ // 跳过旁白角色
|
|
|
|
|
+ if ($episode_role_name == '旁白') {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果剧集中已有URL,跳过
|
|
|
|
|
+ if (!empty($episode_url)) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 遍历全局角色数据,查找匹配的角色
|
|
|
|
|
+ foreach ($global_roles as $global_role) {
|
|
|
|
|
+ $global_role_name = getProp($global_role, 'role');
|
|
|
|
|
+ $global_description = getProp($global_role, 'description');
|
|
|
|
|
+ $global_url = getProp($global_role, 'url');
|
|
|
|
|
+ $global_task_id = getProp($global_role, 'task_id');
|
|
|
|
|
+ $global_task_status = getProp($global_role, 'task_status');
|
|
|
|
|
+
|
|
|
|
|
+ // 满足条件:1.角色名相同 2.描述相同 3.剧集中URL为空
|
|
|
|
|
+ if ($episode_role_name == $global_role_name && $episode_description == $global_description) {
|
|
|
|
|
+ // 继承 task_id、task_status 和 url
|
|
|
|
|
+ if (!empty($global_task_id)) {
|
|
|
|
|
+ $episode_role['task_id'] = $global_task_id;
|
|
|
|
|
+ $episode_role['task_status'] = $global_task_status;
|
|
|
|
|
+ $roles_updated = true;
|
|
|
|
|
+ dLog('deepseek')->info('剧集角色继承全局task_id', [
|
|
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
|
|
+ 'role' => $episode_role_name,
|
|
|
|
|
+ 'task_id' => $global_task_id,
|
|
|
|
|
+ 'task_status' => $global_task_status
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!empty($global_url)) {
|
|
|
|
|
+ $episode_role['url'] = $global_url;
|
|
|
|
|
+ $roles_updated = true;
|
|
|
|
|
+ dLog('deepseek')->info('剧集角色继承全局url', [
|
|
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
|
|
+ 'role' => $episode_role_name,
|
|
|
|
|
+ 'url' => $global_url
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 继承场景的task_id、task_status和url
|
|
|
|
|
+ foreach ($episode_scenes as &$episode_scene) {
|
|
|
|
|
+ $episode_scene_name = getProp($episode_scene, 'scene');
|
|
|
|
|
+ $episode_description = getProp($episode_scene, 'description');
|
|
|
|
|
+ $episode_url = getProp($episode_scene, 'url');
|
|
|
|
|
+
|
|
|
|
|
+ // 如果剧集中已有URL,跳过
|
|
|
|
|
+ if (!empty($episode_url)) {
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 遍历全局场景数据,查找匹配的场景
|
|
|
|
|
+ foreach ($global_scenes as $global_scene) {
|
|
|
|
|
+ $global_scene_name = getProp($global_scene, 'scene');
|
|
|
|
|
+ $global_description = getProp($global_scene, 'description');
|
|
|
|
|
+ $global_url = getProp($global_scene, 'url');
|
|
|
|
|
+ $global_task_id = getProp($global_scene, 'task_id');
|
|
|
|
|
+ $global_task_status = getProp($global_scene, 'task_status');
|
|
|
|
|
+
|
|
|
|
|
+ // 满足条件:1.场景名相同 2.描述相同 3.剧集中URL为空
|
|
|
|
|
+ if ($episode_scene_name == $global_scene_name && $episode_description == $global_description) {
|
|
|
|
|
+ // 继承 task_id、task_status 和 url
|
|
|
|
|
+ if (!empty($global_task_id)) {
|
|
|
|
|
+ $episode_scene['task_id'] = $global_task_id;
|
|
|
|
|
+ $episode_scene['task_status'] = $global_task_status;
|
|
|
|
|
+ $scenes_updated = true;
|
|
|
|
|
+ dLog('deepseek')->info('剧集场景继承全局task_id', [
|
|
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
|
|
+ 'scene' => $episode_scene_name,
|
|
|
|
|
+ 'task_id' => $global_task_id,
|
|
|
|
|
+ 'task_status' => $global_task_status
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!empty($global_url)) {
|
|
|
|
|
+ $episode_scene['url'] = $global_url;
|
|
|
|
|
+ $scenes_updated = true;
|
|
|
|
|
+ dLog('deepseek')->info('剧集场景继承全局url', [
|
|
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
|
|
+ 'scene' => $episode_scene_name,
|
|
|
|
|
+ 'url' => $global_url
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果有更新,则保存到数据库
|
|
|
|
|
+ if ($roles_updated || $scenes_updated) {
|
|
|
|
|
+ $update_data = ['updated_at' => date('Y-m-d H:i:s')];
|
|
|
|
|
+
|
|
|
|
|
+ if ($roles_updated) {
|
|
|
|
|
+ $update_data['roles'] = json_encode($episode_roles, 256);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if ($scenes_updated) {
|
|
|
|
|
+ $update_data['scenes'] = json_encode($episode_scenes, 256);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ DB::table('mp_anime_episodes')->where('id', $episode_id)->update($update_data);
|
|
|
|
|
+
|
|
|
|
|
+ dLog('deepseek')->info('剧集继承全局图片数据完成', [
|
|
|
|
|
+ 'episode_id' => $episode_id,
|
|
|
|
|
+ 'roles_updated' => $roles_updated,
|
|
|
|
|
+ 'scenes_updated' => $scenes_updated
|
|
|
|
|
+ ]);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public function chatChangeImg($data) {
|
|
public function chatChangeImg($data) {
|
|
|
$segment = getProp($data, 'segment');
|
|
$segment = getProp($data, 'segment');
|
|
|
$segment_content = getProp($segment, 'segment_content');
|
|
$segment_content = getProp($segment, 'segment_content');
|