123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- using Microsoft.AspNetCore.Mvc;
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading.Tasks;
- using TEAMModelOS.Models;
- using TEAMModelOS.SDK;
- using TEAMModelOS.SDK.DI;
- using System.Text.Json;
- using TEAMModelOS.SDK.Models;
- using TEAMModelOS.SDK.Extension;
- using Azure.Cosmos;
- using Microsoft.AspNetCore.Http;
- using Microsoft.Extensions.Options;
- using System.IO;
- using System.Dynamic;
- using System.Net.Http;
- using System.Net;
- using Newtonsoft.Json;
- using System.Linq;
- using StackExchange.Redis;
- using static TEAMModelOS.SDK.Models.Teacher;
- using Microsoft.Extensions.Configuration;
- using TEAMModelOS.Filter;
- using Microsoft.AspNetCore.Authorization;
- using HTEXLib.COMM.Helpers;
- using TEAMModelOS.SDK.Models.Service;
- namespace TEAMModelAPI.Controllers
- {
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [ApiController]
- [Route("school")]
- public class SchoolController : ControllerBase
- {
- public AzureCosmosFactory _azureCosmos;
- private readonly AzureStorageFactory _azureStorage;
- private readonly AzureRedisFactory _azureRedis;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- private readonly IConfiguration _configuration;
- private readonly CoreAPIHttpService _coreAPIHttpService;
- public SchoolController(CoreAPIHttpService coreAPIHttpService, AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, DingDing dingDing, IOptionsSnapshot<Option> option, IConfiguration configuration)
- {
- _azureCosmos = azureCosmos;
- _azureStorage = azureStorage;
- _azureRedis = azureRedis;
- _dingDing = dingDing;
- _option = option?.Value;
- _configuration = configuration;
- _coreAPIHttpService=coreAPIHttpService;
- }
- /// <summary>
- /// 学校基础信息
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpGet("get-school-info")]
- [ApiToken(Auth = "1001",Name = "学校基础信息", RW = "R", Limit =false)]
- public async Task<IActionResult> GetSchoolInfo()
- {
- var (id, school) = HttpContext.GetApiTokenInfo();
- School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
- List<dynamic> period = new List<dynamic>();
- data.period.ForEach(x => { period.Add(new { x.subjects ,x.grades,x.name,x.id,x.campusId,x.semesters}); });
- return Ok(new {
- id = data.id, name = data.name, data.areaId, type = data.type,
- data.region, data.province, data.city, data.dist,
- campuses=data.campuses,
- period
- });
- }
- /// <summary>
- /// 获取学校教师列表
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpGet("get-teacher-list")]
- [ApiToken(Auth = "1002", Name = "学校教师列表", RW = "R", Limit = false)]
- public async Task<IActionResult> GetTeacherList()
- {
- var (id, school) = HttpContext.GetApiTokenInfo();
- List<dynamic> teachers= new List<dynamic>();
- string sql = $"select c.id,c.name ,c.picture,c.job ,c.subjectIds,c.roles from c where c.status='join' ";
- await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<dynamic>
- (queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Teacher-{school}") })) {
- teachers.Add(item);
- }
- return Ok(new
- {
- teachers
- });
- }
- /// <summary>
- /// 获取学校教师信息
- /// </summary>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-teacher-info")]
- [ApiToken(Auth = "1003", Name = "学校教师信息", RW = "R", Limit = false)]
- public async Task<IActionResult> GetTeacherInfo(JsonElement json )
- {
- json.TryGetProperty("tmdid", out JsonElement _tmdid);
- var (id, school) = HttpContext.GetApiTokenInfo();
- Azure.Response responseSchoolTch =await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School")
- .ReadItemStreamAsync($"{_tmdid}", new PartitionKey($"Teacher-{school}"));
- Azure.Response responseTch = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher")
- .ReadItemStreamAsync($"{_tmdid}", new PartitionKey($"Base"));
- Teacher teacher = null;
- if (responseTch.Status == 200)
- {
- teacher = JsonDocument.Parse(responseTch.Content).RootElement.Deserialize<Teacher>();
- }
- else
- {
- return Ok(new { error = 3, msg = "账号未创建!" });
- }
- if (responseSchoolTch.Status == 200 && teacher!= null )
- {
- SchoolTeacher schoolTeacher= JsonDocument.Parse(responseSchoolTch.Content).RootElement.Deserialize<SchoolTeacher>();
- if (schoolTeacher.status.Equals("join"))
- {
- 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)) } );
- }
- else
- {
- return Ok(new { error = 2, msg = "教师未加入学校!" });
- }
- }
- else {
- return Ok(new { error = 1, msg = "教师未就职该学校!" });
- }
- }
-
-
- /// <summary>
- /// 获取物理教室列表
- /// </summary>
- /// <param name="json"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-room-list")]
- [ApiToken(Auth = "1004", Name = "获取物理教室列表", RW = "R", Limit = false)]
- public async Task<IActionResult> GetRoomList(JsonElement json)
- {
- var client = _azureCosmos.GetCosmosClient();
- var (id, school) = HttpContext.GetApiTokenInfo();
- StringBuilder sql = new StringBuilder($"select value(c) from c where 1=1 ");
- json.TryGetProperty("openType", out JsonElement openType);
- if (!string.IsNullOrWhiteSpace($"{openType}"))
- {
- sql.Append($" and c.openType='{openType}'");
- }
-
- List<Room> rooms = new List<Room>();
- await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<Room>(queryText: sql.ToString(),
- requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Room-{school}") }))
- {
- rooms.Add(item);
- }
- 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}) });
- }
- /// <summary>
- /// 获取物理教室详细信息
- /// </summary>
- /// <param name="json"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-room-info")]
- [ApiToken(Auth = "1005", Name = "获取物理教室详细信息", RW = "R", Limit = false)]
- public async Task<IActionResult> GetRoomInfo(JsonElement json)
- {
- var (id, school) = HttpContext.GetApiTokenInfo();
- if (!json.TryGetProperty("roomId", out JsonElement roomId)) return BadRequest();
- Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School")
- .ReadItemStreamAsync($"{roomId}", new PartitionKey($"Room-{school}"));
- if (response.Status == 200)
- {
- JsonDocument document = JsonDocument.Parse(response.Content);
- Room room = document.RootElement.Deserialize<Room>();
- return Ok(new { room.id, room.name, room.x, room.y, room.openType, room.style, room.area,room.address, school = school });
- }
- else
- {
- return Ok(new { error = 1, msg = "教室不存在!" });
- }
- }
-
- }
- }
|