data.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package mcndao
  2. import (
  3. "time"
  4. "go-common/app/interface/main/mcn/model"
  5. "go-common/app/interface/main/mcn/model/mcnmodel"
  6. "go-common/library/log"
  7. "github.com/jinzhu/gorm"
  8. )
  9. const (
  10. dateFmt = "2006-01-02"
  11. tidSummary = 65535 // 特殊的tid表示所有分区数据之和
  12. )
  13. //GetMcnDataSummary .
  14. func (d *Dao) GetMcnDataSummary(selec string, query interface{}, args ...interface{}) (res *mcnmodel.McnDataSummary, err error) {
  15. res = new(mcnmodel.McnDataSummary)
  16. err = d.mcndb.Select(selec).Where(query, args...).Limit(1).Find(res).Error
  17. if err != nil {
  18. log.Error("query db fail, err=%s", err)
  19. return
  20. }
  21. return
  22. }
  23. //GetMcnDataSummaryWithDiff get data with datacenter diff
  24. func (d *Dao) GetMcnDataSummaryWithDiff(signID int64, dataTYpe mcnmodel.McnDataType, generateDate time.Time) (res *mcnmodel.McnGetDataSummaryReply, err error) {
  25. dataDay0, err := d.GetMcnDataSummary("up_count, fans_count_accumulate, archive_count_accumulate, play_count_accumulate, generate_date", "sign_id=? and data_type=? and generate_date=? and active_tid=?", signID, dataTYpe, generateDate.Format(dateFmt), tidSummary)
  26. if int64(dataDay0.GenerateDate) == 0 {
  27. err = gorm.ErrRecordNotFound
  28. }
  29. if err != nil {
  30. if err == gorm.ErrRecordNotFound {
  31. err = nil
  32. log.Warn("not found generate date=%s, sign id=%d", generateDate.Format(dateFmt), signID)
  33. return
  34. }
  35. log.Error("fail to get data db, err=%s, sign id=%d", err, signID)
  36. return
  37. }
  38. dataDay1, err := d.GetMcnDataSummary("up_count, fans_count_accumulate, archive_count_accumulate, play_count_accumulate, generate_date", "sign_id=? and data_type=? and generate_date=? and active_tid=?", signID, dataTYpe, generateDate.AddDate(0, 0, -1).Format(dateFmt), tidSummary)
  39. if int64(dataDay1.GenerateDate) == 0 {
  40. err = gorm.ErrRecordNotFound
  41. }
  42. if err != nil {
  43. if err == gorm.ErrRecordNotFound {
  44. err = nil
  45. log.Warn("not found generate date=%s, sign id=%d", generateDate.Format(dateFmt), signID)
  46. dataDay1 = new(mcnmodel.McnDataSummary)
  47. } else {
  48. log.Error("fail to get data db, err=%s, sign id=%d", err, signID)
  49. return
  50. }
  51. }
  52. res = new(mcnmodel.McnGetDataSummaryReply)
  53. res.CopyFrom(dataDay0)
  54. res.CalcDiff(dataDay1)
  55. return
  56. }
  57. //GetDataUpLatestDate .
  58. func (d *Dao) GetDataUpLatestDate(dataType mcnmodel.DataType, signID int64) (generateDate time.Time, err error) {
  59. var model = mcnmodel.McnDataUp{}
  60. err = d.mcndb.Select("generate_date").Where("data_type=? and sign_id=?", dataType, signID).Order("generate_date desc").Limit(1).Find(&model).Error
  61. if err != nil {
  62. log.Error("get latest date from mcn_data_up fail, err=%s", err)
  63. return
  64. }
  65. generateDate = model.GenerateDate.Time()
  66. return
  67. }
  68. //GetAllUpData .
  69. func (d *Dao) GetAllUpData(signID int64, upmid int64, generateDate time.Time) (res []*mcnmodel.McnUpDataInfo, err error) {
  70. var sqlstr = `select
  71. u.begin_date,
  72. u.end_date,
  73. u.state,
  74. u.up_mid,
  75. u.publication_price,
  76. u.permission,
  77. d.fans_increase_accumulate,
  78. d.archive_count,
  79. d.play_count,
  80. d.fans_increase_month,
  81. d.fans_count,
  82. d.fans_count_active,
  83. generate_date
  84. from
  85. mcn_up as u left join mcn_data_up as d
  86. on (d.sign_id = u.sign_id and d.up_mid = u.up_mid and d.data_type=1 and generate_date=? )
  87. where u.sign_id=? and u.state not in (?)`
  88. var values = []interface{}{generateDate, signID, []model.MCNUPState{model.MCNUPStateOnDelete}}
  89. if upmid != 0 {
  90. sqlstr += " and u.up_mid=?"
  91. values = append(values, upmid)
  92. }
  93. err = d.mcndb.Raw(sqlstr, values...).Find(&res).Error
  94. if err != nil {
  95. log.Error("query db fail, err=%s", err)
  96. return
  97. }
  98. return
  99. }
  100. //GetAllUpDataTemp .
  101. func (d *Dao) GetAllUpDataTemp(signID int64, upmid int64, generateDate time.Time) (res []*mcnmodel.McnUpDataInfo, err error) {
  102. /*
  103. 前台这边一期的数据
  104. 1.首页 - 绑定up主总数
  105. 2.up主列表 - 总粉数
  106. 3.up主列表 - 投稿数
  107. 4.up主列表 - up分区
  108. 5.up主列表 - 签约及到期时间
  109. */
  110. var sqlstr = `select
  111. u.begin_date,
  112. u.end_date,
  113. u.state,
  114. u.up_mid,
  115. d.article_count_accumulate as archive_count,
  116. d.fans_count,
  117. d.active_fans as fans_count_active
  118. from
  119. mcn_up as u left join up_base_info as d
  120. on (d.mid = u.up_mid and d.business_type = 1)
  121. where u.sign_id=? and u.state not in (?)`
  122. var values = []interface{}{signID, []model.MCNUPState{model.MCNUPStateOnDelete, model.MCNUPStateOnExpire, model.MCNUPStateOnClear}}
  123. if upmid != 0 {
  124. sqlstr += " and u.up_mid=?"
  125. values = append(values, upmid)
  126. }
  127. err = d.mcndb.Raw(sqlstr, values...).Find(&res).Error
  128. if err != nil {
  129. log.Error("query db fail, err=%s", err)
  130. return
  131. }
  132. return
  133. }