user.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package model
  2. import (
  3. "errors"
  4. "github.com/shopspring/decimal"
  5. "github.com/sirupsen/logrus"
  6. "gogs.daxia.dev/huanan/pkg.daxia.dev/db"
  7. "gorm.io/gorm"
  8. )
  9. type User struct {
  10. ID uint `gorm:"primarykey"`
  11. Pid uint `gorm:"varchar(40); comment:'父ID'"`
  12. Name string `gorm:"varchar(40); comment:'名称'"`
  13. Nickname string `gorm:"varchar(40); comment:'nickname'"`
  14. Mobile string `gorm:"varchar(40); comment:'手机号'"`
  15. AccountType int `gorm:"int; comment:'账号类型'"` //0:普通用户, 1:代理
  16. Status int `gorm:"int; comment:'状态0:禁用,1:启用'"`
  17. Balance decimal.Decimal `sql:"type:decimal(16.2)"`
  18. FZBalance decimal.Decimal `sql:"type:decimal(16.2)"`
  19. HeadImg string `gorm:"varchar(40); comment:'头像'"`
  20. Token string `gorm:"varchar(40); comment:'token'"`
  21. City string `gorm:"varchar(40); comment:'城市'"`
  22. ParentTree string `gorm:"varchar(40); comment:'目录树'"`
  23. ParentTreeStr string `gorm:"varchar(40); comment:'父节点'"`
  24. }
  25. func (User) TableName() string {
  26. return "users"
  27. }
  28. func (p User) Init() error {
  29. //var err error
  30. if db.GetDB().Migrator().HasTable(p) {
  31. return nil
  32. }
  33. if err := db.GetDB().Migrator().CreateTable(p); err != nil {
  34. return err
  35. }
  36. return nil
  37. }
  38. func (p User) GetUserModelByID(id uint) (*User, error) {
  39. userModel := User{}
  40. err := db.GetDB().Model(p).Where("id = ?", id).First(&userModel).Error
  41. return &userModel, err
  42. }
  43. func (p User) UpdateUserNicknameByID(id uint, nickname string) error {
  44. err := db.GetDB().Model(p).Where("id = ?", id).Update("nickname", nickname).Error
  45. return err
  46. }
  47. func (p User) UpdateHeadImgByID(id uint, headImg string) error {
  48. err := db.GetDB().Model(p).Where("id = ?", id).Update("head_img", headImg).Error
  49. return err
  50. }
  51. func (p User) UpdateUserNicknameAndPhoneByID(id uint, nickname, phone string) error {
  52. err := db.GetDB().Model(p).Where("id = ?", id).Updates(map[string]interface{}{
  53. "nickname": nickname,
  54. "mobile": phone,
  55. }).Error
  56. return err
  57. }
  58. func (p *User) GetUserByID(userID uint32) error {
  59. var err error
  60. err = db.GetDB().
  61. Model(p).
  62. Where("status = 1 and id = ?", userID).First(p).Error
  63. if err != nil {
  64. logrus.Error(err)
  65. return err
  66. }
  67. return nil
  68. }
  69. func (p User) GetUserByIDTx(tx *gorm.DB, userID uint32) (*User, error) {
  70. var err error
  71. userModel := User{}
  72. err = tx.
  73. Model(p).
  74. Where("status = 1 and platform_flag = 1").
  75. Where("id = ?", userID).First(&userModel).Error
  76. if err != nil {
  77. logrus.Error(err)
  78. return nil, err
  79. }
  80. return &userModel, nil
  81. }
  82. func (p User) GetUserByIDList(userIDList []uint32) ([]User, error) {
  83. var err error
  84. userModelList := make([]User, 0)
  85. err = db.GetDB().Table("users").Where("id in ?", userIDList).Scan(&userModelList).Error
  86. if err != nil {
  87. logrus.Error(err, userIDList)
  88. return nil, err
  89. }
  90. return userModelList, nil
  91. }
  92. func (p *User) TokenIsValid(userToken string) (bool, error) {
  93. var err error
  94. err = db.GetDB().Table("users").Where("token = ?", userToken).First(p).Error
  95. if err != nil {
  96. logrus.Error(err)
  97. return false, err
  98. }
  99. if p.Status != 1 {
  100. return false, nil
  101. }
  102. return true, nil
  103. }
  104. func (p User) IncBotUserAmount(userID uint32, amount *decimal.Decimal) error {
  105. updateItem := db.GetDB().Model(p).
  106. Where("status = 1 and platform_flag = 1 and parent_tree_str = 'robot'").
  107. Where("id = ?", userID).
  108. Update("balance", gorm.Expr("balance + ?", amount))
  109. if updateItem.RowsAffected != 1 {
  110. return errors.New("余额不足")
  111. }
  112. return updateItem.Error
  113. }
  114. func (p User) DescBotUserAmount(userID uint32, amount *decimal.Decimal) error {
  115. updateItem := db.GetDB().Model(p).
  116. Where("status = 1 and platform_flag = 1 and parent_tree_str = 'robot'").
  117. Where("id = ? and balance - ? >= 0", userID, amount).
  118. Update("balance", gorm.Expr("balance - ?", amount))
  119. if updateItem.RowsAffected != 1 {
  120. return errors.New("余额不足")
  121. }
  122. return updateItem.Error
  123. }