CrazyIter_Bin vor 3 Jahren
Ursprung
Commit
a4f44e939d

+ 7 - 9
TEAMModelOS.FunctionV4/ServiceBus/ActiveTaskTopic.cs

@@ -967,7 +967,7 @@ namespace TEAMModelOS.FunctionV4.ServiceBus
                                 //如果有更新 则去读取/{_lessonId}/IES/base.json
                                 //如果有更新 则去读取/{_lessonId}/IES/base.json
                                 try
                                 try
                                 {
                                 {
-                                    await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 收到更新", GroupNames.成都开发測試群組);
+                                   // await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 收到更新", GroupNames.成都开发測試群組);
                                     BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(blobname).GetBlobClient($"/records/{_lessonId}/IES/base.json").DownloadContentAsync();
                                     BlobDownloadResult baseblobDownload = await _azureStorage.GetBlobContainerClient(blobname).GetBlobClient($"/records/{_lessonId}/IES/base.json").DownloadContentAsync();
                                     LessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<LessonBase>();
                                     LessonBase lessonBase = baseblobDownload.Content.ToObjectFromJson<LessonBase>();
                                     if (lessonBase != null  && lessonBase.summary!=null)
                                     if (lessonBase != null  && lessonBase.summary!=null)
@@ -988,6 +988,7 @@ namespace TEAMModelOS.FunctionV4.ServiceBus
                                         lessonRecord.examCount = lessonBase.summary.examCount;
                                         lessonRecord.examCount = lessonBase.summary.examCount;
                                         lessonRecord.totalInteractPoint = lessonBase.summary.totalInteractPoint;
                                         lessonRecord.totalInteractPoint = lessonBase.summary.totalInteractPoint;
                                     }
                                     }
+                                   // await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 更新完成", GroupNames.成都开发測試群組);
                                     long? size = await  _azureStorage.GetBlobContainerClient(blobname).GetBlobsSize($"records/{_lessonId}");
                                     long? size = await  _azureStorage.GetBlobContainerClient(blobname).GetBlobsSize($"records/{_lessonId}");
                                     Bloblog bloblog = new Bloblog
                                     Bloblog bloblog = new Bloblog
                                     {
                                     {
@@ -998,8 +999,8 @@ namespace TEAMModelOS.FunctionV4.ServiceBus
                                         time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                                         time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                                         type = "records",
                                         type = "records",
                                         url = $"records/{_lessonId}",
                                         url = $"records/{_lessonId}",
-                                        subjectId = new List<string> { lessonRecord.subjectId },
-                                        periodId = new List<string> { lessonRecord.periodId },
+                                        subjectId =string.IsNullOrWhiteSpace(lessonRecord.subjectId)?new List<string>(): new List<string> { lessonRecord.subjectId },
+                                        periodId = string.IsNullOrWhiteSpace(lessonRecord.periodId) ? new List<string>() : new List<string> { lessonRecord.periodId },
                                         size = size.HasValue ? size.Value : 0,
                                         size = size.HasValue ? size.Value : 0,
                                     };
                                     };
                                     await client.GetContainer(Constant.TEAMModelOS,tbname).UpsertItemAsync(bloblog);
                                     await client.GetContainer(Constant.TEAMModelOS,tbname).UpsertItemAsync(bloblog);
@@ -1007,16 +1008,13 @@ namespace TEAMModelOS.FunctionV4.ServiceBus
                                     messageBlob.ApplicationProperties.Add("name", "BlobRoot");
                                     messageBlob.ApplicationProperties.Add("name", "BlobRoot");
                                     var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
                                     var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
                                     await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                                     await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
-                                    await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 更新完成", GroupNames.成都开发測試群組);
+                                    //await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} blob刷新完成!", GroupNames.成都开发測試群組);
                                     msgs.Add(update);
                                     msgs.Add(update);
                                 }
                                 }
