|
|
@@ -6831,13 +6831,13 @@ class AnimeService
|
|
|
// 根据is_public参数确定存储的user_id(公共库user_id=0,cpid保持不变)
|
|
|
$store_uid = $is_public ? 0 : $uid;
|
|
|
|
|
|
- // 新增参数:剧本ID和剧集序号(多个序号用英文逗号隔开)
|
|
|
+ // 新增参数:剧本ID和剧集序号(支持数组传参,多个序号也可用英文逗号隔开)
|
|
|
$script_id = (int)getProp($data, 'script_id', 0);
|
|
|
- $episode_number = trim(getProp($data, 'episode_number', ''));
|
|
|
- if ($script_id && $episode_number === '') {
|
|
|
+ $episode_numbers = $this->normalizeEpisodeNumbers(getProp($data, 'episode_number', []));
|
|
|
+ if ($script_id && empty($episode_numbers)) {
|
|
|
Utils::throwError('20003:剧集序号不能为空');
|
|
|
}
|
|
|
- if (!$script_id && $episode_number !== '') {
|
|
|
+ if (!$script_id && !empty($episode_numbers)) {
|
|
|
Utils::throwError('20003:请提供剧本ID');
|
|
|
}
|
|
|
|
|
|
@@ -6910,7 +6910,7 @@ class AnimeService
|
|
|
|
|
|
// 保存剧本资产关联关系
|
|
|
if ($script_id) {
|
|
|
- $this->saveProductScriptMapping($id, $script_id, $episode_number);
|
|
|
+ $this->saveProductScriptMapping($id, $script_id, $episode_numbers);
|
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
|
@@ -6941,13 +6941,13 @@ class AnimeService
|
|
|
$versions = getProp($data, 'versions');
|
|
|
$is_public = getProp($data, 'is_public', 0); // 0=个人资产库 1=公共资产库
|
|
|
|
|
|
- // 新增参数:剧本ID和剧集序号(多个序号用英文逗号隔开)
|
|
|
+ // 新增参数:剧本ID和剧集序号(支持数组传参,多个序号也可用英文逗号隔开)
|
|
|
$script_id = (int)getProp($data, 'script_id', 0);
|
|
|
- $episode_number = trim(getProp($data, 'episode_number', ''));
|
|
|
- if ($script_id && $episode_number === '') {
|
|
|
+ $episode_numbers = $this->normalizeEpisodeNumbers(getProp($data, 'episode_number', []));
|
|
|
+ if ($script_id && empty($episode_numbers)) {
|
|
|
Utils::throwError('20003:剧集序号不能为空');
|
|
|
}
|
|
|
- if (!$script_id && $episode_number !== '') {
|
|
|
+ if (!$script_id && !empty($episode_numbers)) {
|
|
|
Utils::throwError('20003:请提供剧本ID');
|
|
|
}
|
|
|
|
|
|
@@ -7082,7 +7082,7 @@ class AnimeService
|
|
|
|
|
|
// 保存剧本资产关联关系
|
|
|
if ($script_id) {
|
|
|
- $this->saveProductScriptMapping($id, $script_id, $episode_number);
|
|
|
+ $this->saveProductScriptMapping($id, $script_id, $episode_numbers);
|
|
|
}
|
|
|
|
|
|
DB::commit();
|
|
|
@@ -7099,10 +7099,12 @@ class AnimeService
|
|
|
*
|
|
|
* @param int $product_id 资产ID
|
|
|
* @param int $script_id 剧本ID
|
|
|
- * @param string $episode_number_str 剧集序号,多个序号用英文逗号隔开(序号从1开始)
|
|
|
+ * @param array $episode_numbers 剧集序号数组(序号从1开始)
|
|
|
* @return int 新增关联数量
|
|
|
*/
|
|
|
- private function saveProductScriptMapping($product_id, $script_id, $episode_number_str) {
|
|
|
+ private function saveProductScriptMapping($product_id, $script_id, $episode_numbers) {
|
|
|
+ $uid = Site::getUid();
|
|
|
+
|
|
|
// 验证剧本是否存在
|
|
|
$script = DB::table('mp_scripts')
|
|
|
->where('id', $script_id)
|
|
|
@@ -7113,15 +7115,23 @@ class AnimeService
|
|
|
Utils::throwError('20003:剧本不存在');
|
|
|
}
|
|
|
|
|
|
+ // 验证剧本归属:只能关联自己的剧本
|
|
|
+ if ((int)$script->user_id !== (int)$uid) {
|
|
|
+ Utils::throwError('20003:只能添加到自己的剧本');
|
|
|
+ }
|
|
|
+
|
|
|
// 使用 splitContent 拆分剧本内容获取总集数
|
|
|
$totalEpisodes = $this->getScriptTotalEpisodeCount($script);
|
|
|
|
|
|
- // 解析剧集序号(英文逗号分隔)
|
|
|
+ // 解析剧集序号(数组)
|
|
|
$episodes = [];
|
|
|
- foreach (explode(',', $episode_number_str) as $item) {
|
|
|
- $item = trim($item);
|
|
|
+ foreach ($episode_numbers as $item) {
|
|
|
+ if (is_array($item)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $item = trim((string)$item);
|
|
|
if ($item === '' || !is_numeric($item)) {
|
|
|
- Utils::throwError('20003:剧集序号格式不正确,多个序号请用英文逗号隔开');
|
|
|
+ Utils::throwError('20003:剧集序号格式不正确,仅支持数字数组或英文逗号分隔的数字');
|
|
|
}
|
|
|
$episodes[] = (int)$item;
|
|
|
}
|
|
|
@@ -7171,6 +7181,34 @@ class AnimeService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 规范化剧集序号参数,统一为数组
|
|
|
+ * 兼容传入数组(如 [1, 3, 5])、逗号分隔字符串(如 "1,3,5")以及字符串数组(如 ["1,3", 5])
|
|
|
+ *
|
|
|
+ * @param mixed $episode_number 剧集序号参数
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ private function normalizeEpisodeNumbers($episode_number) {
|
|
|
+ if (!is_array($episode_number)) {
|
|
|
+ $episode_number = explode(',', (string)$episode_number);
|
|
|
+ }
|
|
|
+
|
|
|
+ $items = [];
|
|
|
+ foreach ($episode_number as $item) {
|
|
|
+ if (is_array($item)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ foreach (explode(',', (string)$item) as $part) {
|
|
|
+ $part = trim($part);
|
|
|
+ if ($part !== '') {
|
|
|
+ $items[] = $part;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $items;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 获取剧本总集数(通过 splitContent 拆分剧本内容)
|
|
|
*
|
|
|
* @param object $script 剧本记录
|