up_archive_statis.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package income
  2. import (
  3. "context"
  4. "strconv"
  5. "strings"
  6. model "go-common/app/job/main/growup/model/income"
  7. xtime "go-common/library/time"
  8. )
  9. func (s *UpIncomeSvr) handleUpArchStatis(c context.Context, upArchStatisCh chan map[int64]*model.UpArchStatis, archiveCh chan []*model.ArchiveIncome) (err error) {
  10. defer close(upArchStatisCh)
  11. upArchMap := make(map[int64]*model.UpArchStatis)
  12. for income := range archiveCh {
  13. s.calUpArchStatis(income, upArchMap)
  14. }
  15. upArchStatisCh <- upArchMap
  16. return
  17. }
  18. func (s *UpIncomeSvr) calUpArchStatis(incomes []*model.ArchiveIncome, upArch map[int64]*model.UpArchStatis) {
  19. for _, income := range incomes {
  20. if _, ok := upArch[income.MID]; !ok {
  21. upArch[income.MID] = addUpArchStatis(income)
  22. }
  23. updateUpArchStatis(income.AID, income.Date, upArch[income.MID])
  24. }
  25. }
  26. func addUpArchStatis(income *model.ArchiveIncome) *model.UpArchStatis {
  27. return &model.UpArchStatis{
  28. MID: income.MID,
  29. WeeklyDate: xtime.Time(startWeeklyDate.Unix()),
  30. WeeklyAIDs: "",
  31. MonthlyDate: xtime.Time(startMonthlyDate.Unix()),
  32. MonthlyAIDs: "",
  33. }
  34. }
  35. func updateUpArchStatis(aid int64, date xtime.Time, statis *model.UpArchStatis) {
  36. idStr := strconv.FormatInt(aid, 10)
  37. if date >= statis.WeeklyDate {
  38. if statis.WeeklyAIDs == "" {
  39. statis.WeeklyAIDs = idStr
  40. } else if !isExist(idStr, statis.WeeklyAIDs) {
  41. statis.WeeklyAIDs += "," + idStr
  42. }
  43. }
  44. if date >= statis.MonthlyDate {
  45. if statis.MonthlyAIDs == "" {
  46. statis.MonthlyAIDs = idStr
  47. } else if !isExist(idStr, statis.MonthlyAIDs) {
  48. statis.MonthlyAIDs += "," + idStr
  49. }
  50. }
  51. }
  52. func isExist(id string, old string) bool {
  53. oldSli := strings.Split(old, ",")
  54. for _, str := range oldSli {
  55. if id == str {
  56. return true
  57. }
  58. }
  59. return false
  60. }