-                                catch (RequestFailedException ex) when (ex.Status == 404)
-                                {
-                                    msgs.Add(new LessonUpdate { grant_type = "up-base-404" });
-                                }
+                                 
                                 catch (Exception ex)
                                 catch (Exception ex)
                                 {
                                 {
-                                    await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}课程读取base.json,{_lessonId}\n{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+                                    await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}课程读取base.json,{_lessonId}\n{ex.Message}\n{ex.StackTrace}\n{lessonRecord.ToJsonString()}", GroupNames.成都开发測試群組);
                                 }
                                 }
                                 break;
                                 break;
 
 

+ 1 - 0
TEAMModelOS.SDK/DI/CoreAPI/CoreAPIHttpService.cs

@@ -240,6 +240,7 @@ namespace TEAMModelOS.SDK
     }
     }
     public class CoreUser
     public class CoreUser
     {
     {
+        public string searchKey { get; set; }
         public string id { get; set; }
         public string id { get; set; }
         public string vid { get; set; }
         public string vid { get; set; }
         public string mail { get; set; }
         public string mail { get; set; }

+ 1 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/TmdInfo.cs

@@ -4,6 +4,7 @@ using System.Text;
 
 
 namespace TEAMModelOS.SDK.Models
 namespace TEAMModelOS.SDK.Models
 {
 {
+   
     public  class TmdInfo
     public  class TmdInfo
     {
     {
         public string id { get; set; }
         public string id { get; set; }

+ 23 - 0
TEAMModelOS.SDK/Models/Cosmos/School/TeacherImport.cs

@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TEAMModelOS.SDK.Models
+{
+    public class TeacherImport:CosmosEntity
+    {
+        //id 学校id ,
+        //code  TeacherImport,
+        public List<ImportTeacher> teachers { get; set; }=new List<ImportTeacher>();
+
+    }
+    public class ImportTeacher { 
+        // 手机号或者醍摩豆id,可以为空,则没正式加入学校的教师 
+        public string id { get; set; }
+        public string name { get; set; }
+        public string status { get; set; }
+        public long time { get; set; }
+    }
+}

+ 6 - 20
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -104,33 +104,19 @@ namespace TEAMModelOS.Controllers.Client
             try
             try
             {
             {
                 LessonRecord lessonRecord = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<LessonRecord>($"{_lessonId}", new PartitionKey(code));
                 LessonRecord lessonRecord = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemAsync<LessonRecord>($"{_lessonId}", new PartitionKey(code));
-                List<LessonUpdate> updates = _grant_types.ToObject<List<LessonUpdate>>();
-                bool hasGrant_types = false;
-                if (_grant_types.ValueKind.Equals(JsonValueKind.Array))
-                {
-                    if (updates.IsEmpty())
-                    {
+                List<LessonUpdate> updates= new List<LessonUpdate>() { new LessonUpdate { grant_type= "up-base" } };
+                if (_grant_types.ValueKind.Equals(JsonValueKind.Array)) {
+                    updates = _grant_types.ToObject<List<LessonUpdate>>();
+                    if (!updates.Select(x => x.grant_type).Contains("up-base")) {
                         updates.Add(new LessonUpdate { grant_type = "up-base" });
                         updates.Add(new LessonUpdate { grant_type = "up-base" });
                     }
                     }
-                    else {
-                        hasGrant_types = true;
-                    }
-                }
-                else {
-                    updates.Add(new LessonUpdate { grant_type = "up-base" });
                 }
                 }
                 var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
                 var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
                 string msg = null;
                 string msg = null;
-                if (hasGrant_types)
-                {
-                    msg = request.ToJsonString();
-                }
-                else {
-                    msg = new { lesson_id = $"{_lessonId}", tmdid = $"{_tmdid}", grant_types = updates, school = $"{_school}", scope = $"{_scope}" }.ToJsonString();
-                }
+                msg = new { lesson_id = $"{_lessonId}", tmdid = $"{_tmdid}", grant_types = updates, school = $"{_school}", scope = $"{_scope}" }.ToJsonString();
                 var messageChange = new ServiceBusMessage(msg);
                 var messageChange = new ServiceBusMessage(msg);
                 messageChange.ApplicationProperties.Add("name", "LessonRecordEvent");
                 messageChange.ApplicationProperties.Add("name", "LessonRecordEvent");
-                await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 更新事件,{msg}", GroupNames.成都开发測試群組);
+               // await _dingDing.SendBotMsg($"{_option.Location},课堂id:{_lessonId} 更新事件,{msg}", GroupNames.成都开发測試群組);
                 await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChange);
                 await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageChange);
                 return Ok(new { status = 200 });
                 return Ok(new { status = 200 });
             }
             }

+ 90 - 49
TEAMModelOS/Controllers/School/SchoolController.cs

@@ -45,7 +45,8 @@ namespace TEAMModelOS.Controllers
         private readonly double bytes = 1073741824;
         private readonly double bytes = 1073741824;
         private readonly int redisAclassoneDbNum = 8; //AclassOne Redis DB號
         private readonly int redisAclassoneDbNum = 8; //AclassOne Redis DB號
         private readonly IConfiguration _configuration;
         private readonly IConfiguration _configuration;
-        public SchoolController(AzureCosmosFactory azureCosmos, AzureStorageFactory azureStorage, AzureRedisFactory azureRedis, DingDing dingDing, IOptionsSnapshot<Option> option, 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;
             _azureCosmos = azureCosmos;
             _azureStorage = azureStorage;
             _azureStorage = azureStorage;
@@ -53,6 +54,7 @@ namespace TEAMModelOS.Controllers
             _dingDing = dingDing;
             _dingDing = dingDing;
             _option = option?.Value;
             _option = option?.Value;
             _configuration = configuration;
             _configuration = configuration;
+            _coreAPIHttpService = coreAPIHttpService;
         }
         }
         /// <summary>
         /// <summary>
         /// 修改学校信息
         /// 修改学校信息
@@ -1407,6 +1409,7 @@ namespace TEAMModelOS.Controllers
                 avaliable = school.size;
                 avaliable = school.size;
                 // 取得學校目前的總空間數(G)
                 // 取得學校目前的總空間數(G)
                 teacherSpace = avaliable - usedSpace;
                 teacherSpace = avaliable - usedSpace;
+                List<SchoolTeacher> teachersInschool = new List<SchoolTeacher>();
                 switch (action)
                 switch (action)
                 {
                 {
                     case "baseSpace": // 現在的教師空間
                     case "baseSpace": // 現在的教師空間
@@ -1442,61 +1445,41 @@ namespace TEAMModelOS.Controllers
                         }
                         }
 
 
                         queryText = $"select * from c where c.id in ({string.Join(",", ids.Select(o => $"'{o}'"))})";
                         queryText = $"select * from c where c.id in ({string.Join(",", ids.Select(o => $"'{o}'"))})";
-
+                        
                         await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: queryText, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{school_code}") }))
                         await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: queryText, requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Teacher-{school_code}") }))
                         {
                         {
                             using var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
                             using var jsoncm = await JsonDocument.ParseAsync(item.ContentStream);
-                            if (jsoncm.RootElement.TryGetProperty("_count", out JsonElement count) && count.GetUInt16() > 0 && count.GetInt16() == list.GetArrayLength())
+                            foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
                             {
                             {
+                                teachersInschool.Add(obj.ToObject<SchoolTeacher>());
+                            }
+                        }
+                        
+                        foreach (var obj in teachers)
+                        {
+                            SchoolTeacher teacher = teachersInschool.Where(t => t.id == obj.GetProperty("id").ToString()).FirstOrDefault<SchoolTeacher>();
+                            int orgTeacherSize = teacher.size;
+                            teacher.size = Convert.ToInt32(obj.GetProperty("size").ToString());
 
 
-                                List<SchoolTeacher> teachersInschool = new List<SchoolTeacher>();
-                                foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
-                                {
-                                    teachersInschool.Add(obj.ToObject<SchoolTeacher>());
-                                }
-
-                                foreach (var obj in teachers)
-                                {
-                                    SchoolTeacher teacher = teachersInschool.Where(t => t.id == obj.GetProperty("id").ToString()).FirstOrDefault<SchoolTeacher>();
-                                    int orgTeacherSize = teacher.size;
-                                    teacher.size = Convert.ToInt32(obj.GetProperty("size").ToString());
-
-                                    // 修改DB裡Teacher的size
-                                    var response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync(teacher.id, new PartitionKey("Base"));
-                                    if (response.Status == 200)
-                                    {
-                                        var json = await JsonDocument.ParseAsync(response.ContentStream);
-
-                                        //軟體
-                                        // Teacher teacherHimself = json.ToObject<Teacher>();
-                                        //teacherHimself.size = teacherHimself.size - orgTeacherSize + teacher.size;
-                                        //最後一起修改
-                                        //huanghb 2021,7.21修改 ,不用再统计到Teacher-Base中 ,Teacher-Base只记录教师自己的空间大小,并包含其他学校赠与的空间,其他学校的赠与空间放在School 表的Teacher-hbcn(SchoolTeacher)中SchoolTeacher
-                                        //,并在教师登陆的时候 一并计算个人空间和总空间大小。其中总空间大小包含(个人空间+多个学校累加的空间大小,并且如果退出或者被移除Teacher-Base 的"schools": [],为空,则已经实现自动回收)
-                                        // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacherHimself, teacherHimself.id, new PartitionKey("Base"));
-                                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(teacher, obj.GetProperty("id").ToString(), new PartitionKey($"Teacher-{school_code}"));
-                                    }
-                                    else
-                                    {
-                                        status = "3";
-                                        err = "有老師不存在於 Teacher 的DB";
-                                    }
-                                }
+                            // 修改DB裡Teacher的size
+                            var response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync(teacher.id, new PartitionKey("Base"));
+                            if (response.Status == 200)
+                            {
+                                var json = await JsonDocument.ParseAsync(response.ContentStream);
+
+                                //軟體
+                                // Teacher teacherHimself = json.ToObject<Teacher>();
+                                //teacherHimself.size = teacherHimself.size - orgTeacherSize + teacher.size;
+                                //最後一起修改
+                                //huanghb 2021,7.21修改 ,不用再统计到Teacher-Base中 ,Teacher-Base只记录教师自己的空间大小,并包含其他学校赠与的空间,其他学校的赠与空间放在School 表的Teacher-hbcn(SchoolTeacher)中SchoolTeacher
+                                //,并在教师登陆的时候 一并计算个人空间和总空间大小。其中总空间大小包含(个人空间+多个学校累加的空间大小,并且如果退出或者被移除Teacher-Base 的"schools": [],为空,则已经实现自动回收)
+                                // await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Teacher").ReplaceItemAsync<Teacher>(teacherHimself, teacherHimself.id, new PartitionKey("Base"));
+                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<SchoolTeacher>(teacher, obj.GetProperty("id").ToString(), new PartitionKey($"Teacher-{school_code}"));
                             }
                             }
                             else
                             else
                             {
                             {
-                                // 有不存在的的老師ID
-                                status = "2";
-                                err = "有不存在的的老師ID";
-
-                                List<string> teachersInschool = new List<string>();
-                                foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
-                                {
-                                    teachersInschool.Add(obj.GetProperty("id").ToString());
-                                }
-
-                                // 差集處理
-                                errTeachers = ids.Except(teachersInschool).ToList();
+                                status = "3";
+                                err = "有老師不存在於 Teacher 的DB";
                             }
                             }
                         }
                         }
                         return Ok(new { status, err, errTeachers });
                         return Ok(new { status, err, errTeachers });
@@ -1512,7 +1495,7 @@ namespace TEAMModelOS.Controllers
                             {
                             {
                                 // 修改的筆數
                                 // 修改的筆數
                                 record = count.ToString();
                                 record = count.ToString();
-                                List<SchoolTeacher> teachersInschool = new List<SchoolTeacher>();
+                                //List<SchoolTeacher> teachersInschool = new List<SchoolTeacher>();
                                 foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
                                 foreach (var obj in jsoncm.RootElement.GetProperty("Documents").EnumerateArray())
                                 {
                                 {
                                     teachersInschool.Add(obj.ToObject<SchoolTeacher>());
                                     teachersInschool.Add(obj.ToObject<SchoolTeacher>());
@@ -1567,5 +1550,63 @@ namespace TEAMModelOS.Controllers
                 return BadRequest();
                 return BadRequest();
             }
             }
         }
         }
+        [ProducesDefaultResponseType]
+        [HttpPost("teacher-import-manage")]
+        [Authorize(Roles = "IES")]
+        [AuthToken( Roles ="admin,teacher")]
+        public async Task<IActionResult> TeacherImportManage(JsonElement request) {
+            if (!request.TryGetProperty("opt", out JsonElement _opt)) { return BadRequest(); }
+            if (!request.TryGetProperty("schoolId", out JsonElement _schoolId)) { return BadRequest(); }
+            if (!request.TryGetProperty("teachers", out JsonElement _teachers) || !_teachers.ValueKind.Equals(JsonValueKind.Array)) { return BadRequest(); }
+            TeacherImport teacherImport = null; 
+            switch ($"{_opt}") {
+                case "upsert":
+                    List<CoreUser> coreUsers = null;
+                    List<ImportTeacher> teachers = _teachers.ToObject<List<ImportTeacher>>();
+                    var ids = teachers.Where(x => !string.IsNullOrWhiteSpace(x.id)).Select(x => x.id);
+                    if (ids.Any()) {
+                        var content = new StringContent(ids.ToJsonString(), Encoding.UTF8, "application/json");
+                        string json =  await _coreAPIHttpService.GetUserInfos(content);
+                        if (!string.IsNullOrWhiteSpace(json)) {
+                            coreUsers = json.ToObject<List<CoreUser>>();
+                        }
+                    }
+                   
+                    string sql = $"select value(c.id) from c where c.id in ({string.Join(",",coreUsers.Select(x=>$"'{x.id}'"))}) ";
+                    List<string> idsInSchool = new List<string>();
+                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
+                        .GetItemQueryIterator<string>(queryText:sql,requestOptions:new QueryRequestOptions { PartitionKey= new PartitionKey($"Teacher-{_schoolId}")})) {
+                        idsInSchool.Add(item);
+                    }
+                    if (coreUsers.Any())
+                    {
+                        teachers.ForEach(t => {
+                            string id=  idsInSchool.Find(x => x.Equals(t.id));
+                            if (!string.IsNullOrWhiteSpace(id)) {
+                                t.status = "join";
+                            }
+                            CoreUser coreUser = coreUsers.Find(x => x.searchKey.Equals(t.id));
+                            if (coreUser != null) {
+                                t.id = coreUser.id;
+                            }
+                        });
+                    }
+                    teacherImport = new TeacherImport {id = $"{_schoolId}", code = "TeacherImport", pk = "TeacherImport", teachers=teachers};
+                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(teacherImport, new PartitionKey("TeacherImport"));
+                    break;
+                case "find":
+                    Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemStreamAsync($"{_schoolId}", new PartitionKey("TeacherImport"));
+                    if (response.Status == 200)
+                    {
+                        teacherImport = JsonDocument.Parse(response.Content).RootElement.ToObject<TeacherImport>();
+                    }
+                    else {
+                        teacherImport= new TeacherImport { id=$"{_schoolId}",code= "TeacherImport",pk= "TeacherImport",teachers= new List<ImportTeacher>() };
+                    }
+                    break;
+            }
+            return Ok(new { teacherImport });
+        
+        }
     }
     }
 }
 }

