shareaward.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package model
  2. import (
  3. "encoding/json"
  4. "sync"
  5. "git.jiaxianghudong.com/go/logs"
  6. "git.jiaxianghudong.com/go/utils"
  7. "git.jiaxianghudong.com/webs/pkg/dbx"
  8. )
  9. type AwardInfo struct {
  10. Awards map[int32]int64 // 普通奖励
  11. AwardsByNum map[int]map[int32]int64 //按次数发不同奖励
  12. LimitNum int
  13. AwardsType int
  14. Remark string
  15. DayLimit int
  16. LimitType int
  17. }
  18. var funcMap map[string]*AwardInfo
  19. var rwlock sync.RWMutex //读写锁
  20. var ShareAwardConf = &ShareAwardConfig{}
  21. type ShareAwardConfig struct {
  22. FhBasicBeans int64 `json:"fh_basic_beans" yaml:"fh_basic_beans"`
  23. FhBeansMax int64 `json:"fh_beans_max" yaml:"fh_beans_max"`
  24. BxpNewguideAward [][]int64 `json:"bxp_newguide_award" yaml:"bxp_newguide_award"`
  25. }
  26. type FuncAward struct {
  27. ID int `sql:"id" json:"id"`
  28. Func string `sql:"func" json:"func"`
  29. MchID string `sql:"mch_id" json:"mch_id"`
  30. Awards string `sql:"awards" json:"awards"`
  31. LimitNum int `sql:"limit_num" json:"limit_num"`
  32. AwardsType int `sql:"awards_type" json:"awards_type"`
  33. LimitType int `sql:"limit_type" json:"limit_type"`
  34. Remark string `sql:"remark" json:"remark"`
  35. DayLimit int `sql:"day_limit" json:"day_limit"`
  36. }
  37. func GetAllFuncAwards() []FuncAward {
  38. sql := `select func,mch_id,awards,limit_num,awards_type,remark,limit_type from func_award `
  39. var funcAwards []FuncAward
  40. rows, err := dbx.MySQL.Query(sql)
  41. defer rows.Close()
  42. if err != nil {
  43. return nil
  44. }
  45. for rows.Next() {
  46. tmp := FuncAward{}
  47. if err = rows.Scan(&tmp.Func, &tmp.MchID, &tmp.Awards, &tmp.LimitNum, &tmp.AwardsType, &tmp.Remark, &tmp.LimitType); err != nil {
  48. return nil
  49. }
  50. funcAwards = append(funcAwards, tmp)
  51. }
  52. return funcAwards
  53. }
  54. func InsertFuncAwards(funcAward *FuncAward) (int64, error) {
  55. sql := "INSERT INTO func_award (`func`, `mch_id`, `awards`, `limit_num`, `awards_type`, `remark`) VALUES (?, ?, ?, ?, ?, ?)"
  56. res, err := dbx.MySQL.Exec(sql,
  57. funcAward.Func,
  58. funcAward.MchID,
  59. funcAward.Awards,
  60. funcAward.LimitNum,
  61. funcAward.AwardsType,
  62. funcAward.Remark)
  63. if err != nil {
  64. return 0, err
  65. }
  66. lastId, _ := res.LastInsertId()
  67. return lastId, nil
  68. }
  69. func UpdateFuncAwards(funcAward *FuncAward) error {
  70. sql := "UPDATE func_award set func = ?,mch_id=?,awards=?,limit_num=?,awards_type=?,remark=?,utime=now() where func=? and mch_id=? "
  71. res, err := dbx.MySQL.Exec(sql,
  72. funcAward.Func,
  73. funcAward.MchID,
  74. funcAward.Awards,
  75. funcAward.LimitNum,
  76. funcAward.AwardsType,
  77. funcAward.Remark,
  78. funcAward.Func,
  79. funcAward.MchID)
  80. if err != nil {
  81. return err
  82. }
  83. affect, _ := res.RowsAffected()
  84. if affect == 0 {
  85. InsertFuncAwards(funcAward)
  86. return nil
  87. }
  88. return nil
  89. }
  90. func DeleteFuncAwards(funcName, mchID string) error {
  91. sql := "delete from func_award where func=? and mch_id=?"
  92. _, err := dbx.MySQL.Exec(sql, funcName, mchID)
  93. if err != nil {
  94. return err
  95. }
  96. return nil
  97. }
  98. func InitAwards() {
  99. logs.Info("开始加载配置...")
  100. rwlock.Lock()
  101. defer rwlock.Unlock()
  102. funcMap = make(map[string]*AwardInfo)
  103. awards := GetAllFuncAwards()
  104. for _, v := range awards {
  105. if v.AwardsType == 1 {
  106. jsonAwards := make(map[string]map[string]int64)
  107. awardsMap := make(map[int]map[int32]int64)
  108. _ = json.Unmarshal([]byte(v.Awards), &jsonAwards)
  109. for ka, va := range jsonAwards {
  110. tmp := make(map[int32]int64)
  111. for kb, vb := range va {
  112. tmp[int32(utils.Atoi(kb))] = vb
  113. }
  114. awardsMap[utils.Atoi(ka)] = tmp
  115. }
  116. funcMap[v.Func+"_"+v.MchID] = &AwardInfo{LimitNum: v.LimitNum,
  117. AwardsType: v.AwardsType,
  118. Remark: v.Remark,
  119. DayLimit: v.DayLimit,
  120. LimitType: v.LimitType,
  121. AwardsByNum: awardsMap}
  122. } else {
  123. jsonAwards := make(map[string]int64)
  124. awardsMap := make(map[int32]int64)
  125. err := json.Unmarshal([]byte(v.Awards), &jsonAwards)
  126. if err != nil {
  127. logs.Error(err, " param:", v.Awards)
  128. }
  129. for ka, va := range jsonAwards {
  130. awardsMap[int32(utils.Atoi(ka))] = va
  131. }
  132. funcMap[v.Func+"_"+v.MchID] = &AwardInfo{LimitNum: v.LimitNum,
  133. AwardsType: v.AwardsType,
  134. Remark: v.Remark,
  135. DayLimit: v.DayLimit,
  136. LimitType: v.LimitType,
  137. Awards: awardsMap}
  138. }
  139. }
  140. for k, v := range funcMap {
  141. logs.Infof("funcMap Init:%s, value:%+v", k, v)
  142. }
  143. logs.Info("funcMap init complete")
  144. }
  145. func GetFuncMap(key string) *AwardInfo {
  146. rwlock.RLock()
  147. defer rwlock.RUnlock()
  148. return funcMap[key]
  149. }