|
|
@@ -1396,19 +1396,19 @@ class DeepSeekService
|
|
|
|
|
|
public function createEpisode($data) {
|
|
|
$script_id = getProp($data, 'script_id');
|
|
|
- $episode_name = getProp($data, 'episode_name');
|
|
|
+ $group_name = getProp($data, 'group_name');
|
|
|
$remark = getProp($data, 'remark');
|
|
|
|
|
|
$uid = Site::getUid(); // 获取当前用户ID
|
|
|
- if (!$episode_name) Utils::throwError('20003:分集名称不能为空');
|
|
|
+ if (!$group_name) Utils::throwError('20003:分集名称不能为空');
|
|
|
|
|
|
- if (DB::table('mp_script_episode_group')->where('episode_name', $episode_name)->exists()) {
|
|
|
- $episode_name .= '_'.date('YmdHis');
|
|
|
+ if (DB::table('mp_script_episode_group')->where('group_name', $group_name)->exists()) {
|
|
|
+ $group_name .= '_'.date('YmdHis');
|
|
|
}
|
|
|
|
|
|
return DB::table('mp_script_episode_group')->insertGetId([
|
|
|
'script_id' => $script_id,
|
|
|
- 'episode_name' => $episode_name,
|
|
|
+ 'group_name' => $group_name,
|
|
|
'user_id' => $uid,
|
|
|
'remark' => $remark,
|
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
|
@@ -1420,17 +1420,17 @@ class DeepSeekService
|
|
|
$group_id = getProp($data, 'group_id');
|
|
|
$start_episode_number = getProp($data, 'start_episode_number');
|
|
|
$end_episode_number = getProp($data, 'end_episode_number');
|
|
|
- $episode_name = getProp($data, 'episode_name');
|
|
|
+ $group_name = getProp($data, 'group_name');
|
|
|
$uid = Site::getUid(); // 获取当前用户ID
|
|
|
- if (!$group_id || !$episode_name || !$start_episode_number || !$end_episode_number) Utils::throwError('20003:参数异常');
|
|
|
+ if (!$group_id || !$group_name || !$start_episode_number || !$end_episode_number) Utils::throwError('20003:参数异常');
|
|
|
|
|
|
- $id = DB::table('mp_script_episode_group')->where('episode_name', $episode_name)->value('id');
|
|
|
+ $id = DB::table('mp_script_episode_group')->where('group_name', $group_name)->value('id');
|
|
|
if ((int)$id != (int)$group_id) {
|
|
|
- $episode_name .= '_'.date('YmdHis');
|
|
|
+ $group_name .= '_'.date('YmdHis');
|
|
|
}
|
|
|
|
|
|
return DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
- 'episode_name' => $episode_name,
|
|
|
+ 'group_name' => $group_name,
|
|
|
'start_episode_number' => $start_episode_number,
|
|
|
'end_episode_number' => $end_episode_number,
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
@@ -1851,11 +1851,40 @@ class DeepSeekService
|
|
|
}
|
|
|
|
|
|
public function exportScript($data) {
|
|
|
- $script = $this->scriptInfo($data);
|
|
|
+ $filename = getProp($data, 'filename');
|
|
|
+ $script_id = getProp($data, 'script_id');
|
|
|
+ $group_id = getProp($data, 'group_id');
|
|
|
+
|
|
|
+ $script = DB::table('mp_scripts')->where('id', $script_id)->where('is_deleted', 0)
|
|
|
+ ->selectRaw('id as script_id, script_name, intro, highlights, roles, role_relationship, core_contradiction, art_style, scenes, status, start_episode_sequence, end_episode_sequence, episode_num, remark, created_at')->first();
|
|
|
+ if (!$script) Utils::throwError('20003:该剧本不存在!');
|
|
|
+ $script = (array)$script;
|
|
|
+ $script['roles'] = json_decode($script['roles']);
|
|
|
+ $script['scenes'] = json_decode($script['scenes']);
|
|
|
+ $start = 1;
|
|
|
+ $end = DB::table('mp_script_episodes')->where('script_id', $script_id)->count('id');
|
|
|
+
|
|
|
+ // 获取分集组信息
|
|
|
+ if ($group_id) {
|
|
|
+ $group = DB::table('mp_script_episode_group')->where('script_id', $script_id)->where('id', $group_id)
|
|
|
+ ->select('start_episode_number', 'end_episode_number')->first();
|
|
|
+ if (!$group) Utils::throwError('20003:分集不存在');
|
|
|
+
|
|
|
+ $start = getProp($group, 'start_episode_number');
|
|
|
+ $end = getProp($group, 'end_episode_number');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取分集信息
|
|
|
+ $episode_list = DB::table('mp_script_episodes')->where('script_id', $script_id)->whereBetween('episode_number', [$start, $end])
|
|
|
+ ->select('episode_number', 'episode_name', 'episode_content')->orderBy('episode_number')->get()->map(function ($value) {
|
|
|
+ return (array)$value;
|
|
|
+ })->toArray();
|
|
|
+ $script['episodes'] = $episode_list;
|
|
|
+
|
|
|
$export_type = getProp($data, 'export_type', 'txt');
|
|
|
|
|
|
// 生成文件名
|
|
|
- $filename = $script['script_name'] . '_' . date('YmdHis');
|
|
|
+ $filename = $filename ? $filename : $script['script_name'] . '_' . date('YmdHis');
|
|
|
|
|
|
// 根据导出类型生成不同格式的文件
|
|
|
switch ($export_type) {
|
|
|
@@ -2005,23 +2034,25 @@ class DeepSeekService
|
|
|
foreach ($script['episodes'] as $episode) {
|
|
|
$html .= '<div class="episode">';
|
|
|
$html .= '<h3>第' . htmlspecialchars($episode['episode_number']) . '集';
|
|
|
- if (!empty($episode['title'])) {
|
|
|
- $html .= ':' . htmlspecialchars($episode['title']);
|
|
|
+ if (!empty($episode['episode_name'])) {
|
|
|
+ $html .= ':' . htmlspecialchars($episode['episode_name']);
|
|
|
}
|
|
|
$html .= '</h3>';
|
|
|
-
|
|
|
- // 处理分段内容
|
|
|
- if (!empty($episode['segments']) && is_array($episode['segments'])) {
|
|
|
- foreach ($episode['segments'] as $segment) {
|
|
|
- if (!empty($segment['segment_content'])) {
|
|
|
- $html .= '<div class="segment">';
|
|
|
- if (!empty($segment['segment_number'])) {
|
|
|
- $html .= '<strong>第' . htmlspecialchars($segment['segment_number']) . '段</strong><br>';
|
|
|
- }
|
|
|
- $html .= nl2br(htmlspecialchars($segment['segment_content']));
|
|
|
- $html .= '</div>';
|
|
|
- }
|
|
|
+
|
|
|
+ // 处理分集内容
|
|
|
+ if (!empty($episode['episode_content'])) {
|
|
|
+ $html .= '<div class="segment">';
|
|
|
+ // 去掉第一行(标题行)
|
|
|
+ $content = $episode['episode_content'];
|
|
|
+ $lines = explode("\n", $content);
|
|
|
+ if (count($lines) > 1) {
|
|
|
+ array_shift($lines); // 移除第一行
|
|
|
+ $content = implode("\n", $lines);
|
|
|
+ } else {
|
|
|
+ $content = ''; // 如果只有一行,则清空
|
|
|
}
|
|
|
+ $html .= nl2br(htmlspecialchars($content));
|
|
|
+ $html .= '</div>';
|
|
|
}
|
|
|
|
|
|
$html .= '</div>';
|
|
|
@@ -2219,19 +2250,12 @@ class DeepSeekService
|
|
|
if (!empty($script['episodes']) && is_array($script['episodes'])) {
|
|
|
$content .= "###分集剧本\n";
|
|
|
foreach ($script['episodes'] as $episode) {
|
|
|
- $content .= "##分集" . $episode['episode_number'] . "\n分集名";
|
|
|
- if (!empty($episode['title'])) {
|
|
|
- $content .= ":" . $episode['title'];
|
|
|
- }
|
|
|
- $content .= "\n";
|
|
|
-
|
|
|
- // 处理分镜
|
|
|
- if (!empty($episode['segments']) && is_array($episode['segments'])) {
|
|
|
- foreach ($episode['segments'] as $segment) {
|
|
|
- $content .= "分镜" . $episode['episode_number'] . '-' . $segment['segment_number'] . "\n";
|
|
|
- $content .= $segment['segment_content'] . "\n\n";
|
|
|
- }
|
|
|
- }
|
|
|
+ // $content .= "##分集" . $episode['episode_number'] . "\n分集名";
|
|
|
+ // if (!empty($episode['episode_name'])) {
|
|
|
+ // $content .= ":" . $episode['episode_name'];
|
|
|
+ // }
|
|
|
+ // $content .= "\n";
|
|
|
+ $content .= $episode['episode_content'] . "\n\n";
|
|
|
}
|
|
|
}
|
|
|
|