usermobilelogic.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // 逻辑作接口-移动端用户
  2. // 秒寻科技
  3. // zt
  4. //2024-02-2
  5. package usermobilelogic
  6. import (
  7. "ipsomc/core/company/companymodel"
  8. "ipsomc/core/dao/mysql/mysqlapi"
  9. "ipsomc/core/dao/redis/redisapi"
  10. "ipsomc/core/dao/redis/redismodel"
  11. "ipsomc/core/usermobile/usermobileapi"
  12. "ipsomc/core/usermobile/usermobilemodel"
  13. "ipsomc/util"
  14. "strconv"
  15. "time"
  16. )
  17. type UserMobileLgc struct {
  18. mySqlApi mysqlapi.MySqlApi
  19. userApi usermobileapi.UserMobileApi
  20. redisApi redisapi.RedisApi
  21. }
  22. // 检查用户是否已经登录过,若曾经登录过则返回用户信息给前端,若未曾登录则操作数据库添加记录
  23. func (obj *UserMobileLgc) CheckUserLoginLgc(dataModel *usermobilemodel.UserMobile) error {
  24. var count uint8
  25. modelUser := new(usermobilemodel.UserMobile)
  26. //基于openid判断用户曾经是否登录
  27. if err := obj.mySqlApi.GetDb().Model(modelUser).Where("openid=?", dataModel.OpenID).Count(&count).Error; err != nil {
  28. return err
  29. }
  30. //曾经登录过
  31. if count > 0 {
  32. //获得用户信息
  33. if err := obj.mySqlApi.GetDb().Model(modelUser).Where("openid=?", dataModel.OpenID).First(modelUser).Error; err != nil {
  34. return err
  35. }
  36. //组织返回数据
  37. dataModel.CompanyID = modelUser.CompanyID
  38. dataModel.UserType = modelUser.UserType
  39. dataModel.ID = modelUser.ID
  40. dataModel.Nickname = modelUser.Nickname
  41. dataModel.Avatar = modelUser.Avatar
  42. dataModel.Province = modelUser.Province
  43. dataModel.City = modelUser.City
  44. dataModel.Country = modelUser.Country
  45. } else { //未曾登录
  46. //根据域名获得公司id
  47. modelCompany := new(companymodel.Company)
  48. if err := obj.mySqlApi.GetDb().Model(modelCompany).Where("domain_name=?", dataModel.DomainName).First(modelCompany).Error; err != nil {
  49. return err
  50. }
  51. //将数据添加到数据库
  52. modelUser.CompanyID = modelCompany.ID
  53. //modelUser.ItemID = modelCompany.
  54. modelUser.UserType = 2 //小程序登录
  55. modelUser.OpenID = dataModel.OpenID
  56. if err := obj.userApi.AddUserByOpenId(modelUser); err != nil {
  57. return err
  58. }
  59. //组织返回数据
  60. dataModel.CompanyID = modelCompany.ID
  61. dataModel.UserType = modelUser.UserType
  62. dataModel.ID = modelUser.ID
  63. }
  64. //生成token
  65. uuid := util.GenerateUuid()
  66. token := "mtoken" + strconv.Itoa(int(modelUser.ID)) + "-" + uuid
  67. dataModel.Token = token
  68. //将用户数据保存到redis中
  69. redisModel := new(redismodel.RedisUserMobile)
  70. redisModel.CompanyID = modelUser.CompanyID
  71. redisModel.UserType = modelUser.UserType
  72. redisModel.UserID = modelUser.ID
  73. redisModel.Nickname = modelUser.Nickname
  74. redisModel.Token = token
  75. redisModel.TokenTime = time.Now().Format("2006-01-02 15:16:17")
  76. //以token为键,将用户信息保存到redis中,token过期时间为60分钟
  77. if err := obj.redisApi.SetModelData(token, redisModel, 60); err != nil {
  78. return err
  79. }
  80. return nil
  81. }