|
|
@@ -434,6 +434,7 @@ class AnimeService
|
|
|
|
|
|
public function copyEpisodeVersion($data) {
|
|
|
$episode_id = getProp($data, 'episode_id');
|
|
|
+ $uid = Site::getUid();
|
|
|
|
|
|
$episode = DB::table('mp_anime_episodes')->where('id', $episode_id)->first();
|
|
|
if (!$episode) Utils::throwError('20003:该剧集不存在');
|
|
|
@@ -441,21 +442,19 @@ class AnimeService
|
|
|
$episode = (array)$episode;
|
|
|
$anime_id = $episode['anime_id'];
|
|
|
$episode_number = $episode['episode_number'];
|
|
|
- $count = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->count('id');
|
|
|
- $sequence = $count + 1;
|
|
|
+ $count = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->where('version_count', '>', 1)->count('id');
|
|
|
unset($episode['id']);
|
|
|
- $episode['sequence'] = $sequence;
|
|
|
- $episode['created_at'] = date('Y-m-d H:i:s');
|
|
|
- $episode['updated_at'] = date('Y-m-d H:i:s');
|
|
|
+ $now = date('Y-m-d H:i:s');
|
|
|
+ $episode['created_at'] = $now;
|
|
|
+ $episode['updated_at'] = $now;
|
|
|
$episode['is_default'] = 1;
|
|
|
+ $episode['title'] = $count > 0 ? $episode['title']."(副本{$count})" : $episode['title']."(副本)";
|
|
|
+ $episode['version_count'] = $count + 2;
|
|
|
+ $episode['is_generated'] = 0;
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
- // 移除is_default标志
|
|
|
- $boolen = DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->update(['is_default' => 0, 'updated_at'=>date('Y-m-d H:i:s')]);
|
|
|
- if (!$boolen) {
|
|
|
- Utils::throwError('20003:更新失败!');
|
|
|
- }
|
|
|
+ DB::table('mp_anime_episodes')->where('anime_id', $anime_id)->where('episode_number', $episode_number)->update(['is_default' => 0, 'updated_at'=>$now]);
|
|
|
|
|
|
// 新增副本
|
|
|
$new_episode_id = DB::table('mp_anime_episodes')->insertGetId($episode);
|
|
|
@@ -478,6 +477,35 @@ class AnimeService
|
|
|
if (!$boolen2) {
|
|
|
Utils::throwError('20003:写入分镜数据失败!');
|
|
|
}
|
|
|
+
|
|
|
+ // 写入对话历史
|
|
|
+ $records = [
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'role' => 'user',
|
|
|
+ 'content' => '创建副本',
|
|
|
+ 'sequence' => $episode_number,
|
|
|
+ 'episode_id' => $new_episode_id,
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ],
|
|
|
+ [
|
|
|
+ 'uid' => $uid,
|
|
|
+ 'anime_id' => $anime_id,
|
|
|
+ 'role' => 'assistant',
|
|
|
+ 'content' => '好的,已为您创建副本',
|
|
|
+ 'sequence' => $episode_number,
|
|
|
+ 'episode_id' => $new_episode_id,
|
|
|
+ 'created_at' => $now,
|
|
|
+ 'updated_at' => $now
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+ $boolen3 = DB::table('mp_anime_records')->insert($records);
|
|
|
+ if (!$boolen3) {
|
|
|
+ Utils::throwError('20003:对话记录保存失败');
|
|
|
+ }
|
|
|
+
|
|
|
}catch (\Exception $e) {
|
|
|
DB::rollBack();
|
|
|
Utils::throwError('20003:'.$e->getMessage());
|
|
|
@@ -495,6 +523,7 @@ class AnimeService
|
|
|
'art_style' => $episode['art_style'],
|
|
|
'roles' => json_decode($episode['roles'], true),
|
|
|
'scenes' => json_decode($episode['scenes'], true),
|
|
|
+ 'is_generated' => (int)$episode['is_generated']
|
|
|
];
|
|
|
|
|
|
// 复用已有的分镜数据,按 act 分组(避免重复查询数据库)
|
|
|
@@ -556,7 +585,7 @@ class AnimeService
|
|
|
})->toArray();
|
|
|
if (!$episodes) Utils::throwError('20003:该剧集不存在!');
|
|
|
foreach($episodes as &$episode) {
|
|
|
- $episode['version'] = 'V'.$episode['sequence'];
|
|
|
+ $episode['version'] = 'V'.$episode['version_count'];
|
|
|
$episode['roles'] = json_decode($episode['roles'], true);
|
|
|
$episode['scenes'] = json_decode($episode['scenes'], true);
|
|
|
}
|
|
|
@@ -914,7 +943,7 @@ class AnimeService
|
|
|
// 获取所有分镜信息
|
|
|
$segments = DB::table('mp_episode_segments')
|
|
|
->where('anime_id', $anime_id)
|
|
|
- ->where('episode_id', $episode->episode_id)
|
|
|
+ ->where('episode_id', $episode_id)
|
|
|
->whereNotIn('pic_task_status', ['已完成', '生成中'])
|
|
|
->orderBy('segment_number')
|
|
|
->get()
|
|
|
@@ -1081,15 +1110,15 @@ class AnimeService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // // 更新剧集生成状态
|
|
|
- // if (!empty($updated_segments)) {
|
|
|
- // DB::table('mp_anime_episodes')
|
|
|
- // ->where('id', $episode->episode_id)
|
|
|
- // ->update([
|
|
|
- // 'generate_status' => '执行中',
|
|
|
- // 'updated_at' => date('Y-m-d H:i:s')
|
|
|
- // ]);
|
|
|
- // }
|
|
|
+ // 更新剧集生成状态
|
|
|
+ if (!empty($updated_segments)) {
|
|
|
+ DB::table('mp_anime_episodes')
|
|
|
+ ->where('id', $episode_id)
|
|
|
+ ->update([
|
|
|
+ 'is_generated' => 1,
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
+ }
|
|
|
|
|
|
return [
|
|
|
'success_count' => count($updated_segments),
|