Files
hfb_sys/backend/internal/modules/withdrawal/presenter.go
T
yml 8fef037be3 AES 字段加密迁配置并兼容旧密文
移除字段加密硬编码主密钥,改为 FIELD_ENCRYPTION_KEY 注入。

保留 FIELD_ENCRYPTION_LEGACY_KEY 透明回退旧密文,新写入统一使用主密钥;生产环境校验主密钥和 legacy 密钥长度、占位符及相等关系,并统一生产环境判断口径。

补充配置与旧密文兼容回归测试。
2026-06-14 17:53:24 +08:00

109 lines
3.0 KiB
Go

package withdrawal
import (
"context"
"encoding/json"
"hfb_sys/backend/internal/model"
)
// 转换为用户DTO
func toDTO(w model.WithdrawalRequest) WithdrawalDTO {
return WithdrawalDTO{
ID: w.ID,
WithdrawNo: w.WithdrawNo,
UserID: w.UserID,
AmountCent: w.AmountCent,
FeeCent: w.FeeCent,
ActualAmountCent: w.ActualAmountCent,
AccountType: w.AccountType,
AccountName: w.AccountName,
AccountNo: w.AccountNo,
BankName: w.BankName,
Status: w.Status,
ReviewRemark: w.ReviewRemark,
CreatedAt: w.CreatedAt,
UpdatedAt: w.UpdatedAt,
ReviewedAt: w.ReviewedAt,
PaidAt: w.PaidAt,
}
}
// 转换为管理员详细DTO
// 转换为管理员详细DTO
func (r *Repository) toDetailDTO(ctx context.Context, w model.WithdrawalRequest) (*WithdrawalDetailDTO, error) {
db := r.db.WithContext(ctx)
// 查询用户信息
var user model.User
db.Select("nickname, phone").First(&user, w.UserID)
// 查询审核人信息
var reviewedByName string
if w.ReviewedBy != nil {
var admin model.AdminUser
if err := db.Select("nickname").First(&admin, *w.ReviewedBy).Error; err == nil {
reviewedByName = admin.Nickname
}
}
// 查询打款人信息
var paidByName string
if w.PaidBy != nil {
var admin model.AdminUser
if err := db.Select("nickname").First(&admin, *w.PaidBy).Error; err == nil {
paidByName = admin.Nickname
}
}
// 获取完整账号和收款二维码(管理员可见)
fullAccountNo := w.AccountNo
var certificateURLs []string
if w.PaymentAccountID != nil {
var paymentAccount model.UserPaymentAccount
if err := db.First(&paymentAccount, *w.PaymentAccountID).Error; err == nil {
// 解密账号
decrypted, err := r.encryptor.Decrypt(paymentAccount.AccountNo)
if err == nil {
fullAccountNo = decrypted
}
// 解析收款二维码
if paymentAccount.CertificateURLs != nil {
json.Unmarshal(paymentAccount.CertificateURLs, &certificateURLs)
}
}
}
return &WithdrawalDetailDTO{
ID: w.ID,
WithdrawNo: w.WithdrawNo,
UserID: w.UserID,
UserNickname: user.Nickname,
UserPhone: user.Phone,
AmountCent: w.AmountCent,
FeeCent: w.FeeCent,
ActualAmountCent: w.ActualAmountCent,
PaymentAccountID: w.PaymentAccountID,
AccountType: w.AccountType,
AccountName: w.AccountName,
AccountNo: fullAccountNo,
BankName: w.BankName,
BankBranch: w.BankBranch,
CertificateURLs: certificateURLs,
Status: w.Status,
ReviewedBy: w.ReviewedBy,
ReviewedByName: reviewedByName,
ReviewedAt: w.ReviewedAt,
ReviewRemark: w.ReviewRemark,
PaidBy: w.PaidBy,
PaidByName: paidByName,
PaidAt: w.PaidAt,
PaymentProofURL: w.PaymentProofURL,
PaymentRemark: w.PaymentRemark,
CreatedAt: w.CreatedAt,
UpdatedAt: w.UpdatedAt,
}, nil
}
// 生成提现单号