user_models.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package models
  2. import (
  3. "database/sql"
  4. "errors"
  5. "fmt"
  6. "time"
  7. "xugu_license/internal/api"
  8. "xugu_license/internal/global"
  9. tokens "xugu_license/internal/utils/token"
  10. "golang.org/x/crypto/bcrypt"
  11. )
  12. type UserInfo struct {
  13. Id int
  14. UniqueID string
  15. Username string
  16. Account string
  17. Password string
  18. Telephone string
  19. Email string
  20. Role string
  21. GroupId sql.NullInt32
  22. }
  23. func (u *UserInfo) PrepareGive() {
  24. u.Password = ""
  25. }
  26. // 根据用户id查询用户信息
  27. func GetUserInfoByID(uid uint) (*UserInfo, error) {
  28. var u UserInfo
  29. fmt.Println("uid: ", uid)
  30. // 根据user_id从数据库查询数据
  31. rows, err := global.XuguDB.Query("select ID,UNIQUEID,USERNAME,Account,PASSWORD,TELEPHONE,EMAIL,ROLE,GroupId from lic_USER where id = ? and deltime is null ", uid)
  32. if err != nil {
  33. global.Logger.Errorln(" rows user not found ", err.Error())
  34. return nil, errors.New(" rows user not found")
  35. }
  36. for rows.Next() {
  37. err = rows.Scan(&u.Id, &u.UniqueID, &u.Username, &u.Account, &u.Password, &u.Telephone, &u.Email, &u.Role, &u.GroupId)
  38. if err != nil {
  39. global.Logger.Errorln("rows.Next user not found err ", err.Error())
  40. return nil, errors.New("rows.Next user not found")
  41. }
  42. }
  43. defer rows.Close()
  44. fmt.Println("u: ", u)
  45. u.PrepareGive()
  46. return &u, nil
  47. }
  48. // 查询邮箱或用户名或电话是否已经存在
  49. func CheckEmailOrTelphoneOrAccount(UserName string, Account string, email string, telephone string) (*UserInfo, error) {
  50. var user UserInfo
  51. // 根据user_id从数据库查询数据
  52. fmt.Println("Account: ", Account, email, telephone)
  53. rows, err := global.XuguDB.Query("select ID,UNIQUEID,USERNAME,Account,PASSWORD,TELEPHONE,EMAIL,ROLE from lic_USER where (username = ? or Account = ? or telephone = ? or email = ?) and deltime is null ", UserName, Account, telephone, email)
  54. if err != nil {
  55. global.Logger.Errorln(" rows user not found", err.Error())
  56. return nil, errors.New(fmt.Sprintln(" rows user not found: ", err.Error()))
  57. }
  58. for rows.Next() {
  59. err = rows.Scan(&user.Id, &user.UniqueID, &user.Username, &user.Account, &user.Password, &user.Telephone, &user.Email, &user.Role)
  60. if err != nil {
  61. //fmt.Println("rows.Scan err: ", err)
  62. global.Logger.Errorln("rows.Next not found err ", err.Error())
  63. return nil, errors.New(fmt.Sprintln(" rows.Next user not found: ", err.Error()))
  64. }
  65. }
  66. return &user, nil
  67. }
  68. func LoginCheck(reqAccount, reqPassword string) (string, error) {
  69. //数据库查询
  70. fmt.Println("req.reqAccount: ", reqAccount)
  71. var user UserInfo
  72. // 对用户名和密码进行验证
  73. rows, err := global.XuguDB.Query("select id,UNIQUEID,username,Account,password,telephone,email,role from lic_USER where Account = ? and deltime is null ", reqAccount)
  74. if err != nil {
  75. return "", err
  76. }
  77. hasRows := false
  78. for rows.Next() {
  79. hasRows = true
  80. err = rows.Scan(&user.Id, &user.UniqueID, &user.Username, &user.Account, &user.Password, &user.Telephone, &user.Email, &user.Role)
  81. if err != nil {
  82. global.Logger.Errorln("rows.Next not found err ", err.Error())
  83. return "", err
  84. }
  85. }
  86. if !hasRows {
  87. fmt.Println("没有数据。")
  88. return "", errors.New("no user 没有数据。")
  89. }
  90. // 检查遍历是否有错误
  91. if err = rows.Err(); err != nil {
  92. global.Logger.Errorln("遍历结果集时出错", err.Error())
  93. return "", errors.New(fmt.Sprintln(" rows.Next not found: ", err.Error()))
  94. } else {
  95. fmt.Println("查询完毕,无更多数据。")
  96. }
  97. defer rows.Close()
  98. fmt.Printf("user: %#v \n", user)
  99. err = VerifyPassword(reqPassword, user.Password)
  100. if err != nil && err == bcrypt.ErrMismatchedHashAndPassword {
  101. global.Logger.Errorln("bcrypt.ErrMismatchedHashAndPassword时出错", err.Error())
  102. return "", err
  103. }
  104. token, err := tokens.GenerateToken(uint(user.Id), user.UniqueID, user.Username, user.Account, user.Email)
  105. if err != nil {
  106. global.Logger.Errorln("tokens.GenerateToken时出错", err.Error())
  107. return "", err
  108. }
  109. return token, nil
  110. }
  111. func VerifyPassword(password, hashedPassword string) error {
  112. fmt.Println("hashedPassword: ", hashedPassword)
  113. fmt.Println("password: ", password)
  114. return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(password))
  115. }
  116. // 获取所有用户
  117. func GetAllUser() (*[]UserInfo, error) {
  118. //
  119. rows, err := global.XuguDB.Query("select ID,UniqueID,USERNAME,Account,TELEPHONE,EMAIL,ROLE,GroupId from lic_USER where deltime is null ")
  120. if err != nil {
  121. return nil, errors.New(" rows user not found")
  122. }
  123. var uS []UserInfo
  124. for rows.Next() {
  125. var u UserInfo
  126. err = rows.Scan(&u.Id, &u.UniqueID, &u.Username, &u.Account, &u.Telephone, &u.Email, &u.Role, &u.GroupId)
  127. if err != nil {
  128. global.Logger.Error("GetAllUser ", err.Error())
  129. return nil, errors.New(fmt.Sprintln("GetAllUser失败: ", err.Error()))
  130. }
  131. uS = append(uS, u)
  132. }
  133. defer rows.Close()
  134. return &uS, nil
  135. }
  136. func UpdateUserInfo(u api.UserInfoRequest) error {
  137. tx, err := global.XuguDB.Begin()
  138. if err != nil {
  139. return fmt.Errorf("begin transaction: %v", err)
  140. }
  141. defer func() {
  142. if err != nil {
  143. tx.Rollback()
  144. } else {
  145. err = tx.Commit()
  146. }
  147. }()
  148. if u.Password != "" {
  149. //插入 LicenseInfo 表
  150. _, err = tx.Exec(`
  151. UPDATE lic_USER SET Username = ?,TELEPHONE = ?,EMAIL = ?,PASSWORD =? ,ROLE =? WHERE id = ?;
  152. `, u.Username, u.Telephone, u.Email, u.Password, u.Role, u.Id)
  153. } else {
  154. _, err = tx.Exec(`
  155. UPDATE lic_USER SET Username = ?,TELEPHONE = ?,EMAIL = ? ,ROLE =? WHERE id = ?;
  156. `, u.Username, u.Telephone, u.Email, u.Role, u.Id)
  157. }
  158. if err != nil {
  159. global.Logger.Error("UpdateUserInfo ", err.Error())
  160. return err
  161. }
  162. return nil
  163. }
  164. func DeleteUserInfo(UniqueID string) error {
  165. tx, err := global.XuguDB.Begin()
  166. if err != nil {
  167. return fmt.Errorf("begin transaction: %v", err)
  168. }
  169. defer func() {
  170. if err != nil {
  171. tx.Rollback()
  172. } else {
  173. err = tx.Commit()
  174. }
  175. }()
  176. fmt.Println("UniqueID: ", UniqueID)
  177. //插入 LicenseInfo 表
  178. //DELETE FROM lic_USER WHERE UNIQUEID = ?;
  179. _, err = tx.Exec("UPDATE lic_USER SET deltime = ? WHERE UNIQUEID = ?;", time.Now(), UniqueID)
  180. if err != nil {
  181. global.Logger.Error("DeleteUserInfo ", err.Error())
  182. return err
  183. }
  184. return nil
  185. }