CrazyIter před 5 roky
rodič
revize
45d56773f4

+ 10 - 2
TEAMModelGrpc/Services/ClassroomStudentService.cs

@@ -62,7 +62,13 @@ namespace TEAMModelGrpc.Services
                 List<ClassroomStudent> classroomStudents = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", classroomStudent.Key } });
                 foreach (var classroomStudent1 in classroomStudent)
                 {
-                    classroomStudents[0].studentId.UnionWith(classroomStudent1.studentId);
+                    classroomStudent1.studentId.ForEach(x => {
+                        if (!classroomStudents[0].studentId.Contains(x))
+                        {
+                            classroomStudents[0].studentId.Add(x);
+                        }
+                    });
+                    //   classroomStudents[0].studentId.UnionWith(classroomStudent1.studentId);
                 }
                 classroomStudents1.AddRange(classroomStudents);
             }
@@ -94,7 +100,9 @@ namespace TEAMModelGrpc.Services
                 List<ClassroomStudent> classroomStudents = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", item1.id } });
                 foreach (ClassroomStudent item2 in classroomStudents)
                 {
-                    item2.studentId.ExceptWith(item1.studentId);
+
+                    item1.studentId.ForEach(x => { item2.studentId.Remove(x); });
+                    //item2.studentId.ExceptWith(item1.studentId);
                 }
                 classroomStudents1.AddRange(classroomStudents);
             }

+ 1 - 1
TEAMModelOS.SDK/Module/AzureCosmosDBV3/AzureCosmosDBV3Repository.cs

@@ -45,7 +45,7 @@ namespace TEAMModelOS.SDK.Module.AzureCosmosDBV3
         private const string CacheCosmosPrefix = "cosmos:";
         private string[] ScanModel { get; set; }
         private const int timeoutSeconds = 86400;
-        private const int ttl = 10;
+        private const int ttl = 1;
         private string leaseId = "AleaseContainer";
         public AzureCosmosDBV3Repository(AzureCosmosDBOptions options, CosmosSerializer cosmosSerializer)
         {

+ 3 - 3
TEAMModelOS.Service/Models/Core/ClassRoomStudent.cs

@@ -9,12 +9,12 @@ using TEAMModelOS.SDK.Module.AzureCosmosDBV3;
 namespace TEAMModelOS.Service.Models.Core
 {
     [ProtoContract]
-    [CosmosDB(RU = 400, Name = "CoreClassroomStudent", Cache = true)]
+    [CosmosDB(RU = 400, Name = "CoreClassroomStudent", Cache = false)]
     public class ClassroomStudent : ID
     {
 
         public ClassroomStudent() {
-            studentId = new HashSet<string>();
+            studentId = new List<string>();
         }
         public int? ttl { get; set; } 
         /// <summary>
@@ -30,7 +30,7 @@ namespace TEAMModelOS.Service.Models.Core
         public string scopeCode { get; set; }
 
         [ProtoMember(3)]
-        public HashSet<string> studentId { get; set; }
+        public List<string> studentId { get; set; }
 
     }
 }

+ 29 - 2
TEAMModelOS/Controllers/Core/ClassroomStudentController.cs

@@ -27,6 +27,25 @@ namespace TEAMModelOS.Controllers.Core
             _cosmos = cosmos;
         }
 
+        /// <summary>
+        /// 构建原生班级学生关系
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [HttpPost("BuildClassroomStudent")]
+        public async Task<BaseJosnRPCResponse> BuildClassroomStudent(JosnRPCRequest<Dictionary<string,string>> request) {
+            JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
+            if (request.@params.TryGetValue("classroomCode", out string classroomCode) && 
+                request.@params.TryGetValue("schoolCode", out string schoolCode)) {
+                List<Student> students=  await _cosmos.FindByDict<Student>(new Dictionary<string, object>() { { "classroomCode", classroomCode },{ "schoolCode", schoolCode } });
+                if (students.IsNotEmpty()) {
+                    var data=  new ClassroomStudent { id = classroomCode, scopeCode = schoolCode, studentId = students.Select(x => x.studentId).ToList() };
+                    await _cosmos.SaveOrUpdate(data);
+                    builder.Data(data);
+;                }
+            }
+           return    builder.build();
+        }
 
         /// <summary>
         /// 保存 或 修改 教室学生关联
@@ -66,7 +85,13 @@ namespace TEAMModelOS.Controllers.Core
                     List<ClassroomStudent> classroomStudents = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", classroomStudent.Key } });
                     foreach (var classroomStudent1 in classroomStudent) 
                     {
-                        classroomStudents[0].studentId.UnionWith(classroomStudent1.studentId);
+                        classroomStudent1.studentId.ForEach(x=> {
+                            if (!classroomStudents[0].studentId.Contains(x)) {
+                                classroomStudents[0].studentId.Add(x);
+                            }
+                        });
+                      
+                      //  classroomStudents[0].studentId.UnionWith(classroomStudent1.studentId);
                     }
                     classroomStudents1.AddRange(classroomStudents);
                 }
@@ -93,7 +118,9 @@ namespace TEAMModelOS.Controllers.Core
                     List<ClassroomStudent> classroomStudents = await _cosmos.FindByDict<ClassroomStudent>(new Dictionary<string, object> { { "id", item1.id } });
                     foreach (ClassroomStudent item2 in classroomStudents)
                     {
-                        item2.studentId.ExceptWith(item1.studentId);
+                        item1.studentId.ForEach(x=> { item2.studentId.Remove(x); });
+
+                       // item2.studentId.ExceptWith(item1.studentId);
                     }
                     classroomStudents1.AddRange(classroomStudents);
                 }

