From 19d6de9891fc4daf456c1ef5a16452b3dd697f85 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 3 Oct 2026 23:43:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(acquisition):=20=E5=90=8C=E4=B8=80=E4=BD=9C?= =?UTF-8?q?=E5=93=81=E5=B9=B6=E5=8F=91=E8=AF=84=E4=BC=B0=E6=97=B6=E5=8F=AA?= =?UTF-8?q?=E5=BB=BA=E4=B8=80=E4=B8=AA=E6=96=B0=E4=BD=9C=E5=93=81=E8=AE=A2?= =?UTF-8?q?=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新作品收录在事务里按作品加咨询锁并复查已有订阅;否则后建的订阅收录版本同名冲突、没有版本, 现在会被补建出一个多余的默认版本。 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei --- .../modules/acquisition-organize/services/acquisition.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/server/src/modules/acquisition-organize/services/acquisition.ts b/apps/server/src/modules/acquisition-organize/services/acquisition.ts index d215091e..7688565b 100644 --- a/apps/server/src/modules/acquisition-organize/services/acquisition.ts +++ b/apps/server/src/modules/acquisition-organize/services/acquisition.ts @@ -580,6 +580,14 @@ async function evaluateRelease(c: Ctx, rel: SourceReleaseRow, eventUnits: readon .executeTakeFirst(); if (!grant) return skip("no_automation_grant"); await db.transaction().execute(async (trx) => { + // 同一作品的几条资源并发评估时只建一个新作品订阅(否则后建的订阅收录版本同名冲突,被补建成默认版本) + await sql`select pg_advisory_xact_lock(hashtextextended(${`new_title:${entity.id}`}, 0))`.execute(trx); + const exists = await trx + .selectFrom("subscription") + .select("id") + .where("media_entity_id", "=", entity.id) + .executeTakeFirst(); + if (exists) return; const sub = await trx .insertInto("subscription") .values({