|
@@ -1,4 +1,5 @@
|
|
|
using Azure.Cosmos;
|
|
|
+using Azure.Storage.Blobs;
|
|
|
using HTEXLib.COMM.Helpers;
|
|
|
using MathNet.Numerics.LinearAlgebra;
|
|
|
using MathNet.Numerics.LinearAlgebra.Double;
|
|
@@ -34,6 +35,7 @@ using TEAMModelOS.SDK.Models;
|
|
|
using TEAMModelOS.SDK.Models.Cosmos.BI;
|
|
|
using TEAMModelOS.SDK.Models.Cosmos.Common;
|
|
|
using TEAMModelOS.SDK.Models.Service.BI;
|
|
|
+using static TEAMModelBI.Controllers.BISchool.SchoolController;
|
|
|
|
|
|
namespace TEAMModelBI.Controllers.BISchool
|
|
|
{
|
|
@@ -788,31 +790,145 @@ namespace TEAMModelBI.Controllers.BISchool
|
|
|
public async Task<IActionResult> DelSchoolManage(JsonElement jsonElement)
|
|
|
{
|
|
|
if (!jsonElement.TryGetProperty("tmdId", out JsonElement tmdId)) return BadRequest();
|
|
|
- if (!jsonElement.TryGetProperty("scId", out JsonElement scId)) return BadRequest();
|
|
|
+ if (!jsonElement.TryGetProperty("scIds", out JsonElement _scIds)) return BadRequest();
|
|
|
//jsonElement.TryGetProperty("site", out JsonElement site);//分开部署,就不需要,一站多用时,取消注释
|
|
|
+
|
|
|
+ List<string> scIds = _scIds.ToObject<List<string>>();
|
|
|
var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
////分开部署,就不需要,一站多用时,取消注释
|
|
|
//if ($"{site}".Equals(BIConst.Global))
|
|
|
// cosmosClient = _azureCosmos.GetCosmosClient(name: BIConst.Global);
|
|
|
+ List<string> existScId = new();
|
|
|
|
|
|
SchoolTeacher scTeacher = null;
|
|
|
- var response = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync($"{tmdId}", new PartitionKey($"Teacher-{scId}"));
|
|
|
- if (response.Status == 200)
|
|
|
+ foreach (var scId in scIds)
|
|
|
{
|
|
|
- using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
- scTeacher = json.ToObject<SchoolTeacher>();
|
|
|
- if (scTeacher.roles.Contains("admin"))
|
|
|
+ var response = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync($"{tmdId}", new PartitionKey($"Teacher-{scId}"));
|
|
|
+ if (response.Status == 200)
|
|
|
{
|
|
|
- scTeacher.roles.Remove("admin");
|
|
|
- scTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(scTeacher, scTeacher.id, new PartitionKey($"Teacher-{scId}"));
|
|
|
+ using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ scTeacher = json.ToObject<SchoolTeacher>();
|
|
|
+ if (scTeacher.roles.Contains("admin"))
|
|
|
+ {
|
|
|
+ scTeacher.roles.Remove("admin");
|
|
|
+ scTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(scTeacher, scTeacher.id, new PartitionKey($"Teacher-{scId}"));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ existScId.Add(scId);
|
|
|
}
|
|
|
else
|
|
|
- return Ok(new { state = RespondCode.NotFound, msg = "该账户不是管理员" });
|
|
|
+ existScId.Add(scId);
|
|
|
}
|
|
|
- else
|
|
|
- return Ok(new { state = RespondCode.NotFound, msg = "未找到醍摩豆管理员信息" });
|
|
|
|
|
|
- return Ok(new { state = RespondCode.Ok, scTeacher });
|
|
|
+ return Ok(new { state = RespondCode.Ok, existScId });
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 一个账户设置多个学校的管理员
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="jsonElement"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [AuthToken(Roles = "admin,rdc")]
|
|
|
+ [HttpPost("set-batchmageage")]
|
|
|
+ public async Task<IActionResult> SetBatchScManage(JsonElement jsonElement)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var (_tmdId, _tmdName, _, _, _, _) = HttpJwtAnalysis.JwtXAuthBI(HttpContext.GetXAuth("AuthToken"), _option);
|
|
|
+
|
|
|
+ if (!jsonElement.TryGetProperty("tmdId", out JsonElement tmdId)) return BadRequest();
|
|
|
+ if (!jsonElement.TryGetProperty("tmdName", out JsonElement tmdName)) return BadRequest();
|
|
|
+ jsonElement.TryGetProperty("tmdPic", out JsonElement picture);
|
|
|
+ if (!jsonElement.TryGetProperty("scSimplles", out JsonElement scSimplles)) return BadRequest();
|
|
|
+ List<BatchScManage> schools = scSimplles.ToObject<List<BatchScManage>>();
|
|
|
+ List<BatchScManage> existManageSc = new();
|
|
|
+ Teacher teacher = null;
|
|
|
+ StringBuilder msg = new($"{_tmdName}[{_tmdId}]设置账号:");
|
|
|
+
|
|
|
+ var cosmosClient = _azureCosmos.GetCosmosClient();
|
|
|
+ var tableClient = _azureStorage.GetCloudTableClient();
|
|
|
+ var blobClient = _azureStorage.GetBlobContainerClient(containerName: "0-public");
|
|
|
+
|
|
|
+ if (schools.Count > 0)
|
|
|
+ {
|
|
|
+ var resTeacher = await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReadItemStreamAsync($"{tmdId}", new PartitionKey($"Base"));
|
|
|
+ if (resTeacher.Status == 200)
|
|
|
+ {
|
|
|
+ using var tchJson = await JsonDocument.ParseAsync(resTeacher.ContentStream);
|
|
|
+ teacher = tchJson.ToObject<Teacher>();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ teacher.id = $"{tmdId}";
|
|
|
+ teacher.name = $"{tmdName}";
|
|
|
+ teacher.picture = string.IsNullOrEmpty($"{picture}") ? "" : $"{picture}";
|
|
|
+ teacher.pk = "Base";
|
|
|
+ teacher.code = "Base";
|
|
|
+ teacher.size = 1;
|
|
|
+ teacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
+ }
|
|
|
+ msg.Append($"{teacher.name}[{teacher.id}]设置学校管理员;学校信息:");
|
|
|
+
|
|
|
+ foreach (var school in schools)
|
|
|
+ {
|
|
|
+ SchoolTeacher schoolTeacher = null;
|
|
|
+ var existArea = teacher.schools.Find(f => f.schoolId.Equals($"{school.id}"));
|
|
|
+ if (existArea == null)
|
|
|
+ {
|
|
|
+ teacher.schools.Add(new Teacher.TeacherSchool { schoolId = $"{school.id}", name = $"{school.id}", status = "join", time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), picture = string.IsNullOrEmpty($"{school.picture}") ? "" : $"{school.picture}", areaId = string.IsNullOrEmpty($"{school.areaId}") ? "" : $"{school.areaId}" });
|
|
|
+ }
|
|
|
+
|
|
|
+ var response = await cosmosClient.GetContainer("TEAMModelOS", "School").ReadItemStreamAsync($"{tmdId}", new PartitionKey($"Teacher-{school.id}"));
|
|
|
+ if (response.Status == 200)
|
|
|
+ {
|
|
|
+ using var json = await JsonDocument.ParseAsync(response.ContentStream);
|
|
|
+ schoolTeacher = json.ToObject<SchoolTeacher>();
|
|
|
+ if (!schoolTeacher.roles.Contains("admin"))
|
|
|
+ {
|
|
|
+ schoolTeacher.roles.Add("admin");
|
|
|
+ schoolTeacher = await cosmosClient.GetContainer("TEAMModelOS", "School").ReplaceItemAsync<SchoolTeacher>(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{school.id}"));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ existManageSc.Add(school);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ schoolTeacher = new()
|
|
|
+ {
|
|
|
+ id = $"{tmdId}",
|
|
|
+ code = $"Teacher-{school.id}",
|
|
|
+ roles = new List<string> { "admin", "teacher" },
|
|
|
+ job = "管理员",
|
|
|
+ name = $"{tmdName}",
|
|
|
+ picture = string.IsNullOrEmpty($"{picture}") ? "" : $"{picture}",
|
|
|
+ status = "join",
|
|
|
+ createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
|
|
|
+ pk = "Teacher",
|
|
|
+ ttl = -1
|
|
|
+ };
|
|
|
+
|
|
|
+ schoolTeacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync<SchoolTeacher>(schoolTeacher, new PartitionKey($"Teacher-{school.id}"));
|
|
|
+ }
|
|
|
+ msg.Append($"{school.name}[{school.id}]");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(resTeacher.Status == 200)
|
|
|
+ teacher = await cosmosClient.GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey("Base"));
|
|
|
+ else
|
|
|
+ teacher = await cosmosClient.GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存操作记录
|
|
|
+ await AzureStorageBlobExtensions.SaveBILog(blobClient, tableClient, "schoolTeacher-add", msg.ToString(), _dingDing, httpContext: HttpContext);
|
|
|
+
|
|
|
+ return Ok(new { state = RespondCode.Ok, teacher });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ await _dingDing.SendBotMsg($"BI,{_option.Location} /schoolcheck/set-batchmageage \n {ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
|
|
|
+ return BadRequest();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|