signedups.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package service
  2. import (
  3. "context"
  4. "encoding/csv"
  5. "fmt"
  6. "io"
  7. "os"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "go-common/library/log"
  12. )
  13. const (
  14. _SignedUps = "%d年%d月%d日加入人数统计"
  15. )
  16. func (s *Service) execSignedUps(c context.Context, date time.Time) (body string, err error) {
  17. tm1, err := s.dao.GetDateSignedUps(c, date, date.Add(24*time.Hour))
  18. if err != nil {
  19. log.Error("s.execSignedUps dao.GetDateSignedUps T-1(%v) signed ups error(%v)", date, err)
  20. return
  21. }
  22. tm2, err := s.dao.GetDateSignedUps(c, date.Add(-24*time.Hour), date)
  23. if err != nil {
  24. log.Error("s.execSignedUps dao.GetDateSignedUps T-2(%v) signed ups error(%v)", date.Add(-24*time.Hour), err)
  25. return
  26. }
  27. tm8, err := s.dao.GetDateSignedUps(c, date.Add(-24*7*time.Hour), date.Add(-24*6*time.Hour))
  28. if err != nil {
  29. log.Error("s.execSignedUps dao.GetDateSignedUps T-8(%v) signed ups error(%v)", date.Add(-24*6*time.Hour), err)
  30. return
  31. }
  32. log.Info("t-8:%d, %d-%d-%d ", tm8, date.Add(-24*7*time.Hour).Year(), date.Add(-24*7*time.Hour).Month(), date.Add(-24*7*time.Hour).Day())
  33. sa, err := s.dao.GetAllSignedUps(c, date)
  34. if err != nil {
  35. log.Error("s.execSignedUps dao.GetAllSignedUps date(%v) error(%v)", date, err)
  36. return
  37. }
  38. applyDm1, err := s.dao.GetVideoApplyUpCount(c, date, date.Add(24*time.Hour))
  39. if err != nil {
  40. log.Error("s.execSignedUps dao.GetVideoUpCount applyDm1 error(%v)", err)
  41. return
  42. }
  43. applyDm2, err := s.dao.GetVideoApplyUpCount(c, date.Add(-24*time.Hour), date)
  44. if err != nil {
  45. log.Error("s.execSignedUps dao.GetVideoUpCount applyDm2 error(%v)", err)
  46. return
  47. }
  48. var du, wu float64
  49. if tm2 > 0 {
  50. du = float64(tm1-tm2) / float64(tm2) * 100
  51. }
  52. if tm8 > 0 {
  53. wu = float64(tm1-tm8) / float64(tm8) * 100
  54. }
  55. var applyDu float64
  56. if applyDm2 > 0 {
  57. applyDu = float64(applyDm1-applyDm2) / float64(applyDm2) * 100
  58. }
  59. data := [][]string{
  60. {fmt.Sprintf(_SignedUps, date.Year(), date.Month(), date.Day())},
  61. {"日期", "已签约新增加人数", "已签约人数日增长率", "已签约人数同比上周增长率", "累计签约人数", "已申请新增加人数", "已申请人数日增长率"},
  62. {fmt.Sprintf("%d-%d-%d", date.Year(), date.Month(), date.Day()), strconv.Itoa(tm1), strconv.FormatFloat(du, 'f', 2, 32), strconv.FormatFloat(wu, 'f', 2, 32), strconv.Itoa(sa), strconv.Itoa(applyDm1), strconv.FormatFloat(applyDu, 'f', 2, 32)},
  63. }
  64. f, err := os.Create("signedups.csv")
  65. if err != nil {
  66. log.Error("s.execSignedUps create signedups.csv error(%v)", err)
  67. return
  68. }
  69. log.Info("tm1:%d, tm2:%d, tm8:%d, sa:%d", tm1, tm2, tm8, sa)
  70. defer f.Close()
  71. w := csv.NewWriter(f)
  72. w.WriteAll(data)
  73. w.Flush()
  74. rfile, err := os.Open("signedups.csv")
  75. if err != nil {
  76. log.Error("s.execSignedUps open signedups.csv error(%v)", err)
  77. return
  78. }
  79. defer rfile.Close()
  80. r := csv.NewReader(rfile)
  81. for {
  82. var strs []string
  83. strs, err = r.Read()
  84. if err == io.EOF {
  85. break
  86. }
  87. body += fmt.Sprintf("<tr><td>%s</td></tr>", strings.Join(strs, "</td><td>"))
  88. }
  89. err = os.Remove("signedups.csv")
  90. if err != nil {
  91. log.Error("growup-job s.execSignedUps remove signedups.csv error(%v)", err)
  92. }
  93. return
  94. }