UserStatsWay.cs 2.5 KB

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