user.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. Credits decimal.Decimal `sql:"type:decimal(16.2)"`
  19. BalanceQZNN decimal.Decimal `sql:"type:decimal(16.2)"`
  20. CreditsQZNN decimal.Decimal `sql:"type:decimal(16.2)"`
  21. HeadImg string `gorm:"varchar(40); comment:'头像'"`
  22. Token string `gorm:"varchar(40); comment:'token'"`
  23. City string `gorm:"varchar(40); comment:'城市'"`
  24. ParentTree string `gorm:"varchar(40); comment:'目录树'"`
  25. ParentTreeStr string `gorm:"varchar(40); comment:'父节点'"`
  26. }
  27. func (User) TableName() string {
  28. return "users"
  29. }
  30. func (p User) Init() error {
  31. //var err error
  32. if db.GetDB().Migrator().HasTable(p) {
  33. return nil
  34. }
  35. if err := db.GetDB().Migrator().CreateTable(p); err != nil {
  36. return err
  37. }
  38. return nil
  39. }
  40. func (p User) GetUserModelByID(id uint) (*User, error) {
  41. userModel := User{}
  42. err := db.GetDB().Model(p).Where("id = ?", id).First(&userModel).Error
  43. return &userModel, err
  44. }
  45. func (p User) UpdateUserNicknameByID(id uint, nickname string) error {
  46. err := db.GetDB().Model(p).Where("id = ?", id).Update("nickname", nickname).Error
  47. return err
  48. }
  49. func (p User) UpdateHeadImgByID(id uint, headImg string) error {
  50. err := db.GetDB().Model(p).Where("id = ?", id).Update("head_img", headImg).Error
  51. return err
  52. }
  53. func (p User) UpdateUserNicknameAndPhoneByID(id uint, nickname, phone string) error {
  54. err := db.GetDB().Model(p).Where("id = ?", id).Updates(map[string]interface{}{
  55. "nickname": nickname,
  56. "mobile": phone,
  57. }).Error
  58. return err
  59. }
  60. func (p *User) GetUserByID(userID uint32) error {
  61. var err error
  62. err = db.GetDB().
  63. Model(p).
  64. Where("status = 1 and id = ?", userID).First(p).Error
  65. if err != nil {
  66. logrus.Error(err)
  67. return err
  68. }
  69. return nil
  70. }
  71. func (p User) GetUserByIDTx(tx *gorm.DB, userID uint32) (*User, error) {
  72. var err error
  73. userModel := User{}
  74. err = tx.
  75. Model(p).
  76. Where("status = 1").
  77. Where("id = ?", userID).First(&userModel).Error
  78. if err != nil {
  79. logrus.Error(err)
  80. return nil, err
  81. }
  82. return &userModel, nil
  83. }
  84. func (p User) GetUserByIDList(userIDList []uint32) ([]User, error) {
  85. var err error
  86. userModelList := make([]User, 0)
  87. err = db.GetDB().Table("users").Where("id in ?", userIDList).Scan(&userModelList).Error
  88. if err != nil {
  89. logrus.Error(err, userIDList)
  90. return nil, err
  91. }
  92. return userModelList, nil
  93. }
  94. func (p *User) TokenIsValid(userToken string) (bool, error) {
  95. var err error
  96. err = db.GetDB().Table("users").Where("token = ?", userToken).First(p).Error
  97. if err != nil {
  98. logrus.Error(err)
  99. return false, err
  100. }
  101. if p.Status != 1 {
  102. return false, nil
  103. }
  104. return true, nil
  105. }
  106. func (p User) IncBotUserAmount(userID uint32, amount *decimal.Decimal) error {
  107. updateItem := db.GetDB().Model(p).
  108. Where("status = 1 and platform_flag = 1 and parent_tree_str = 'robot'").
  109. Where("id = ?", userID).
  110. Update("balance", gorm.Expr("balance + ?", amount))
  111. if updateItem.RowsAffected != 1 {
  112. return errors.New("余额不足")
  113. }
  114. return updateItem.Error
  115. }
  116. func (p User) DescBotUserAmount(userID uint32, amount *decimal.Decimal) error {
  117. updateItem := db.GetDB().Model(p).
  118. Where("status = 1 and platform_flag = 1 and parent_tree_str = 'robot'").
  119. Where("id = ? and balance - ? >= 0", userID, amount).
  120. Update("balance", gorm.Expr("balance - ?", amount))
  121. if updateItem.RowsAffected != 1 {
  122. return errors.New("余额不足")
  123. }
  124. return updateItem.Error
  125. }