run_video.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package charge
  2. import (
  3. "context"
  4. "fmt"
  5. "time"
  6. model "go-common/app/job/main/growup/model/charge"
  7. "go-common/library/log"
  8. "golang.org/x/sync/errgroup"
  9. )
  10. var (
  11. _avChargeDailyStatis = "av_charge_daily_statis"
  12. _avChargeWeeklyStatis = "av_charge_weekly_statis"
  13. _avChargeMonthlyStatis = "av_charge_monthly_statis"
  14. _avWeeklyCharge = "av_weekly_charge"
  15. _avMonthlyCharge = "av_monthly_charge"
  16. )
  17. func (s *Service) runVideo(c context.Context, date time.Time, avBgmCharge chan []*model.AvCharge) (err error) {
  18. startWeeklyDate = getStartWeeklyDate(date)
  19. startMonthlyDate = getStartMonthlyDate(date)
  20. var (
  21. readGroup errgroup.Group
  22. sourceCh = make(chan []*model.AvCharge, 1000)
  23. avChargeCh = make(chan []*model.AvCharge, 1000)
  24. upChargeCh = make(chan []*model.AvCharge, 1000)
  25. dailyStatisCh = make(chan []*model.AvCharge, 1000)
  26. )
  27. readGroup.Go(func() (err error) {
  28. err = s.avDailyCharges(c, date, sourceCh)
  29. if err != nil {
  30. log.Error("s.avCharge.AvCharges error(%v)", err)
  31. return
  32. }
  33. log.Info("read av_daily_charge finished")
  34. return
  35. })
  36. readGroup.Go(func() (err error) {
  37. defer func() {
  38. close(avChargeCh)
  39. close(upChargeCh)
  40. close(dailyStatisCh)
  41. close(avBgmCharge)
  42. }()
  43. for charges := range sourceCh {
  44. avChargeCh <- charges
  45. upChargeCh <- charges
  46. dailyStatisCh <- charges
  47. avBgmCharge <- charges
  48. }
  49. return
  50. })
  51. var (
  52. weeklyChargeMap map[int64]*model.AvCharge
  53. monthlyChargeMap map[int64]*model.AvCharge
  54. chargeStatisMap map[int64]*model.AvChargeStatis
  55. weeklyCh = make(chan map[int64]*model.AvCharge, 1)
  56. monthlyCh = make(chan map[int64]*model.AvCharge, 1)
  57. )
  58. readGroup.Go(func() (err error) {
  59. defer func() {
  60. close(weeklyCh)
  61. close(monthlyCh)
  62. }()
  63. weeklyChargeMap, monthlyChargeMap, chargeStatisMap, err = s.handleAvCharge(c, date, avChargeCh)
  64. if err != nil {
  65. log.Error("s.handleAvCharge error(%v)", err)
  66. return
  67. }
  68. weeklyCh <- weeklyChargeMap
  69. monthlyCh <- monthlyChargeMap
  70. log.Info("handleAvCharge finished")
  71. return
  72. })
  73. var (
  74. dateStatis = &SectionEntries{}
  75. avDaily = make(chan []*model.Archive, 2000)
  76. avWeekly = make(chan []*model.Archive, 1)
  77. avMonthly = make(chan []*model.Archive, 1)
  78. )
  79. readGroup.Go(func() (err error) {
  80. defer close(avDaily)
  81. for avs := range dailyStatisCh {
  82. avDaily <- transAv2Archive(avs)
  83. }
  84. return
  85. })
  86. readGroup.Go(func() (err error) {
  87. defer close(avWeekly)
  88. avWeekly <- transAvMap2Archive(<-weeklyCh)
  89. return
  90. })
  91. readGroup.Go(func() (err error) {
  92. defer close(avMonthly)
  93. avMonthly <- transAvMap2Archive(<-monthlyCh)
  94. return
  95. })
  96. readGroup.Go(func() (err error) {
  97. dateStatis.daily, err = s.handleDateStatis(c, avDaily, date, _avChargeDailyStatis)
  98. if err != nil {
  99. log.Error("s.handleDateStatis(%s) error(%v)", _avChargeDailyStatis, err)
  100. }
  101. return
  102. })
  103. readGroup.Go(func() (err error) {
  104. dateStatis.weekly, err = s.handleDateStatis(c, avWeekly, startWeeklyDate, _avChargeWeeklyStatis)
  105. if err != nil {
  106. log.Error("s.handleDateStatis(%s) error(%v)", _avChargeWeeklyStatis, err)
  107. }
  108. return
  109. })
  110. readGroup.Go(func() (err error) {
  111. dateStatis.monthly, err = s.handleDateStatis(c, avMonthly, startMonthlyDate, _avChargeMonthlyStatis)
  112. if err != nil {
  113. log.Error("s.handleDateStatis(%s) error(%v)", _avChargeMonthlyStatis, err)
  114. }
  115. return
  116. })
  117. var (
  118. daily map[int64]*model.UpCharge
  119. weekly map[int64]*model.UpCharge
  120. monthly map[int64]*model.UpCharge
  121. )
  122. readGroup.Go(func() (err error) {
  123. daily, weekly, monthly, err = s.calUpCharge(c, date, upChargeCh)
  124. if err != nil {
  125. log.Error("s.calUpCharge error(%v)", err)
  126. return
  127. }
  128. log.Info("s.calUpCharge finished")
  129. return
  130. })
  131. if err = readGroup.Wait(); err != nil {
  132. log.Error("run readGroup.Wait error(%v)", err)
  133. return
  134. }
  135. {
  136. if len(weeklyChargeMap) == 0 {
  137. err = fmt.Errorf("Error: insert 0 av_weekly_charge")
  138. return
  139. }
  140. if len(monthlyChargeMap) == 0 {
  141. err = fmt.Errorf("Error: insert 0 av_monthly_charge")
  142. return
  143. }
  144. if len(chargeStatisMap) == 0 {
  145. err = fmt.Errorf("Error: insert 0 av_charge_statis")
  146. return
  147. }
  148. if len(daily) == 0 {
  149. err = fmt.Errorf("Error: insert 0 up_daily_charge")
  150. return
  151. }
  152. if len(weekly) == 0 {
  153. err = fmt.Errorf("Error: insert 0 up_weekly_charge")
  154. return
  155. }
  156. if len(monthly) == 0 {
  157. err = fmt.Errorf("Error: insert 0 up_monthly_charge")
  158. return
  159. }
  160. if len(dateStatis.daily) == 0 {
  161. err = fmt.Errorf("Error: insert 0 av_charge_daily_statis")
  162. return
  163. }
  164. if len(dateStatis.weekly) == 0 {
  165. err = fmt.Errorf("Error: insert 0 av_charge_weekly_statis")
  166. return
  167. }
  168. if len(dateStatis.monthly) == 0 {
  169. err = fmt.Errorf("Error: insert 0 av_charge_monthly_statis")
  170. return
  171. }
  172. }
  173. // persist
  174. var writeGroup errgroup.Group
  175. // av_weekly_charge
  176. writeGroup.Go(func() (err error) {
  177. err = s.AvChargeDBStore(c, _avWeeklyCharge, weeklyChargeMap)
  178. if err != nil {
  179. log.Error("s.AvChargeDBStore av_weekly_charge error(%v)", err)
  180. return
  181. }
  182. log.Info("insert av_weekly_charge : %d", len(weeklyChargeMap))
  183. return
  184. })
  185. // av_monthly_charge
  186. writeGroup.Go(func() (err error) {
  187. err = s.AvChargeDBStore(c, _avMonthlyCharge, monthlyChargeMap)
  188. if err != nil {
  189. log.Error("s.AvChargeDBStore av_monthly_charge error(%v)", err)
  190. return
  191. }
  192. log.Info("insert av_monthly_charge : %d", len(monthlyChargeMap))
  193. // av_charge_statis
  194. err = s.AvChargeStatisDBStore(c, chargeStatisMap)
  195. if err != nil {
  196. log.Error("s.AvChargeStatisDBStore error(%v)", err)
  197. return
  198. }
  199. log.Info("insert av_charge_statis : %d", len(chargeStatisMap))
  200. // up_daily_charge
  201. err = s.BatchInsertUpCharge(c, "up_daily_charge", daily)
  202. if err != nil {
  203. log.Error("s.BatchInsertUpDailyCharge error(%v)", err)
  204. return
  205. }
  206. log.Info("insert up_daily_charge : %d", len(daily))
  207. // up_weekly_charge
  208. err = s.BatchInsertUpCharge(c, "up_weekly_charge", weekly)
  209. if err != nil {
  210. log.Error("s.BatchInsertUpWeeklyCharge error(%v)", err)
  211. return
  212. }
  213. log.Info("insert up_weekly_charge : %d", len(weekly))
  214. // up_monthly_charge
  215. err = s.BatchInsertUpCharge(c, "up_monthly_charge", monthly)
  216. if err != nil {
  217. log.Error("s.BatchInsertUpMonthlyCharge error(%v)", err)
  218. return
  219. }
  220. log.Info("insert up_monthly_charge : %d", len(monthly))
  221. // av_charge_daily_statis
  222. _, err = s.dateStatisInsert(c, dateStatis.daily, _avChargeDailyStatis)
  223. if err != nil {
  224. log.Error("s.dateStatisInsert error(%v)", err)
  225. return
  226. }
  227. log.Info("insert av_charge_daily_statis : %d", len(dateStatis.daily))
  228. // av_charge_weekly_statis
  229. _, err = s.dateStatisInsert(c, dateStatis.weekly, _avChargeWeeklyStatis)
  230. if err != nil {
  231. log.Error("s.dateStatisInsert error(%v)", err)
  232. return
  233. }
  234. log.Info("insert av_charge_weekly_statis : %d", len(dateStatis.weekly))
  235. // av_charge_monthly_statis
  236. _, err = s.dateStatisInsert(c, dateStatis.monthly, _avChargeMonthlyStatis)
  237. if err != nil {
  238. log.Error("s.dateStatisInsert error(%v)", err)
  239. return
  240. }
  241. log.Info("insert av_charge_monthly_statis : %d", len(dateStatis.monthly))
  242. return
  243. })
  244. // writeGroup.Go(func() (err error) {
  245. // return
  246. // })
  247. //
  248. // writeGroup.Go(func() (err error) {
  249. // return
  250. // })
  251. //
  252. // writeGroup.Go(func() (err error) {
  253. // return
  254. // })
  255. //
  256. // writeGroup.Go(func() (err error) {
  257. // return
  258. // })
  259. //
  260. // writeGroup.Go(func() (err error) {
  261. // return
  262. // })
  263. //
  264. // writeGroup.Go(func() (err error) {
  265. // return
  266. // })
  267. //
  268. // writeGroup.Go(func() (err error) {
  269. // return
  270. // })
  271. if err = writeGroup.Wait(); err != nil {
  272. log.Error("run writeGroup.Wait error(%v)", err)
  273. }
  274. return
  275. }