新增后台管理
This commit is contained in:
		
							
								
								
									
										111
									
								
								app/main/api/internal/logic/agent/generatinglinklogic.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								app/main/api/internal/logic/agent/generatinglinklogic.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| package agent | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/hex" | ||||
| 	"encoding/json" | ||||
| 	"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" | ||||
|  | ||||
| 	"github.com/zeromicro/go-zero/core/logx" | ||||
| ) | ||||
|  | ||||
| type GeneratingLinkLogic struct { | ||||
| 	logx.Logger | ||||
| 	ctx    context.Context | ||||
| 	svcCtx *svc.ServiceContext | ||||
| } | ||||
|  | ||||
| func NewGeneratingLinkLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GeneratingLinkLogic { | ||||
| 	return &GeneratingLinkLogic{ | ||||
| 		Logger: logx.WithContext(ctx), | ||||
| 		ctx:    ctx, | ||||
| 		svcCtx: svcCtx, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (l *GeneratingLinkLogic) GeneratingLink(req *types.AgentGeneratingLinkReq) (resp *types.AgentGeneratingLinkResp, err error) { | ||||
| 	userID, err := ctxdata.GetUidFromCtx(l.ctx) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
| 	productModel, err := l.svcCtx.ProductModel.FindOneByProductEn(l.ctx, req.Product) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
|  | ||||
| 	agentProductConfig, err := l.svcCtx.AgentProductConfigModel.FindOneByProductId(l.ctx, productModel.Id) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
| 	price, err := strconv.ParseFloat(req.Price, 64) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
| 	if price < agentProductConfig.PriceRangeMin || price > agentProductConfig.PriceRangeMax { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrMsg("请设定范围区间内的价格"), "") | ||||
| 	} | ||||
| 	agentModel, err := l.svcCtx.AgentModel.FindOneByUserId(l.ctx, userID) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	build := l.svcCtx.AgentLinkModel.SelectBuilder().Where(squirrel.And{ | ||||
| 		squirrel.Eq{"user_id": userID}, | ||||
| 		squirrel.Eq{"product_id": productModel.Id}, // 添加 product_id 的匹配条件 | ||||
| 		squirrel.Eq{"price": price},                // 添加 price 的匹配条件 | ||||
| 		squirrel.Eq{"agent_id": agentModel.Id},     // 添加 agent_id 的匹配条件 | ||||
| 	}) | ||||
|  | ||||
| 	agentLinkModel, err := l.svcCtx.AgentLinkModel.FindAll(l.ctx, build, "") | ||||
| 	if err != nil && !errors.Is(err, model.ErrNotFound) { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
| 	if len(agentLinkModel) > 0 { | ||||
| 		return &types.AgentGeneratingLinkResp{ | ||||
| 			LinkIdentifier: agentLinkModel[0].LinkIdentifier, | ||||
| 		}, nil | ||||
| 	} | ||||
|  | ||||
| 	var agentIdentifier types.AgentIdentifier | ||||
| 	agentIdentifier.AgentID = agentModel.Id | ||||
| 	agentIdentifier.Product = req.Product | ||||
| 	agentIdentifier.Price = req.Price | ||||
| 	agentIdentifierByte, err := json.Marshal(agentIdentifier) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单,序列化标识失败, %v", err) | ||||
| 	} | ||||
| 	key, decodeErr := hex.DecodeString("8e3e7a2f60edb49221e953b9c029ed10") | ||||
| 	if decodeErr != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成订单, 获取AES密钥失败: %+v", decodeErr) | ||||
| 	} | ||||
|  | ||||
| 	// Encrypt the params | ||||
| 	encrypted, err := crypto.AesEncryptURL(agentIdentifierByte, key) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
|  | ||||
| 	var agentLink model.AgentLink | ||||
| 	agentLink.AgentId = agentModel.Id | ||||
| 	agentLink.UserId = userID | ||||
| 	agentLink.LinkIdentifier = encrypted | ||||
| 	agentLink.ProductId = productModel.Id | ||||
| 	agentLink.Price = price | ||||
| 	_, err = l.svcCtx.AgentLinkModel.Insert(l.ctx, nil, &agentLink) | ||||
| 	if err != nil { | ||||
| 		return nil, errors.Wrapf(xerr.NewErrCode(xerr.DB_ERROR), "生成代理链接, %v", err) | ||||
| 	} | ||||
| 	return &types.AgentGeneratingLinkResp{ | ||||
| 		LinkIdentifier: encrypted, | ||||
| 	}, nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user