|
|
@@ -1323,28 +1323,19 @@ class DeepSeekService
|
|
|
public function scriptInfo($data) {
|
|
|
$script_id = getProp($data, 'script_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();
|
|
|
+ // ->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();
|
|
|
+ ->selectRaw('id as script_id, script_name')->first();
|
|
|
if (!$script) Utils::throwError('20003:该剧本不存在!');
|
|
|
$script = (array)$script;
|
|
|
- $script['roles'] = json_decode($script['roles']);
|
|
|
- $script['scenes'] = json_decode($script['scenes']);
|
|
|
|
|
|
// 获取分集组信息
|
|
|
$groups = DB::table('mp_script_episode_group')->where('script_id', $script_id)
|
|
|
- ->select('id as group_id', 'script_id', 'group_name', 'start_episode_number', 'end_episode_number')
|
|
|
- ->orderBy('start_episode_number')->get()->map(function ($value) {
|
|
|
+ ->selectRaw('id as group_id, script_id, group_name, start_episode_number, end_episode_number, intro, highlights, roles, role_relationship, core_contradiction, art_style, scenes, status, episode_content')
|
|
|
+ ->orderBy('start_episode_number')->orderBy('id')->get()->map(function ($value) {
|
|
|
+ $value = (array)$value;
|
|
|
+ $value['episode_content'] = mb_substr($value['episode_content'], 0, 200);
|
|
|
return (array)$value;
|
|
|
})->toArray();
|
|
|
-
|
|
|
- foreach($groups as &$group) {
|
|
|
- $script_id = getProp($group, 'script_id');
|
|
|
- // 获取2个分集
|
|
|
- $episode_list = DB::table('mp_script_episodes')->where('script_id', $script_id)->whereBetween('episode_number', [$group['start_episode_number'], $group['end_episode_number']])
|
|
|
- ->select('episode_number', 'episode_name', 'episode_content')->orderBy('episode_number')->limit(2)->get()->map(function ($value) {
|
|
|
- return (array)$value;
|
|
|
- })->toArray();
|
|
|
- $group['episodes'] = $episode_list;
|
|
|
- }
|
|
|
$script['group'] = $groups;
|
|
|
return $script;
|
|
|
}
|
|
|
@@ -1483,8 +1474,36 @@ class DeepSeekService
|
|
|
Utils::throwError('20003:该模型不存在!');
|
|
|
}
|
|
|
|
|
|
- $exists_sequence_arr = DB::table('mp_script_episodes')->where('script_id', $script_id)->whereBetween('episode_number', [$start_episode_sequence, $end_episode_sequence])->pluck('episode_number')->toArray();
|
|
|
- if ($exists_sequence_arr) Utils::throwError('20003:剧集 '.implode('、', $exists_sequence_arr).' 已存在,不得创建!');
|
|
|
+ // 检查是否存在重叠的剧集序号范围
|
|
|
+ $exists_groups = DB::table('mp_script_episode_group')
|
|
|
+ ->where('script_id', $script_id)
|
|
|
+ ->where('id', '<>', $group_id) // 排除当前组
|
|
|
+ ->where(function($query) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 检查新范围是否与现有范围重叠
|
|
|
+ $query->where(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围的开始在现有范围内
|
|
|
+ $q->where('start_episode_number', '<=', $start_episode_sequence)
|
|
|
+ ->where('end_episode_number', '>=', $start_episode_sequence);
|
|
|
+ })->orWhere(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围的结束在现有范围内
|
|
|
+ $q->where('start_episode_number', '<=', $end_episode_sequence)
|
|
|
+ ->where('end_episode_number', '>=', $end_episode_sequence);
|
|
|
+ })->orWhere(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围完全包含现有范围
|
|
|
+ $q->where('start_episode_number', '>=', $start_episode_sequence)
|
|
|
+ ->where('end_episode_number', '<=', $end_episode_sequence);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ ->select('start_episode_number', 'end_episode_number')
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ if ($exists_groups->isNotEmpty()) {
|
|
|
+ $conflict_ranges = [];
|
|
|
+ foreach ($exists_groups as $group) {
|
|
|
+ $conflict_ranges[] = "第{$group->start_episode_number}-{$group->end_episode_number}集";
|
|
|
+ }
|
|
|
+ Utils::throwError('20003:剧集序号范围与已存在的剧集组重叠: '.implode('、', $conflict_ranges).',不得创建!');
|
|
|
+ }
|
|
|
|
|
|
// 模型兼容性处理:deepseek-chat 和 deepseek-reasoner 映射到 deepseek-v4-flash
|
|
|
$thinkingMode = getProp($data, 'thinking', 'disabled'); // 默认非思考模式
|
|
|
@@ -1504,7 +1523,7 @@ class DeepSeekService
|
|
|
if (!$script) {
|
|
|
Utils::throwError('20003:剧本不存在');
|
|
|
}
|
|
|
- $content = getProp($script, 'content');
|
|
|
+ $content = getProp($group, 'content');
|
|
|
|
|
|
if (!$file && !$content && !$bid) {
|
|
|
Utils::throwError('20003:请上传文件或选择书籍或输入内容');
|
|
|
@@ -1603,38 +1622,44 @@ class DeepSeekService
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
- // 返回前保存剧本内容
|
|
|
- $boolen = DB::table('mp_scripts')->where('id', $script_id)->update([
|
|
|
- 'content' => $content,
|
|
|
- 'updated_at' => date('Y-m-d H:i:s')
|
|
|
- ]);
|
|
|
- if (!$boolen) {
|
|
|
- Utils::throwError('20003:保存剧本内容失败');
|
|
|
- }
|
|
|
+ // // 返回前保存剧本内容
|
|
|
+ // $boolen = DB::table('mp_scripts')->where('id', $script_id)->update([
|
|
|
+ // 'content' => $content,
|
|
|
+ // 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ // ]);
|
|
|
+ // if (!$boolen) {
|
|
|
+ // Utils::throwError('20003:保存剧本内容失败');
|
|
|
+ // }
|
|
|
|
|
|
- $boolen1 = DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
- 'start_episode_number' => $start_episode_sequence,
|
|
|
- 'end_episode_number' => $end_episode_sequence,
|
|
|
- 'updated_at' => date('Y-m-d H:i:s')
|
|
|
- ]);
|
|
|
- if (!$boolen1) {
|
|
|
- Utils::throwError('20003:保存分集失败');
|
|
|
- }
|
|
|
+ // $boolen1 = DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
+ // 'start_episode_number' => $start_episode_sequence,
|
|
|
+ // 'end_episode_number' => $end_episode_sequence,
|
|
|
+ // 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ // ]);
|
|
|
+ // if (!$boolen1) {
|
|
|
+ // Utils::throwError('20003:保存分集失败');
|
|
|
+ // }
|
|
|
+
|
|
|
+ $episode_content = '';
|
|
|
|
|
|
$episodes = [];
|
|
|
foreach ($script_arr['episodes'] as $item) {
|
|
|
- $episodes[] = [
|
|
|
- 'script_id' => $script_id,
|
|
|
- 'episode_number' => $item['episode_number'],
|
|
|
- 'episode_name' => $item['episode_name'],
|
|
|
- 'episode_content' => $item['episode_content'],
|
|
|
- 'created_at' => date('Y-m-d H:i:s'),
|
|
|
- 'updated_at' => date('Y-m-d H:i:s'),
|
|
|
- ];
|
|
|
+ $episode_content .= "\u{200D}\u{200D}\u{200D}" . $item['episode_content'] . "\r\n\r\n";
|
|
|
+ // $episodes[] = [
|
|
|
+ // 'script_id' => $script_id,
|
|
|
+ // 'episode_number' => $item['episode_number'],
|
|
|
+ // 'episode_name' => $item['episode_name'],
|
|
|
+ // 'episode_content' => $item['episode_content'],
|
|
|
+ // 'created_at' => date('Y-m-d H:i:s'),
|
|
|
+ // 'updated_at' => date('Y-m-d H:i:s'),
|
|
|
+ // ];
|
|
|
}
|
|
|
|
|
|
- if ($episodes) {
|
|
|
- $boolen2 = DB::table('mp_script_episodes')->insert($episodes);
|
|
|
+ if ($episode_content) {
|
|
|
+ $boolen2 = DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
+ 'episode_content' => $episode_content,
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
if (!$boolen2) {
|
|
|
Utils::throwError('20003:保存分集内容失败');
|
|
|
}
|
|
|
@@ -1672,8 +1697,35 @@ class DeepSeekService
|
|
|
Utils::throwError('20003:该模型不存在!');
|
|
|
}
|
|
|
|
|
|
- $exists_sequence_arr = DB::table('mp_script_episodes')->where('script_id', $script_id)->whereBetween('episode_number', [$start_episode_sequence, $end_episode_sequence])->pluck('episode_number')->toArray();
|
|
|
- if ($exists_sequence_arr) Utils::throwError('20003:剧集 '.implode('、', $exists_sequence_arr).' 已存在,不得创建!');
|
|
|
+ // 检查是否存在重叠的剧集序号范围
|
|
|
+ $exists_groups = DB::table('mp_script_episode_group')
|
|
|
+ ->where('script_id', $script_id)
|
|
|
+ ->where(function($query) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 检查新范围是否与现有范围重叠
|
|
|
+ $query->where(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围的开始在现有范围内
|
|
|
+ $q->where('start_episode_number', '<=', $start_episode_sequence)
|
|
|
+ ->where('end_episode_number', '>=', $start_episode_sequence);
|
|
|
+ })->orWhere(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围的结束在现有范围内
|
|
|
+ $q->where('start_episode_number', '<=', $end_episode_sequence)
|
|
|
+ ->where('end_episode_number', '>=', $end_episode_sequence);
|
|
|
+ })->orWhere(function($q) use ($start_episode_sequence, $end_episode_sequence) {
|
|
|
+ // 新范围完全包含现有范围
|
|
|
+ $q->where('start_episode_number', '>=', $start_episode_sequence)
|
|
|
+ ->where('end_episode_number', '<=', $end_episode_sequence);
|
|
|
+ });
|
|
|
+ })
|
|
|
+ ->select('start_episode_number', 'end_episode_number')
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ if ($exists_groups->isNotEmpty()) {
|
|
|
+ $conflict_ranges = [];
|
|
|
+ foreach ($exists_groups as $group) {
|
|
|
+ $conflict_ranges[] = "第{$group->start_episode_number}-{$group->end_episode_number}集";
|
|
|
+ }
|
|
|
+ Utils::throwError('20003:剧集序号范围与已存在的剧集组重叠: '.implode('、', $conflict_ranges).',不得创建!');
|
|
|
+ }
|
|
|
|
|
|
// 模型兼容性处理:deepseek-chat 和 deepseek-reasoner 映射到 deepseek-v4-flash
|
|
|
$thinkingMode = getProp($data, 'thinking', 'disabled'); // 默认非思考模式
|
|
|
@@ -1839,19 +1891,28 @@ class DeepSeekService
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
- // 返回前保存剧本内容
|
|
|
- $boolen = DB::table('mp_scripts')->where('id', $script_id)->update([
|
|
|
- 'content' => $content,
|
|
|
- 'status' => '解析完成',
|
|
|
- 'updated_at' => date('Y-m-d H:i:s')
|
|
|
- ]);
|
|
|
- if (!$boolen) {
|
|
|
- Utils::throwError('20003:保存剧本内容失败');
|
|
|
- }
|
|
|
+ // // 返回前保存剧本内容
|
|
|
+ // $boolen = DB::table('mp_scripts')->where('id', $script_id)->update([
|
|
|
+ // 'content' => $content,
|
|
|
+ // 'status' => '解析完成',
|
|
|
+ // 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ // ]);
|
|
|
+ // if (!$boolen) {
|
|
|
+ // Utils::throwError('20003:保存剧本内容失败');
|
|
|
+ // }
|
|
|
|
|
|
$boolen1 = DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
'start_episode_number' => $start_episode_sequence,
|
|
|
'end_episode_number' => $end_episode_sequence,
|
|
|
+ 'intro' => isset($script_arr['intro']) ? $script_arr['intro'] : '',
|
|
|
+ 'highlights' => isset($script_arr['highlights']) ? $script_arr['highlights'] : '',
|
|
|
+ 'role_relationship' => isset($script_arr['role_relationship']) ? $script_arr['role_relationship'] : '',
|
|
|
+ 'core_contradiction' => isset($script_arr['core_contradiction']) ? $script_arr['core_contradiction'] : '',
|
|
|
+ 'roles' => isset($script_arr['roles']) ? json_encode($script_arr['roles'], 256) : '',
|
|
|
+ 'art_style' => isset($script_arr['art_style']) ? $script_arr['art_style'] : '',
|
|
|
+ 'scenes' => isset($script_arr['scenes']) ? json_encode($script_arr['scenes'], 256) : '',
|
|
|
+ 'status' => '解析完成',
|
|
|
+ 'content' => $content,
|
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
|
]);
|
|
|
if (!$boolen1) {
|
|
|
@@ -2024,7 +2085,22 @@ class DeepSeekService
|
|
|
];
|
|
|
}
|
|
|
|
|
|
- public function saveScript($data) {
|
|
|
+ public function getEpisodeContent($data) {
|
|
|
+ $group_id = getProp($data, 'group_id');
|
|
|
+
|
|
|
+ return DB::table('mp_script_episode_group')->where('id', $group_id)->value('episode_content');
|
|
|
+ }
|
|
|
+
|
|
|
+ public function saveEpisodeContent($data) {
|
|
|
+ $group_id = getProp($data, 'group_id');
|
|
|
+ $episode_content = getProp($data, 'episode_content');
|
|
|
+
|
|
|
+ return DB::table('mp_script_episode_group')->where('id', $group_id)->update([
|
|
|
+ 'content' => $episode_content,
|
|
|
+ 'updated_at' => date('Y-m-d H:i:s')
|
|
|
+ ]);
|
|
|
+
|
|
|
+
|
|
|
$script_arr =getProp($data, 'script', []);
|
|
|
if (!$script_arr) Utils::throwError('20003:剧本内容不能为空');
|
|
|
$start_episode_sequence = getProp($data, 'start_episode_sequence', 1);
|