Files
hm-server/app/main/api/internal/logic/agent/getbankcardinfologic.go

88 lines
2.9 KiB
Go
Raw Normal View History

2025-12-24 17:38:08 +08:00
package agent
import (
"context"
"tydata-server/app/main/model"
"tydata-server/common/ctxdata"
"tydata-server/common/xerr"
"github.com/pkg/errors"
"tydata-server/app/main/api/internal/svc"
"tydata-server/app/main/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetBankCardInfoLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetBankCardInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetBankCardInfoLogic {
return &GetBankCardInfoLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetBankCardInfoLogic) GetBankCardInfo(req *types.GetBankCardInfoReq) (resp *types.GetBankCardInfoResp, err error) {
userID, err := ctxdata.GetUidFromCtx(l.ctx)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID失败: %v", err)
}
// 查询代理信息
agentModel, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID)
if err != nil {
return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理信息失败: %v", err)
}
// 查询实名认证信息
agentRealName, err := l.svcCtx.AgentRealNameModel.FindOneByAgentId(l.ctx, agentModel.Id)
if err != nil {
if errors.Is(err, model.ErrNotFound) {
return nil, errors.Wrapf(xerr.NewErrMsg("您未进行实名认证"), "您未进行实名认证")
}
return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "查询代理实名信息失败: %v", err)
}
// 查询最近一次银行卡提现记录,用于自动填充
// 注意:这里需要查询 withdraw_type = 2 的记录
// 如果数据库还没有迁移,可以先返回空值
resp = &types.GetBankCardInfoResp{
PayeeName: agentRealName.Name,
IdCard: agentRealName.IdCard,
BankCardNo: "",
BankName: "",
}
// 查询最近一次成功的银行卡提现记录
// 这里使用SelectBuilder查询但由于模型可能还没有withdraw_type字段先注释
// builder := l.svcCtx.AgentWithdrawalModel.SelectBuilder()
// builder = builder.Where(squirrel.Eq{"agent_id": agentModel.Id})
// builder = builder.Where(squirrel.Eq{"withdraw_type": WithdrawTypeBankCard})
// builder = builder.Where(squirrel.Eq{"status": StatusSuccess})
// builder = builder.OrderBy("create_time DESC")
// builder = builder.Limit(1)
//
// list, err := l.svcCtx.AgentWithdrawalModel.FindAll(l.ctx, builder, "create_time DESC")
// if err == nil && len(list) > 0 {
// lastRecord := list[0]
// if lastRecord.BankCardNo.Valid {
// resp.BankCardNo = lastRecord.BankCardNo.String
// }
// if lastRecord.BankName.Valid {
// resp.BankName = lastRecord.BankName.String
// }
// }
// 临时方案从PayeeAccount字段读取如果之前有银行卡提现记录
// 注意这个方案不够准确因为PayeeAccount也可能存储支付宝账号
// 建议数据库迁移后使用上面的方案
return resp, nil
}