浏览代码

新增接口:一个账户设置多个学校的管理员

Li 2 年之前
父节点
当前提交
d0137ed5aa
共有 2 个文件被更改,包括 133 次插入12 次删除
  1. 128 12
      TEAMModelBI/Controllers/BISchool/SchoolController.cs
  2. 5 0
      TEAMModelBI/Models/AssistSchool.cs

+ 128 - 12
TEAMModelBI/Controllers/BISchool/SchoolController.cs

@@ -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>

+ 5 - 0
TEAMModelBI/Models/AssistSchool.cs

@@ -126,4 +126,9 @@ namespace TEAMModelBI.Models
         public string areaId { get; set; }
     }
 
+    public class BatchScManage : SimpleInfo 
+    {
+        public string areaId { get; set; }
+    }
+
 }