login_service.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package service
  2. import (
  3. "time"
  4. "xps/cache"
  5. "xps/datasource"
  6. "xps/repositories"
  7. "xps/utils"
  8. "xps/viewmodel"
  9. "xps/web/middleware"
  10. )
  11. type LoginService interface {
  12. GetAccountByName(cond string)(*viewmodel.AccountInfo, error)
  13. CheckLogin(username, password string) (bRet bool, msg string, data *viewmodel.AccessToken)
  14. Logout(userId int64) error
  15. }
  16. type loginService struct {
  17. accountRepo *repositories.AccountRepo
  18. ocRepo *repositories.OcRepo
  19. roleMemberRepo *repositories.RoleMemberRepo
  20. groupMemberRepo *repositories.GroupMemberRepo
  21. groupMemberPositionRepo *repositories.GroupMemberPositionRepo
  22. }
  23. func NewLoginService() LoginService {
  24. return &loginService{
  25. accountRepo: repositories.NewAccountRepo(datasource.InstanceMaster()),
  26. ocRepo: repositories.NewOcRepo(datasource.InstanceMaster()),
  27. roleMemberRepo: repositories.NewRoleMemberRepo(datasource.InstanceMaster()),
  28. groupMemberRepo: repositories.NewGroupMemberRepo(datasource.InstanceMaster()),
  29. groupMemberPositionRepo: repositories.NewGroupMemberPositionRepo(datasource.InstanceMaster()),
  30. }
  31. }
  32. func (s *loginService) GetAccountByName(cond string)(*viewmodel.AccountInfo, error) {
  33. return s.accountRepo.GetAccountByName(cond)
  34. }
  35. func (s *loginService) CheckLogin(code, password string) (bRet bool, msg string, data *viewmodel.AccessToken) {
  36. account, err := s.accountRepo.GetAccountByCode(code)
  37. if err != nil {
  38. return false, "用户不存在", nil
  39. }
  40. pwd := utils.GetMD5String(password)
  41. if pwd != account.Password {
  42. return false, "密码错误", nil
  43. }
  44. if account.Status == 2 {
  45. return false, "账号被锁定,无法登陆,请联系管理员", nil
  46. }
  47. ocId := account.OcId
  48. accountId := account.AccountId
  49. accountName := account.AccountName
  50. accountRealName := account.AccountRealName
  51. accountAvatar := account.AccountAvatar
  52. accountPhoto := account.AccountPhoto
  53. accountIntro := account.AccountIntro
  54. accountPhone := account.AccountPhone
  55. oc, err := s.ocRepo.GetById(ocId)
  56. if err != nil {
  57. return false, "单位信息不完整,请联系管理员", nil
  58. }
  59. ocName := oc.OcName
  60. ocTypeId := oc.OcTypeId
  61. roleMember, err := s.roleMemberRepo.GetAccountFirstRole(ocId, accountId)
  62. if err != nil {
  63. return false, "帐号没有配置角色信息", nil
  64. }
  65. curRoleId := roleMember.RoleId
  66. curRoleName := roleMember.RoleName
  67. groupMember, err := s.groupMemberRepo.GetFirstGroupByAccountId(ocId, accountId)
  68. if err != nil {
  69. return false, "账号没有所属部门", nil
  70. }
  71. curGroupId := groupMember.GroupId
  72. curGroupName := groupMember.GroupName
  73. groupMemberPosition, err := s.groupMemberPositionRepo.GetFirstPositionByGroupIdAndAccountId(ocId, curGroupId, accountId)
  74. if err != nil {
  75. return false, "账号没有岗位信息", nil
  76. }
  77. curPositionId := groupMemberPosition.PositionId
  78. curPositionName := groupMemberPosition.PositionName
  79. userData := &viewmodel.UserData{}
  80. userData.OcId = ocId
  81. userData.OcName = ocName
  82. userData.UserId = accountId
  83. userData.UserName = accountName
  84. userData.UserRealName = accountRealName
  85. userData.UserPhone = accountPhone
  86. userData.UserPhoto = accountPhoto
  87. userData.UserAvatar = accountAvatar
  88. userData.UserIntro = accountIntro
  89. userData.GroupId = curGroupId
  90. userData.GroupName = curGroupName
  91. userData.PositionId = curPositionId
  92. userData.PositionName = curPositionName
  93. userData.RoleId = curRoleId
  94. userData.RoleName = curRoleName
  95. err = cache.SetUserData(accountId, userData)
  96. if err != nil {
  97. return false, "Redis缓存用户数据失败", nil
  98. }
  99. tokenStr, err := middleware.GenerateToken(ocId, ocTypeId, accountId)
  100. if err != nil {
  101. return false, "没有生成Token", nil
  102. }
  103. expiresIn := time.Now().Add(time.Hour*48).UnixNano()/1e6
  104. tokenResult := &viewmodel.AccessToken{}
  105. tokenResult.AccessToken = tokenStr
  106. tokenResult.User = userData
  107. tokenResult.ExpiresIn = expiresIn
  108. tokenResult.LeaseTime = expiresIn
  109. return true, "", tokenResult
  110. }
  111. func (s *loginService) Logout(userId int64) error {
  112. _, err := cache.DeleteUserData(userId)
  113. return err
  114. }