exchange_pray.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package jobs
  2. import (
  3. "github.com/sirupsen/logrus"
  4. "sync"
  5. )
  6. var (
  7. ExchangePray = new(jExchangePray)
  8. prayItems = []int64{3101, 3102, 3103, 3104} // 祈福道具
  9. prayItemsPrice = 100 // 祈福道具兑换金币数量
  10. )
  11. type jExchangePray struct {
  12. sync.RWMutex
  13. }
  14. func (j *jExchangePray) Run() {
  15. logrus.Info("jExchangePray Run.....")
  16. j.handle()
  17. }
  18. func (j *jExchangePray) handle() {
  19. /*j.RLock()
  20. defer j.RUnlock()
  21. var (
  22. results []*model.PlayerMaterial
  23. u = query.Use(config.GDB1).PlayerMaterial
  24. )
  25. type ExtraData struct {
  26. Materials []*model2.DropMaterial `json:"materials"`
  27. Equips []int64 `json:"equips"`
  28. }
  29. err := u.Select(u.ID, u.Playerid, u.Materials).
  30. Where(u.Playerid.In([]int64{1472136, 1472137, 1472139, 1472140}...)).
  31. Order(u.ID).
  32. FindInBatches(&results, 1000, func(tx gen.Dao, batch int) error {
  33. for _, result := range results {
  34. if result.Materials == "" {
  35. continue
  36. }
  37. var materials map[int64]*model2.DropMaterial
  38. if err := json.Unmarshal([]byte(result.Materials), &materials); err != nil {
  39. logrus.Warningf("Unmarshal Materials err:%+v", err)
  40. return err
  41. }
  42. // 统计个数
  43. var cnt int64
  44. for _, itId := range prayItems {
  45. if v, ok := materials[itId]; ok {
  46. cnt += int64(v.Count)
  47. delete(materials, itId)
  48. }
  49. }
  50. if cnt > 0 {
  51. coin := cnt * int64(prayItemsPrice)
  52. // 保存档案 删除卡片
  53. newMaterial, err := json.Marshal(materials)
  54. if err != nil {
  55. logrus.Panicf("json.Marshal materials err:%+v, materials%+v", err, materials)
  56. }
  57. if _, err = query.Use(config.GDB1).PlayerMaterial.
  58. Where(u.Playerid.Eq(result.Playerid)).
  59. Updates(model.PlayerMaterial{
  60. Materials: string(newMaterial),
  61. }); err != nil {
  62. logrus.Warnf("PlayerMaterial Updates2 err . %v", err)
  63. return err
  64. }
  65. dm := new(model2.DropMaterial)
  66. dm.ID = constants.MaterilaId_Coin
  67. dm.Count = int(coin)
  68. var l = query.Use(config.GDB1).PlayerLetter
  69. letter := model.PlayerLetter{
  70. PlayerID: result.Playerid,
  71. Type: 16, //新年祈福道具
  72. ExpireTime: time.Now().Add(time.Hour * 24 * 7),
  73. CreateTime: time.Now(),
  74. DisplayTime: time.Now(),
  75. }
  76. var em ExtraData
  77. em.Materials = append(em.Materials, dm)
  78. emb, err := json.Marshal(&em)
  79. if err != nil {
  80. logrus.Panicf("exchangePrayItems Materials marshal error. %v, error: %v", em, err)
  81. }
  82. letter.Extra = string(emb)
  83. extra := make(map[string]string)
  84. extra["cardNumber"] = strconv.FormatInt(cnt, 10)
  85. extra["coinNumber"] = strconv.FormatInt(coin, 10)
  86. jex, err := json.Marshal(&extra)
  87. if err != nil {
  88. logrus.Panicf("exchangePrayItems LetterExtraRank marshal error. %v, error: %v", extra, err)
  89. }
  90. letter.ExtraInfo = string(jex)
  91. if err = l.Create(&letter); err != nil {
  92. logrus.Warningf("addLetter Create err :%+v, letter:%+v", err, letter)
  93. return err
  94. }
  95. }
  96. }
  97. return nil
  98. })
  99. if err != nil {
  100. logrus.WithField("form", "ExchangePray").Errorf("FindInBatches err:%+v", err)
  101. }
  102. logrus.Infof("ExchangePray ok!!")*/
  103. }