+ 16 - 12
TEAMModelOS/Controllers/XTest/FixDataController.cs

@@ -1868,16 +1868,16 @@ namespace TEAMModelOS.Controllers
         public async Task<IActionResult> FixSchoolLessonRecord(JsonElement json)
         public async Task<IActionResult> FixSchoolLessonRecord(JsonElement json)
         {
         {
             var client = _azureCosmos.GetCosmosClient();
             var client = _azureCosmos.GetCosmosClient();
-            string sql = " SELECT distinct value(c)  FROM c  where c.pk='LessonRecord' and  c.code<>'LessonRecord-ydzt' ";
+            string sql = " SELECT distinct value(c)  FROM c  where c.pk='LessonRecord' ";
             List<LessonRecord> lessonRecords = new List<LessonRecord>();
             List<LessonRecord> lessonRecords = new List<LessonRecord>();
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(queryText: sql,requestOptions:new QueryRequestOptions {/* PartitionKey = new PartitionKey("LessonRecord-ydzt")*/ }))
+            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions {/* PartitionKey = new PartitionKey("LessonRecord-ydzt")*/ }))
+            {
+                lessonRecords.Add(item);
+            }
+            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { }))
             {
             {
                 lessonRecords.Add(item);
                 lessonRecords.Add(item);
             }
             }
