CrazyIter_Bin 3 lat temu
rodzic
commit
d95efb380c

+ 161 - 0
TEAMModelOS.SDK/Models/Service/Third/ThirdService.cs

@@ -1,5 +1,6 @@
 using Azure.Cosmos;
 using HTEXLib.COMM.Helpers;
+using Microsoft.Extensions.Configuration;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -14,6 +15,166 @@ namespace TEAMModelOS.SDK.Models
 {
     public static class ThirdService
     {
+        //自动加入学校,加入培训名单,并根据学科进行分组
+        public static async Task<ScTeacher> GetScTeacher(ScBindData scBind, Teacher teacher, AzureStorageFactory _azureStorage, AzureCosmosFactory _azureCosmos, AzureServiceBusFactory _serviceBus, IConfiguration _configuration,DingDing _dingDing)
+        {
+            List<ScSchool> schools = await _azureStorage.FindListByDict<ScSchool>(new Dictionary<string, object> { { "PartitionKey", "ScSchool" }, { "RowKey", scBind.sid } });
+            List<ScTeacher> scTeachers = await _azureStorage.FindListByDict<ScTeacher>(new Dictionary<string, object> { { "PartitionKey", "ScTeacher" }, { "TID", scBind.userid }, { "RowKey", $"{scBind.pxid}" } });
+            if (schools.IsNotEmpty())
+            {
+                ScSchool scSchool = schools[0];
+                if (!string.IsNullOrEmpty(scSchool.schoolCode))
+                {
+                    try
+                    {
+                        School school = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(scSchool.schoolCode, new PartitionKey("Base"));
+                        if (school != null)
+                        {
+                            var sc = teacher.schools.Find(x => x.schoolId.Equals(scSchool.schoolCode));
+                            if (sc != null)
+                            {
+                                if (string.IsNullOrEmpty(sc.status) || !sc.status.Equals("join"))
+                                {
+                                    sc.status = "join";
+                                    try
+                                    {
+                                        SchoolTeacher schoolTeacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<SchoolTeacher>(teacher.id, new PartitionKey($"Teacher-{school.id}"));
+                                        if (schoolTeacher != null)
+                                        {
+                                            if (schoolTeacher.roles.IsEmpty() || !schoolTeacher.roles.Contains("teacher"))
+                                            {
+                                                schoolTeacher.roles = new List<string> { "teacher" };
+                                            }
+                                            schoolTeacher.status = "join";
+                                            schoolTeacher.pk = "Teacher";
+                                            schoolTeacher.name = teacher.name;
+                                            schoolTeacher.picture = teacher.picture;
+                                            schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                                            schoolTeacher.ttl = -1;
+                                            schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
+                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
+                                        }
+                                    }
+                                    catch (CosmosException ex)
+                                    {
+                                        SchoolTeacher schoolTeacher = new SchoolTeacher
+                                        {
+                                            id = teacher.id,
+                                            code = $"Teacher-{school.id}",
+                                            roles = new List<string> { "teacher" },
+                                            permissions = new List<string>(),
+                                            pk = "Teacher",
+                                            name = teacher.name,
+                                            picture = teacher.picture,
+                                            status = "join",
+                                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
+                                            ttl = -1
+                                        };
+                                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                teacher.schools.Add(new Teacher.TeacherSchool { schoolId = school.id, name = school.name, areaId = school.areaId, picture = school.picture, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), status = "join" });
+                                SchoolTeacher schoolTeacher = new SchoolTeacher
+                                {
+                                    id = teacher.id,
+                                    code = $"Teacher-{school.id}",
+                                    roles = new List<string> { "teacher" },
+                                    permissions = new List<string>(),
+                                    pk = "Teacher",
+                                    name = teacher.name,
+                                    picture = teacher.picture,
+                                    status = "join",
+                                    createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
+                                };
+                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
+                            }
+                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(teacher, teacher.id, new PartitionKey("Base"));
+
+                            //处理培训名单
+                            StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
+                            List<GroupList> yxtrain = new List<GroupList>();
+                            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
+                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{scSchool.schoolCode}") }))
+                            {
+                                yxtrain.Add(item);
+                            }
+                            if (yxtrain.IsNotEmpty())
+                            {
+                                string groupName = null;
+                                string groupId = Guid.NewGuid().ToString();
+                                if (scTeachers.IsNotEmpty())
+                                {
+                                    groupName = scTeachers[0].TeacherXK;
+                                    if (!string.IsNullOrEmpty(groupName))
+                                    {
+                                        var mebers = yxtrain.SelectMany(x => x.members).Where(y => !string.IsNullOrEmpty(y.groupName) && y.groupName.Equals(groupName));
+                                        if (mebers != null && mebers.Count() > 0)
+                                        {
+                                            groupId = mebers.First().groupId;
+                                        }
+                                    }
+                                    else { groupId = null; }
+                                }
+                                else { groupId = null; }
+
+                                var meber = yxtrain.SelectMany(x => x.members).Where(y => y.id.Equals(teacher.id));
+                                //不在研修名单
+                                if (meber == null || meber.Count() <= 0)
+                                {
+                                    yxtrain[0].members.Add(new Member { id = teacher.id, type = 1, groupId = groupId, groupName = groupName });
+                                    await GroupListService.UpsertList(yxtrain[0], _azureCosmos, _configuration, _serviceBus);
+                                }
+                                else
+                                {
+                                    if (string.IsNullOrEmpty(meber.First().groupId) || string.IsNullOrEmpty(meber.First().groupName))
+                                    {
+                                        meber.ToList().ForEach(x => { x.groupId = groupId; x.groupName = groupName; });
+                                        await GroupListService.UpsertList(yxtrain[0], _azureCosmos, _configuration, _serviceBus);
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                string groupName = null;
+                                if (scTeachers.IsNotEmpty())
+                                {
+                                    groupName = scTeachers[0].TeacherXK;
+                                }
+                                string groupId = null;
+                                if (!string.IsNullOrEmpty(groupName))
+                                {
+                                    groupId = Guid.NewGuid().ToString();
+                                }
+                                GroupList groupList = new GroupList()
+                                {
+                                    id = Guid.NewGuid().ToString(),
+                                    code = $"GroupList-{scSchool.schoolCode}",
+                                    creatorId = teacher.id,
+                                    type = "yxtrain",
+                                    year = DateTimeOffset.UtcNow.Year,
+                                    members = new List<Member> { new Member { id = teacher.id, type = 1, groupId = groupId, groupName = groupName } },
+                                    scope = "school",
+                                    school = scSchool.schoolCode,
+                                    name = "研修名单",
+                                    pk = "GroupList",
+
+                                    ttl = -1
+                                };
+                                await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus);
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        await _dingDing.SendBotMsg($"OS\n自动加入学校,加入研修名单出现异常:{ex.StackTrace},{ex.Message}GetScTeacher", GroupNames.成都开发測試群組);
+                    }
+                }
+            }
+            return null;
+        }
         public static async Task<(string accessConfig, Area area, AreaSetting setting)> GetAccessConfig(CosmosClient client,string standard) {
             Area area = null;
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Normal").

+ 14 - 168
TEAMModelOS/Controllers/Third/ScController.cs

@@ -658,6 +658,7 @@ namespace TEAMModelOS.Controllers.Third
                     {
                         if (teacher.id.Equals(id))
                         {
+                            var bindData = scsso.data.ToObject<ScBindData>();
                             //var bind = teacher.binds.Find(x => x.source.Equals($"{scsso.Webid}") && x.userid.Equals($"{scsso.tid}"));
                             var bind = teacher.binds.Find(x => x.userid.Equals($"{scsso.tid}"));
                             if (bind == null)
@@ -669,7 +670,7 @@ namespace TEAMModelOS.Controllers.Third
                             {
                                 bind.username=scsso.username;
                                 bind.account=scsso.account;
-                                var bindData = scsso.data.ToObject<ScBindData>();
+                               
                                 bool isnew = true;
                                 for (int index = 0; index < bind.data.Count; index++)
                                 {
@@ -689,91 +690,10 @@ namespace TEAMModelOS.Controllers.Third
                                     bindData.username=scsso.username;
                                     bindData.account = scsso.account;
                                 }
-                                if (teacher.schools.IsNotEmpty())
-                                {
-                                    foreach (var school in teacher.schools)
-                                    {
-                                        
-                                        if (!string.IsNullOrEmpty(school.schoolId))
-                                        {
-                                            if (school.status.Equals("join")) {
-                                                StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
-                                                List<GroupList> yxtrain = new List<GroupList>();
-                                                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
-                                                requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school.schoolId}") }))
-                                                {
-                                                    yxtrain.Add(item);
-                                                }
-                                                if (yxtrain.IsNotEmpty())
-                                                {
-                                                    var meber = yxtrain.SelectMany(x => x.members).Where(y => y.id.Equals(teacher.id));
-                                                    //不在研修名单
-                                                    if (meber == null || meber.Count() <= 0)
-                                                    {
-                                                        yxtrain[0].members.Add(new Member { id = teacher.id, type = 1 });
-                                                        await GroupListService.UpsertList(yxtrain[0], _azureCosmos, _configuration, _serviceBus);
-                                                    }
-                                                }
-                                                else
-                                                {
-                                                    GroupList groupList = new GroupList()
-                                                    {
-                                                        id = Guid.NewGuid().ToString(),
-                                                        code = $"GroupList-{school.schoolId}",
-                                                        creatorId = teacher.id,
-                                                        type = "yxtrain",
-                                                        year = DateTimeOffset.UtcNow.Year,
-                                                        members = new List<Member> { new Member { id = teacher.id, type = 1 } },
-                                                        scope = "school",
-                                                        school = school.schoolId,
-                                                        name = "研修名单",
-                                                        pk = "GroupList",
-                                                        ttl = -1
-                                                    };
-                                                    await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus);
-                                                }
-                                            }
-                                            Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(teacher.id, new PartitionKey($"Teacher-{school.schoolId}"));
-                                            if (response.Status != 200)
-                                            {
-                                                SchoolTeacher schoolTeacher = new SchoolTeacher
-                                                {
-                                                    id = teacher.id,
-                                                    code = $"Teacher-{school.schoolId}",
-                                                    pk = "Teacher",
-                                                    name = teacher.name,
-                                                    picture = teacher.picture,
-                                                    size = 0,
-                                                    roles = new List<string> { "teacher" },
-                                                    permissions = new List<string>(),
-                                                    status = school.status,
-                                                    createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                                                    ttl = -1
-                                                };
-                                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(schoolTeacher, new PartitionKey($"Teacher-{school.schoolId}"));
-                                            }
-                                            else {
-                                                JsonDocument document = await JsonDocument.ParseAsync(response.ContentStream);
-                                                SchoolTeacher schoolTeacher = document.RootElement.ToObject<SchoolTeacher>();
-                                                schoolTeacher.status = school.status;
-                                                schoolTeacher.pk = "Teacher";
-                                                schoolTeacher.name = teacher.name;
-                                                schoolTeacher.picture = teacher.picture;
-                                                if (schoolTeacher.roles.IsEmpty() || !schoolTeacher.roles.Contains("teacher"))
-                                                {
-                                                    schoolTeacher.roles = new List<string> { "teacher" };
-                                                }
-                                                schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty() ? schoolTeacher.permissions : new List<string>();
-                                                schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                                                schoolTeacher.ttl = -1;
-                                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{school.schoolId}"));
-                                            }
-                                        }
-                                    }
-                                }
                                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
-                                await _azureStorage.UploadFileByContainer("teammodelos", bindData.ToJsonString(), $"yxpt/{scsso.path}/scbind", $"{teacher.id}.json");
                             }
+                            await _azureStorage.UploadFileByContainer("teammodelos", bindData.ToJsonString(), $"yxpt/{scsso.path}/scbind", $"{teacher.id}.json");
+                            await ThirdService.GetScTeacher(bindData, teacher, _azureStorage, _azureCosmos, _serviceBus, _configuration, _dingDing);
                         }
                         else
                         {
@@ -802,13 +722,15 @@ namespace TEAMModelOS.Controllers.Third
                         size = 1,
                         defaultSchool = null,
                         schools = new List<Teacher.TeacherSchool>(),
-                        binds = new List<Teacher.ThirdBind> { new Teacher.ThirdBind { data = new List<string> { scsso.data }, userid = $"{scsso.tid}", /*source = $"{scsso.Webid}",*/ type = type } }
+                        binds = new List<Teacher.ThirdBind> { new Teacher.ThirdBind {username= scsso.username,account= scsso.account, data = new List<string> { scsso.data }, userid = $"{scsso.tid}", /*source = $"{scsso.Webid}",*/ type = type } }
                     };
                     var container = _azureStorage.GetBlobContainerClient(id);
                     await container.CreateIfNotExistsAsync(PublicAccessType.None); //嘗試創建Teacher私有容器,如存在則不做任何事,保障容器一定存在
+                    
                     teacher = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").CreateItemAsync<Teacher>(teacher, new PartitionKey("Base"));
 
                     ScBindData bindData = scsso.data.ToObject<ScBindData>();
+                    await ThirdService.GetScTeacher(bindData, teacher, _azureStorage, _azureCosmos, _serviceBus, _configuration, _dingDing);
                     if (bindData != null)
                     {
                         bindData.userid = scsso.tid;
@@ -819,7 +741,6 @@ namespace TEAMModelOS.Controllers.Third
                     else {
                         await _azureStorage.UploadFileByContainer("teammodelos", scsso.data.ToJsonString(), $"yxpt/{scsso.path}/scbind", $"{teacher.id}.json");
                     }
-                    
                 }
                 catch (Exception ex) {
                     await _dingDing.SendBotMsg($"OS,{_option.Location}\n绑定失败:\n{sso.ToJsonString()},{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
@@ -846,6 +767,9 @@ namespace TEAMModelOS.Controllers.Third
             }
 
         }
+
+
+        
         /// <summary>
         /// 动态地址路由。"config":"scsyxpt","path":"sc{pjx/jinniu}"
         /// </summary>
@@ -961,6 +885,8 @@ namespace TEAMModelOS.Controllers.Third
                 }
                 else
                 {
+
+                  
                     var clientID = _configuration.GetValue<string>("HaBookAuth:CoreService:clientID");
                     var location = _option.Location;
                     TmdidImplicit implicit_token = await _coreAPIHttpService.Implicit(  
@@ -977,6 +903,8 @@ namespace TEAMModelOS.Controllers.Third
                             await _dingDing.SendBotMsg($"OS,隐式登录获得信息为空:{_option.Location}-\n{scsso.ToJsonString()} \npath:{path}\n{implicit_token.ToJsonString()}", GroupNames.成都开发測試群組);
                             return Redirect(rurl.Append($"?status=1").ToString());
                         }
+                        //处理自动加入学校,加入培训名单
+                        await ThirdService.GetScTeacher(bindData, teacher, _azureStorage, _azureCosmos, _serviceBus, _configuration, _dingDing);
                         var bind = teacher.binds.Find(x => x.userid.Equals(sso.tid));
                         //var bind = teacher.binds.Find(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
                         if (bind != null)
@@ -996,84 +924,6 @@ namespace TEAMModelOS.Controllers.Third
                             }
                             bind.username = TeacherName;
                             bind.account = Account;
-                            if (teacher.schools.IsNotEmpty()) {
-                                foreach (var school in teacher.schools) {
-                                  
-                                    if (!string.IsNullOrEmpty(school.schoolId) ) {
-                                        if (school.status.Equals("join")) {
-                                            StringBuilder queryText = new StringBuilder($"SELECT distinct value(c) FROM c where c.type='yxtrain'");
-                                            List<GroupList> yxtrain = new List<GroupList>();
-                                            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<GroupList>(queryText: queryText.ToString(),
-                                            requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"GroupList-{school.schoolId}") }))
-                                            {
-                                                yxtrain.Add(item);
-                                            }
-                                            if (yxtrain.IsNotEmpty())
-                                            {
-                                                var meber = yxtrain.SelectMany(x => x.members).Where(y => y.id.Equals(teacher.id));
-                                                //不在研修名单
-                                                if (meber == null || meber.Count() <= 0)
-                                                {
-                                                    yxtrain[0].members.Add(new Member { id = teacher.id, type = 1 });
-                                                    await GroupListService.UpsertList(yxtrain[0], _azureCosmos, _configuration, _serviceBus);
-                                                }
-                                            }
-                                            else
-                                            {
-                                                GroupList groupList = new GroupList()
-                                                {
-                                                    id = Guid.NewGuid().ToString(),
-                                                    code = $"GroupList-{school.schoolId}",
-                                                    creatorId = teacher.id,
-                                                    type = "yxtrain",
-                                                    year = DateTimeOffset.UtcNow.Year,
-                                                    members = new List<Member> { new Member { id = teacher.id, type = 1 } },
-                                                    scope = "school",
-                                                    school = school.schoolId,
-                                                    name = "研修名单",
-                                                    pk = "GroupList",
-                                                    ttl = -1
-                                                };
-                                                await GroupListService.UpsertList(groupList, _azureCosmos, _configuration, _serviceBus);
-                                            }
-                                        }
-                                        Azure.Response response=  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(teacher.id, new PartitionKey($"Teacher-{school.schoolId}"));
-                                        if (response.Status != 200) {
-                                            SchoolTeacher schoolTeacher = new SchoolTeacher
-                                            {
-                                                id = teacher.id,
-                                                code = $"Teacher-{school.schoolId}",
-                                                pk= "Teacher",
-                                                name=teacher.name,
-                                                picture= teacher.picture,
-                                                size=0,
-                                                roles=new List<string> { "teacher" },
-                                                permissions= new List<string>(),
-                                                status=school.status,
-                                                createTime=DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                                                ttl=-1
-                                            };
-                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").CreateItemAsync(schoolTeacher, new PartitionKey($"Teacher-{school.schoolId}"));
-                                        }
-                                        else
-                                        {
-                                            JsonDocument document = await JsonDocument.ParseAsync(response.ContentStream);
-                                            SchoolTeacher schoolTeacher = document.RootElement.ToObject<SchoolTeacher>();
-                                            schoolTeacher.status =school.status;
-                                            schoolTeacher.pk = "Teacher";
-                                            schoolTeacher.name = teacher.name;
-                                            schoolTeacher.picture = teacher.picture;
-                                            if (schoolTeacher.roles.IsEmpty() ||! schoolTeacher.roles.Contains("teacher")) {
-                                                schoolTeacher.roles = new List<string> { "teacher" };
-                                            }
-                                            schoolTeacher.permissions = schoolTeacher.permissions.IsNotEmpty()? schoolTeacher.permissions: new List<string>();
-                                            schoolTeacher.createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
-                                            schoolTeacher.ttl = -1;
-                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync(schoolTeacher, schoolTeacher.id, new PartitionKey($"Teacher-{school.schoolId}"));
-                                        }
-                                    }
-                                }
-                            }
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
                         }
                         try
@@ -1092,11 +942,9 @@ namespace TEAMModelOS.Controllers.Third
                         //绑定失效
                         if (teacher.binds.IsNotEmpty())
                         {
-                           // teacher.binds.RemoveAll(x => x.userid.Equals(sso.tid) && x.source.Equals(sso.Webid));
                             teacher.binds.RemoveAll(x => x.userid.Equals(sso.tid) );
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacher, teacher.id, new PartitionKey(teacher.code));
                         }
