Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
沈秋雨
/
import_hk_songs
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
c8ead117
...
c8ead11724e1dcb9ff13128f1f23342792405a17
authored
2026-07-21 15:03:48 +0800
by
沈秋雨
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
feat(import): 支持同曲不同词样本的新歌入库逻辑
1 parent
527d6149
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
11 deletions
l2_review_dashboard.html
serve_l2_dashboard.py
l2_review_dashboard.html
View file @
c8ead11
...
...
@@ -1565,7 +1565,7 @@
els.importReviewedBtn.textContent = '入库中...';
try {
const payload = await reviewPostJSON('/api/import-reviewed');
alert(`
提交完成:不重复入库
$
{
payload
.
inserted_count
}
条,重复样本
$
{
payload
.
duplicate_count
||
0
}
条,其中作者有增量
$
{
payload
.
author_merged_count
||
0
}
条。结果文件:
$
{
payload
.
review_csv
}
`);
alert(`
提交完成:不重复入库
$
{
payload
.
inserted_count
}
条
(含同曲不同词
$
{
payload
.
diff_lyric_count
||
0
}
条)
,重复样本
$
{
payload
.
duplicate_count
||
0
}
条,其中作者有增量
$
{
payload
.
author_merged_count
||
0
}
条。结果文件:
$
{
payload
.
review_csv
}
`);
// 刷新统计和加载列表并行
await Promise.all([reloadSummary(), loadGroups()]);
renderAll();
...
...
serve_l2_dashboard.py
View file @
c8ead11
...
...
@@ -806,7 +806,7 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
cursor
.
execute
(
f
"""
SELECT s.staging_id, s.id AS incoming_id, s.source_song_id, s.source_table_name, s.name,
s.lyricist, s.composer, s.biz_review_status, s.matched_song_id
s.lyricist, s.composer, s.biz_review_status, s.matched_song_id
, s.merge_diff_type
FROM {TARGET_TABLE_NAME_TMP} s
INNER JOIN (
SELECT source_song_id, MAX(staging_id) AS max_staging_id
...
...
@@ -828,9 +828,17 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
conn
.
rollback
()
raise
ValueError
(
"没有可提交的已审核样本"
)
approved_rows
=
[
row
for
row
in
reviewed_rows
if
row
[
"biz_review_status"
]
==
"approved_import"
]
duplicate_rows
=
[
row
for
row
in
reviewed_rows
if
row
[
"biz_review_status"
]
==
"rejected_duplicate"
]
staging_ids
=
[
row
[
"staging_id"
]
for
row
in
approved_rows
]
approved_source_ids
=
[
str
(
row
[
"source_song_id"
])
for
row
in
approved_rows
]
# 同曲不同词:歌词不同,需作为新歌入库
diff_lyric_rows
=
[
row
for
row
in
reviewed_rows
if
row
[
"biz_review_status"
]
==
"rejected_duplicate"
and
row
.
get
(
"merge_diff_type"
)
==
"diff_lyric_same_melody"
]
# 纯重复 / 同词不同曲:不入库,仅合并作者
duplicate_rows
=
[
row
for
row
in
reviewed_rows
if
row
[
"biz_review_status"
]
==
"rejected_duplicate"
and
row
.
get
(
"merge_diff_type"
)
!=
"diff_lyric_same_melody"
]
import_rows
=
approved_rows
+
diff_lyric_rows
staging_ids
=
[
row
[
"staging_id"
]
for
row
in
import_rows
]
all_import_source_ids
=
[
str
(
row
[
"source_song_id"
])
for
row
in
import_rows
]
duplicate_targets
:
dict
[
object
,
int
]
=
{}
unresolved_duplicates
=
[]
for
row
in
duplicate_rows
:
...
...
@@ -858,7 +866,7 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
inserted_count
=
0
id_map
:
dict
[
str
,
object
]
=
{}
if
approved
_rows
:
if
import
_rows
:
staging_placeholders
=
","
.
join
([
"
%
s"
]
*
len
(
staging_ids
))
conflicts
=
_find_import_conflicts
(
cursor
,
staging_ids
)
if
conflicts
:
...
...
@@ -893,13 +901,13 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
FROM {TARGET_TABLE_NAME}
WHERE source_song_id IN ({source_placeholders})
"""
,
a
pproved
_source_ids
,
a
ll_import
_source_ids
,
)
id_map
=
{
str
(
row
[
"source_song_id"
]):
row
[
"target_id"
]
for
row
in
cursor
.
fetchall
()}
imported_updated
=
0
for
approved_row
in
approved
_rows
:
sid
=
str
(
approved
_row
[
"source_song_id"
])
for
import_row
in
import
_rows
:
sid
=
str
(
import
_row
[
"source_song_id"
])
target_id
=
id_map
.
get
(
sid
)
if
target_id
is
None
:
raise
RuntimeError
(
f
"入库后未找到目标记录: source_song_id={sid}"
)
...
...
@@ -910,7 +918,7 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
review_version = review_version + 1
WHERE staging_id =
%
s AND staging_status = 'staged'
"""
,
(
target_id
,
approved
_row
[
"staging_id"
]),
(
target_id
,
import
_row
[
"staging_id"
]),
)
imported_updated
+=
cursor
.
rowcount
...
...
@@ -958,12 +966,14 @@ def _import_approved_staging(source_ids: list[str] | None = None) -> dict[str, o
conn
.
commit
()
return
{
"approved_count"
:
len
(
approved_rows
),
"diff_lyric_count"
:
len
(
diff_lyric_rows
),
"inserted_count"
:
inserted_count
,
"imported_song_ids_updated"
:
imported_updated
,
"duplicate_count"
:
len
(
duplicate_rows
),
"duplicate_staging_updated"
:
duplicate_updated
,
"author_merged_count"
:
author_merged
,
"source_ids"
:
approved_source_ids
,
"source_ids"
:
[
str
(
row
[
"source_song_id"
])
for
row
in
approved_rows
],
"diff_lyric_source_ids"
:
[
str
(
row
[
"source_song_id"
])
for
row
in
diff_lyric_rows
],
"duplicate_source_ids"
:
[
str
(
row
[
"source_song_id"
])
for
row
in
duplicate_rows
],
}
...
...
Please
register
or
sign in
to post a comment