precious.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package model
  2. import (
  3. "active/constant"
  4. "database/sql"
  5. "encoding/json"
  6. "fmt"
  7. "time"
  8. "git.jiaxianghudong.com/go/logs"
  9. "git.jiaxianghudong.com/webs/pkg/dbx"
  10. )
  11. //Precious 神秘宝藏
  12. type Precious struct {
  13. ID int `json:"id" sql:"id"` //
  14. UserID int `json:"userid" sql:"userid"` //用户ID
  15. Goodstag string `json:"goodstag" sql:"goodstag"` //商品标识符 计费点
  16. Multiple int `json:"multiple" sql:"multiple"` //倍数 10:1(20 则为2倍)
  17. Count int `json:"count" sql:"count"` //每日抽奖次数
  18. Date sql.NullString `json:"date" sql:"date"` //抽奖时间
  19. Locked int `json:"locked" sql:"locked"` //锁定 1 锁定计费点 2 锁定倍数
  20. Lockeddate sql.NullString `json:"locked_date" sql:"locked_date"` //锁定时间
  21. Usesurprised int `json:"use_surprised" sql:"use_surprised"` //1 抽中过 是抽中过必现奖励6,12 的10倍奖励
  22. Updatetime string `json:"update_time" sql:"update_time"` //更新时间
  23. }
  24. //PreciousData 神秘宝藏礼包存储数据
  25. type PreciousData struct {
  26. PayTime string `yaml:"pay_time" json:"pay_time"`
  27. Count int `yaml:"count" json:"count"`
  28. }
  29. // GetPrecious 获取全部活动数据
  30. func (m *Precious) GetPrecious() error {
  31. err := dbx.MySQLExt.QueryRow("SELECT goodstag,multiple,count,date,locked,locked_date,use_surprised from `log`.`pay_precious_log` where userid = ? ",
  32. m.UserID).Scan(&m.Goodstag, &m.Multiple, &m.Count, &m.Date, &m.Locked, &m.Lockeddate, &m.Usesurprised)
  33. if nil != err {
  34. if err == sql.ErrNoRows {
  35. return InitPreciousLog(m.UserID)
  36. }
  37. logs.Errorf("GetPrecious err:%v", err)
  38. return err
  39. }
  40. return nil
  41. }
  42. //UpdatePreciousCounts 更新抽奖使用数据
  43. func (m *Precious) UpdatePreciousCounts() (int64, error) {
  44. m.Updatetime = time.Now().Format("2006-01-02 15:04:05")
  45. querySQL := `UPDATE log.pay_precious_log SET goodstag = ?, multiple = ?, count= ?, date=?, use_surprised=?, update_time=?, locked=? where userid = ? `
  46. count, err := dbx.MySQLExt.Update(querySQL,
  47. m.Goodstag,
  48. m.Multiple,
  49. m.Count,
  50. time.Now().Format("2006-01-02"),
  51. m.Usesurprised,
  52. m.Updatetime,
  53. m.Locked,
  54. m.UserID)
  55. if nil != err && err != sql.ErrNoRows {
  56. logs.Errorf("UpdatePreciousCounts err:%v", err)
  57. return 0, err
  58. }
  59. return count, nil
  60. }
  61. //InitPreciousLog 初始化表记录
  62. func InitPreciousLog(userID int) error {
  63. querySQL := "INSERT INTO log.pay_precious_log set userid = ?"
  64. _, err := dbx.MySQLExt.Insert(querySQL, userID)
  65. if err != nil {
  66. logs.Error(fmt.Sprintf("InitPreciousLog sqlStr: %s err: %v", querySQL, err))
  67. return err
  68. }
  69. return nil
  70. }
  71. //UpdatePreciousLocked 更新锁定
  72. func (m *Precious) UpdatePreciousLocked() (int64, error) {
  73. m.Updatetime = time.Now().Format("2006-01-02 15:04:05")
  74. querySQL := `UPDATE log.pay_precious_log SET goodstag = ?, multiple = ?, locked_date =?, update_time=?, locked=? where userid = ? `
  75. count, err := dbx.MySQLExt.Update(querySQL,
  76. m.Goodstag,
  77. m.Multiple,
  78. time.Now().Format("2006-01-02"),
  79. m.Updatetime,
  80. m.Locked,
  81. m.UserID)
  82. if nil != err && err != sql.ErrNoRows {
  83. logs.Errorf("UpdatePreciousCounts err:%v", err)
  84. return 0, err
  85. }
  86. return count, nil
  87. }
  88. //GetPreciousPayCount 更新神秘活动
  89. func GetPreciousPayCount(data string, ver int) int {
  90. count := constant.MaxPayPrecious
  91. if ver >= 1 {
  92. count = constant.MaxPayShakeBean
  93. }
  94. pd := PreciousData{}
  95. if len(data) > 0 {
  96. err := json.Unmarshal([]byte(data), &pd)
  97. if err != nil {
  98. logs.Errorf("GetPreciousPayCount: json data:%s err:%v", data, err)
  99. }
  100. }
  101. //购买每日重制
  102. if time.Now().Format("2006-01-02") != pd.PayTime {
  103. return count
  104. }
  105. if pd.Count >= count {
  106. return 0
  107. }
  108. return count - pd.Count
  109. }
  110. //GetRegressPayCount 获取付费老用户回归
  111. func GetRegressPayCount(data string) int {
  112. pd := PreciousData{}
  113. if len(data) > 0 {
  114. err := json.Unmarshal([]byte(data), &pd)
  115. if err != nil {
  116. logs.Errorf("GetPreciousPayCount: json data:%s err:%v", data, err)
  117. }
  118. }
  119. //购买每日重制
  120. if time.Now().Format("2006-01-02") != pd.PayTime {
  121. return constant.MaxPayRegress
  122. }
  123. if pd.Count >= constant.MaxPayRegress {
  124. return 0
  125. }
  126. return constant.MaxPayRegress - pd.Count
  127. }
  128. //ChangeGoodsTag 更新最高计费点
  129. func ChangeGoodsTag(goodstag string, userid int) (int64, error) {
  130. querySQL := `UPDATE log.pay_precious_log SET goodstag = ? where userid = ? `
  131. count, err := dbx.MySQLExt.Update(querySQL,
  132. goodstag,
  133. userid)
  134. if nil != err && err != sql.ErrNoRows {
  135. logs.Errorf("ChangeGoodsTag err:%v", err)
  136. return 0, err
  137. }
  138. return count, nil
  139. }