user.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package model
  2. import (
  3. "bigdata_archives/app/e"
  4. "bigdata_archives/global"
  5. "bigdata_archives/unity"
  6. "bigdata_archives/utils"
  7. "database/sql/driver"
  8. "encoding/json"
  9. "fmt"
  10. "log"
  11. )
  12. type User struct {
  13. utils.BaseModel
  14. Account string `json:"account" validate:"required"`
  15. Password string `json:"password" validate:"required"`
  16. State *int `json:"state"`
  17. Menu Menus `gorm:"type:json" json:"menu"`
  18. }
  19. type UserDto struct {
  20. User
  21. Token string `json:"token"`
  22. }
  23. func (*User) TableName() string {
  24. return "user"
  25. }
  26. type Menus []string
  27. func (lo Menus) Value() (driver.Value, error) {
  28. return json.Marshal(lo)
  29. }
  30. func (fn *Menus) Scan(src interface{}) error {
  31. if src == nil {
  32. *fn = make(Menus, 0)
  33. return nil
  34. }
  35. var u []byte
  36. switch v := src.(type) {
  37. case string:
  38. u = []byte(v)
  39. case []byte:
  40. u = v
  41. default:
  42. return fmt.Errorf("unsupported type: %T", src)
  43. }
  44. return json.Unmarshal(u, (*[]string)(fn))
  45. }
  46. // Login 登录
  47. func (u *User) Login(userName, password string) (UserDto, e.Rescode) {
  48. //TODO implement me
  49. md5 := utils.MD5(password)
  50. tx := global.DBLink.Where("account = ?", userName).Where("password = ?", md5).Where("state = ?", 1).First(&u)
  51. if tx.Error != nil {
  52. return UserDto{}, e.AccountAndPasswordIsWrong
  53. }
  54. if tx.RowsAffected > 0 {
  55. token, err := utils.CreateToken(u.ID, u.Account, "user")
  56. if err != nil {
  57. return UserDto{}, e.TheUserAlreadyExists
  58. }
  59. var userDto = UserDto{}
  60. userDto.Token = token
  61. return userDto, e.SUCCESS
  62. }
  63. return UserDto{}, e.LoginFailed
  64. }
  65. // CreateAdmin 创建管理员
  66. func CreateAdmin() {
  67. var user = User{}
  68. var count int64
  69. global.DBLink.Table("user").Where("account = ?", "admin").Count(&count)
  70. if count == 0 {
  71. user.Account = "admin"
  72. user.Menu = []string{"*"}
  73. if user.State == nil {
  74. user.State = new(int)
  75. *user.State = 1
  76. }
  77. md5 := utils.MD5("123456")
  78. user.Password = md5
  79. create := global.DBLink.Create(&user)
  80. if create.Error == nil && create.RowsAffected > 0 {
  81. log.Println("管理员创建成功")
  82. }
  83. }
  84. }
  85. // AddUser 添加用户
  86. func (u *User) AddUser(user User) (User, e.Rescode) {
  87. //TODO implement me
  88. md5 := utils.MD5(user.Password)
  89. user.Password = md5
  90. if user.State == nil {
  91. user.State = new(int)
  92. *user.State = 1
  93. }
  94. tx := global.DBLink.Create(&user)
  95. if tx.Error != nil && tx.RowsAffected == 0 {
  96. return User{}, e.CreateFailed
  97. } else {
  98. return user, e.SUCCESS
  99. }
  100. }
  101. func (u *User) GetUser(params unity.QueryPageParams) ([]User, e.Rescode) {
  102. //TODO implement me
  103. panic("implement me")
  104. }
  105. func (u *User) GetUserById(id int) (User, e.Rescode) {
  106. //TODO implement me
  107. var user User
  108. tx := global.DBLink.Where("id = ?", id).First(&user)
  109. if tx.Error == nil && tx.RowsAffected > 0 {
  110. return user, e.SUCCESS
  111. }
  112. return User{}, e.TheUserIsEmpty
  113. }