From 5b023ad6820ce7cc83342d3d10506f815abdc91b Mon Sep 17 00:00:00 2001 From: root Date: Sat, 3 Oct 2026 21:23:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(acquisition):=20=E5=90=8C=E4=B8=80=E7=A7=8D?= =?UTF-8?q?=E5=AD=90=E8=A2=AB=E5=88=AB=E7=9A=84=E8=AE=A1=E5=88=92=E5=8D=A0?= =?UTF-8?q?=E7=94=A8=E8=80=8C=E5=8F=96=E6=B6=88=E7=9A=84=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E4=B8=8D=E8=AE=A9=E4=BD=8D,=E9=81=BF=E5=85=8D=20B/C=20?= =?UTF-8?q?=E4=B8=A4=E7=BA=BF=E5=90=88=E5=B9=B6=E5=90=8E=E5=8F=96=E6=B6=88?= =?UTF-8?q?=20=E2=86=92=20=E9=87=8D=E8=AF=84=20=E2=86=92=20=E5=86=8D?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E7=9A=84=E7=A9=BA=E8=BD=AC?= 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 --- .../acquisition-organize/services/acquisition.ts | 10 ++++++++-- .../blocked-reevaluate.test.ts | 14 ++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/apps/server/src/modules/acquisition-organize/services/acquisition.ts b/apps/server/src/modules/acquisition-organize/services/acquisition.ts index f6cd5bf5..a9a6f36f 100644 --- a/apps/server/src/modules/acquisition-organize/services/acquisition.ts +++ b/apps/server/src/modules/acquisition-organize/services/acquisition.ts @@ -1103,12 +1103,18 @@ export function subscriptionSavePath(t: Pick { expect((await evaluateAcquisition(h.d, { sourceReleaseId: rel })).plans).toHaveLength(0); }); + it("同一种子已被别的计划占用而取消的不让位(避免取消 → 重评 → 再撞上同一任务的空转)", async () => { + const { entityId, slotId } = await movieSlot("InUse Movie"); + const rel = await release(entityId, "InUse.Movie.2024.1080p.WEB-DL.x264-GRP"); + const ev1 = await evaluateAcquisition(h.d, { sourceReleaseId: rel }); + expect(ev1.plans).toHaveLength(1); + await db() + .updateTable("acquisition_plan") + .set({ status: "cancelled", status_reason: "torrent_in_use_by_plan:00000000-0000-0000-0000-000000000000" }) + .where("id", "=", ev1.plans[0]!) + .execute(); + await releaseSlot(slotId); + expect((await evaluateAcquisition(h.d, { sourceReleaseId: rel })).plans).toHaveLength(0); + }); + it("在途计划(已提交)仍挡住同一资源", async () => { const { entityId } = await seriesSlot("Inflight Series"); const rel = await release(entityId, "Inflight.Series.S01E01.1080p.WEB-DL.x264-GRP");