get_charts_logic.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. package dashboard
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  6. "math"
  7. "strconv"
  8. "time"
  9. "wechat-api/ent/custom_types"
  10. "wechat-api/ent/label"
  11. "wechat-api/ent/predicate"
  12. "wechat-api/ent/usagedetail"
  13. "wechat-api/ent/usagestatisticday"
  14. "wechat-api/ent/usagestatistichour"
  15. "wechat-api/internal/svc"
  16. "wechat-api/internal/types"
  17. "github.com/zeromicro/go-zero/core/logx"
  18. )
  19. type GetChartsLogic struct {
  20. logx.Logger
  21. ctx context.Context
  22. svcCtx *svc.ServiceContext
  23. }
  24. func NewGetChartsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetChartsLogic {
  25. return &GetChartsLogic{
  26. Logger: logx.WithContext(ctx),
  27. ctx: ctx,
  28. svcCtx: svcCtx}
  29. }
  30. type SumUint struct {
  31. Addtime uint64 `json:"addtime"`
  32. Value uint64 `json:"value"`
  33. }
  34. type SumInt struct {
  35. Addtime uint64 `json:"addtime"`
  36. Value int64 `json:"value"`
  37. }
  38. func (l *GetChartsLogic) GetCharts(req *types.ChartsReq) (resp *types.ChartsResp, err error) {
  39. // 获取组织id
  40. var organizationId uint64 = 0
  41. isAdmin := l.ctx.Value("isAdmin").(bool)
  42. if isAdmin {
  43. if req.OrganizationId != nil && *req.OrganizationId != 0 {
  44. organizationId = *req.OrganizationId
  45. }
  46. } else {
  47. organizationId = l.ctx.Value("organizationId").(uint64)
  48. }
  49. // 解析起始和截止时间
  50. layouts := []string{
  51. "2006-01", // 对应 "2024-01"
  52. "2006-01-02", // 对应 "2024-01-01"
  53. }
  54. var layoutsType int
  55. var startTime time.Time
  56. for i, layout := range layouts {
  57. startTime, err = time.Parse(layout, *req.StartDate)
  58. layoutsType = i
  59. if err == nil {
  60. break
  61. }
  62. }
  63. if err != nil {
  64. fmt.Println("解析开始时间失败:", err)
  65. return
  66. }
  67. var endTime time.Time
  68. for _, layout := range layouts {
  69. endTime, err = time.Parse(layout, *req.EndDate)
  70. if err == nil {
  71. break
  72. }
  73. }
  74. if err != nil {
  75. fmt.Println("解析结束时间失败:", err)
  76. return
  77. }
  78. // 判断截止日期是否包含当前日
  79. var isCurrentDay bool
  80. now := time.Now()
  81. if layoutsType == 0 {
  82. isCurrentDay = endTime.Year() == now.Year() && endTime.Month() == now.Month()
  83. } else {
  84. isCurrentDay = endTime.Year() == now.Year() && endTime.Month() == now.Month() && endTime.Day() == now.Day()
  85. }
  86. aiResponseTip := "AI角色 + SOP 执行次数"
  87. sopRunTip := "SOP 节点或阶段的触发次数"
  88. totalFriendTip := "截止至各统计时点的好友数量"
  89. totalGroupTip := "截止至各统计时点的群数量"
  90. activeUserTip := "统计周期内回复sop 或触发了AI角色的微信用户"
  91. newUserTip := "统计周期内好友的增减数量"
  92. // 定义变量
  93. aiResponse := types.ChartsUint{}
  94. aiResponse.Tip = &aiResponseTip
  95. sopRun := types.ChartsUint{}
  96. sopRun.Tip = &sopRunTip
  97. totalFriend := types.ChartsUint{}
  98. totalFriend.Tip = &totalFriendTip
  99. totalGroup := types.ChartsUint{}
  100. totalGroup.Tip = &totalGroupTip
  101. accountBalance := types.ChartsUint{}
  102. accountBalance.LabelText = "积分"
  103. consumeToken := types.ChartsUint{}
  104. activeUser := types.ChartsUint{}
  105. activeUser.Tip = &activeUserTip
  106. newUser := types.ChartsInt{}
  107. newUser.Tip = &newUserTip
  108. var labelDists []custom_types.LabelDist
  109. if layoutsType == 1 && *req.StartDate == *req.EndDate {
  110. startAddTimeString := startTime.Format("2006010200")
  111. startAddTime, err := strconv.ParseUint(startAddTimeString, 10, 64)
  112. if err != nil {
  113. fmt.Println("转换开始时间失败:", err)
  114. return nil, err
  115. }
  116. nextDayMidnight := time.Date(startTime.Year(), startTime.Month(), startTime.Day()+1, 0, 0, 0, 0, startTime.Location())
  117. nextDayMidnightString := nextDayMidnight.Format("2006010200")
  118. nextDayAddTime, err := strconv.ParseUint(nextDayMidnightString, 10, 64)
  119. if err != nil {
  120. fmt.Println("转换次日0点时间失败:", err)
  121. return nil, err
  122. }
  123. var predicates []predicate.UsageStatisticHour
  124. if req.Wxid != nil {
  125. if organizationId != 0 {
  126. predicates = append(predicates, usagestatistichour.OrganizationID(organizationId))
  127. }
  128. predicates = append(predicates, usagestatistichour.BotID(*req.Wxid))
  129. } else {
  130. predicates = append(predicates, usagestatistichour.OrganizationID(organizationId))
  131. predicates = append(predicates, usagestatistichour.BotID(""))
  132. }
  133. predicates = append(predicates, usagestatistichour.AddtimeGTE(startAddTime))
  134. predicates = append(predicates, usagestatistichour.AddtimeLT(nextDayAddTime))
  135. usageStatisticHour, err := l.svcCtx.DB.UsageStatisticHour.Query().Where(predicates...).All(l.ctx)
  136. if err != nil {
  137. return nil, err
  138. }
  139. for _, hourData := range usageStatisticHour {
  140. addtimeLastTwoDigits := hourData.Addtime % 100
  141. aiResponse.Count += hourData.AiResponse
  142. aiResponse.Val = append(aiResponse.Val, hourData.AiResponse)
  143. aiResponse.Label = append(aiResponse.Label, fmt.Sprintf("%02d-%02d点", addtimeLastTwoDigits, addtimeLastTwoDigits+1))
  144. aiResponse.LabelText = "次"
  145. sopRun.Count += hourData.SopRun
  146. sopRun.Val = append(sopRun.Val, hourData.SopRun)
  147. sopRun.Label = append(sopRun.Label, fmt.Sprintf("%02d-%02d点", addtimeLastTwoDigits, addtimeLastTwoDigits+1))
  148. sopRun.LabelText = "次"
  149. totalFriend.Count = hourData.TotalFriend
  150. totalFriend.Val = append(totalFriend.Val, hourData.TotalFriend)
  151. totalFriend.Label = append(totalFriend.Label, fmt.Sprintf("%02d点", addtimeLastTwoDigits+1))
  152. totalFriend.LabelText = "个"
  153. totalGroup.Count = hourData.TotalGroup
  154. totalGroup.Val = append(totalGroup.Val, hourData.TotalGroup)
  155. totalGroup.Label = append(totalGroup.Label, fmt.Sprintf("%02d点", addtimeLastTwoDigits+1))
  156. totalGroup.LabelText = "个"
  157. consumeToken.Count += hourData.ConsumeToken
  158. consumeToken.Val = append(consumeToken.Val, hourData.ConsumeToken)
  159. consumeToken.Label = append(consumeToken.Label, fmt.Sprintf("%02d-%02d点", addtimeLastTwoDigits, addtimeLastTwoDigits+1))
  160. consumeToken.LabelText = "token"
  161. //activeUser.Count = hourData.ActiveUser
  162. activeUser.Val = append(activeUser.Val, hourData.ActiveUser)
  163. activeUser.Label = append(activeUser.Label, fmt.Sprintf("%02d-%02d点", addtimeLastTwoDigits, addtimeLastTwoDigits+1))
  164. activeUser.LabelText = "个"
  165. newUser.Count += hourData.NewUser
  166. newUser.Val = append(newUser.Val, hourData.NewUser)
  167. newUser.Label = append(newUser.Label, fmt.Sprintf("%02d-%02d点", addtimeLastTwoDigits, addtimeLastTwoDigits+1))
  168. newUser.LabelText = "个"
  169. }
  170. // 活跃好友:usage_detail 表 type = 1
  171. var usageDetailPredicates []predicate.UsageDetail
  172. if organizationId != 0 {
  173. usageDetailPredicates = append(usageDetailPredicates, usagedetail.OrganizationID(organizationId))
  174. }
  175. if req.Wxid != nil {
  176. usageDetailPredicates = append(usageDetailPredicates, usagedetail.BotID(*req.Wxid))
  177. }
  178. usageDetailPredicates = append(usageDetailPredicates, usagedetail.Type(1))
  179. usageDetailPredicates = append(usageDetailPredicates, usagedetail.CreatedAtGTE(startTime))
  180. usageDetailPredicates = append(usageDetailPredicates, usagedetail.CreatedAtLT(nextDayMidnight))
  181. activeUsers, _ := l.svcCtx.DB.UsageDetail.Query().Where(usageDetailPredicates...).GroupBy(usagedetail.FieldReceiverID).Strings(l.ctx)
  182. activeUser.Count = uint64(len(activeUsers))
  183. hourLen := len(usageStatisticHour)
  184. if hourLen > 0 {
  185. if usageStatisticHour[0].TotalFriend > 0 {
  186. totalFriendRate := float32((float64(usageStatisticHour[hourLen-1].TotalFriend) - float64(usageStatisticHour[0].TotalFriend)) / float64(usageStatisticHour[0].TotalFriend))
  187. totalFriendRateRound := float32(math.Round(float64(totalFriendRate) * 100))
  188. totalFriend.Rate = &totalFriendRateRound
  189. //totalFriend.Rate = &totalFriendRate
  190. }
  191. if usageStatisticHour[0].TotalGroup > 0 {
  192. totalGroupRate := float32((float64(usageStatisticHour[hourLen-1].TotalGroup) - float64(usageStatisticHour[0].TotalGroup)) / float64(usageStatisticHour[0].TotalGroup))
  193. totalGroupRateRound := float32(math.Round(float64(totalGroupRate) * 100))
  194. totalGroup.Rate = &totalGroupRateRound
  195. }
  196. //if usageStatisticHour[0].ActiveUser > 0 {
  197. // activeUserRate := float32((float64(usageStatisticHour[hourLen-1].ActiveUser) - float64(usageStatisticHour[0].ActiveUser)) / float64(usageStatisticHour[0].ActiveUser))
  198. // activeUserRateRound := float32(math.Round(float64(activeUserRate)*100))
  199. // activeUser.Rate = &activeUserRateRound
  200. //}
  201. if usageStatisticHour[0].NewUser > 0 {
  202. newUserRate := float32((float64(usageStatisticHour[hourLen-1].NewUser) - float64(usageStatisticHour[0].NewUser)) / float64(usageStatisticHour[0].NewUser))
  203. newUserRateRound := float32(math.Round(float64(newUserRate) * 100))
  204. newUser.Rate = &newUserRateRound
  205. }
  206. labelDists = usageStatisticHour[hourLen-1].LabelDist
  207. }
  208. } else {
  209. // 从天表统计数据
  210. startAddTimeString := startTime.Format("20060102")
  211. startAddTime, err := strconv.ParseUint(startAddTimeString, 10, 64)
  212. if err != nil {
  213. fmt.Println("转换开始时间失败:", err)
  214. return nil, err
  215. }
  216. endAddTimeString := endTime.Format("20060102")
  217. endAddTime, err := strconv.ParseUint(endAddTimeString, 10, 64)
  218. nextDayMidnight := time.Date(endTime.Year(), endTime.Month(), endTime.Day()+1, 0, 0, 0, 0, endTime.Location())
  219. if err != nil {
  220. fmt.Println("转换截止时间失败:", err)
  221. return nil, err
  222. }
  223. var predicatesDay []predicate.UsageStatisticDay
  224. if req.Wxid != nil {
  225. if organizationId != 0 {
  226. predicatesDay = append(predicatesDay, usagestatisticday.OrganizationID(organizationId))
  227. }
  228. predicatesDay = append(predicatesDay, usagestatisticday.BotID(*req.Wxid))
  229. } else {
  230. predicatesDay = append(predicatesDay, usagestatisticday.OrganizationID(organizationId))
  231. predicatesDay = append(predicatesDay, usagestatisticday.BotID(""))
  232. }
  233. predicatesDay = append(predicatesDay, usagestatisticday.AddtimeGTE(startAddTime))
  234. predicatesDay = append(predicatesDay, usagestatisticday.AddtimeLTE(endAddTime))
  235. usageStatisticDay, err := l.svcCtx.DB.UsageStatisticDay.Query().Where(predicatesDay...).All(l.ctx)
  236. if err != nil {
  237. return nil, err
  238. }
  239. for _, dayData := range usageStatisticDay {
  240. aiResponse.Count = aiResponse.Count + dayData.AiResponse
  241. aiResponse.Val = append(aiResponse.Val, dayData.AiResponse)
  242. aiResponse.Label = append(aiResponse.Label, fmt.Sprintf("%d", dayData.Addtime))
  243. aiResponse.LabelText = "次"
  244. sopRun.Count += dayData.SopRun
  245. sopRun.Val = append(sopRun.Val, dayData.SopRun)
  246. sopRun.Label = append(sopRun.Label, fmt.Sprintf("%d", dayData.Addtime))
  247. sopRun.LabelText = "次"
  248. totalFriend.Count = dayData.TotalFriend
  249. totalFriend.Val = append(totalFriend.Val, dayData.TotalFriend)
  250. totalFriend.Label = append(totalFriend.Label, fmt.Sprintf("%d", dayData.Addtime))
  251. totalFriend.LabelText = "个"
  252. totalGroup.Count = dayData.TotalGroup
  253. totalGroup.Val = append(totalGroup.Val, dayData.TotalGroup)
  254. totalGroup.Label = append(totalGroup.Label, fmt.Sprintf("%d", dayData.Addtime))
  255. totalGroup.LabelText = "个"
  256. consumeToken.Count += dayData.ConsumeToken
  257. consumeToken.Val = append(consumeToken.Val, dayData.ConsumeToken)
  258. consumeToken.Label = append(consumeToken.Label, fmt.Sprintf("%d", dayData.Addtime))
  259. consumeToken.LabelText = "token"
  260. //activeUser.Count = dayData.ActiveUser
  261. activeUser.Val = append(activeUser.Val, dayData.ActiveUser)
  262. activeUser.Label = append(activeUser.Label, fmt.Sprintf("%d", dayData.Addtime))
  263. activeUser.LabelText = "个"
  264. newUser.Count += dayData.NewUser
  265. newUser.Val = append(newUser.Val, dayData.NewUser)
  266. newUser.Label = append(newUser.Label, fmt.Sprintf("%d", dayData.Addtime))
  267. newUser.LabelText = "个"
  268. }
  269. dayLen := len(usageStatisticDay)
  270. if dayLen > 0 {
  271. if usageStatisticDay[0].TotalFriend > 0 {
  272. totalFriendRate := float32((float64(usageStatisticDay[dayLen-1].TotalFriend) - float64(usageStatisticDay[0].TotalFriend)) / float64(usageStatisticDay[0].TotalFriend))
  273. totalFriendRateRound := float32(math.Round(float64(totalFriendRate) * 100))
  274. totalFriend.Rate = &totalFriendRateRound
  275. }
  276. if usageStatisticDay[0].TotalGroup > 0 {
  277. totalGroupRate := float32((float64(usageStatisticDay[dayLen-1].TotalGroup) - float64(usageStatisticDay[0].TotalGroup)) / float64(usageStatisticDay[0].TotalGroup))
  278. totalGroupRateRound := float32(math.Round(float64(totalGroupRate) * 100))
  279. totalGroup.Rate = &totalGroupRateRound
  280. }
  281. //if usageStatisticDay[0].ActiveUser > 0 {
  282. // activeUserRate := float32((float64(usageStatisticDay[dayLen-1].ActiveUser) - float64(usageStatisticDay[0].ActiveUser)) / float64(usageStatisticDay[0].ActiveUser))
  283. // activeUserRateRound := float32(math.Round(float64(activeUserRate)*100))
  284. // activeUser.Rate = &activeUserRateRound
  285. //}
  286. if usageStatisticDay[0].NewUser > 0 {
  287. newUserRate := float32((float64(usageStatisticDay[dayLen-1].NewUser) - float64(usageStatisticDay[0].NewUser)) / float64(usageStatisticDay[0].NewUser))
  288. newUserRateRound := float32(math.Round(float64(newUserRate) * 100))
  289. newUser.Rate = &newUserRateRound
  290. }
  291. labelDists = usageStatisticDay[dayLen-1].LabelDist
  292. }
  293. if isCurrentDay {
  294. // 从小时表统计当天数据
  295. startOfDay := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.UTC)
  296. startOfDayAddTimeString := startOfDay.Format("2006010200")
  297. startOfDayAddTime, err := strconv.ParseUint(startOfDayAddTimeString, 10, 64)
  298. if err != nil {
  299. fmt.Println("转换开始时间失败:", err)
  300. return nil, err
  301. }
  302. var predicates []predicate.UsageStatisticHour
  303. if req.Wxid != nil {
  304. if organizationId != 0 {
  305. predicates = append(predicates, usagestatistichour.OrganizationID(organizationId))
  306. }
  307. predicates = append(predicates, usagestatistichour.BotID(*req.Wxid))
  308. } else {
  309. predicates = append(predicates, usagestatistichour.OrganizationID(organizationId))
  310. predicates = append(predicates, usagestatistichour.BotID(""))
  311. }
  312. predicates = append(predicates, usagestatistichour.AddtimeGTE(startOfDayAddTime))
  313. usageStatisticHour, err := l.svcCtx.DB.UsageStatisticHour.Query().Where(predicates...).All(l.ctx)
  314. if err != nil {
  315. return nil, err
  316. }
  317. hourLen := len(usageStatisticHour)
  318. if hourLen > 0 {
  319. var aiResponseOfDay uint64
  320. var sopRunOfDay uint64
  321. var totalFriendOfDay uint64
  322. var totalGroupOfDay uint64
  323. var consumeTokenOfDay uint64
  324. var activeUserOfDay uint64
  325. var newUserOfDay int64
  326. for _, hourData := range usageStatisticHour {
  327. aiResponseOfDay += hourData.AiResponse
  328. sopRunOfDay += hourData.SopRun
  329. consumeTokenOfDay += hourData.ConsumeToken
  330. }
  331. totalFriendOfDay = usageStatisticHour[hourLen-1].TotalFriend
  332. totalGroupOfDay = usageStatisticHour[hourLen-1].TotalGroup
  333. activeUserOfDay = usageStatisticHour[hourLen-1].ActiveUser
  334. newUserOfDay = usageStatisticHour[hourLen-1].NewUser
  335. aiResponse.Count = aiResponse.Count + aiResponseOfDay
  336. aiResponse.Val = append(aiResponse.Val, aiResponseOfDay)
  337. aiResponse.Label = append(aiResponse.Label, "今日")
  338. aiResponse.LabelText = "次"
  339. sopRun.Count = sopRun.Count + sopRunOfDay
  340. sopRun.Val = append(sopRun.Val, sopRunOfDay)
  341. sopRun.Label = append(sopRun.Label, "今日")
  342. sopRun.LabelText = "次"
  343. totalFriend.Count = totalFriendOfDay
  344. totalFriend.Val = append(totalFriend.Val, totalFriendOfDay)
  345. totalFriend.Label = append(totalFriend.Label, "今日")
  346. tfLen := len(totalFriend.Val)
  347. if tfLen > 0 && totalFriend.Val[0] > 0 {
  348. totalFriendRate := float32((float64(totalFriend.Val[tfLen-1]) - float64(totalFriend.Val[0])) / float64(totalFriend.Val[0]))
  349. totalFriendRateRound := float32(math.Round(float64(totalFriendRate) * 100))
  350. totalFriend.Rate = &totalFriendRateRound
  351. }
  352. totalFriend.LabelText = "个"
  353. totalGroup.Count = totalGroupOfDay
  354. totalGroup.Val = append(totalGroup.Val, totalGroupOfDay)
  355. totalGroup.Label = append(totalGroup.Label, "今日")
  356. tgLen := len(totalGroup.Val)
  357. if tgLen > 0 && totalGroup.Val[0] > 0 {
  358. totalGroupRate := float32((float64(totalGroup.Val[tgLen-1]) - float64(totalGroup.Val[0])) / float64(totalGroup.Val[0]))
  359. totalGroupRateRound := float32(math.Round(float64(totalGroupRate) * 100))
  360. totalGroup.Rate = &totalGroupRateRound
  361. }
  362. totalGroup.LabelText = "个"
  363. consumeToken.Count = consumeToken.Count + consumeTokenOfDay
  364. consumeToken.Val = append(consumeToken.Val, consumeTokenOfDay)
  365. consumeToken.Label = append(consumeToken.Label, "今日")
  366. consumeToken.LabelText = "token"
  367. //activeUser.Count = activeUserOfDay
  368. activeUser.Val = append(activeUser.Val, activeUserOfDay)
  369. activeUser.Label = append(activeUser.Label, "今日")
  370. //auLen := len(activeUser.Val)
  371. //if auLen > 0 && activeUser.Val[0] > 0 {
  372. // activeUserRate := float32((float64(activeUser.Val[auLen-1]) - float64(activeUser.Val[0])) / float64(activeUser.Val[0]))
  373. // activeUserRateRound := float32(math.Round(float64(activeUserRate)*100))
  374. // activeUser.Rate = &activeUserRateRound
  375. //}
  376. activeUser.LabelText = "个"
  377. newUser.Count = newUserOfDay
  378. newUser.Val = append(newUser.Val, newUserOfDay)
  379. newUser.Label = append(newUser.Label, "今日")
  380. nuLen := len(newUser.Val)
  381. if nuLen > 0 && newUser.Val[0] > 0 {
  382. newUserRate := float32((float64(newUser.Val[nuLen-1]) - float64(newUser.Val[0])) / float64(newUser.Val[0]))
  383. newUserRateRound := float32(math.Round(float64(newUserRate) * 100))
  384. newUser.Rate = &newUserRateRound
  385. }
  386. newUser.LabelText = "个"
  387. labelDists = usageStatisticHour[hourLen-1].LabelDist
  388. }
  389. }
  390. // 活跃好友:usage_detail 表 type = 1
  391. var usageDetailPredicates []predicate.UsageDetail
  392. if organizationId != 0 {
  393. usageDetailPredicates = append(usageDetailPredicates, usagedetail.OrganizationID(organizationId))
  394. }
  395. if req.Wxid != nil {
  396. usageDetailPredicates = append(usageDetailPredicates, usagedetail.BotID(*req.Wxid))
  397. }
  398. usageDetailPredicates = append(usageDetailPredicates, usagedetail.Type(1))
  399. usageDetailPredicates = append(usageDetailPredicates, usagedetail.CreatedAtGTE(startTime))
  400. usageDetailPredicates = append(usageDetailPredicates, usagedetail.CreatedAtLT(nextDayMidnight))
  401. activeUsers, _ := l.svcCtx.DB.UsageDetail.Query().Where(usageDetailPredicates...).GroupBy(usagedetail.FieldReceiverID).Strings(l.ctx)
  402. activeUser.Count = uint64(len(activeUsers))
  403. }
  404. var labelIds []uint64
  405. var labelsData []types.LabelsData
  406. labelSet := make(map[uint64]uint64)
  407. for _, labelDist := range labelDists {
  408. if labelDist.Count != 0 {
  409. labelIds = append(labelIds, labelDist.LabelID)
  410. labelSet[labelDist.LabelID] = labelDist.Count
  411. }
  412. }
  413. labelInfos, err := l.svcCtx.DB.Label.Query().Where(label.IDIn(labelIds...)).All(l.ctx)
  414. for _, labelInfo := range labelInfos {
  415. labelsData = append(labelsData, types.LabelsData{
  416. Value: labelSet[labelInfo.ID],
  417. Name: labelInfo.Name,
  418. })
  419. }
  420. chartsData := types.ChartsData{
  421. AiResponse: &aiResponse,
  422. SopRun: &sopRun,
  423. TotalFriend: &totalFriend,
  424. TotalGroup: &totalGroup,
  425. AccountBalance: &accountBalance,
  426. ConsumeToken: &consumeToken,
  427. ActiveUser: &activeUser,
  428. NewUser: &newUser,
  429. LabelDist: labelsData,
  430. }
  431. return &types.ChartsResp{BaseDataInfo: types.BaseDataInfo{Msg: errormsg.UpdateSuccess}, Data: &chartsData}, nil
  432. }