CrazyIter_Bin 1 year ago
parent
commit
a243cf8c76

+ 29 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs

@@ -284,7 +284,36 @@ namespace TEAMModelOS.SDK.Models
             this.review=groupList.review;
             this.limitCount = groupList.limitCount;
             this.grades = groupList.grades;
+
+        }
+        public GroupListGrp(RGroupList groupList, HashSet<string> groupName)
+        {
+            this.id = groupList.id;
+            this.code = groupList.code;
+            this.periodId = groupList.periodId;
+            this.pk = groupList.pk;
+            this.name = groupList.name;
+            this.school = groupList.school;
+            this.creatorId = groupList.creatorId;
+            this.no = groupList.no;
+            this.scope = groupList.scope;
+            this.type = groupList.type;
+            this.scount = groupList.scount;
+            this.tcount = groupList.tcount;
+            this.leader = groupList.leader;
+            this.year = groupList.year;
+            this.expire = groupList.expire;
+            this.groupName = groupName;
+            this.froms = groupList.froms;
+            this.joinLock = groupList.joinLock;
+            this.qrcodeExpire = groupList.qrcodeExpire;
+            this.qrcodeDays = groupList.qrcodeDays;
+            this.review=groupList.review;
+            this.limitCount = groupList.limitCount;
+            this.grades = groupList.grades;
+
         }
+        public string teachType { get; set; }
         public string pk { get; set; }
         public string id { get; set; }
         public string code { get; set; }

+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/School/CourseBase.cs

@@ -289,7 +289,7 @@ namespace TEAMModelOS.SDK.Models
         /// 开学日期
         /// 必填,开学(开课)日期格式,用于计算学年,学期,课表周期,此日期需要大于或等于学校基础信息设置的开学日期: 2023-3-2(年-月-日)
         /// </summary>
-        public string stime { get; set; }
+        //public string stime { get; set; }
 
         /// <summary>
         /// 课程名称 必填,导入课程的名称,需要与课程列表名称匹配才能导入

+ 6 - 1
TEAMModelOS/Controllers/Both/CourseBaseController.cs

@@ -1680,7 +1680,8 @@ namespace TEAMModelOS.Controllers.Both
                                     var courseBase = courseBases.Find(z => z.id.Equals(item.courseId));
                                     item.schedules.ForEach(z =>
                                     {
-                                        CourseCheckImport courseCheckImport = new CourseCheckImport { name=courseBase?.name, stime=date, grade=courseBase.grade, courseNo=courseBase.no };
+                                        //CourseCheckImport courseCheckImport = new CourseCheckImport { name=courseBase?.name, stime=date, grade=courseBase.grade, courseNo=courseBase.no };
+                                        CourseCheckImport courseCheckImport = new CourseCheckImport { name=courseBase?.name,  grade=courseBase.grade, courseNo=courseBase.no };
                                         if (z.type.Equals("class") &&!string.IsNullOrWhiteSpace(z.groupId))
                                         {
                                             var clazz = classes.Find(x => x.id.Equals(z.groupId));
@@ -2124,6 +2125,9 @@ namespace TEAMModelOS.Controllers.Both
             return Ok();
         }
 
+
+
+
         /// <summary>
         /// 教师任教的课程
         /// </summary>
@@ -2308,6 +2312,7 @@ namespace TEAMModelOS.Controllers.Both
                 }
                 return Ok(new { teacherCourseDtos, schoolCourseDtos });
             } catch (Exception ex ){ return Ok($"{ex.Message},{ex.StackTrace}"); }
+
         }
     }
     public class CourseStudentDto

+ 284 - 15
TEAMModelOS/Controllers/Both/GroupListController.cs

@@ -28,6 +28,8 @@ using Microsoft.AspNetCore.Hosting;
 using Azure.Core;
 using static TEAMModelOS.SDK.Services.ActivityStudentService;
 using static TEAMModelOS.SDK.GroupListService;
