|
@@ -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)
|
|
|
{
|