CommonFind.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using Azure.Cosmos;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text.Json;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.SDK.Models.Cosmos.Common;
  7. namespace TEAMModelBI.Models
  8. {
  9. public class CommonFind
  10. {
  11. /// <summary>
  12. /// 查询总数不带code
  13. /// </summary>
  14. /// <param name="cosmosClient"></param>
  15. /// <param name="sqlTxt"></param>
  16. /// <param name="containerId">数据库表集合</param>
  17. /// <returns>返回总数</returns>
  18. public static async Task<long> FindTotals(CosmosClient cosmosClient, string sqlTxt, List<string> containerId)
  19. {
  20. long totals = 0;
  21. foreach (var container in containerId)
  22. {
  23. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", container).GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { }))
  24. {
  25. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  26. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt32() > 0)
  27. {
  28. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  29. {
  30. totals += obj.GetProperty("totals").GetInt64();
  31. }
  32. }
  33. }
  34. }
  35. return totals;
  36. }
  37. /// <summary>
  38. /// 查询总数带code
  39. /// </summary>
  40. /// <param name="cosmosClient"></param>
  41. /// <param name="sqlTxt">sql语句</param>
  42. /// <param name="containerId">数据库表</param>
  43. /// <param name="code">数据分区键</param>
  44. /// <returns>返回总数</returns>
  45. public static async Task<int> FindTotals(CosmosClient cosmosClient, string sqlTxt, string containerId, string code)
  46. {
  47. int totals = 0;
  48. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", containerId).GetItemQueryStreamIterator(queryText: sqlTxt.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) }))
  49. {
  50. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  51. if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetInt16() > 0)
  52. {
  53. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  54. {
  55. totals += obj.GetProperty("totals").GetInt32();
  56. }
  57. }
  58. }
  59. return totals;
  60. }
  61. /// <summary>
  62. /// 通过醍摩豆账户查询关联学校ID
  63. /// </summary>
  64. /// <param name="cosmosClient">cosmosDB连接</param>
  65. /// <param name="tmdId">醍摩豆账户</param>
  66. /// <returns>返回顾问相关的学校ID集合</returns>
  67. public static async Task<List<string>> FindSchoolIds(CosmosClient cosmosClient, string tmdId)
  68. {
  69. List<string> schoolIds = new List<string>();
  70. string schoolSql = $"SELECT DISTINCT REPLACE(c.code,'Teacher-','') AS schoolId,c.code,c.roles,c.id,c.name From c where ARRAY_CONTAINS(c.roles,'assist',true) AND c.pk = 'Teacher' AND c.status = 'join' AND c.id='{tmdId}'";
  71. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: schoolSql, requestOptions: new QueryRequestOptions() { }))
  72. {
  73. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  74. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  75. {
  76. schoolIds.Add(obj.GetProperty("schoolId").GetString());
  77. }
  78. }
  79. return schoolIds;
  80. }
  81. /// <summary>
  82. /// 通过语句查询学校ID
  83. /// </summary>
  84. /// <param name="cosmosClient">cosmosDB连接</param>
  85. /// <param name="sqlTxt">sql语句</param>
  86. /// <param name="code">数据分区键</param>
  87. /// <returns>返回学校ID的集合</returns>
  88. public static async Task<List<string>> FindSchoolIds(CosmosClient cosmosClient, string sqlTxt, string code)
  89. {
  90. List<string> schoolIds = new List<string>();
  91. await foreach (var item in cosmosClient.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: sqlTxt, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey(code) }))
  92. {
  93. using var json = await JsonDocument.ParseAsync(item.ContentStream);
  94. foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
  95. {
  96. schoolIds.Add(obj.GetProperty("id").GetString());
  97. }
  98. }
  99. return schoolIds;
  100. }
  101. public static async Task<List<LessonCount>> FindLessonCount(CosmosClient cosmosClient, string dateTime)
  102. {
  103. List<LessonCount> lessonCounts =new List<LessonCount>();
  104. DateTimeOffset dto = DateTimeOffset.Parse(dateTime);
  105. if (dto.Month <= 8 && dto.Month >= 3)
  106. {
  107. }
  108. return lessonCounts;
  109. }
  110. }
  111. }