abtest.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package service
  2. import (
  3. "go-common/app/interface/main/push-archive/dao"
  4. "go-common/app/interface/main/push-archive/model"
  5. )
  6. var (
  7. // 存放实验组mid尾号
  8. fansTestGroup = make(map[int]struct{})
  9. // 存放对照组mid尾号
  10. fansComparisonGroup = make(map[int]struct{})
  11. // 指定mid放进测试组
  12. fansTestMids = make(map[int64]struct{})
  13. )
  14. func (s *Service) mappingAbtest() {
  15. for _, n := range s.c.Abtest.TestGroup {
  16. fansTestGroup[n] = struct{}{}
  17. }
  18. for _, n := range s.c.Abtest.ComparisonGroup {
  19. fansComparisonGroup[n] = struct{}{}
  20. }
  21. for _, n := range s.c.Abtest.TestMids {
  22. fansTestMids[n] = struct{}{}
  23. }
  24. }
  25. // 将所有粉丝通过abtest规则,拆分成 (实验流量||对照组流量) && 其余流量
  26. func (s *Service) fansByAbtest(group *dao.FanGroup, fans []int64) (result, others []int64) {
  27. for _, fan := range fans {
  28. n := int(fan % 10)
  29. if group.Hitby == model.GroupDataTypeAbtest {
  30. if _, ok := fansTestMids[fan]; ok {
  31. result = append(result, fan)
  32. continue
  33. }
  34. if _, ok := fansTestGroup[n]; ok {
  35. result = append(result, fan)
  36. continue
  37. }
  38. } else if group.Hitby == model.GroupDataTypeAbComparison {
  39. if _, ok := fansComparisonGroup[n]; ok {
  40. result = append(result, fan)
  41. continue
  42. }
  43. }
  44. others = append(others, fan)
  45. }
  46. return
  47. }