SchoolController.cs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. using TEAMModelOS.SDK.Models.Table;
  29. namespace TEAMModelAPI.Controllers
  30. {
  31. [ProducesResponseType(StatusCodes.Status200OK)]
  32. [ProducesResponseType(StatusCodes.Status400BadRequest)]
  33. [ApiController]
  34. [Route("{scope}")]
  35. public class SchoolController : ControllerBase
  36. {
  37. public AzureCosmosFactory _azureCosmos;
  38. private readonly AzureStorageFactory _azureStorage;
  39. private readonly AzureRedisFactory _azureRedis;
  40. private readonly DingDing _dingDing;
  41. private readonly Option _option;
  42. private readonly IConfiguration _configuration;
  43. private readonly CoreAPIHttpService _coreAPIHttpService;
  44. public SchoolController(CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration)
  45. {
  46. _azureCosmos = azureCosmos;
  47. _azureStorage = azureStorage;
  48. _azureRedis = azureRedis;
  49. _dingDing = dingDing;
  50. _option = option?.Value;
  51. _configuration = configuration;
  52. _coreAPIHttpService=coreAPIHttpService;
  53. }
  54. /// <summary>
  55. /// 学校基础信息
  56. /// </summary>
  57. /// <param name="request"></param>
  58. /// <returns></returns>
  59. [ProducesDefaultResponseType]
  60. [HttpPost("get-schools")]
  61. [ApiToken(Auth = "1000", Name = "合作商获取可访问的学校列表", RWN= "R", Limit = false)]
  62. public async Task<IActionResult> GetSchools() {
  63. var (id, _) = HttpContext.GetApiTokenInfo();
  64. var table = _azureStorage.GetCloudTableClient().GetTableReference("IESOpenApi");
  65. List<BusinessSchool> schools= await table.FindListByDict<BusinessSchool>(new Dictionary<string, object> { { "PartitionKey", $"BusinessSchool-{id}" } });
  66. return Ok(new { schools = schools.Select(x => new {id =x.RowKey,x.name,x.picture })});
  67. }
  68. /// <summary>
  69. /// 学校基础信息
  70. /// </summary>
  71. /// <param name="request"></param>
  72. /// <returns></returns>
  73. [ProducesDefaultResponseType]
  74. [HttpPost("get-school-info")]
  75. [ApiToken(Auth = "1001",Name = "学校基础信息", RWN= "R", Limit =false)]
  76. public async Task<IActionResult> GetSchoolInfo()
  77. {
  78. var (id, school) = HttpContext.GetApiTokenInfo();
  79. School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
  80. List<dynamic> period = new List<dynamic>();
  81. data.period.ForEach(x => { period.Add(new { x.subjects ,x.grades,x.name,x.id,x.campusId,x.semesters}); });
  82. return Ok(new {
  83. id = data.id, name = data.name, data.areaId, type = data.type,
  84. data.region, data.province, data.city, data.dist,
  85. campuses=data.campuses,
  86. period
  87. });
  88. }
  89. }
  90. }