compute_historical_statistic_back.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package crontask
  2. //
  3. //import (
  4. // "fmt"
  5. // "github.com/zeromicro/go-zero/core/logx"
  6. // "strconv"
  7. // "time"
  8. // "wechat-api/ent"
  9. // "wechat-api/ent/usagedetail"
  10. // "wechat-api/ent/usagestatisticday"
  11. // "wechat-api/ent/usagestatistichour"
  12. //)
  13. //
  14. //type OrgBot struct {
  15. // OrganizationID uint64 `json:"organization_id"`
  16. // BotID string `json:"bot_id"`
  17. //}
  18. //
  19. //func (l *CronTask) computeHistoricalStatistic() {
  20. // // 获取所有机器人信息
  21. // //wxbots, err := l.svcCtx.DB.Wx.Query().Select(wx.FieldWxid, wx.FieldID, wx.FieldOrganizationID).All(l.ctx)
  22. // //if err != nil {
  23. // // l.Errorf("fetch wxids error:%v\n", err)
  24. // // return
  25. // //}
  26. // //
  27. // //wxbotsSet := make(map[uint64][]*ent.Wx)
  28. // //for _, bot := range wxbots {
  29. // // if !strings.HasPrefix(bot.Wxid, "temp-") {
  30. // // wxbotsSet[bot.OrganizationID] = append(wxbotsSet[bot.OrganizationID], bot)
  31. // // }
  32. // //}
  33. // orgBots := []OrgBot{}
  34. // err := l.svcCtx.DB.UsageDetail.Query().
  35. // GroupBy(usagedetail.FieldOrganizationID, usagedetail.FieldBotID).
  36. // Aggregate().
  37. // Scan(l.ctx, &orgBots)
  38. //
  39. // if err != nil {
  40. // l.Errorf("group usage_detail error: %v", err)
  41. // return
  42. // }
  43. //
  44. // wxbotsSet := make(map[uint64][]string)
  45. // for _, ob := range orgBots {
  46. // wxbotsSet[ob.OrganizationID] = append(wxbotsSet[ob.OrganizationID], ob.BotID)
  47. // }
  48. // logx.Info("wxbotsSet: ", wxbotsSet)
  49. //
  50. // /*
  51. // 计算本小时的数据
  52. // 1. 查询出上小时里所有 usagedetail 内容
  53. // 2. 挨个遍历他的 bot_id ,再查询他的 bot_id 相关的参数
  54. // 3. 遍历的时候可能有重复,所以要先检查是否生成了数据,如果有就忽略,没有再生成
  55. // ----------------------------------------------------------------------------------------------------------
  56. // */
  57. //
  58. // // 获取当前时间
  59. // //now := time.Now()
  60. // start := time.Date(2025, 5, 5, 0, 0, 0, 0, time.Local)
  61. // end := time.Date(2025, 5, 8, 0, 0, 0, 0, time.Local)
  62. //
  63. // //start := time.Date(2024, 11, 24, 0, 0, 0, 0, time.Local)
  64. // //end := time.Date(2025, 5, 9, 0, 0, 0, 0, time.Local)
  65. //
  66. // for now := start; !now.After(end); now = now.Add(time.Hour) {
  67. // fmt.Println(now.Format("2006-01-02 15:00:00"))
  68. //
  69. // // 获取本小时的第一分钟
  70. // currentHour := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location()).Add(-8 * time.Hour)
  71. // currentHourInt, _ := strconv.Atoi(currentHour.Format("2006010215"))
  72. // currentHourLocation := time.Date(now.Year(), now.Month(), now.Day(), now.Hour(), 0, 0, 0, now.Location())
  73. // currentHourIntLocation, _ := strconv.Atoi(currentHourLocation.Format("2006010215"))
  74. //
  75. // // 上一个小时的起始时间
  76. // lastHour := currentHour.Add(-time.Hour * 1)
  77. // lastHourLocation := currentHourLocation.Add(-time.Hour * 1)
  78. // lastHourInt, _ := strconv.Atoi(lastHour.Format("2006010215"))
  79. // lastHourIntLocation, _ := strconv.Atoi(lastHourLocation.Format("2006010215"))
  80. //
  81. // l.Logger.Infof("currentHour:%d\n", currentHour)
  82. // l.Logger.Infof("currentHourInt:%d\n", currentHourInt)
  83. // l.Logger.Infof("currentHourLocation:%d\n", currentHourLocation)
  84. // l.Logger.Infof("currentHourIntLocation:%d\n", currentHourIntLocation)
  85. // l.Logger.Infof("lastHour:%d\n", lastHour)
  86. // l.Logger.Infof("lastHourLocation:%d\n", lastHourLocation)
  87. // l.Logger.Infof("lastHourInt:%d\n", lastHourInt)
  88. // l.Logger.Infof("lastHourIntLocation:%d\n", lastHourIntLocation)
  89. //
  90. // var allHourConsumeCoinFloat float64
  91. // for orgID, wxinfos := range wxbotsSet {
  92. // var orgHourConsumeCoinFloat float64
  93. // for _, wxinfo := range wxinfos {
  94. // l.Logger.Infof("开始计算小时数据:%d\n", lastHourInt)
  95. //
  96. // // 先判断该账号是否已经统计了小时数据,如果已经统计了,就不需要再统计了
  97. // var consumeCoinFloat float64
  98. //
  99. // // 计算积分消耗
  100. // consumeCoinFloat, _ = l.svcCtx.DB.UsageDetail.Query().Where(
  101. // usagedetail.BotID(wxinfo),
  102. // usagedetail.OrganizationIDEQ(orgID),
  103. // usagedetail.CreatedAtGTE(lastHour),
  104. // usagedetail.CreatedAtLT(currentHour),
  105. // ).Aggregate(ent.Sum("credits")).Float64(l.ctx)
  106. //
  107. // ush, _ := l.svcCtx.DB.UsageStatisticHour.Query().Where(usagestatistichour.AddtimeEQ(uint64(lastHourIntLocation)), usagestatistichour.BotIDEQ(wxinfo), usagestatistichour.OrganizationIDEQ(orgID)).Only(l.ctx)
  108. // if ush == nil {
  109. // continue
  110. // }
  111. // allHourConsumeCoinFloat += consumeCoinFloat
  112. // orgHourConsumeCoinFloat += consumeCoinFloat
  113. //
  114. // logx.Info("hour consumeCoinFloat: ", consumeCoinFloat)
  115. // logx.Info("hour allHourConsumeCoinFloat: ", allHourConsumeCoinFloat)
  116. // logx.Info("hour orgHourConsumeCoinFloat: ", orgHourConsumeCoinFloat)
  117. //
  118. // _, err := l.svcCtx.DB.UsageStatisticHour.Update().
  119. // Where(usagestatistichour.AddtimeEQ(uint64(lastHourIntLocation)), usagestatistichour.BotIDEQ(wxinfo), usagestatistichour.OrganizationIDEQ(orgID)).
  120. // SetConsumeCoin(consumeCoinFloat).
  121. // Save(l.ctx)
  122. // if err != nil {
  123. // l.Errorf("save hour data error:%v \n", err)
  124. // }
  125. // }
  126. //
  127. // _, err = l.svcCtx.DB.UsageStatisticHour.Update().
  128. // Where(usagestatistichour.AddtimeEQ(uint64(lastHourIntLocation)), usagestatistichour.OrganizationIDEQ(orgID), usagestatistichour.BotIDEQ("")).
  129. // SetConsumeCoin(orgHourConsumeCoinFloat).
  130. // Save(l.ctx)
  131. // if err != nil {
  132. // l.Errorf("save hour data error:%v \n", err)
  133. // }
  134. // }
  135. //
  136. // // 先判断该租户是否已经统计了小时数据,如果已经统计了,就不需要再统计了
  137. // _, err = l.svcCtx.DB.UsageStatisticHour.Update().
  138. // Where(usagestatistichour.AddtimeEQ(uint64(lastHourIntLocation)), usagestatistichour.OrganizationIDEQ(0), usagestatistichour.BotIDEQ("")).
  139. // SetConsumeCoin(allHourConsumeCoinFloat).
  140. // Save(l.ctx)
  141. // if err != nil {
  142. // l.Errorf("save hour data error:%v \n", err)
  143. // }
  144. //
  145. // /*
  146. // 计算日数据
  147. // ----------------------------------------------------------------------------------------------------------
  148. // */
  149. // //dayStr := time.Now().Format("20060102")
  150. // //day, _ := strconv.Atoi(dayStr)
  151. //
  152. // // 获取昨天的第一小时
  153. // yesterday := now.AddDate(0, 0, -1)
  154. // yesterdayFirstHour := time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 0, 0, 0, 0, now.Location())
  155. // yesterdayInt, _ := strconv.Atoi(yesterdayFirstHour.Format("20060102"))
  156. // yesterdayFirstHourInt, _ := strconv.Atoi(yesterdayFirstHour.Format("2006010215"))
  157. //
  158. // // 获取昨天的最后一小时
  159. // yesterdayLastHour := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
  160. // yesterdayLastHourInt, _ := strconv.Atoi(yesterdayLastHour.Format("2006010215"))
  161. //
  162. // var allDayConsumeCoinFloat float64
  163. // for orgID, wxinfos := range wxbotsSet {
  164. // var orgDayConsumeCoinFloat float64
  165. // for _, wxinfo := range wxinfos {
  166. // l.Logger.Infof("开始计算日数据:%d\n", yesterdayInt)
  167. // l.Logger.Infof("yesterdayFirstHourInt:%d\n", yesterdayFirstHourInt)
  168. // l.Logger.Infof("yesterdayLastHourInt:%d\n", yesterdayLastHourInt)
  169. //
  170. // hourDataBatch, _ := l.svcCtx.DB.UsageStatisticHour.Query().Where(
  171. // usagestatistichour.Type(1),
  172. // usagestatistichour.BotID(wxinfo),
  173. // usagestatistichour.OrganizationIDEQ(orgID),
  174. // usagestatistichour.AddtimeGTE(uint64(yesterdayFirstHourInt)),
  175. // usagestatistichour.AddtimeLT(uint64(yesterdayLastHourInt)),
  176. // ).All(l.ctx)
  177. //
  178. // if hourDataBatch == nil {
  179. // continue
  180. // }
  181. //
  182. // var consumeCoin float64
  183. // for _, hourData := range hourDataBatch {
  184. // consumeCoin += hourData.ConsumeCoin
  185. // }
  186. //
  187. // orgDayConsumeCoinFloat += consumeCoin
  188. //
  189. // allDayConsumeCoinFloat += consumeCoin
  190. //
  191. // // 如果添加过了就略过
  192. // if yesterdayLastHourInt <= currentHourInt {
  193. // _, err := l.svcCtx.DB.UsageStatisticDay.Update().
  194. // Where(usagestatisticday.AddtimeEQ(uint64(yesterdayInt)), usagestatisticday.BotID(wxinfo), usagestatisticday.OrganizationIDEQ(orgID)).
  195. // SetConsumeCoin(consumeCoin).
  196. // Save(l.ctx)
  197. // if err != nil {
  198. // l.Errorf("create day data error:%v \n", err)
  199. // continue
  200. // }
  201. // }
  202. // }
  203. // // 如果添加过了就略过
  204. // if yesterdayLastHourInt <= currentHourInt {
  205. // _, err := l.svcCtx.DB.UsageStatisticDay.Update().
  206. // Where(usagestatisticday.AddtimeEQ(uint64(yesterdayInt)), usagestatisticday.OrganizationIDEQ(orgID), usagestatisticday.BotIDEQ("")).
  207. // SetConsumeCoin(orgDayConsumeCoinFloat).
  208. // Save(l.ctx)
  209. // if err != nil {
  210. // l.Errorf("create day data error:%v \n", err)
  211. // continue
  212. // }
  213. // }
  214. // }
  215. //
  216. // // 如果添加过了就略过
  217. // if yesterdayLastHourInt <= currentHourInt {
  218. // _, err = l.svcCtx.DB.UsageStatisticDay.Update().
  219. // Where(usagestatisticday.AddtimeEQ(uint64(yesterdayInt)), usagestatisticday.OrganizationIDEQ(0), usagestatisticday.BotIDEQ("")).
  220. // SetConsumeCoin(allDayConsumeCoinFloat).
  221. // Save(l.ctx)
  222. // if err != nil {
  223. // l.Errorf("create day data error:%v \n", err)
  224. // }
  225. // }
  226. // }
  227. //
  228. // return
  229. //}