CrazyIter_Bin 1 سال پیش
والد
کامیت
765577101d

+ 20 - 0
TEAMModelOS.SDK/Models/Cosmos/School/CourseBase.cs

@@ -425,4 +425,24 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string teacherIdChanged { get; set; }
     }
+    public class CourseStudentDto
+    {
+        public CourseBase courseBase { get; set; }
+        public List<CourseTask> courseTasks { get; set; } = new List<CourseTask>();
+
+    }
+    public class CourseDto
+    {
+        public CourseBase courseBase { get; set; }
+        public List<CourseTaskDto> courseTasks { get; set; } = new List<CourseTaskDto>();
+
+    }
+    public class CourseTaskDto
+    {
+        public CourseTask courseTask { get; set; }
+        /// <summary>
+        /// teacher主任课教师,assistant,协同教师
+        /// </summary>
+        public string type { get; set; }
+    }
 }

+ 206 - 0
TEAMModelOS.SDK/Models/Service/GroupListService.cs

@@ -23,6 +23,212 @@ namespace TEAMModelOS.SDK
     public class GroupListService
     {
 
+        /// <summary>
+        /// 根据教师id获取执教的名单及协同身份的名单
+        /// </summary>
+        /// <param name="_coreAPIHttpService"></param>
+        /// <param name="client"></param>
+        /// <param name="_dingDing"></param>
+        /// <param name="tmdid"></param>
+        /// <param name="school"> 可选,不填则只获取个人课程的名单</param>
+        /// <param name="periodId">school,传递,则 periodId必传 </param>
+        /// <param name="time"> 时间,以便于获取某一学期的数据</param>
+        /// <returns></returns>
+        public static async Task<List<CourseGroupList>> GetTeacherTeachGroupList(CoreAPIHttpService _coreAPIHttpService, CosmosClient client, DingDing _dingDing, string tmdid, string school, string periodId,  long time = -1)
+        {
+            string sql = $"SELECT distinct value c FROM c  join b in c.schedules where c.pk='CourseTask' and (ARRAY_CONTAINS(b.assistants,'{tmdid}')or  b.teacherId  ='{tmdid}' )";
+            List<KeyValuePair<string, CourseTask>> schoolTeacherTask = new List<KeyValuePair<string, CourseTask>>();
+            List<KeyValuePair<string, CourseTask>> schoolAssistantTask = new List<KeyValuePair<string, CourseTask>>();
+
+            List<KeyValuePair<string, CourseTask>> privateTeacherTask = new List<KeyValuePair<string, CourseTask>>();
+            List<KeyValuePair<string, CourseTask>> privateAssistantTask = new List<KeyValuePair<string, CourseTask>>();
+            List<CourseDto> schoolCourses = new List<CourseDto>();
+            List<CourseDto> teahcerCourses = new List<CourseDto>();
+            List<string> groupIds = new List<string>();
+            if (!string.IsNullOrWhiteSpace(school)   && !string.IsNullOrWhiteSpace(periodId)) 
+            {
+              
+                School schoolBase = await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
+                var data =  SchoolService.GetSemester(schoolBase.period.Find(x => x.id.Equals(periodId)), time);
+                sql = $"{sql} and  c.year={data.studyYear} and c.semesterId='{data.currSemester.id}'";
+                HashSet<string> courseIds = new HashSet<string>();
+                var resultSchool = await client.GetContainer(Constant.TEAMModelOS, Constant.School).GetList<CourseTask>(sql, $"CourseTask-{school}");
+                if (resultSchool.list.IsNotEmpty())
+                {
+                    resultSchool.list.ForEach(x => {
+                        var schedulesTeacher = x.schedules.Where(z => !string.IsNullOrWhiteSpace(z.teacherId)   && z.teacherId.Equals(tmdid));
+                        if (schedulesTeacher.Any())
+                        {
+                            courseIds.Add(x.courseId);
+                            CourseTask courseTask = x.ToJsonString().ToObject<CourseTask>();
+                            courseTask.schedules=schedulesTeacher.ToList();
+                            schoolTeacherTask.Add(new KeyValuePair<string, CourseTask>(x.courseId, courseTask));
+                            groupIds.AddRange(schedulesTeacher.Where(z => !string.IsNullOrWhiteSpace(z.groupId)).Select(x => x.groupId));
+                        }
+                        var schedulesAssistant = x.schedules.Where(z => z.assistants.Contains(tmdid));
+                        if (schedulesAssistant.Any())
+                        {
+                            courseIds.Add(x.courseId);
+                            CourseTask courseTask = x.ToJsonString().ToObject<CourseTask>();
+                            courseTask.schedules=schedulesAssistant.ToList();
+                            schoolAssistantTask.Add(new KeyValuePair<string, CourseTask>(x.courseId, courseTask));
+                            groupIds.AddRange(schedulesAssistant.Where(z => !string.IsNullOrWhiteSpace(z.groupId)).Select(x => x.groupId));
+                        }
+                    });
+                }
+                if (courseIds.Any())
+                {
+                    string sqlCourse = $"select value c from c where c.id in ({string.Join(",", courseIds.Select(b => $"'{b}'"))})";
+                    var result = await client.GetContainer(Constant.TEAMModelOS, Constant.School).GetList<CourseBase>(sqlCourse, $"CourseBase-{school}");
+                    if (result.list.IsNotEmpty())
+                    {
+                        foreach (var item in result.list)
+                        {
+                            List<CourseTaskDto> courseTaskDtos = new List<CourseTaskDto>();
+                            var teacher = schoolTeacherTask.Where(x => x.Key.Equals(item.id)).Select(z => new CourseTaskDto { courseTask=z.Value, type="teacher" });
+                            if (teacher.Any())
+                            {
+                                courseTaskDtos.AddRange(teacher.ToList());
+                            }
+                            var assistant = schoolAssistantTask.Where(x => x.Key.Equals(item.id)).Select(z => new CourseTaskDto { courseTask=z.Value, type="assistant" });
+                            if (assistant.Any())
+                            {
+                                courseTaskDtos.AddRange(assistant.ToList());
+                            }
+                            schoolCourses.Add(new CourseDto { courseBase=item, courseTasks=courseTaskDtos });
+                        }
+                    }
+                }
+            }
+
+            {
+                HashSet<string> courseIds = new HashSet<string>();
+                string sqlCoursePrivate = $"select value c.id from c where  c.creatorId='{tmdid}'";
+                var resultCourseBasePrivate = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<string>(sqlCoursePrivate, $"CourseBase");
+                if (resultCourseBasePrivate.list.IsNotEmpty())
+                {
+                    courseIds=new HashSet<string>(resultCourseBasePrivate.list);
+                }
+                string sqlprivate = $"SELECT distinct value c FROM c  join b in c.schedules where c.pk='CourseTask' and (ARRAY_CONTAINS(b.assistants,'{tmdid}')or  b.teacherId  ='{tmdid}' )";
+                var resultTeacher = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<CourseTask>(sqlprivate, $"CourseTask");
+                if (resultTeacher.list.IsNotEmpty())
+                {
+
+                    resultTeacher.list.ForEach(x => {
+                        var schedulesTeacher = x.schedules.Where(z => !string.IsNullOrWhiteSpace(z.teacherId)  &&  z.teacherId.Equals(tmdid));
+                        if (schedulesTeacher.Any())
+                        {
+                            courseIds.Add(x.courseId);
+                            CourseTask courseTask = x.ToJsonString().ToObject<CourseTask>();
+                            courseTask.schedules=schedulesTeacher.ToList();
+                            privateTeacherTask.Add(new KeyValuePair<string, CourseTask>(x.courseId, courseTask));
+                            groupIds.AddRange(schedulesTeacher.Where(z => !string.IsNullOrWhiteSpace(z.groupId)).Select(x => x.groupId));
+                        }
+                        var schedulesAssistant = x.schedules.Where(z => z.assistants.Contains(tmdid));
+                        if (schedulesAssistant.Any())
+                        {
+                            courseIds.Add(x.courseId);
+                            CourseTask courseTask = x.ToJsonString().ToObject<CourseTask>();
+                            courseTask.schedules=schedulesAssistant.ToList();
+                            privateAssistantTask.Add(new KeyValuePair<string, CourseTask>(x.courseId, courseTask));
+                            groupIds.AddRange(schedulesAssistant.Where(z => !string.IsNullOrWhiteSpace(z.groupId)).Select(x => x.groupId));
+                        }
+                    });
+
+                }
+                if (courseIds.Any())
+                {
+                    string sqlCourse = $"select value c from c where    c.id in ({string.Join(",", courseIds.Select(b => $"'{b}'"))})";
+                    var result = await client.GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<CourseBase>(sqlCourse, $"CourseBase");
+                    if (result.list.IsNotEmpty())
+                    {
+                        foreach (var item in result.list)
+
+                        {
+                            List<CourseTaskDto> courseTaskDtos = new List<CourseTaskDto>();
+                            var teacher = privateTeacherTask.Where(x => x.Key.Equals(item.id)).Select(z => new CourseTaskDto { courseTask=z.Value, type="teacher" });
+                            if (teacher.Any())
+                            {
+                                courseTaskDtos.AddRange(teacher.ToList());
+                            }
+                            var assistant = privateAssistantTask.Where(x => x.Key.Equals(item.id)).Select(z => new CourseTaskDto { courseTask=z.Value, type="assistant" });
+                            if (assistant.Any())
+                            {
+                                courseTaskDtos.AddRange(assistant.ToList());
+                            }
+                            teahcerCourses.Add(new CourseDto { courseBase=item, courseTasks=courseTaskDtos });
+                        }
+                    }
+                }
+                List<CourseGroupList> courseGroupLists = new List<CourseGroupList>();
+                _coreAPIHttpService.check=false;
+                var groupListDatas = await GroupListService.GetMemberByListids(_coreAPIHttpService, client, _dingDing, groupIds.ToHashSet().ToList(), school);
+
+                foreach (var z in teahcerCourses)
+                {
+                    CourseGroupList courseGroupList = new CourseGroupList
+                    {
+                        scope="private",
+                        id=z.courseBase.id,
+                        name=z.courseBase.name,
+                        periodId=z.courseBase.period?.id,
+                        period=z.courseBase.period?.name,
+                        subject=z.courseBase.subject?.name,
+                        subjectId= z.courseBase.subject?.id
+                    };
+                    foreach (var x in z.courseTasks)
+                    {
+                        foreach (var y in x.courseTask.schedules)
+                        {
+                            var data = groupListDatas.groups.Find(m => m.id.Equals(y.groupId));
+                            if (data!= null)
+                            {
+                                HashSet<string> groupName = data.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                GroupListGrp groupListGrp = new GroupListGrp(data, groupName);
+                                groupListGrp.teachType=x.type;
+                                courseGroupList.groups.Add(groupListGrp);
+                            }
+                        }
+                    }
+                    courseGroupLists.Add(courseGroupList);
+                }
+                foreach (var z in schoolCourses)
+                {
+                    CourseGroupList courseGroupList = new CourseGroupList
+                    {
+                        scope="school",
+                        id=z.courseBase.id,
+                        name=z.courseBase.name,
+                        periodId=z.courseBase.period?.id,
+                        period=z.courseBase.period?.name,
+                        subject=z.courseBase.subject?.name,
+                        subjectId= z.courseBase.subject?.id
+                    };
+                    foreach (var x in z.courseTasks)
+                    {
+                        foreach (var y in x.courseTask.schedules)
+                        {
+                            var data = groupListDatas.groups.Find(m => m.id.Equals(y.groupId));
+                            if (data!= null)
+                            {
+                                HashSet<string> groupName = data.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                GroupListGrp groupListGrp = new GroupListGrp(data, groupName);
+                                groupListGrp.teachType=x.type;
+                                courseGroupList.groups.Add(groupListGrp);
+                            }
+                        }
+                    }
+                    courseGroupLists.Add(courseGroupList);
+                }
+                long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+                foreach (var groups in courseGroupLists)
+                {
+                    groups.groups.RemoveAll(z => z.expire>0 && z.expire<now);
+                }
+
+                return courseGroupLists;
+            }
+        }
 
         public static async Task DeleteGrouplistEvent(string  id , string code,string  tbname ,CosmosClient client, IConfiguration _configuration, AzureServiceBusFactory _serviceBus)
         {

+ 3 - 20
TEAMModelOS/Controllers/Both/CourseBaseController.cs

@@ -58,7 +58,7 @@ namespace TEAMModelOS.Controllers.Both
         /// <param name="request"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [AuthToken(Roles = "teacher,admin")]
+        [AuthToken(Roles = "teacher,admin",Permissions = "course-upd,course-read")]
         [HttpPost("manage")]
 #if !DEBUG
         [Authorize(Roles = "IES")]
@@ -2096,7 +2096,7 @@ namespace TEAMModelOS.Controllers.Both
         /// <param name="request"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [AuthToken(Roles = "teacher,admin")]
+        [AuthToken(Roles = "teacher,admin", Permissions = "course-upd,course-read")]
         [HttpPost("teacher")]
  
         [Authorize(Roles = "IES")]
@@ -3046,22 +3046,5 @@ namespace TEAMModelOS.Controllers.Both
 
 
     }
-    public class CourseStudentDto
-    {
-        public CourseBase courseBase { get; set; }
-        public List<CourseTask> courseTasks { get; set; } = new List<CourseTask>();
-
-    }
-    public class CourseDto { 
-        public CourseBase courseBase { get; set; }
-        public List<CourseTaskDto> courseTasks { get; set; } = new List<CourseTaskDto>();
-      
-    }
-    public class CourseTaskDto {
-        public CourseTask courseTask { get; set; }
-        /// <summary>
-        /// teacher主任课教师,assistant,协同教师
-        /// </summary>
-        public string type { get; set; }
-    }
+    
 }