|
@@ -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();
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
}
|