From 13e3a41d634be33fefbf3cf800dda2884eb05fa4 Mon Sep 17 00:00:00 2001 From: yml Date: Wed, 3 Jun 2026 22:12:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=8C=E6=88=90=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E8=87=AA=E5=8A=A8=E5=9B=9E=E6=98=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/modules/order/repository.go | 12 ++++++-- .../internal/modules/order/repository_test.go | 28 +++++++++++++++++++ docs/business-rules.md | 2 +- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/backend/internal/modules/order/repository.go b/backend/internal/modules/order/repository.go index c63616b..db127a9 100644 --- a/backend/internal/modules/order/repository.go +++ b/backend/internal/modules/order/repository.go @@ -973,9 +973,7 @@ func (r *Repository) finalizeCheckout(tx *gorm.DB, order *model.RentalOrder, che order.SettlementStatus = "settled" order.SettledAt = &now order.OwnerSettledAt = &now - listing.Status = "published" - listing.InTransaction = false - account.Status = "published" + archiveListingAfterCheckout(&listing, &account) orderID := order.ID settlement := buildCheckoutSettlement(*order, checkout) @@ -1062,6 +1060,14 @@ func (r *Repository) finalizeCheckout(tx *gorm.DB, order *model.RentalOrder, che return refund, nil } +// 完成后的账号先下架,避免已完成订单对应的账号重新出现在公开首页。 +func archiveListingAfterCheckout(listing *model.RentalListing, account *model.GameAccount) { + listing.Status = "offline" + listing.InTransaction = false + listing.PublishedAt = nil + account.Status = "offline" +} + func (r *Repository) prepareRefund(order *model.RentalOrder, amountCent int64, bizType string, remark string) (*refundAction, error) { if amountCent <= 0 { return nil, nil diff --git a/backend/internal/modules/order/repository_test.go b/backend/internal/modules/order/repository_test.go index dd79978..5b92996 100644 --- a/backend/internal/modules/order/repository_test.go +++ b/backend/internal/modules/order/repository_test.go @@ -2,6 +2,7 @@ package order import ( "testing" + "time" "hfb_sys/backend/internal/model" @@ -112,3 +113,30 @@ func TestCalculateCheckoutSettlementAddsDepositCompensation(t *testing.T) { t.Fatalf("RenterRefund = %.2f, want 120.00", settlement.RenterRefund) } } + +func TestArchiveListingAfterCheckoutMovesListingOffline(t *testing.T) { + now := time.Now() + listing := model.RentalListing{ + Status: "published", + InTransaction: true, + PublishedAt: &now, + } + account := model.GameAccount{ + Status: "published", + } + + archiveListingAfterCheckout(&listing, &account) + + if listing.Status != "offline" { + t.Fatalf("listing status = %q, want offline", listing.Status) + } + if listing.InTransaction { + t.Fatal("listing in_transaction should be false") + } + if listing.PublishedAt != nil { + t.Fatal("listing published_at should be nil") + } + if account.Status != "offline" { + t.Fatalf("account status = %q, want offline", account.Status) + } +} diff --git a/docs/business-rules.md b/docs/business-rules.md index 1309d1c..ded25e0 100644 --- a/docs/business-rules.md +++ b/docs/business-rules.md @@ -59,7 +59,7 @@ - 号主修改结账后,订单状态变为 `pending_checkout_accept`,交接状态变为 `pending_renter_checkout`,必须等待租客确认修正。 - 待号主确认结账或待租客确认修正时,任一方都可以发起结账争议。 - 结账争议后订单状态变为 `checkout_disputing`,交接状态变为 `checkout_disputed`,由客服仲裁。 -- 订单完成后,账号和发布状态恢复为 `published`。 +- 订单完成后,账号和发布状态改为 `offline`,不会自动回到公开首页;如需再次出租,需号主手动重新上架。 - 当前会生成开发态模拟钱包流水,不代表真实支付或提现。 ## 开发态超时任务