package withdrawal import ( "time" ) // 用户端 DTO type WithdrawalDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` UserID uint64 `json:"user_id"` DistributionSiteID uint64 `json:"distribution_site_id"` AmountCent int64 `json:"amount_cent"` FeeCent int64 `json:"fee_cent"` ActualAmountCent int64 `json:"actual_amount_cent"` AccountType string `json:"account_type"` AccountName string `json:"account_name"` AccountNo string `json:"account_no"` // 脱敏 BankName string `json:"bank_name"` Status string `json:"status"` ReviewRemark string `json:"review_remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` ReviewedAt *time.Time `json:"reviewed_at"` PaidAt *time.Time `json:"paid_at"` } // 管理员端详细 DTO type WithdrawalDetailDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` UserID uint64 `json:"user_id"` DistributionSiteID uint64 `json:"distribution_site_id"` DistributionSiteName string `json:"distribution_site_name"` DistributionSiteCode string `json:"distribution_site_code"` UserNickname string `json:"user_nickname"` UserPhone string `json:"user_phone"` AmountCent int64 `json:"amount_cent"` FeeCent int64 `json:"fee_cent"` ActualAmountCent int64 `json:"actual_amount_cent"` PaymentAccountID *uint64 `json:"payment_account_id"` AccountType string `json:"account_type"` AccountName string `json:"account_name"` AccountNo string `json:"account_no"` // 管理员可见完整账号 BankName string `json:"bank_name"` BankBranch string `json:"bank_branch"` CertificateURLs []string `json:"certificate_urls"` // 收款二维码图片 Status string `json:"status"` ReviewedBy *uint64 `json:"reviewed_by"` ReviewedByName string `json:"reviewed_by_name"` ReviewedAt *time.Time `json:"reviewed_at"` ReviewRemark string `json:"review_remark"` PaidBy *uint64 `json:"paid_by"` PaidByName string `json:"paid_by_name"` PaidAt *time.Time `json:"paid_at"` PaymentProofURL string `json:"payment_proof_url"` PaymentRemark string `json:"payment_remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // WithdrawalListItemDTO 是后台提现分页列表使用的轻量 DTO。 // 收款二维码、完整收款账号、审核和打款详情只在打开详情时查询。 type WithdrawalListItemDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` UserID uint64 `json:"user_id"` DistributionSiteID uint64 `json:"distribution_site_id"` DistributionSiteName string `json:"distribution_site_name"` UserNickname string `json:"user_nickname"` UserPhone string `json:"user_phone"` AmountCent int64 `json:"amount_cent"` FeeCent int64 `json:"fee_cent"` ActualAmountCent int64 `json:"actual_amount_cent"` AccountType string `json:"account_type"` AccountName string `json:"account_name"` AccountNo string `json:"account_no"` BankName string `json:"bank_name"` Status string `json:"status"` CreatedAt time.Time `json:"created_at"` } // WithdrawalReviewSummaryDTO 汇总审核员核对提现时最关心的用户财务口径。 // wallet_actual_income_cent 汇总普通钱包结算订单及站内钱包提号的有效结算额; // platform_managed_income_cent 汇总平台代管订单和平台代管提号的线下结算额。 // reconcile_difference_amount_cent = 钱包收入 - 已打款 - 待处理提现。 type WithdrawalReviewSummaryDTO struct { OwnerOrderCount int64 `json:"owner_order_count"` OwnerPickupCount int64 `json:"owner_pickup_count"` FinalizedOrderCount int64 `json:"finalized_order_count"` WalletActualIncomeCent int64 `json:"wallet_actual_income_cent"` PickupIncomeCent int64 `json:"pickup_income_cent"` WalletPickupIncomeCent int64 `json:"wallet_pickup_income_cent"` PlatformManagedPickupIncomeCent int64 `json:"platform_managed_pickup_income_cent"` PlatformManagedIncomeCent int64 `json:"platform_managed_income_cent"` WithdrawalCount int64 `json:"withdrawal_count"` WithdrawnAmountCent int64 `json:"withdrawn_amount_cent"` PendingWithdrawalAmountCent int64 `json:"pending_withdrawal_amount_cent"` RejectedWithdrawalCount int64 `json:"rejected_withdrawal_count"` ReconcileDifferenceAmountCent int64 `json:"reconcile_difference_amount_cent"` } type WithdrawalReviewOrderDTO struct { ID uint64 `json:"id"` OrderNo string `json:"order_no"` ListingNo string `json:"listing_no"` Title string `json:"title"` Status string `json:"status"` SettlementStatus string `json:"settlement_status"` SettlementMode string `json:"settlement_mode"` RentAmountCent int64 `json:"rent_amount_cent"` OwnerActualIncomeCent *int64 `json:"owner_actual_income_cent,omitempty"` CreatedAt time.Time `json:"created_at"` SettledAt *time.Time `json:"settled_at,omitempty"` } type WithdrawalReviewPickupDTO struct { ID uint64 `json:"id"` PickupNo string `json:"pickup_no"` ListingNo string `json:"listing_no"` Title string `json:"title"` Status string `json:"status"` SettlementMode string `json:"settlement_mode"` OfflineSettlementStatus string `json:"offline_settlement_status"` SettleAmountCent int64 `json:"settle_amount_cent"` SettleAdjustmentCent int64 `json:"settle_adjustment_cent"` EffectiveSettleAmountCent int64 `json:"effective_settle_amount_cent"` CompletedAt *time.Time `json:"completed_at,omitempty"` CreatedAt time.Time `json:"created_at"` } type WithdrawalReviewHistoryDTO struct { ID uint64 `json:"id"` WithdrawNo string `json:"withdraw_no"` AmountCent int64 `json:"amount_cent"` FeeCent int64 `json:"fee_cent"` ActualAmountCent int64 `json:"actual_amount_cent"` Status string `json:"status"` CreatedAt time.Time `json:"created_at"` ReviewedAt *time.Time `json:"reviewed_at,omitempty"` PaidAt *time.Time `json:"paid_at,omitempty"` } type WithdrawalReviewContextQuery struct { OrderPage int `form:"order_page"` PickupPage int `form:"pickup_page"` WithdrawalPage int `form:"withdrawal_page"` PageSize int `form:"page_size"` } type WithdrawalReviewContextDTO struct { Summary WithdrawalReviewSummaryDTO `json:"summary"` Orders []WithdrawalReviewOrderDTO `json:"orders"` OrderPage int `json:"order_page"` OrderPageSize int `json:"order_page_size"` Pickups []WithdrawalReviewPickupDTO `json:"pickups"` PickupPage int `json:"pickup_page"` PickupPageSize int `json:"pickup_page_size"` Withdrawals []WithdrawalReviewHistoryDTO `json:"withdrawals"` WithdrawalPage int `json:"withdrawal_page"` WithdrawalPageSize int `json:"withdrawal_page_size"` } type CreateWithdrawalRequest struct { PaymentAccountID uint64 `json:"payment_account_id" binding:"required"` AmountCent int64 `json:"amount_cent" binding:"required,gt=0"` } type ReviewWithdrawalRequest struct { Approved *bool `json:"approved" binding:"required"` Remark string `json:"remark"` } type ConfirmPaymentRequest struct { PaymentProofURL string `json:"payment_proof_url"` Remark string `json:"remark"` } type PaginatedResult struct { Items []WithdrawalDTO `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type AdminPaginatedResult struct { Items []WithdrawalListItemDTO `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type AdminListQuery struct { Status string `form:"status"` UserID uint64 `form:"user_id"` Page int `form:"page"` Size int `form:"page_size"` }