v2.0
This commit is contained in:
		@@ -2,17 +2,17 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
	"tydata-server/pkg/lzkit/crypto"
 | 
			
		||||
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/stores/sqlx"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
 | 
			
		||||
	"github.com/zeromicro/go-zero/core/logx"
 | 
			
		||||
)
 | 
			
		||||
@@ -30,27 +30,16 @@ func NewActivateAgentMembershipLogic(ctx context.Context, svcCtx *svc.ServiceCon
 | 
			
		||||
		svcCtx: svcCtx,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (l *ActivateAgentMembershipLogic) ActivateAgentMembership(req *types.AgentActivateMembershipReq) (resp *types.AgentActivateMembershipResp, err error) {
 | 
			
		||||
	//userID, err := ctxdata.GetUidFromCtx(l.ctx)
 | 
			
		||||
	//if err != nil {
 | 
			
		||||
	//	return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID失败: %v", err)
 | 
			
		||||
	//}
 | 
			
		||||
	secretKey := l.svcCtx.Config.Encrypt.SecretKey
 | 
			
		||||
	encryptedMobile, err := crypto.EncryptMobile(req.Mobile, secretKey)
 | 
			
		||||
	userID, err := ctxdata.GetUidFromCtx(l.ctx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "加密手机号失败: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	userModel, err := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理信息失败: %v", err)
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取用户ID失败: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	// 查询用户代理信息
 | 
			
		||||
	agentModel, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userModel.Id)
 | 
			
		||||
	if err != nil && err != sql.ErrNoRows {
 | 
			
		||||
	agentModel, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "查询代理信息失败: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 定义等级顺序映射
 | 
			
		||||
	levelOrder := map[string]int{
 | 
			
		||||
		"":                        1,
 | 
			
		||||
@@ -77,52 +66,20 @@ func (l *ActivateAgentMembershipLogic) ActivateAgentMembership(req *types.AgentA
 | 
			
		||||
			return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR),
 | 
			
		||||
				"禁止降级操作(当前等级:%s,请求等级:%s)", agentModel.LevelName, req.Type)
 | 
			
		||||
		}
 | 
			
		||||
		// 同等级视为续费,允许操作
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = l.svcCtx.AgentModel.Trans(l.ctx, func(transCtx context.Context, session sqlx.Session) error {
 | 
			
		||||
		agentModel.LevelName = req.Type
 | 
			
		||||
		agentModel.MembershipExpiryTime = RenewMembership(agentModel.MembershipExpiryTime)
 | 
			
		||||
		transErr := l.svcCtx.AgentModel.UpdateWithVersion(transCtx, session, agentModel)
 | 
			
		||||
		if transErr != nil {
 | 
			
		||||
			return transErr
 | 
			
		||||
		}
 | 
			
		||||
		agentMembershipRechargeOrder := model.AgentMembershipRechargeOrder{
 | 
			
		||||
			AgentId:       agentModel.Id,
 | 
			
		||||
			UserId:        userModel.Id,
 | 
			
		||||
			LevelName:     req.Type,
 | 
			
		||||
			Amount:        req.Amount,
 | 
			
		||||
			PaymentMethod: req.PaymentMethod,
 | 
			
		||||
			TransactionId: req.TransactionId,
 | 
			
		||||
		}
 | 
			
		||||
		_, transErr = l.svcCtx.AgentMembershipRechargeOrderModel.Insert(transCtx, session, &agentMembershipRechargeOrder)
 | 
			
		||||
		if transErr != nil {
 | 
			
		||||
			return transErr
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
	outTradeNo := "A_" + l.svcCtx.AlipayService.GenerateOutTradeNo()
 | 
			
		||||
	redisKey := fmt.Sprintf(types.AgentVipCacheKey, userID, outTradeNo)
 | 
			
		||||
	agentVipCache := types.AgentVipCache{Type: req.Type}
 | 
			
		||||
	jsonData, err := json.Marshal(agentVipCache)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "升级代理等级失败: %s", req.Type)
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "序列化代理VIP缓存失败: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	cacheErr := l.svcCtx.Redis.SetexCtx(l.ctx, redisKey, string(jsonData), int(2*time.Hour))
 | 
			
		||||
	if cacheErr != nil {
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "设置缓存失败: %v", cacheErr)
 | 
			
		||||
	}
 | 
			
		||||
	return &types.AgentActivateMembershipResp{
 | 
			
		||||
		MembershipType: req.Type,
 | 
			
		||||
		ExpireTime:     agentModel.MembershipExpiryTime.Time.Format("2006-01-02 15:04:05"),
 | 
			
		||||
		Id: outTradeNo,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
func RenewMembership(expiry sql.NullTime) sql.NullTime {
 | 
			
		||||
	// 确定基准时间
 | 
			
		||||
	var baseTime time.Time
 | 
			
		||||
	if expiry.Valid {
 | 
			
		||||
		baseTime = expiry.Time
 | 
			
		||||
	} else {
 | 
			
		||||
		baseTime = time.Now()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// 增加一年(自动处理闰年)
 | 
			
		||||
	newTime := baseTime.AddDate(1, 0, 0)
 | 
			
		||||
 | 
			
		||||
	// 返回始终有效的 NullTime
 | 
			
		||||
	return sql.NullTime{
 | 
			
		||||
		Time:  newTime,
 | 
			
		||||
		Valid: true,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -79,7 +79,7 @@ func (l *AgentWithdrawalLogic) AgentWithdrawal(req *types.WithdrawalReq) (*types
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// 生成交易号
 | 
			
		||||
		outBizNo = l.svcCtx.AlipayService.GenerateOutTradeNo()
 | 
			
		||||
		outBizNo = "W_" + l.svcCtx.AlipayService.GenerateOutTradeNo()
 | 
			
		||||
 | 
			
		||||
		// 创建提现记录(初始状态为处理中)
 | 
			
		||||
		if err = l.createWithdrawalRecord(session, agentModel.Id, req, outBizNo); err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
@@ -58,15 +59,15 @@ func (l *ApplyForAgentLogic) ApplyForAgent(req *types.AgentApplyReq) (resp *type
 | 
			
		||||
	var userID int64
 | 
			
		||||
	transErr := l.svcCtx.AgentAuditModel.Trans(l.ctx, func(transCtx context.Context, session sqlx.Session) error {
 | 
			
		||||
		// 两种情况,1. 已注册账号然后申请代理  2. 未注册账号申请代理
 | 
			
		||||
		user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, encryptedMobile)
 | 
			
		||||
		user, findUserErr := l.svcCtx.UserModel.FindOneByMobile(l.ctx, sql.NullString{String: encryptedMobile, Valid: true})
 | 
			
		||||
		if findUserErr != nil && !errors.Is(findUserErr, model.ErrNotFound) {
 | 
			
		||||
			return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "代理申请, 读取数据库获取用户失败, mobile: %s, err: %+v", encryptedMobile, err)
 | 
			
		||||
		}
 | 
			
		||||
		if user == nil {
 | 
			
		||||
			user = &model.User{Mobile: encryptedMobile}
 | 
			
		||||
			if len(user.Nickname) == 0 {
 | 
			
		||||
				user.Nickname = encryptedMobile
 | 
			
		||||
			}
 | 
			
		||||
			user = &model.User{Mobile: sql.NullString{String: encryptedMobile, Valid: true}}
 | 
			
		||||
			// if len(user.Nickname) == 0 {
 | 
			
		||||
			// 	user.Nickname = encryptedMobile
 | 
			
		||||
			// }
 | 
			
		||||
			insertResult, userInsertErr := l.svcCtx.UserModel.Insert(transCtx, session, user)
 | 
			
		||||
			if userInsertErr != nil {
 | 
			
		||||
				return errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "代理申请, 数据库插入新用户失败, mobile%s, err: %+v", encryptedMobile, err)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,15 @@ import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
	"tydata-server/pkg/lzkit/crypto"
 | 
			
		||||
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,12 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 
 | 
			
		||||
@@ -65,12 +65,13 @@ func (l *GetAgentInfoLogic) GetAgentInfo() (resp *types.AgentInfoResp, err error
 | 
			
		||||
		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "获取代理信息, 解密手机号失败: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return &types.AgentInfoResp{
 | 
			
		||||
		AgentID:  agent.Id,
 | 
			
		||||
		Level:    agent.LevelName,
 | 
			
		||||
		IsAgent:  true,
 | 
			
		||||
		Status:   1,
 | 
			
		||||
		Region:   agent.Region,
 | 
			
		||||
		Mobile:   agent.Mobile,
 | 
			
		||||
		WechatID: lzUtils.NullStringToString(agent.WechatId),
 | 
			
		||||
		AgentID:    agent.Id,
 | 
			
		||||
		Level:      agent.LevelName,
 | 
			
		||||
		IsAgent:    true,
 | 
			
		||||
		Status:     1,
 | 
			
		||||
		Region:     agent.Region,
 | 
			
		||||
		Mobile:     agent.Mobile,
 | 
			
		||||
		ExpiryTime: agent.MembershipExpiryTime.Time.Format("2006-01-02 15:04:05"),
 | 
			
		||||
		WechatID:   lzUtils.NullStringToString(agent.WechatId),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,14 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
	"tydata-server/pkg/lzkit/lzUtils"
 | 
			
		||||
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,13 +2,14 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"time"
 | 
			
		||||
	"tydata-server/app/user/model"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,12 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,12 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/Masterminds/squirrel"
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"tydata-server/common/ctxdata"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,10 @@ package agent
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"github.com/jinzhu/copier"
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"tydata-server/common/xerr"
 | 
			
		||||
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/svc"
 | 
			
		||||
	"tydata-server/app/user/cmd/api/internal/types"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user