feat(distribution): 支持分销上传来源追踪、主站审核展示与收售结算模式自动判定

This commit is contained in:
yml2213
2026-09-08 15:00:35 +08:00
parent a61828c6ca
commit 0fcb6a513f
14 changed files with 301 additions and 69 deletions
+39 -9
View File
@@ -15,7 +15,7 @@ import (
"gorm.io/gorm/clause"
)
func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateRequest, reviewRequired bool, publishCooldown time.Duration) (*ListingDTO, error) {
func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateRequest, reviewRequired bool, publishCooldown time.Duration, siteCode ...string) (*ListingDTO, error) {
var dto *ListingDTO
err := r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
now := time.Now()
@@ -51,20 +51,44 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
if err := tx.Create(&account).Error; err != nil {
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,
AccountID: account.ID,
OwnerID: ownerID,
PriceCent: priceCent,
DepositAmountCent: req.DepositAmountCent,
Status: listingStatus,
ReviewStatus: reviewStatus,
PublishedAt: publishedAt,
ListingNo: listingNo,
AccountID: account.ID,
OwnerID: ownerID,
PriceCent: priceCent,
DepositAmountCent: req.DepositAmountCent,
Status: listingStatus,
ReviewStatus: reviewStatus,
PublishedAt: publishedAt,
DistributionSiteID: siteID,
}
if err := tx.Create(&listing).Error; err != nil {
return err
}
if siteID != nil {
dsa := model.DistributionSiteAccount{
SiteID: *siteID,
AccountID: account.ID,
ListingID: listing.ID,
DisplayStatus: "enabled",
}
if err := tx.Create(&dsa).Error; err != nil {
return err
}
}
if err := listingstatus.AppendTransition(tx, &listing, "", listingstatus.SourceSeller, listingstatus.ActorUser, ownerID, "发布上架"); err != nil {
return err
}
@@ -80,6 +104,12 @@ func (r *Repository) Create(ctx context.Context, ownerID uint64, req CreateReque
}
dto = toDTO(account, listing)
if siteID != nil {
dto.DistributionSiteID = siteID
dto.DistributionSiteCode = site.SiteCode
dto.DistributionSiteName = site.SiteName
dto.SourceChannel = fmt.Sprintf("分销站 - %s (%s)", site.SiteName, site.SiteCode)
}
dto.ListingGroupConversationID = conversationID
return nil
})