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