-                        // string enurl = HttpUtility.UrlEncode(rurl.Append($"status=4&param={sso.ToJsonString()}&type={type}&bindurl=sc/bind").ToString());
                         string enurl = $"status=4&param={HttpUtility.UrlEncode(sso.ToJsonString(),Encoding.UTF8)}&type={type}&bindurl=sc/bind";
                         return Redirect(rurl.Append($"?{enurl}").ToString());
                     }
@@ -1106,7 +954,5 @@ namespace TEAMModelOS.Controllers.Third
                 return Redirect(rurl.Append($"?status=1").ToString());
             }
         }
-
-       
     }
 }

+ 37 - 0
TEAMModelOS/Controllers/XTest/FixDataController.cs

@@ -54,6 +54,43 @@ namespace TEAMModelOS.Controllers
             _serviceBus = serviceBus;
         }
 
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("set-admin")]
+        public async Task<IActionResult> SetAdmin(JsonElement json)
+        {
+            var client = _azureCosmos.GetCosmosClient();
+            string sql = $"SELECT value(c) FROM c where c.areaId='f35e0031-a53f-45e5-b307-1cd39446a2cf'";
+            Teacher teacher =await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemAsync<Teacher>("1528783259", new PartitionKey("Base"));
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<School>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Base") }))
+            {
+                var sc= teacher.schools.Find(x => x.schoolId.Equals(item.id));
+                if (sc != null)
+                {
+                    if (string.IsNullOrEmpty(sc.status)||!sc.status.Equals("join"))
+                    {
+                        sc.status = "join";
+                    }
+                }
+                else {
+                    teacher.schools.Add(new Teacher.TeacherSchool { schoolId = item.id, name = item.name, areaId = item.areaId, picture = item.picture, time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), status = "join" });
+                    SchoolTeacher schoolTeacher = new SchoolTeacher { id = teacher.id, code = $"Teacher-{item.id}", 
+                        roles = new List<string> { "admin", "teacher" },permissions= new List<string>(),
+                        pk= "Teacher",name=teacher.name,picture=teacher.picture ,
+                    status="join",createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
+                    };
+                    await client.GetContainer(Constant.TEAMModelOS, "School").UpsertItemAsync(schoolTeacher);
+                }
+            }
+            await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync(teacher, teacher.id,new PartitionKey("Base"));
+            return Ok();
+        }
+
         /// <summary>
         /// 
         /// </summary>