package model import "time" // DistributionSite 表示一个独立分销网站主体。 type DistributionSite struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteCode string `gorm:"size:64;not null;uniqueIndex" json:"site_code"` SiteName string `gorm:"size:128;not null" json:"site_name"` Domain string `gorm:"size:255;not null;uniqueIndex" json:"domain"` Status string `gorm:"size:16;not null;default:'active';index" json:"status"` DisplayAccountEnabled bool `gorm:"not null;default:true" json:"display_account_enabled"` LogoURL string `gorm:"size:512;not null;default:''" json:"logo_url"` FaviconURL string `gorm:"size:512;not null;default:''" json:"favicon_url"` BannersJSON string `gorm:"type:text" json:"banners_json"` AnnouncementsJSON string `gorm:"type:text" json:"announcements_json"` FooterInfoJSON string `gorm:"type:text" json:"footer_info_json"` DefaultSupportGroupID *uint64 `gorm:"index" json:"default_support_group_id,omitempty"` ListingQrcodeURL string `gorm:"size:512;not null;default:''" json:"listing_qrcode_url"` SMSConfigJSON string `gorm:"type:text" json:"-"` ReceiveRatioDelta float64 `gorm:"type:decimal(10,2);not null;default:0" json:"receive_ratio_delta"` TaxEnabled bool `gorm:"not null;default:false" json:"tax_enabled"` TaxRateBPS int64 `gorm:"not null;default:100" json:"tax_rate_bps"` SettlementHoldDays int `gorm:"not null;default:7" json:"settlement_hold_days"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionSite) TableName() string { return "distribution_sites" } // DistributionSiteMember 将现有后台管理员映射到分销网站。 type DistributionSiteMember struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_member;index" json:"site_id"` AdminUserID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_member;index" json:"admin_user_id"` MemberType string `gorm:"size:32;not null" json:"member_type"` Status string `gorm:"size:16;not null;default:'active';index" json:"status"` DataScope string `gorm:"size:32;not null;default:'site'" json:"data_scope"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionSiteMember) TableName() string { return "distribution_site_members" } // DistributionSiteAccount 控制账号在分销网站的展示状态。 type DistributionSiteAccount struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_account;index" json:"site_id"` AccountID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_account;index" json:"account_id"` ListingID uint64 `gorm:"not null;index" json:"listing_id"` DisplayStatus string `gorm:"size:16;not null;default:'enabled';index" json:"display_status"` MarkupAmountCent int64 `gorm:"not null;default:0" json:"markup_amount_cent"` ShelfRatioDelta float64 `gorm:"type:decimal(10,2);not null;default:0" json:"shelf_ratio_delta"` DisplayStartedAt *time.Time `json:"display_started_at,omitempty"` DisplayEndedAt *time.Time `json:"display_ended_at,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionSiteAccount) TableName() string { return "distribution_site_accounts" } // DistributionRuleVersion 是新订单使用的分账规则快照来源。 type DistributionRuleVersion struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteID *uint64 `gorm:"index" json:"site_id,omitempty"` Mode string `gorm:"size:32;not null;index" json:"mode"` Version int `gorm:"not null" json:"version"` Status string `gorm:"size:16;not null;default:'draft';index" json:"status"` PlatformReceiveRatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"platform_receive_ratio"` PlatformSellRatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"platform_sell_ratio"` DistributorReceiveRatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"distributor_receive_ratio"` DistributorSellRatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"distributor_sell_ratio"` DistributorARatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"distributor_a_ratio"` DistributorBRatio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"distributor_b_ratio"` ServiceFeeValue float64 `gorm:"type:decimal(12,4);not null;default:0" json:"service_fee_value"` ServiceFeeUnit string `gorm:"size:24;not null;default:'percent'" json:"service_fee_unit"` PaymentFeeBPS int64 `gorm:"not null;default:50" json:"payment_fee_bps"` TaxEnabled bool `gorm:"not null;default:false" json:"tax_enabled"` TaxRateBPS int64 `gorm:"not null;default:100" json:"tax_rate_bps"` EffectiveFrom time.Time `gorm:"index" json:"effective_from"` EffectiveTo *time.Time `gorm:"index" json:"effective_to,omitempty"` CreatedBy *uint64 `json:"created_by,omitempty"` CreatedAt time.Time `json:"created_at"` } func (DistributionRuleVersion) TableName() string { return "distribution_rule_versions" } // DistributionOrderFinancial 保存正常订单的分销财务快照。 type DistributionOrderFinancial struct { ID uint64 `gorm:"primaryKey" json:"id"` OrderID uint64 `gorm:"not null;uniqueIndex" json:"order_id"` SiteID uint64 `gorm:"not null;index" json:"site_id"` RuleVersionID uint64 `gorm:"not null" json:"rule_version_id"` GrossPaidAmountCent int64 `gorm:"not null;default:0" json:"gross_paid_amount_cent"` RefundAmountCent int64 `gorm:"not null;default:0" json:"refund_amount_cent"` NetPaidAmountCent int64 `gorm:"not null;default:0" json:"net_paid_amount_cent"` PaymentFeeBPS int64 `gorm:"not null;default:50" json:"payment_fee_bps"` PaymentFeeCent int64 `gorm:"not null;default:0" json:"payment_fee_cent"` ServiceFeeValue float64 `gorm:"type:decimal(12,4);not null;default:0" json:"service_fee_value"` ServiceFeeUnit string `gorm:"size:24;not null;default:'percent'" json:"service_fee_unit"` ServiceFeeCent int64 `gorm:"not null;default:0" json:"service_fee_cent"` MarkupAmountCent int64 `gorm:"not null;default:0" json:"markup_amount_cent"` TaxEnabled bool `gorm:"not null;default:false" json:"tax_enabled"` TaxRateBPS int64 `gorm:"not null;default:100" json:"tax_rate_bps"` TaxAmountCent int64 `gorm:"not null;default:0" json:"tax_amount_cent"` SplitBaseAmountCent int64 `gorm:"not null;default:0" json:"split_base_amount_cent"` RoundingAdjustmentCent int64 `gorm:"not null;default:0" json:"rounding_adjustment_cent"` SettlementStatus string `gorm:"size:24;not null;default:'pending';index" json:"settlement_status"` ReleaseAt *time.Time `gorm:"index:idx_distribution_financial_release,priority:2" json:"release_at,omitempty"` ReleasedAt *time.Time `json:"released_at,omitempty"` SettledAt *time.Time `json:"settled_at,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionOrderFinancial) TableName() string { return "distribution_order_financials" } // DistributionOrderParty 保存订单创建时的参与方和金额快照,避免规则或站点变更影响历史订单。 type DistributionOrderParty struct { ID uint64 `gorm:"primaryKey" json:"id"` OrderID uint64 `gorm:"not null;index" json:"order_id"` SiteID uint64 `gorm:"not null;index" json:"site_id"` PartyRole string `gorm:"size:32;not null;index" json:"party_role"` PartyType string `gorm:"size:16;not null" json:"party_type"` PartyID uint64 `gorm:"not null" json:"party_id"` Ratio float64 `gorm:"type:decimal(10,2);not null;default:0" json:"ratio"` IncomeAmountCent int64 `gorm:"not null;default:0" json:"income_amount_cent"` CostAmountCent int64 `gorm:"not null;default:0" json:"cost_amount_cent"` ProfitAmountCent int64 `gorm:"not null;default:0" json:"profit_amount_cent"` TaxAmountCent int64 `gorm:"not null;default:0" json:"tax_amount_cent"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionOrderParty) TableName() string { return "distribution_order_parties" } // DistributionSettlementBatch 是按站点生成的结算批次。 type DistributionSettlementBatch struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteID uint64 `gorm:"not null;index" json:"site_id"` BatchNo string `gorm:"size:64;not null;uniqueIndex" json:"batch_no"` PeriodStart time.Time `gorm:"not null" json:"period_start"` PeriodEnd time.Time `gorm:"not null" json:"period_end"` TotalAmountCent int64 `gorm:"not null;default:0" json:"total_amount_cent"` Status string `gorm:"size:16;not null;default:'draft';index" json:"status"` CreatedBy *uint64 `json:"created_by,omitempty"` SettledAt *time.Time `json:"settled_at,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionSettlementBatch) TableName() string { return "distribution_settlement_batches" } type DistributionSettlementItem struct { ID uint64 `gorm:"primaryKey" json:"id"` BatchID uint64 `gorm:"not null;index" json:"batch_id"` OrderID uint64 `gorm:"not null;index" json:"order_id"` PartyID uint64 `gorm:"not null;index" json:"party_id"` AmountCent int64 `gorm:"not null;default:0" json:"amount_cent"` Status string `gorm:"size:16;not null;default:'pending'" json:"status"` CreatedAt time.Time `json:"created_at"` } func (DistributionSettlementItem) TableName() string { return "distribution_settlement_items" } // DistributionSitePaymentChannel 将一个或多个现有支付商户配置绑定到分销站点。 type DistributionSitePaymentChannel struct { ID uint64 `gorm:"primaryKey" json:"id"` SiteID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_payment;index" json:"site_id"` ConfigID uint64 `gorm:"not null;uniqueIndex:uk_distribution_site_payment;index" json:"config_id"` Priority int `gorm:"not null;default:0" json:"priority"` Status string `gorm:"size:16;not null;default:'active';index" json:"status"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } func (DistributionSitePaymentChannel) TableName() string { return "distribution_site_payment_channels" }