-            //await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetItemQueryIterator<LessonRecord>(queryText: sql, requestOptions: new QueryRequestOptions { }))
-            //{
-            //    lessonRecords.Add(item);
-            //}
             HashSet<string> courseIds = new HashSet<string>();
             HashSet<string> courseIds = new HashSet<string>();
             lessonRecords.ForEach(item => {
             lessonRecords.ForEach(item => {
                 if (!string.IsNullOrWhiteSpace(item.courseId)) {
                 if (!string.IsNullOrWhiteSpace(item.courseId)) {
@@ -1904,12 +1904,16 @@ namespace TEAMModelOS.Controllers
                     schoolIds.Add(item.school);
                     schoolIds.Add(item.school);
                 }
                 }
             });
             });
-            string sqlSchool = $" SELECT distinct value(c)  FROM c  where  c.id in ({string.Join(",", schoolIds.Select(x => $"'{x}'"))})   ";
             List<School> schools = new List<School>();
             List<School> schools = new List<School>();
-            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
-            {
-                schools.Add(item);
+            if (schoolIds.Any()) {
+                string sqlSchool = $" SELECT distinct value(c)  FROM c  where  c.id in ({string.Join(",", schoolIds.Select(x => $"'{x}'"))})   ";
+               
+                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetItemQueryIterator<School>(queryText: sqlSchool, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") }))
+                {
+                    schools.Add(item);
+                }
             }
             }
+            
             var lists =  lessonRecords.Where(x => !string.IsNullOrWhiteSpace(x.school)).GroupBy(y => y.school).Select(a => new { key = a.Key, list = a.ToList() });
             var lists =  lessonRecords.Where(x => !string.IsNullOrWhiteSpace(x.school)).GroupBy(y => y.school).Select(a => new { key = a.Key, list = a.ToList() });
             Dictionary<string, List<GroupListDto>> dict = new Dictionary<string, List<GroupListDto>>();
             Dictionary<string, List<GroupListDto>> dict = new Dictionary<string, List<GroupListDto>>();
             foreach (var item in lists) {
             foreach (var item in lists) {
@@ -2022,8 +2026,8 @@ namespace TEAMModelOS.Controllers
                         time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                         time = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                         type = "records",
                         type = "records",
                         url = $"records/{lessonId}",
                         url = $"records/{lessonId}",
-                        subjectId = new List<string> { lessonRecord.subjectId },
-                        periodId = new List<string> { lessonRecord.periodId },
+                        subjectId = string.IsNullOrWhiteSpace(lessonRecord.subjectId) ? new List<string>() : new List<string> { lessonRecord.subjectId },
+                        periodId = string.IsNullOrWhiteSpace(lessonRecord.periodId) ? new List<string>() : new List<string> { lessonRecord.periodId },
                         size = size.HasValue ? size.Value : 0,
                         size = size.HasValue ? size.Value : 0,
                     };
                     };
                     await client.GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(bloblog);
                     await client.GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(bloblog);