UserStatsWay.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using Azure.Cosmos;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. using TEAMModelOS.SDK.Models.Cosmos.BI;
  6. using TEAMModelOS.SDK.Models.Service.BI;
  7. namespace TEAMModelOS.SDK.Models.Service.BIStatsWay
  8. {
  9. public class UserStatsWay
  10. {
  11. /// <summary>
  12. /// 统计人数
  13. /// </summary>
  14. /// <param name="cosmosClient"></param>
  15. /// <param name="id"></param>
  16. /// <param name="year"></param>
  17. /// <param name="userType"></param>
  18. /// <returns></returns>
  19. public static async Task<List<double>> GetYearTecherStudent(CosmosClient cosmosClient, string id, int year, int userType = 1)
  20. {
  21. List<double> result = new(366);
  22. DateTimeOffset dateTime = DateTimeOffset.UtcNow;
  23. if (year < dateTime.Year)
  24. dateTime = new(year, 12, 31, 23, 59, 59, TimeSpan.Zero);
  25. var (yearS, yearE) = TimeHelper.GetStartOrEnd(dateTime, "year"); //计算今年开始/结束时间
  26. string code = $"Teacher-{id}";
  27. string container = "School";
  28. if (userType != 1)
  29. {
  30. code = $"Base-{id}";
  31. container = "Student";
  32. }
  33. List<ArtRelStats> artRelStats = new();
  34. string sql = $"select c.id,c.code,c.createTime from c where c.startTime >= {yearS} and c.startTime <= {yearE}";
  35. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", container).GetItemQueryIterator<ArtRelStats>(queryText: sql, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"{code}") }))
  36. {
  37. artRelStats.Add(item);
  38. }
  39. DateTimeOffset yearDay = new(year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, TimeSpan.Zero);
  40. List<StartEndTime> everyDay = TimeHelper.GetYearEveryDay(dateTime);
  41. for (int i = 0; i < everyDay.Count; i++)
  42. {
  43. result.Add(artRelStats.FindAll(f => (f.createTime >= everyDay[i].start && f.createTime <= everyDay[i].end)).Count);
  44. }
  45. if (result.Count < 366)
  46. result.Add(0);
  47. return result;
  48. }
  49. }
  50. }