浏览代码

提交课程列表信息

CrazyIter_Bin 3 年之前
父节点
当前提交
f0d59160f3

+ 6 - 6
TEAMModelOS.SDK/Models/Cosmos/Common/StuList.cs

@@ -12,7 +12,7 @@ namespace TEAMModelOS.SDK.Models.Cosmos.Common
         }
         public List<Students> students { get; set; } = new List<Students>();
         public List<string> tmids { get; set; }
-        public CourseInfo course { get; set; } = new CourseInfo();
+       // public CourseInfo course { get; set; } = new CourseInfo();
         public string name { get; set; }
     }
     public class Students
@@ -21,9 +21,9 @@ namespace TEAMModelOS.SDK.Models.Cosmos.Common
         public string code { get; set; }
         public string schoolId { get; set; }
     }
-    public class CourseInfo
-    {
-        public string id { get; set; }
-        public string code { get; set; }
-    }
+    //public class CourseInfo
+    //{
+    //    public string id { get; set; }
+    //    public string code { get; set; }
+    //}
 }

+ 98 - 4
TEAMModelOS/Controllers/School/CourseController.cs

@@ -98,6 +98,10 @@ namespace TEAMModelOS.Controllers
                             CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope, school = course.school, creatorId = course.creatorId };
                             courseChange.addClass = course.schedule.Select(x => x.classId).ToList();
                             courseChange.addList = course.schedule.Select(x => x.stulist).ToList();
+                            var messageBlob = new ServiceBusMessage(courseChange.ToJsonString()); ;
+                            messageBlob.ApplicationProperties.Add("name", "Course");
+                            var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                            await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                             course = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").CreateItemAsync(course, new PartitionKey($"Course-{code}"));
                         }
                     }
@@ -108,19 +112,93 @@ namespace TEAMModelOS.Controllers
                     {
 
                         Course odlCourse = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Course>(  course.id, new PartitionKey($"Course-{code}"));
-                        CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope, school = course.school, creatorId = course.creatorId };
+                        CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope, school = code };
                         var oldCls = odlCourse.schedule.Select(x => x.classId).ToList();
                         var oldLst = odlCourse.schedule.Select(x => x.stulist).ToList();
                         var newCls = course.schedule.Select(x => x.classId).ToList();
                         var newLst = course.schedule.Select(x => x.stulist).ToList();
-
-
+                        List<string> addCls = new List<string>();
+                        List<string> addLst = new List<string>();
+                        List<string> delCls = new List<string>();
+                        List<string> delLst = new List<string>();
+                        oldCls.ForEach(x => {
+                            if (!newCls.Contains(x)) {
+                                delCls.Add(x);
+                            }
+                        });
+                        newCls .ForEach(x => {
+                            if (!oldCls.Contains(x))
+                            {
+                                addCls.Add(x);
+                            }
+                        });
+                        oldLst.ForEach(x => {
+                            if (!newLst.Contains(x))
+                            {
+                                delLst.Add(x);
+                            }
+                        });
+                        newLst.ForEach(x => {
+                            if (!oldLst.Contains(x))
+                            {
+                                addLst.Add(x);
+                            }
+                        });
+                        courseChange.addClass = addCls;
+                        courseChange.addList = addLst;
+                        courseChange.delClass = delCls;
+                        courseChange.delList = delLst;
                         course = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReplaceItemAsync(course, course.id, new PartitionKey($"Course-{code}"));
+                        var messageBlob = new ServiceBusMessage(courseChange.ToJsonString()); ;
+                        messageBlob.ApplicationProperties.Add("name", "Course");
+                        var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                        await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                     }
                     else
                     {
-                        var odlCourse = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Course>(course.id, new PartitionKey($"Course-{code}"));
+                        Course odlCourse = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Course>(course.id, new PartitionKey($"Course-{code}"));
+                        CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope,  creatorId = code };
+                        var oldCls = odlCourse.schedule.Select(x => x.classId).ToList();
+                        var oldLst = odlCourse.schedule.Select(x => x.stulist).ToList();
+                        var newCls = course.schedule.Select(x => x.classId).ToList();
+                        var newLst = course.schedule.Select(x => x.stulist).ToList();
+                        List<string> addCls = new List<string>();
+                        List<string> addLst = new List<string>();
+                        List<string> delCls = new List<string>();
+                        List<string> delLst = new List<string>();
+                        oldCls.ForEach(x => {
+                            if (!newCls.Contains(x))
+                            {
+                                delCls.Add(x);
+                            }
+                        });
+                        newCls.ForEach(x => {
+                            if (!oldCls.Contains(x))
+                            {
+                                addCls.Add(x);
+                            }
+                        });
+                        oldLst.ForEach(x => {
+                            if (!newLst.Contains(x))
+                            {
+                                delLst.Add(x);
+                            }
+                        });
+                        newLst.ForEach(x => {
+                            if (!oldLst.Contains(x))
+                            {
+                                addLst.Add(x);
+                            }
+                        });
+                        courseChange.addClass = addCls;
+                        courseChange.addList = addLst;
+                        courseChange.delClass = delCls;
+                        courseChange.delList = delLst;
                         course = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "Teacher").ReplaceItemAsync(course, course.id, new PartitionKey($"Course-{code}"));
