package service import ( "github.com/linmadan/egglib-go/core/application" "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/auth/command" "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/application/factory" "gitlab.fjmaimaimai.com/allied-creation/performance/pkg/domain" ) type AuthService struct { } // Login PC端登录 func (service *AuthService) Login(loginCommand *command.LoginCommand) (interface{}, error) { transactionContext, err := factory.CreateTransactionContext(nil) if err != nil { return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) } if errStart := transactionContext.StartTransaction(); errStart != nil { return nil, application.ThrowError(application.TRANSACTION_ERROR, errStart.Error()) } defer func() { _ = transactionContext.RollbackTransaction() }() //统一用户中心登录 authCodeReply, err := factory.UCenterApi().AuthCode(loginCommand.Code) if err != nil || !authCodeReply.IsOk() { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "统一用户中心认证失败") } //用户权限校验 userAuthReply, err := factory.BusinessAdminApi().GetUserAuth(authCodeReply.Data.MUid, loginCommand.PlatformId) if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户鉴权失败") } if !userAuthReply.IsOk() { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, userAuthReply.Message()) } //获取公司数据 companyRepository := factory.CreateCompanyRepository(map[string]interface{}{ "transactionContext": transactionContext, }) company, err := companyRepository.FindOne(map[string]interface{}{ "id": authCodeReply.Data.CompanyId, }) if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取公司数据失败") } userRepository := factory.CreateUserRepository(map[string]interface{}{ "transactionContext": transactionContext, }) user, err := userRepository.FindOne(map[string]interface{}{ "id": authCodeReply.Data.MUid, "companyId": company.Id, }) if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "获取公司数据失败") } if user.Status != domain.UserStatusEnable { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "用户被禁用") } userAuth := &domain.UserAuth{ UserId: user.Id, CompanyId: user.CompanyId, Phone: user.Account, PlatformId: loginCommand.PlatformId, Name: user.Name, AdminType: user.AdminType, } accessToken, err := userAuth.CreateAccessToken() if err != nil { return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) } if err := transactionContext.CommitTransaction(); err != nil { return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) } return map[string]interface{}{ "access": map[string]interface{}{ "accessToken": accessToken, "expiresIn": domain.JWTExpiresSecond, }, }, nil }