123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- 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 TEAMModelOS.SDK.Helper.Common.CollectionHelper;
- using TEAMModelOS.SDK.Context.Exception;
- 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;
- namespace TEAMModelOS.Controllers
- {
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- //[Authorize(Roles = "IES5")]
- [Route("school/init")]
- [ApiController]
- public class SchoolController : ControllerBase
- {
- public AzureCosmosFactory _azureCosmos;
- private readonly DingDing _dingDing;
- private readonly Option _option;
- public SchoolController(AzureCosmosFactory azureCosmos, DingDing dingDing, IOptionsSnapshot<Option> option)
- {
- _azureCosmos = azureCosmos;
- _dingDing = dingDing;
- _option = option?.Value;
- }
- /// <summary>
- /// 保存或更新学校
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "admin")]
- [HttpPost("upsert")]
- public async Task<IActionResult> Upsert(School requert)
- {
- var (_, _, _, school) = HttpContext.GetAuthTokenInfo();
- try
- {
- School schoolInfo = new School();
- var client = _azureCosmos.GetCosmosClient();
- var response = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(requert.id, new PartitionKey($"Base"));
- if (response.Status == 200)
- {
-
- schoolInfo = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").UpsertItemAsync(requert, new PartitionKey($"Base"));
- }
- else
- {
- requert.code = "Base";
- schoolInfo = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").CreateItemAsync(requert, new PartitionKey($"Base"));
-
- }
- return Ok(new { schoolInfo });
- }
- catch (Exception ex)
- {
- await _dingDing.SendBotMsg($"CoreAPI2,{_option.Location},school/upsert()\n{ex.Message}", GroupNames.醍摩豆服務運維群組);
- return BadRequest();
- }
- /*ResponseBuilder builder = ResponseBuilder.custom();
- if (string.IsNullOrEmpty(request.id))
- {
- List<School> schools = await _azureCosmos.FindByDict<School>(new Dictionary<string, object> { { "id", request.schoolCode } });
- if (schools.IsNotEmpty())
- {
- //return builder.Error(ResponseCode.DATA_EXIST, "学校已存在!").build();
- return Ok(new { V = "学校已经存在!" });
- }
- request.code = "Base";
- //request.id = request.schoolCode;
- }
- else {
- *//*if (request.id.Equals(request.schoolCode))
- {*//*
- School datas = await _azureCosmos.SaveOrUpdate<School>(request);
- return Ok(new{ datas});
- *//*}
- else
- {
- //return builder.Error(ResponseCode.PARAMS_ERROR, "id,schoolCode必须相同!").build();
- return Ok(new { V = "id,schoolCode必须相同!" });
- }*/
- /*List<School> schools = await _azureCosmos.FindByDict<School>(new Dictionary<string, object> { { "id", request.id } });
- if (schools.IsEmpty())
- {
- return builder.Error(ResponseCode.PARAMS_ERROR, "id不存在,不能更新").build();
- }*//*
- }
- return Ok();*/
- }
- /// <summary>
- /// 查找学校
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- //[AuthToken(Roles = "teacher")]
- [HttpPost("find")]
- public async Task<IActionResult> Find(JsonElement requert)
- {
- if (!requert.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
- var client = _azureCosmos.GetCosmosClient();
- List<School> schools = new List<School>();
- var query = $"select c.id,c.pk,c.code, c.name,c.region,c.province,c.city,c.timeZone,c.picture,c.size,c.period,c.campuses from c where c.id ='{school_code}'";
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: query, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey("Base") }))
- {
- using var json = await JsonDocument.ParseAsync(item.ContentStream);
- if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
- {
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- {
- schools.Add(obj.ToObject<School>());
- }
- }
- }
- return Ok(new { schools });
- /* ResponseBuilder builder = ResponseBuilder.custom();
- if (request.TryGetProperty("code", out JsonElement code) &&! string.IsNullOrEmpty(code.ToString()))
- {
- List<School> sc = await _azureCosmos.FindByDict<School>(request);
- return builder.Data(sc).build();
- }
- else {
- return builder.Data(null).build();
- }*/
- }
- /// <summary>
- /// 取得所有學校(只取基本資料)
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-all-school-base")]
- public async Task<IActionResult> GetAllSchoolBaesInfo(JsonElement request)
- {
- var client = _azureCosmos.GetCosmosClient();
- List<object> schools = new List<object>();
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.code, c.name, c.region, c.province, c.city, c.address, c.picture FROM c ", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Base") }))
- {
- using var json = await JsonDocument.ParseAsync(item.ContentStream);
- if (json.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0)
- {
- foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
- {
- schools.Add(obj.ToObject<object>());
- }
- }
- }
- return Ok(new { schools });
- }
- /// <summary>
- /// 取得某學校基本資料
- /// </summary>
- /// <param name="request"></param>
- /// <returns></returns>
- [ProducesDefaultResponseType]
- [HttpPost("get-school-base")]
- public async Task<IActionResult> GetSchoolBaesInfo(JsonElement request)
- {
- if (!request.TryGetProperty("school_code", out JsonElement school_code)) return BadRequest();
- var client = _azureCosmos.GetCosmosClient();
- //取得學校學制、年級、教室
- List<object> classes = new List<object>();
- await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryStreamIterator(queryText: $"SELECT c.id, c.name, c.gradeId FROM c", requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school_code}") }))
- {
- var jsonc = await JsonDocument.ParseAsync(item.ContentStream);
- foreach (var classeinfo in jsonc.RootElement.GetProperty("Documents").EnumerateArray())
- {
- dynamic classExtobj = new ExpandoObject();
- classExtobj.id = classeinfo.GetProperty("id");
- classExtobj.name = classeinfo.GetProperty("name");
- classExtobj.gradeId = classeinfo.GetProperty("gradeId");
- classes.Add(classExtobj);
- }
- }
- List<object> periods = new List<object>();
- List<object> grades = new List<object>();
- var responsesch = await client.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync(school_code.ToString(), new PartitionKey($"Base"));
- if (responsesch.Status == 200)
- {
- var jsons = await JsonDocument.ParseAsync(responsesch.ContentStream);
- if (jsons.RootElement.TryGetProperty("period", out JsonElement periodJobj))
- {
- foreach (var periodinfo in periodJobj.EnumerateArray())
- {
- dynamic periodExtobj = new ExpandoObject();
- periodExtobj.id = periodinfo.GetProperty("id");
- periodExtobj.name = periodinfo.GetProperty("name");
- periods.Add(periodExtobj);
- if (periodinfo.TryGetProperty("grades", out JsonElement gradesJobj))
- {
- foreach (var gradeinfo in gradesJobj.EnumerateArray())
- {
- dynamic gradeExtobj = new ExpandoObject();
- gradeExtobj.id = gradeinfo.GetProperty("id");
- gradeExtobj.name = gradeinfo.GetProperty("name");
- gradeExtobj.periodId = periodinfo.GetProperty("id");
- grades.Add(gradeExtobj);
- }
- }
- }
- }
- }
- return Ok(new { periods, grades, classes });
- }
- }
- }
|