+                        var messageBlob = new ServiceBusMessage(courseChange.ToJsonString()); ;
+                        messageBlob.ApplicationProperties.Add("name", "Course");
+                        var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                        await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                     }
                 }
                 return Ok(new { course });
@@ -694,10 +772,26 @@ namespace TEAMModelOS.Controllers
                 var client = _azureCosmos.GetCosmosClient();
                 if (scope.ToString().Equals("school"))
                 {
+                    Course course= await client.GetContainer("TEAMModelOS", "School").ReadItemAsync<Course>(id.ToString(), new PartitionKey($"Course-{code}"));
+                    CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope, school = course.school, creatorId = course.creatorId };
+                    courseChange.delClass = course.schedule.Select(x => x.classId).ToList();
+                    courseChange.delList = course.schedule.Select(x => x.stulist).ToList();
+                    var messageBlob = new ServiceBusMessage(courseChange.ToJsonString()); ;
+                    messageBlob.ApplicationProperties.Add("name", "Course");
+                    var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                    await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                     await client.GetContainer("TEAMModelOS", "School").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"Course-{code}"));
                 }
                 else
                 {
+                    Course course = await client.GetContainer("TEAMModelOS", "Teacher").ReadItemAsync<Course>(id.ToString(), new PartitionKey($"Course-{code}"));
+                    CourseChange courseChange = new CourseChange { id = course.id, code = course.code, name = course.name, scope = course.scope, school = course.school, creatorId = course.creatorId };
+                    courseChange.delClass = course.schedule.Select(x => x.classId).ToList();
+                    courseChange.delList = course.schedule.Select(x => x.stulist).ToList();
+                    var messageBlob = new ServiceBusMessage(courseChange.ToJsonString()); ;
+                    messageBlob.ApplicationProperties.Add("name", "Course");
+                    var ActiveTask = _configuration.GetValue<string>("Azure:ServiceBus:ActiveTask");
+                    await _serviceBus.GetServiceBusClient().SendMessageAsync(ActiveTask, messageBlob);
                     await client.GetContainer("TEAMModelOS", "Teacher").DeleteItemStreamAsync(id.ToString(), new PartitionKey($"Course-{code}"));
                 }
                 return Ok(new { id });

+ 26 - 1
TEAMModelOS/Controllers/School/StudentCommonController.cs

@@ -10,6 +10,7 @@ using System.Threading.Tasks;
 using TEAMModelOS.Filter;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
+using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.Services.Common;
@@ -98,12 +99,36 @@ namespace TEAMModelOS.Controllers
                   PartitionKey = $"StuCourse-{school}-{id}";
             }
             List<StuCourse> stus = new List<StuCourse>();
+            List<CourseDto> sc = new List<CourseDto>();
             await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", containerId).GetItemQueryIterator<StuCourse>(queryText: $"select value(c) from c ",
               requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey(PartitionKey) }))
             {
                 stus.Add(item);
             }
-            return Ok(new { course=stus });
+            foreach (var cos in stus) {
+                if (cos.scope == "school")
+                {
+                    Course course;
+                    try {
+                        course = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS", "School").ReadItemAsync<Course>(cos.id, new Azure.Cosmos.PartitionKey(cos.scode));
+                    } catch (CosmosException ex) { course = null; }
+                    sc.Add( new CourseDto { course=course,stuCourse=cos}  );
+                }
+                else {
+                    Course course ;
+                    try
+                    {
+                        course = await _azureCosmos.GetCosmosClient().GetContainer("TEAMModelOS","Teacher").ReadItemAsync<Course>(cos.id, new Azure.Cosmos.PartitionKey(cos.scode));
+                    }
+                    catch (CosmosException ex) { course = null; }
+                    sc.Add(new CourseDto { course = course, stuCourse = cos });
+                }
+            }
+            return Ok(new { courses=sc });
         }
     }
+    public class CourseDto { 
+        public StuCourse stuCourse { get; set; }
+        public Course course { get; set; }
+    }
 }