+ 25 - 12
TEAMModelOS/Controllers/Core/StudentController.cs

@@ -54,10 +54,14 @@ namespace TEAMModelOS.Controllers.Syllabus
             ClassroomStudent classroomStudent = await azureCosmosDBRepository.FindById<ClassroomStudent>(data.classroomCode);
             if (classroomStudent == null)
             {
-                classroomStudent = new ClassroomStudent { id = data.classroomCode, scopeCode = data.schoolCode, studentId = new HashSet<string> { data.studentId } };
+                classroomStudent = new ClassroomStudent { id = data.classroomCode, scopeCode = data.schoolCode, studentId = new List<string> { data.studentId } };
             }
             else {
-                classroomStudent.studentId.UnionWith(new List<string> { data.studentId });
+                if (!classroomStudent.studentId.Contains(data.studentId))
+                {
+                    classroomStudent.studentId.Add(data.studentId);
+                }
+               // classroomStudent.studentId.UnionWith(new List<string> { data.studentId });
             }
             await azureCosmosDBRepository.SaveOrUpdate(classroomStudent);
             return builder.Data(data).build();
@@ -106,14 +110,18 @@ namespace TEAMModelOS.Controllers.Syllabus
                     ClassroomStudent classroomStudent = await azureCosmosDBRepository.FindById<ClassroomStudent>(classroom.Key);
                     if (classroomStudent == null)
                     {
-                        classroomStudent = new ClassroomStudent { id = classroom.Key,studentId= new HashSet<string>()};
+                        classroomStudent = new ClassroomStudent { id = classroom.Key,studentId= new List<string>()};
                     }
                     foreach (var classroomStudent1  in classroom)
                     {
                         classroomStudent.scopeCode = classroomStudent1.schoolCode;
-                        classroomStudent.studentId.UnionWith(new List<string> { classroomStudent1.studentId });
+                        if (!classroomStudent.studentId.Contains(classroomStudent1.studentId))
+                        {
+                            classroomStudent.studentId.Add(classroomStudent1.studentId);
+                        }
+                      //  classroomStudent.studentId.UnionWith(new List<string> { classroomStudent1.studentId });
                     }
-                    classroomStudents.AddRange(classroomStudents);
+                    classroomStudents.Add(classroomStudent);
                 }
                  await  azureCosmosDBRepository.SaveOrUpdateAll(classroomStudents);
                 builder.Data(students);
@@ -179,11 +187,14 @@ namespace TEAMModelOS.Controllers.Syllabus
             ClassroomStudent classroomStudent = await azureCosmosDBRepository.FindById<ClassroomStudent>(data.classroomCode);
             if (classroomStudent == null)
             {
-                classroomStudent = new ClassroomStudent { id = data.classroomCode, scopeCode = data.schoolCode, studentId = new HashSet<string> { data.studentId } };
+                classroomStudent = new ClassroomStudent { id = data.classroomCode, scopeCode = data.schoolCode, studentId = new List<string> { data.studentId } };
             }
             else
             {
-                classroomStudent.studentId.UnionWith(new List<string> { data.studentId });
+                if (!classroomStudent.studentId.Contains(data.studentId)) {
+                    classroomStudent.studentId.Add(data.studentId);
+                }
+               // classroomStudent.studentId.UnionWith(new List<string> { data.studentId });
             }
             await azureCosmosDBRepository.SaveOrUpdate(classroomStudent);
             return builder.Data(data).build();
@@ -217,7 +228,8 @@ namespace TEAMModelOS.Controllers.Syllabus
             ClassroomStudent classroomStudent = await azureCosmosDBRepository.FindById<ClassroomStudent>(student.classroomCode);
             if (classroomStudent != null)
             {
-                classroomStudent.studentId.ExceptWith(new List<string> { student.studentId });
+                classroomStudent.studentId.Remove(student.studentId);
+                //classroomStudent.studentId.ExceptWith(new List<string> { student.studentId });
                 await azureCosmosDBRepository.SaveOrUpdate(classroomStudent);
             }
             return builder.Data(data).build();
@@ -233,7 +245,7 @@ namespace TEAMModelOS.Controllers.Syllabus
             List<Student> students= await azureCosmosDBRepository.FindByDict<Student>(request.@params);
             await azureCosmosDBRepository.DeleteAll<Student>(students);
             ///更新学生关系表
-            List<ClassroomStudent> classroomStudents = new List<ClassroomStudent>();
+           // List<ClassroomStudent> classroomStudents = new List<ClassroomStudent>();
             foreach (var classroom in students.GroupBy(x => x.classroomCode).ToList())
             {
 
@@ -243,10 +255,11 @@ namespace TEAMModelOS.Controllers.Syllabus
                     foreach (var classroomStudent1 in classroom)
                     {
                         classroomStudent.scopeCode = classroomStudent1.schoolCode;
-                        classroomStudent.studentId.ExceptWith(new List<string> { classroomStudent1.studentId });
+                        // classroomStudent.studentId.ExceptWith(new List<string> { classroomStudent1.studentId });
+                        classroomStudent.studentId.Remove(classroomStudent1.studentId);
                     }
-                    classroomStudents.AddRange(classroomStudents);
-                    await azureCosmosDBRepository.SaveOrUpdateAll(classroomStudents);
+                 //   classroomStudents.AddRange(classroomStudents);
+                    await azureCosmosDBRepository.SaveOrUpdate(classroomStudent);
                 }
             }
             return builder.build();