user.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package bizhi
  2. import (
  3. models2 "duoduo/apis/bizhi/models"
  4. orm "duoduo/database"
  5. "duoduo/tools"
  6. "fmt"
  7. "github.com/jinzhu/gorm"
  8. "strconv"
  9. )
  10. type User struct {
  11. ID int64 `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"` // 主键
  12. Phone string `gorm:"column:phone;type:varchar(24)" json:"phone"` // 手机号
  13. OpenID1 string `gorm:"column:open_id_1;type:varchar(255)" json:"openId1"` // 上级open_id
  14. NickName string `gorm:"column:nick_name;type:varchar(255)" json:"nickName"` // 微信用户名
  15. AvatarUrl string `gorm:"column:avatar_url;type:varchar(255)" json:"avatarUrl"` // 头像url
  16. Admin int `gorm:"column:admin;type:int(11)" json:"admin"` // 1-管理员
  17. OpenID string `gorm:"column:open_id;type:varchar(255)" json:"openId"` // open_id
  18. CreateTime string `gorm:"column:create_time;type:datetime" json:"createTime"` // 创建时间
  19. UpdateTime string `gorm:"column:update_time;type:datetime" json:"updateTime"` // 更新时间
  20. Score int `gorm:"column:score;type:int(11)" json:"score"` // 积分
  21. }
  22. func (m *User) TableName() string {
  23. return "user"
  24. }
  25. func (u *User) GetNum() int {
  26. var count int
  27. tableCount := orm.BzMysql.Table(u.TableName()).Where("open_id = ? ", u.OpenID)
  28. tableCount.Count(&count)
  29. return count
  30. }
  31. func (u *User) Create() (User, error) {
  32. var doc User
  33. var err error
  34. tx := orm.BzMysql.Begin()
  35. defer func() {
  36. if err != nil {
  37. tx.Rollback()
  38. } else {
  39. tx.Commit()
  40. }
  41. }()
  42. if u.OpenID1 != "" { //有上级
  43. var score ScoreLogs
  44. err := tx.Table(u.TableName()).Create(&u).Error
  45. if err != nil {
  46. fmt.Println(err)
  47. return doc, err
  48. }
  49. score.Des = "新用户赠送积分"
  50. score.OpenID = u.OpenID
  51. score.Score = 3
  52. score.Type = 1
  53. score.CreateTime = tools.GetCurrntTimeStr()
  54. err = tx.Table("score_log").Create(&score).Error
  55. if err != nil {
  56. fmt.Println(err)
  57. return doc, err
  58. }
  59. score.Des = "邀请好友赠送积分"
  60. score.OpenID = u.OpenID1
  61. score.Score = 2
  62. score.Type = 4
  63. score.CreateTime = tools.GetCurrntTimeStr()
  64. err = tx.Table("score_log").Create(&score).Error
  65. if err != nil {
  66. fmt.Println(err)
  67. return doc, err
  68. }
  69. //更新用户积分
  70. scoreStr := strconv.Itoa(2)
  71. if err := tx.Table(u.TableName()).Where("open_id = ? ", u.OpenID1).Updates(
  72. map[string]interface{}{
  73. "score": gorm.Expr("score + ?", scoreStr),
  74. "update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
  75. return doc, err
  76. }
  77. } else {
  78. var score ScoreLog
  79. err := tx.Table(u.TableName()).Create(&u).Error
  80. if err != nil {
  81. fmt.Println(err)
  82. return doc, err
  83. }
  84. score.Des = "新用户赠送积分"
  85. score.OpenID = u.OpenID
  86. score.Score = 3
  87. score.Type = 1
  88. score.CreateTime = tools.GetCurrntTimeStr()
  89. err = tx.Table("score_log").Create(&score).Error
  90. if err != nil {
  91. fmt.Println(err)
  92. return doc, err
  93. }
  94. }
  95. doc = *u
  96. return doc, nil
  97. }
  98. func (u *User) GetScore() (User, error) {
  99. var doc User
  100. if err := orm.BzMysql.Table(u.TableName()).Where("open_id = ?", u.OpenID).Select("*").First(&doc).Error; err != nil {
  101. return doc, err
  102. }
  103. return doc, nil
  104. }
  105. func (u *User) SubScore(req models2.SubUserScoreRequest) error {
  106. var score ScoreLog
  107. var err error
  108. tx := orm.BzMysql.Begin()
  109. defer func() {
  110. if err != nil {
  111. tx.Rollback()
  112. } else {
  113. tx.Commit()
  114. }
  115. }()
  116. score.Score = req.Score
  117. score.OpenID = req.OpenId
  118. score.Des = req.Des
  119. score.CreateTime = tools.GetCurrntTimeStr()
  120. score.Type = req.Type
  121. //scoreStr := strconv.Itoa(req.Score)
  122. //scoreStr := tools.IntToString(req.Score)
  123. if err := tx.Table(u.TableName()).Model(&u).Where("open_id = ? ", u.OpenID).Updates(
  124. map[string]interface{}{
  125. "score": gorm.Expr("score + ?", req.Score),
  126. "update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
  127. return err
  128. }
  129. if err := tx.Table(score.TableName()).Create(&score).Error; err != nil {
  130. return err
  131. }
  132. return nil
  133. }
  134. //list 接口使用
  135. func (u *User) GetOpenIdList(pageSize int, pageIndex int) ([]User, int, error) {
  136. var doc []User
  137. table := orm.BzMysql.Table(u.TableName())
  138. table = table.Where("open_id_1 = ? ", u.OpenID)
  139. var count int
  140. if err := table.Select("id,nick_name,avatar_url,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s') as create_time").Order("id desc").Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Error; err != nil {
  141. return nil, 0, err
  142. }
  143. table.Count(&count)
  144. return doc, count, nil
  145. }
  146. func (u *User) UpdateUserName() error {
  147. if err := orm.BzMysql.Table(u.TableName()).Model(&u).Where("open_id = ? ", u.OpenID).Updates(
  148. map[string]interface{}{
  149. "nick_name": u.NickName,
  150. "avatar_url": u.AvatarUrl,
  151. "update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
  152. return err
  153. }
  154. return nil
  155. }