+using TEAMModelOS.Controllers.Both;
+using CourseDto = TEAMModelOS.Controllers.Both.CourseDto;
 
 namespace TEAMModelOS.Controllers
 {
@@ -303,7 +305,7 @@ namespace TEAMModelOS.Controllers
         /// <param name="json"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
-        [HttpPost("get-activity-grouplist")]
+        [HttpPost("activity-grouplist")]
 #if !DEBUG
         [AuthToken(Roles = "teacher,admin,student")]
         [Authorize(Roles = "IES")]
@@ -534,6 +536,286 @@ namespace TEAMModelOS.Controllers
             return Ok(new { error = 1, msg = "参数异常" });
         }
 
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        [AuthToken(Roles = "teacher,admin")]
+        [HttpPost("get-activity-grouplist")]
+#if !DEBUG
+        [Authorize(Roles = "IES")]
+#endif
+        public async Task<IActionResult> ActivityGrouplist(JsonElement json)
+        {
+            (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
+            var client = _azureCosmos.GetCosmosClient();
+            if (!json.TryGetProperty("opt", out JsonElement opt)) { return BadRequest(); }
+            json.TryGetProperty("periodId", out JsonElement periodId);
+            long nowtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
+           
+            switch (true)
+            {
+                //我管理的
+                case bool when $"{opt}".Equals("manage", StringComparison.OrdinalIgnoreCase):
+                    {
+                        List<GroupListGrp> groupLists = new List<GroupListGrp>();
+                        //包含,学校的行政班,教学班
+                        json.TryGetProperty("type", out JsonElement _type);
+                        List<string> types = null;
+                        if (_type.ValueKind.Equals(JsonValueKind.Array))
+                        {
+                            types = _type.ToObject<List<string>>();
+                        }
+                        else if (_type.ValueKind.Equals(JsonValueKind.String))
+                        {
+                            types = new List<string> { $"{_type}" };
+                        }
+                        if (types.IsEmpty() || types.Contains("class"))
+                        {
+                            StringBuilder classsql = new StringBuilder($"SELECT c.id,c.name,c.periodId ,c.year,c.no  FROM c where  ( c.graduate = 0 or  IS_DEFINED(c.graduate) = false )");
+                            if (!string.IsNullOrEmpty($"{periodId}"))
+                            {
+                                classsql.Append($" and  c.periodId='{periodId}' ");
+                            }
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryIterator<ClassInfo>(queryText: classsql.ToString(),
+                                requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"Class-{school}") }))
+                            {
+                                int scount = 0;
+                                HashSet<string> groupNames = new HashSet<string>();
+                                string gpsql = $"SELECT distinct c.id,  c.groupId,c.groupName FROM c where  c.classId='{item.id}' ";
+                                await foreach (var gp in client.GetContainer(Constant.TEAMModelOS, "Student").GetItemQueryIterator<Student>(queryText: gpsql,
+                                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Base-{school}") }))
+                                {
+                                    if (!string.IsNullOrWhiteSpace(gp.groupName))
+                                    {
+                                        groupNames.Add(gp.groupName);
+                                    }
+                                    scount += 1;
+                                }
+                                ///行政班(学生搜寻classId动态返回)class
+                                GroupListGrp group = new GroupListGrp
+                                {
+                                    id = item.id,
+                                    code = $"GroupList-{school}",
+                                    name = item.name,
+                                    periodId = item.periodId,
+                                    scope = "school",
+                                    school = $"{school}",
+                                    type = "class",
+                                    year = item.year,
+                                    expire=0,
+                                    groupName = groupNames,
+                                    scount= scount
+                                };
+                                groupLists.Add(group);
+                            }
+                        }
+
+                        if (types.IsEmpty() || types.Contains("teach"))
+                        {
+                            //教学班
+                            StringBuilder teachsql = new StringBuilder($" SELECT distinct value(c) FROM c  where c.type='teach'  and   ( c.expire = 0 or  IS_DEFINED(c.expire) = false or c.expire >={nowtime} ) ");
+                            if (!string.IsNullOrEmpty($"{periodId}"))
+                            {
+                                teachsql.Append($" and c.periodId='{periodId}'");
+                            }
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
+                                GetItemQueryIterator<GroupList>(queryText: teachsql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{school}") }))
+                            {
+                                HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                groupLists.Add(new GroupListGrp(item, groupName));
+                            }
+                        }
+
+                        if (types.IsEmpty() || types.Contains("research"))
+                        {
+                            //教研组
+                            StringBuilder researchsql = new StringBuilder($"SELECT distinct value(c) FROM c   where c.type='research'");
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
+                                GetItemQueryIterator<GroupList>(queryText: researchsql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{school}") }))
+                            {
+                                HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                groupLists.Add(new GroupListGrp(item, groupName));
+                            }
+                        }
+
+                        if (types.IsEmpty() || types.Contains("yxtrain"))
+                        {
+                            //研修名单
+                            StringBuilder yxtrainsql = new StringBuilder($"SELECT distinct value(c) FROM c    where c.type='yxtrain'");
+                            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "School").
+                                GetItemQueryIterator<GroupList>(queryText: yxtrainsql.ToString(), requestOptions: new QueryRequestOptions() { PartitionKey = new PartitionKey($"GroupList-{school}") }))
+                            {
+                                HashSet<string> groupName = item.members.Where(x => !string.IsNullOrEmpty(x.groupName)).Select(y => y.groupName).ToHashSet();
+                                groupLists.Add(new GroupListGrp(item, groupName));
+                            }
+                        }
+                        return Ok(new { groupLists });
+                    }
+                case bool when $"{opt}".Equals("teach", StringComparison.OrdinalIgnoreCase):
+                    {
+                        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)) 
+                        {
+                            School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
+                            JsonElement _year = default, _semesterId = default, _periodId = default;
+                            if (!json.TryGetProperty("periodId", out _periodId)) return BadRequest();
+                            if (!json.TryGetProperty("year", out _year))
+                            {
+                                return BadRequest();
+                            }
+                            if (!json.TryGetProperty("semesterId", out _semesterId))
+                            {
+                                return BadRequest();
+                            }
+                            var period = schoolBase.period.Find(x => x.id.Equals($"{_periodId}"));
+                            //string date = SchoolService.GetOpensByStudyYearAndSemester(period.semesters, int.Parse($"{_year}"), $"{_semesterId}");
+                            sql = $"{sql} and  c.year={_year} and c.semesterId='{_semesterId}'";
+                            HashSet<string> courseIds = new HashSet<string>();
+                            var resultSchool= await _azureCosmos.GetCosmosClient().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 _azureCosmos.GetCosmosClient().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 _azureCosmos.GetCosmosClient().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 _azureCosmos.GetCosmosClient().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.creatorId='{tmdid}' and  c.id in ({string.Join(",", courseIds.Select(b => $"'{b}'"))})";
+                                var result = await _azureCosmos.GetCosmosClient().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>();
+
+                            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) {
+                                   var groupListDatas =  await GroupListService.GetMemberByListids(_coreAPIHttpService,_azureCosmos.GetCosmosClient(),_dingDing, x.courseTask.schedules.Select(v => v.groupId).ToList(),school) ;
+                                    foreach (var data in groupListDatas.groups) {
+                                        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);
+                                    }
+                                }
+                            }
+                            return Ok(new { groupLists = courseGroupLists });
+                        }
+                    }
+            }
+            return Ok();
+        }
         /// <summary>
         /// 根据任意名单id获取成员信息。
         /// </summary>
@@ -1328,19 +1610,6 @@ namespace TEAMModelOS.Controllers
         }
 
 
-        /// <summary>
-        /// 教师任教的课程
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [ProducesDefaultResponseType]
-        [AuthToken(Roles = "teacher,admin")]
-        [HttpPost("activity-grouplist")]
-#if !DEBUG
-        [Authorize(Roles = "IES")]
-#endif
-        public async Task<IActionResult> ActivityGrouplist(JsonElement request) {
-            return Ok();
-        }
+      
     }
 }