package service import ( "crypto/md5" "encoding/hex" "errors" "hospital-admin-api/api/dao" "hospital-admin-api/api/requests" "hospital-admin-api/api/responses/basicResponse" "hospital-admin-api/utils" "strconv" ) type BasicService struct{} // Login 登陆 func (b *BasicService) Login(LoginRequest requests.Login) (basicResponse.Login, error) { // 获取用户信息 AdminUserDao := dao.AdminUserDao{} adminUser, err := AdminUserDao.GetAdminUserFirstByAccess(LoginRequest.Access) if err != nil || adminUser == nil { return basicResponse.Login{}, errors.New("用户名或密码错误") } // 检测用户密码 password := md5.Sum([]byte(LoginRequest.Password + adminUser.Salt)) // 将哈希值转换为16进制字符串 passwordString := hex.EncodeToString(password[:]) if passwordString != adminUser.Password { return basicResponse.Login{}, errors.New("用户名或密码错误") } // 检测用户状态 if adminUser.IsDeleted == 1 { return basicResponse.Login{}, errors.New("非法用户") } if adminUser.IsDisabled == 1 { return basicResponse.Login{}, errors.New("您的账号已被禁用,请联系管理员处理") } token := &utils.Token{ UserId: strconv.FormatInt(adminUser.UserID, 10), RoleId: strconv.FormatInt(adminUser.RoleID, 10), DeptId: strconv.FormatInt(adminUser.DeptID, 10), PostId: strconv.FormatInt(adminUser.PostID, 10), } // 生成jwt jwt, err := token.NewJWT() if err != nil { return basicResponse.Login{}, errors.New("登陆失败") } result := basicResponse.Login{ UserId: strconv.FormatInt(adminUser.UserID, 10), NickName: adminUser.NickName, Avatar: adminUser.Avatar, Token: jwt, } result.GetFullAvatar() return result, nil }