StudentCommonController.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using Azure.Cosmos;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Http;
  4. using Microsoft.AspNetCore.Mvc;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text.Json;
  9. using System.Threading.Tasks;
  10. using TEAMModelOS.Filter;
  11. using TEAMModelOS.SDK.DI;
  12. using TEAMModelOS.SDK.Extension;
  13. using TEAMModelOS.SDK.Models.Cosmos;
  14. using TEAMModelOS.SDK.Models.Cosmos.Common;
  15. using TEAMModelOS.Services.Common;
  16. namespace TEAMModelOS.Controllers
  17. {
  18. [ProducesResponseType(StatusCodes.Status200OK)]
  19. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  20. //[Authorize(Roles = "IES5")]
  21. [Route("student")]
  22. [ApiController]
  23. public class StudentCommonController :ControllerBase
  24. {
  25. private readonly AzureCosmosFactory _azureCosmos;
  26. private readonly AzureRedisFactory _azureRedis;
  27. public StudentCommonController(AzureCosmosFactory azureCosmos, AzureRedisFactory azureRedis)
  28. {
  29. _azureCosmos = azureCosmos;
  30. _azureRedis = azureRedis;
  31. }
  32. /// <summary>
  33. /// 查询活动所有活动类型的列表,学生端
  34. /// </summary>
  35. /// <param name="request">
  36. ///加入的班级信息 ?classes:[{"classid":"S-C-00001","scope":"school"},{"classid":"P-C-00004","scope":"private"}]
  37. ///活动类型 ?"type":"Vote"/"Exam"/"Homework"/"Learn"/"Survey"" // Vote投票 Survey问卷 Exam评测 Learn学习活动 Homework作业活动
  38. ///时间筛选范围开始时间 默认30天之前 ?"stime":1608274766154
  39. ///时间筛选范围结束时间 默认当前时间 ?"etime":1608274766666
  40. ///是否展示列表的 Tips ? "tips":true/false
  41. ///每页大小 ?"count":10/null/Undefined
  42. ///分页Token ?"continuationToken":Undefined/null/"[{\"token\":\"+RID:~omxMAP3ipcSEEwAAAAAAAA==#RT:2#TRC:20#ISV:2#IEO:65551#QCF:1#FPC:AYQTAAAAAAAAiRMAAAAAAAA=\",\"range\":{\"min\":\"\",\"max\":\"FF\"}}]"
  43. /// 当前状态 ?"progress":Undefined/null/"" 表示两种状态都要查询/ "going"/"finish" 表示查询进行中/ 或者已完成 学生端只能查询正在进行或已经结束 going 已发布|finish 已结束
  44. /// </param>
  45. ///
  46. /// <returns></returns>
  47. [ProducesDefaultResponseType]
  48. [HttpPost("stu-activity")]
  49. // [AuthToken(Roles = "student")]
  50. public async Task<IActionResult> StuActivity(JsonElement request)
  51. {
  52. var (id, name, pic, school) = HttpContext.GetAuthTokenInfo();
  53. (List<StuActivity> datas, string continuationToken) = await ActivityStudentService.FindActivity(request, id, school, _azureCosmos, _azureRedis);
  54. return Ok(new { datas, continuationToken });
  55. }
  56. /// <summary>
  57. /// 查询活动所有活动类型的列表,学生端
  58. /// </summary>
  59. /// <param name="request">
  60. ///加入的班级信息 ?classes:[{"classid":"S-C-00001","scope":"school"},{"classid":"P-C-00004","scope":"private"}]
  61. ///活动类型 ?"type":"Vote"/"Exam"/"Homework"/"Learn"/"Survey"" // Vote投票 Survey问卷 Exam评测 Learn学习活动 Homework作业活动
  62. ///时间筛选范围开始时间 默认30天之前 ?"stime":1608274766154
  63. ///时间筛选范围结束时间 默认当前时间 ?"etime":1608274766666
  64. ///是否展示列表的 Tips ? "tips":true/false
  65. ///每页大小 ?"count":10/null/Undefined
  66. ///分页Token ?"continuationToken":Undefined/null/"[{\"token\":\"+RID:~omxMAP3ipcSEEwAAAAAAAA==#RT:2#TRC:20#ISV:2#IEO:65551#QCF:1#FPC:AYQTAAAAAAAAiRMAAAAAAAA=\",\"range\":{\"min\":\"\",\"max\":\"FF\"}}]"
  67. /// 当前状态 ?"progress":Undefined/null/"" 表示两种状态都要查询/ "going"/"finish" 表示查询进行中/ 或者已完成 学生端只能查询正在进行或已经结束 going 已发布|finish 已结束
  68. /// </param>
  69. ///
  70. /// <returns></returns>
  71. [ProducesDefaultResponseType]
  72. [HttpPost("stu-course")]
  73. // [AuthToken(Roles = "student")]
  74. public async Task<IActionResult> StuCourse(JsonElement request)
  75. {
  76. var (id, name, pic, school) = HttpContext.GetAuthTokenInfo();
  77. if (string.IsNullOrWhiteSpace(id))
  78. {
  79. if (request.TryGetProperty("userid", out JsonElement userid))
  80. {
  81. if (!userid.ValueKind.Equals(JsonValueKind.Undefined) && !userid.ValueKind.Equals(JsonValueKind.Null) && userid.ValueKind.Equals(JsonValueKind.String))
  82. {
  83. id = userid.GetString();
  84. }
  85. }
  86. }
  87. if (string.IsNullOrWhiteSpace(school))
  88. {
  89. if (request.TryGetProperty("school", out JsonElement schooljson)) {
  90. if (!schooljson.ValueKind.Equals(JsonValueKind.Undefined) && !schooljson.ValueKind.Equals(JsonValueKind.Null) && schooljson.ValueKind.Equals(JsonValueKind.String))
  91. {
  92. school = schooljson.GetString();
  93. }
  94. }
  95. }
  96. /// tmdid, schoolid
  97. var userType = "tmdid";
  98. if (request.TryGetProperty("userType", out JsonElement usertype))
  99. {
  100. if (!usertype.ValueKind.Equals(JsonValueKind.Undefined) && !usertype.ValueKind.Equals(JsonValueKind.Null) && usertype.ValueKind.Equals(JsonValueKind.String))
  101. {
  102. userType = usertype.GetString();
  103. }
  104. }
  105. string containerId = "Teacher";
  106. string PartitionKey = $"Course-{id}";
  107. if (!string.IsNullOrEmpty(school)) {
  108. containerId = "Student";
  109. PartitionKey = $"Course-{school}-{id}";
  110. }
  111. /// tmdid, schoolid
  112. if (userType.Equals("tmdid"))
  113. {
  114. containerId = "Teacher";
  115. PartitionKey = $"Course-{id}";
  116. }
  117. List<StuCourse> stus = new List<StuCourse>();
  118. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", containerId).GetItemQueryIterator<StuCourse>(queryText: $"select value(c) from c ",
  119. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey(PartitionKey) }))
  120. {
  121. stus.Add(item);
  122. }
  123. return Ok(new { course=stus });
  124. }
  125. }
  126. }