统一订单资产状态变更

This commit is contained in:
yml
2026-06-09 20:11:28 +08:00
parent 0990652f8b
commit 4c2199df58
5 changed files with 125 additions and 78 deletions
+5 -17
View File
@@ -230,12 +230,8 @@ func (r *Repository) AcceptCheckout(userID uint64, orderID uint64) error {
}
func (r *Repository) finalizeCheckout(tx *gorm.DB, order *model.RentalOrder, checkout *model.OrderCheckout, renterContent string) (*refundAction, error) {
var listing model.RentalListing
if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).First(&listing, order.ListingID).Error; err != nil {
return nil, err
}
var account model.GameAccount
if err := tx.Clauses(clause.Locking{Strength: "UPDATE"}).First(&account, order.AccountID).Error; err != nil {
listing, account, err := r.lockListingAccountForOrder(tx, order)
if err != nil {
return nil, err
}
now := time.Now()
@@ -244,7 +240,7 @@ func (r *Repository) finalizeCheckout(tx *gorm.DB, order *model.RentalOrder, che
order.SettlementStatus = settlementStatusSettled
order.SettledAt = &now
order.OwnerSettledAt = &now
archiveListingAfterCheckout(&listing, &account)
archiveAssets(listing, account)
orderID := order.ID
settlement := buildCheckoutSettlement(*order, checkout)
@@ -321,23 +317,15 @@ func (r *Repository) finalizeCheckout(tx *gorm.DB, order *model.RentalOrder, che
if err := tx.Save(checkout).Error; err != nil {
return nil, err
}
if err := tx.Save(&listing).Error; err != nil {
if err := tx.Save(listing).Error; err != nil {
return nil, err
}
if err := tx.Save(&account).Error; err != nil {
if err := tx.Save(account).Error; err != nil {
return nil, err
}
return refund, nil
}
// 完成后的账号先下架,避免已完成订单对应的账号重新出现在公开首页。
func archiveListingAfterCheckout(listing *model.RentalListing, account *model.GameAccount) {
listing.Status = listingStatusOffline
listing.InTransaction = false
listing.PublishedAt = nil
account.Status = accountStatusOffline
}
func hasOpenCheckout(tx *gorm.DB, orderID uint64) (bool, error) {
var count int64
err := tx.Model(&model.OrderCheckout{}).