fix(distribution): 修正商品归属回填、禁止全站灌货并拒绝无效站点头

用货架写入时间与上传来源回滚误标产地,不再依赖绝对时间戳;同步仅收本站上传与显式勾选。
This commit is contained in:
yml2213
2026-09-08 17:30:12 +08:00
parent 96bc6a4db6
commit 31bf6dd3b6
15 changed files with 287 additions and 84 deletions
+19 -9
View File
@@ -22,6 +22,22 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
if err := r.ensureCreateCooldown(tx, ownerID, publishCooldown, now); err != nil {
return err
}
var site model.DistributionSite
var siteID *uint64
originChannel := ""
if len(siteCode) > 0 && strings.TrimSpace(siteCode[0]) != "" {
trimmedSiteCode := strings.TrimSpace(siteCode[0])
if err := tx.Where("site_code = ? AND status = 'active'", trimmedSiteCode).First(&site).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return ErrDistributionSiteInvalid
}
return err
}
siteID = &site.ID
originChannel = site.SiteCode
}
listingNo, err := r.nextListingNo(tx, now)
if err != nil {
return err
@@ -35,6 +51,7 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
return err
}
listingStatus, reviewStatus, publishedAt := initialPublishState(reviewRequired)
account := model.GameAccount{
OwnerID: ownerID,
GameName: "delta_force",
@@ -52,15 +69,6 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
return err
}
var site model.DistributionSite
var siteID *uint64
if len(siteCode) > 0 && strings.TrimSpace(siteCode[0]) != "" {
trimmedSiteCode := strings.TrimSpace(siteCode[0])
if err := tx.Where("site_code = ? AND status = 'active'", trimmedSiteCode).First(&site).Error; err == nil {
siteID = &site.ID
}
}
priceCent := normalizedListingPriceCent(req)
listing := model.RentalListing{
ListingNo: listingNo,
@@ -72,6 +80,7 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
ReviewStatus: reviewStatus,
PublishedAt: publishedAt,
DistributionSiteID: siteID,
SourceChannel: originChannel,
}
if err := tx.Create(&listing).Error; err != nil {
return err
@@ -203,6 +212,7 @@ func (r *Repository) CreateFromExternalUpload(ctx context.Context, upload extern
HandoffMode: "platform",
SettlementMode: "platform_managed",
ManagedAdminID: &admin.ID,
SourceChannel: upload.SourceChannel,
}
if err := tx.Create(&listing).Error; err != nil {
return err