From 35d9ecbb6c836e6f521b4f31784988bb47941e8f Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Sun, 1 Feb 2026 16:33:20 +0800 Subject: [PATCH] f --- app/main/api/desc/admin/admin_agent.api | 8 ++-- app/main/api/desc/front/agent.api | 1 + .../admingetagentwithdrawallistlogic.go | 6 +++ .../adminreviewbankcardwithdrawallogic.go | 48 +++++++++++++++++-- .../logic/agent/getagentwithdrawallogic.go | 5 ++ app/main/api/internal/types/types.go | 9 ++-- 6 files changed, 66 insertions(+), 11 deletions(-) diff --git a/app/main/api/desc/admin/admin_agent.api b/app/main/api/desc/admin/admin_agent.api index ad93a8c..1afa8a2 100644 --- a/app/main/api/desc/admin/admin_agent.api +++ b/app/main/api/desc/admin/admin_agent.api @@ -267,6 +267,7 @@ type ( Amount float64 `json:"amount"` // 金额 ActualAmount float64 `json:"actual_amount"` // 实际到账金额(扣税后) TaxAmount float64 `json:"tax_amount"` // 扣税金额 + TaxRate float64 `json:"tax_rate"` // 扣税比例,如 0.06 表示 6% Status int64 `json:"status"` // 状态 PayeeAccount string `json:"payee_account"` // 收款账户 Remark string `json:"remark"` // 备注 @@ -468,9 +469,10 @@ type ( // 银行卡提现审核请求 AdminReviewBankCardWithdrawalReq { - WithdrawalId int64 `json:"withdrawal_id"` // 提现记录ID - Action int64 `json:"action"` // 操作:1-确认,2-拒绝 - Remark string `json:"remark"` // 备注(拒绝时必填) + WithdrawalId int64 `json:"withdrawal_id"` // 提现记录ID + Action int64 `json:"action"` // 操作:1-确认,2-拒绝 + Remark string `json:"remark"` // 备注(拒绝时必填) + TaxRate *float64 `json:"tax_rate,optional"` // 扣税比例,如 0.06 表示 6%,不传则默认 6% } // 银行卡提现审核响应 diff --git a/app/main/api/desc/front/agent.api b/app/main/api/desc/front/agent.api index 12ac05d..4fbe142 100644 --- a/app/main/api/desc/front/agent.api +++ b/app/main/api/desc/front/agent.api @@ -363,6 +363,7 @@ type ( Remark string `json:"remark"` payeeAccount string `json:"payee_account"` CreateTime string `json:"create_time"` + TaxRate float64 `json:"tax_rate"` // 扣税比例,如 0.06 表示 6% } GetWithdrawalReq { Page int64 `form:"page"` // 页码 diff --git a/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go b/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go index 80f8e77..63a8ade 100644 --- a/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go +++ b/app/main/api/internal/logic/admin_agent/admingetagentwithdrawallistlogic.go @@ -65,6 +65,12 @@ func (l *AdminGetAgentWithdrawalListLogic) AdminGetAgentWithdrawalList(req *type item.PayeeName = v.PayeeName.String } + // 从扣税记录中取扣税比例 + taxModel, taxErr := l.svcCtx.AgentWithdrawalTaxModel.FindOneByWithdrawalId(l.ctx, v.Id) + if taxErr == nil { + item.TaxRate = taxModel.TaxRate + } + items = append(items, item) } resp = &types.AdminGetAgentWithdrawalListResp{ diff --git a/app/main/api/internal/logic/admin_agent/adminreviewbankcardwithdrawallogic.go b/app/main/api/internal/logic/admin_agent/adminreviewbankcardwithdrawallogic.go index 043cfbc..e20c50f 100644 --- a/app/main/api/internal/logic/admin_agent/adminreviewbankcardwithdrawallogic.go +++ b/app/main/api/internal/logic/admin_agent/adminreviewbankcardwithdrawallogic.go @@ -85,9 +85,18 @@ func (l *AdminReviewBankCardWithdrawalLogic) AdminReviewBankCardWithdrawal(req * return errors.Wrapf(xerr.NewErrMsg("提现类型不正确"), "提现类型验证失败") } + // 确认时使用的扣税比例:请求中传入则用传入值,否则默认 6% + taxRate := 0.06 + if req.Action == ReviewActionApprove && req.TaxRate != nil { + taxRate = *req.TaxRate + if taxRate < 0 || taxRate > 1 { + return errors.Wrapf(xerr.NewErrMsg("扣税比例必须在 0~100% 之间"), "扣税比例验证失败") + } + } + if req.Action == ReviewActionApprove { - // 确认提现 - return l.approveWithdrawal(ctx, session, record) + // 确认提现(可带自定义扣税比例) + return l.approveWithdrawal(ctx, session, record, taxRate) } else { // 拒绝提现 return l.rejectWithdrawal(ctx, session, record, req.Remark) @@ -102,11 +111,15 @@ func (l *AdminReviewBankCardWithdrawalLogic) AdminReviewBankCardWithdrawal(req * return resp, nil } -// 确认提现 -func (l *AdminReviewBankCardWithdrawalLogic) approveWithdrawal(ctx context.Context, session sqlx.Session, record *model.AgentWithdrawal) error { +// 确认提现(taxRate 为扣税比例,如 0.06 表示 6%) +func (l *AdminReviewBankCardWithdrawalLogic) approveWithdrawal(ctx context.Context, session sqlx.Session, record *model.AgentWithdrawal, taxRate float64) error { + // 按审核时选择的扣税比例重新计算并更新提现记录与扣税记录 + if err := l.applyReviewTaxRate(ctx, session, record, taxRate); err != nil { + return err + } // 根据提现类型执行不同的操作 if record.WithdrawType == WithdrawTypeAlipay { - // 支付宝提现:先调用支付宝转账接口 + // 支付宝提现:按更新后的实际到账金额调用支付宝转账 return l.approveAlipayWithdrawal(ctx, session, record) } else { // 银行卡提现:直接更新状态为成功(线下转账) @@ -114,6 +127,31 @@ func (l *AdminReviewBankCardWithdrawalLogic) approveWithdrawal(ctx context.Conte } } +// applyReviewTaxRate 按审核时选择的扣税比例更新提现记录与扣税记录 +func (l *AdminReviewBankCardWithdrawalLogic) applyReviewTaxRate(ctx context.Context, session sqlx.Session, record *model.AgentWithdrawal, taxRate float64) error { + newTaxAmount := record.Amount * taxRate + newActualAmount := record.Amount - newTaxAmount + + record.TaxAmount = newTaxAmount + record.ActualAmount = newActualAmount + if _, err := l.svcCtx.AgentWithdrawalModel.Update(ctx, session, record); err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新提现记录扣税金额失败: %v", err) + } + + taxModel, err := l.svcCtx.AgentWithdrawalTaxModel.FindOneByWithdrawalId(ctx, record.Id) + if err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询扣税记录失败: %v", err) + } + taxModel.TaxRate = taxRate + taxModel.TaxAmount = newTaxAmount + taxModel.ActualAmount = newActualAmount + taxModel.TaxableAmount = record.Amount + if err := l.svcCtx.AgentWithdrawalTaxModel.UpdateWithVersion(ctx, session, taxModel); err != nil { + return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "更新扣税记录失败: %v", err) + } + return nil +} + // 确认支付宝提现 func (l *AdminReviewBankCardWithdrawalLogic) approveAlipayWithdrawal(ctx context.Context, session sqlx.Session, record *model.AgentWithdrawal) error { // 同步调用支付宝转账 diff --git a/app/main/api/internal/logic/agent/getagentwithdrawallogic.go b/app/main/api/internal/logic/agent/getagentwithdrawallogic.go index d86c75b..3add802 100644 --- a/app/main/api/internal/logic/agent/getagentwithdrawallogic.go +++ b/app/main/api/internal/logic/agent/getagentwithdrawallogic.go @@ -56,6 +56,11 @@ func (l *GetAgentWithdrawalLogic) GetAgentWithdrawal(req *types.GetWithdrawalReq return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取代理提现列表, %v", err) } withdrawal.CreateTime = agentWithdrawalModel.CreateTime.Format("2006-01-02 15:04:05") + // 从扣税记录中取扣税比例,供前端展示“扣了几个点” + taxModel, taxErr := l.svcCtx.AgentWithdrawalTaxModel.FindOneByWithdrawalId(l.ctx, agentWithdrawalModel.Id) + if taxErr == nil { + withdrawal.TaxRate = taxModel.TaxRate + } list = append(list, withdrawal) } } diff --git a/app/main/api/internal/types/types.go b/app/main/api/internal/types/types.go index e1416b0..497cf56 100644 --- a/app/main/api/internal/types/types.go +++ b/app/main/api/internal/types/types.go @@ -805,9 +805,10 @@ type AdminRetryAgentProcessResp struct { } type AdminReviewBankCardWithdrawalReq struct { - WithdrawalId int64 `json:"withdrawal_id"` // 提现记录ID - Action int64 `json:"action"` // 操作:1-确认,2-拒绝 - Remark string `json:"remark"` // 备注(拒绝时必填) + WithdrawalId int64 `json:"withdrawal_id"` // 提现记录ID + Action int64 `json:"action"` // 操作:1-确认,2-拒绝 + Remark string `json:"remark"` // 备注(拒绝时必填) + TaxRate *float64 `json:"tax_rate,optional"` // 扣税比例,如 0.06 表示 6%,不传则默认 6% } type AdminReviewBankCardWithdrawalResp struct { @@ -1297,6 +1298,7 @@ type AgentWithdrawalListItem struct { Amount float64 `json:"amount"` // 金额 ActualAmount float64 `json:"actual_amount"` // 实际到账金额(扣税后) TaxAmount float64 `json:"tax_amount"` // 扣税金额 + TaxRate float64 `json:"tax_rate"` // 扣税比例,如 0.06 表示 6% Status int64 `json:"status"` // 状态 PayeeAccount string `json:"payee_account"` // 收款账户 Remark string `json:"remark"` // 备注 @@ -2195,6 +2197,7 @@ type Withdrawal struct { Remark string `json:"remark"` PayeeAccount string `json:"payee_account"` CreateTime string `json:"create_time"` + TaxRate float64 `json:"tax_rate"` // 扣税比例,如 0.06 表示 6% } type WithdrawalReq struct {