199 lines
8.9 KiB
Go
199 lines
8.9 KiB
Go
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"`
|
|
}
|