feat(distribution): 支持分销上传来源追踪、主站审核展示与收售结算模式自动判定
This commit is contained in:
@@ -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
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user