Files
hfb_sys/backend/internal/modules/withdrawal/dto.go
T
yml2213 e024319860 feat(distribution): 分销站点消息中心与钱包提现多租户独立分支隔离
- 新增 000070 数据库迁移:支持 chat_conversations、wallet_accounts、wallet_ledger、withdrawal_requests 按 distribution_site_id 隔离
- 消息中心:会话列表、未读数统计、站点专属客服及订单群聊与主站实现双向完全隔离
- 资金账户与提现:独立按 (user_id, distribution_site_id) 建账,分销订单自动结算至对应分站钱包,提现与流水相互独立
- 前台界面:Axios 自动透传 X-Distribution-Site-Code,钱包、提现与消息页面呈现分站专属标牌与独立说明
2026-09-07 18:11:27 +08:00

95 lines
3.5 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"`
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"`
}
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 []WithdrawalDetailDTO `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"`
}