max_talents.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package jobs
  2. import (
  3. "encoding/json"
  4. "gadmin/config"
  5. model2 "gadmin/internal/gorm/model"
  6. "gadmin/internal/gorm/query"
  7. "github.com/sirupsen/logrus"
  8. "gorm.io/gen"
  9. "log"
  10. )
  11. var MaxTalents = new(jMaxTalents)
  12. type jMaxTalents struct {
  13. Stat map[int]int
  14. }
  15. func (j *jMaxTalents) Run() {
  16. logrus.Info("jMaxTalents Run.....")
  17. j.Stat = make(map[int]int)
  18. j.stat()
  19. }
  20. func (j *jMaxTalents) stat() {
  21. var (
  22. results []*model2.PlayerMaterial
  23. m = query.Use(config.GDB1).PlayerMaterial
  24. )
  25. err := m.Select(m.ID, m.Talents).
  26. FindInBatches(&results, 10000, func(tx gen.Dao, batch int) error {
  27. for _, result := range results {
  28. if result.Talents == "" {
  29. logrus.Warningf("无Talents,跳过..")
  30. continue
  31. }
  32. var talents = make(map[int]int)
  33. if err := json.Unmarshal([]byte(result.Talents), &talents); err != nil {
  34. logrus.Warningf("Unmarshal talents err:%+v", err)
  35. panic(err)
  36. }
  37. if len(talents) > 0 {
  38. for id, level := range talents {
  39. lv, ok := j.Stat[id]
  40. if !ok {
  41. j.Stat[id] = level
  42. continue
  43. }
  44. if lv < level {
  45. j.Stat[id] = level
  46. continue
  47. }
  48. }
  49. }
  50. }
  51. return nil
  52. })
  53. if err != nil {
  54. panic(err)
  55. } else {
  56. logrus.Warningf("stat:%+v", j.Stat)
  57. log.Println("stat MaxTalents finished")
  58. }
  59. }