SchoolController.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. using Microsoft.AspNetCore.Mvc;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using TEAMModelOS.Models;
  7. using TEAMModelOS.SDK;
  8. using TEAMModelOS.SDK.DI;
  9. using System.Text.Json;
  10. using TEAMModelOS.SDK.Models;
  11. using TEAMModelOS.SDK.Extension;
  12. using Azure.Cosmos;
  13. using Microsoft.AspNetCore.Http;
  14. using Microsoft.Extensions.Options;
  15. using System.IO;
  16. using System.Dynamic;
  17. using System.Net.Http;
  18. using System.Net;
  19. using Newtonsoft.Json;
  20. using System.Linq;
  21. using StackExchange.Redis;
  22. using static TEAMModelOS.SDK.Models.Teacher;
  23. using Microsoft.Extensions.Configuration;
  24. using TEAMModelOS.Filter;
  25. using Microsoft.AspNetCore.Authorization;
  26. using HTEXLib.COMM.Helpers;
  27. using TEAMModelOS.SDK.Models.Service;
  28. namespace TEAMModelAPI.Controllers
  29. {
  30. [ProducesResponseType(StatusCodes.Status200OK)]
  31. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  32. [ApiController]
  33. [Route("school")]
  34. public class SchoolController : ControllerBase
  35. {
  36. public AzureCosmosFactory _azureCosmos;
  37. private readonly AzureStorageFactory _azureStorage;
  38. private readonly AzureRedisFactory _azureRedis;
  39. private readonly DingDing _dingDing;
  40. private readonly Option _option;
  41. private readonly IConfiguration _configuration;
  42. private readonly CoreAPIHttpService _coreAPIHttpService;
  43. public SchoolController(CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration)
  44. {
  45. _azureCosmos = azureCosmos;
  46. _azureStorage = azureStorage;
  47. _azureRedis = azureRedis;
  48. _dingDing = dingDing;
  49. _option = option?.Value;
  50. _configuration = configuration;
  51. _coreAPIHttpService=coreAPIHttpService;
  52. }
  53. /// <summary>
  54. /// 学校基础信息
  55. /// </summary>
  56. /// <param name="request"></param>
  57. /// <returns></returns>
  58. [ProducesDefaultResponseType]
  59. [HttpGet("get-school-info")]
  60. [ApiToken(Auth = "1001",Name = "学校基础信息", RW = "R", Limit =false)]
  61. public async Task<IActionResult> GetSchoolInfo()
  62. {
  63. var (id, school) = HttpContext.GetApiTokenInfo();
  64. School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
  65. List<dynamic> period = new List<dynamic>();
  66. data.period.ForEach(x => { period.Add(new { x.subjects ,x.grades,x.name,x.id,x.campusId,x.semesters}); });
  67. return Ok(new {
  68. id = data.id, name = data.name, data.areaId, type = data.type,
  69. data.region, data.province, data.city, data.dist,
  70. campuses=data.campuses,
  71. period
  72. });
  73. }
  74. /// <summary>
  75. /// 获取学校教师列表
  76. /// </summary>
  77. /// <param name="request"></param>
  78. /// <returns></returns>
  79. [ProducesDefaultResponseType]
  80. [HttpGet("get-teacher-list")]
  81. [ApiToken(Auth = "1002", Name = "学校教师列表", RW = "R", Limit = false)]
  82. public async Task<IActionResult> GetTeacherList()
  83. {
  84. var (id, school) = HttpContext.GetApiTokenInfo();
  85. List<dynamic> teachers= new List<dynamic>();
  86. string sql = $"select c.id,c.name ,c.picture,c.job ,c.subjectIds,c.roles from c where c.status='join' ";
  87. await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<dynamic>
  88. (queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Teacher-{school}") })) {
  89. teachers.Add(item);
  90. }
  91. return Ok(new
  92. {
  93. teachers
  94. });
  95. }
  96. /// <summary>
  97. /// 获取学校教师信息
  98. /// </summary>
  99. /// <returns></returns>
  100. [ProducesDefaultResponseType]
  101. [HttpPost("get-teacher-info")]
  102. [ApiToken(Auth = "1003", Name = "学校教师信息", RW = "R", Limit = false)]
  103. public async Task<IActionResult> GetTeacherInfo(JsonElement json )
  104. {
  105. json.TryGetProperty("tmdid", out JsonElement _tmdid);
  106. var (id, school) = HttpContext.GetApiTokenInfo();
  107. Azure.Response responseSchoolTch =await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School")
  108. .ReadItemStreamAsync($"{_tmdid}", new PartitionKey($"Teacher-{school}"));
  109. Azure.Response responseTch = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher")
  110. .ReadItemStreamAsync($"{_tmdid}", new PartitionKey($"Base"));
  111. Teacher teacher = null;
  112. if (responseTch.Status == 200)
  113. {
  114. teacher = JsonDocument.Parse(responseTch.Content).RootElement.Deserialize<Teacher>();
  115. }
  116. else
  117. {
  118. return Ok(new { error = 3, msg = "账号未创建!" });
  119. }
  120. if (responseSchoolTch.Status == 200 && teacher!= null )
  121. {
  122. SchoolTeacher schoolTeacher= JsonDocument.Parse(responseSchoolTch.Content).RootElement.Deserialize<SchoolTeacher>();
  123. if (schoolTeacher.status.Equals("join"))
  124. {
  125. return Ok(new {teacher.id,teacher.name,teacher.picture,schoolTeacher.job,schoolTeacher.status,schoolTeacher.roles,schoolTeacher.subjectIds, school=teacher.schools?.Find(x=>x.schoolId.Equals(school)) } );
  126. }
  127. else
  128. {
  129. return Ok(new { error = 2, msg = "教师未加入学校!" });
  130. }
  131. }
  132. else {
  133. return Ok(new { error = 1, msg = "教师未就职该学校!" });
  134. }
  135. }
  136. /// <summary>
  137. /// 获取物理教室列表
  138. /// </summary>
  139. /// <param name="json"></param>
  140. /// <returns></returns>
  141. [ProducesDefaultResponseType]
  142. [HttpPost("get-room-list")]
  143. [ApiToken(Auth = "1004", Name = "获取物理教室列表", RW = "R", Limit = false)]
  144. public async Task<IActionResult> GetRoomList(JsonElement json)
  145. {
  146. var client = _azureCosmos.GetCosmosClient();
  147. var (id, school) = HttpContext.GetApiTokenInfo();
  148. StringBuilder sql = new StringBuilder($"select value(c) from c where 1=1 ");
  149. json.TryGetProperty("openType", out JsonElement openType);
  150. if (!string.IsNullOrWhiteSpace($"{openType}"))
  151. {
  152. sql.Append($" and c.openType='{openType}'");
  153. }
  154. List<Room> rooms = new List<Room>();
  155. await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Room>(queryText: sql.ToString(),
  156. requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Room-{school}") }))
  157. {
  158. rooms.Add(item);
  159. }
  160. return Ok(new { rooms =rooms.Select(x=>new {x.id,x.name,x.x,x.y, x.openType,x.style,x.area,x.address,school=school}) });
  161. }
  162. /// <summary>
  163. /// 获取物理教室详细信息
  164. /// </summary>
  165. /// <param name="json"></param>
  166. /// <returns></returns>
  167. [ProducesDefaultResponseType]
  168. [HttpPost("get-room-info")]
  169. [ApiToken(Auth = "1005", Name = "获取物理教室详细信息", RW = "R", Limit = false)]
  170. public async Task<IActionResult> GetRoomInfo(JsonElement json)
  171. {
  172. var (id, school) = HttpContext.GetApiTokenInfo();
  173. if (!json.TryGetProperty("roomId", out JsonElement roomId)) return BadRequest();
  174. Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School")
  175. .ReadItemStreamAsync($"{roomId}", new PartitionKey($"Room-{school}"));
  176. if (response.Status == 200)
  177. {
  178. JsonDocument document = JsonDocument.Parse(response.Content);
  179. Room room = document.RootElement.Deserialize<Room>();
  180. return Ok(new { room.id, room.name, room.x, room.y, room.openType, room.style, room.area,room.address, school = school });
  181. }
  182. else
  183. {
  184. return Ok(new { error = 1, msg = "教室不存在!" });
  185. }
  186. }
  187. }
  188. }