65 lines
1.5 KiB
Go

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"
)
type Basic struct{}
// Login 登陆
func (b *Basic) Login(login requests.Login) (basicResponse.Login, error) {
// 获取用户信息
AdminUserDao := dao.AdminUser{}
adminUser, err := AdminUserDao.GetAdminUserFirstByAccess(login.Access)
if err != nil || adminUser.UserID == 0 {
return basicResponse.Login{}, errors.New("用户名或密码错误")
}
// 检测用户密码
password := md5.Sum([]byte(login.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: adminUser.UserID,
RoleId: adminUser.RoleID,
DeptId: adminUser.DeptID,
PostId: adminUser.PostID,
}
jwt, err := token.NewJWT()
if err != nil {
return basicResponse.Login{}, errors.New("登陆失败")
}
// 生成jwt
result := basicResponse.Login{
UserId: adminUser.UserID,
NickName: adminUser.NickName,
Avatar: adminUser.Avatar,
Token: jwt,
}
result.GetFullAvatar()
return result, nil
}