package logic import ( "context" "fmt" "strconv" "lone-services/pkg/modelbase" "lone-services/pkg/utils" analysispb "lone-services/rpc/analysis/pb" "lone-services/services/user/internal/dao" "lone-services/services/user/internal/model" "lone-services/services/user/internal/svc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) func ensureClientBizUser(ctx context.Context, userId int64, clientCode string) error { var row dao.UserClient err := model.UserClientModel{}.Init().GetOne(modelbase.Params{ Eq: map[string]string{ "user_id": strconv.FormatInt(userId, utils.NumberTen), "client_code": clientCode, }, }, &row) if err != nil { return err } if row.Id < utils.NumberOne { return status.Error(codes.FailedPrecondition, "用户端关联不存在") } if row.BizId > utils.NumberZero { return nil } bizId, err := createBizUser(ctx, clientCode) if err != nil { return err } if bizId < utils.NumberOne { return status.Error(codes.Internal, "业务用户创建失败") } _, err = model.UserClientModel{}.Init().Edit(modelbase.Params{ Eq: map[string]string{"id": strconv.FormatInt(row.Id, utils.NumberTen)}, }, map[string]interface{}{ "biz_id": bizId, }) return err } func createBizUser(ctx context.Context, serviceKey string) (int64, error) { switch serviceKey { case "user_skin": return createAnalysisBizUser(ctx, "analysis") default: return utils.NumberZero, status.Error(codes.InvalidArgument, fmt.Sprintf("unsupported biz_user service: %s", serviceKey)) } } func createAnalysisBizUser(ctx context.Context, svcName string) (int64, error) { cli, err := svc.GetRpcClient(svcName) if err != nil { return utils.NumberZero, err } res, err := analysispb.NewAnalysisClient(cli.Conn()).InternalCreateUser(ctx, &analysispb.InternalCreateUserReq{}) if err != nil { return utils.NumberZero, err } if res == nil || res.Id < utils.NumberOne { return utils.NumberZero, status.Error(codes.Internal, "analysis create user empty id") } return res.Id, nil }