|
@@ -68,7 +68,7 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
public async Task<IActionResult> upsert(JsonElement request)
|
|
|
{
|
|
|
try {
|
|
|
- (string id, _, _, string school) = HttpContext.GetAuthTokenInfo();
|
|
|
+ (string tmdid, _, _, string school) = HttpContext.GetAuthTokenInfo();
|
|
|
if (!request.TryGetProperty("grant_type", out JsonElement grant_type)) return BadRequest();
|
|
|
if (!request.TryGetProperty("scope", out JsonElement scope)) return BadRequest();
|
|
|
var client = _azureCosmos.GetCosmosClient();
|
|
@@ -130,13 +130,13 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
if (courseBase.scope.Equals("school", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
courseBase.school = school;
|
|
|
- courseBase.creatorId = id;
|
|
|
+ courseBase.creatorId = tmdid;
|
|
|
courseBase.code = $"CourseBase-{school}";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- courseBase.creatorId = id;
|
|
|
- courseBase.code = $"CourseBase-{id}";
|
|
|
+ courseBase.creatorId = tmdid;
|
|
|
+ courseBase.code = $"CourseBase-{tmdid}";
|
|
|
}
|
|
|
await client.GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(courseBase, new PartitionKey(courseBase.code));
|
|
|
return Ok(new { course = courseBase });
|
|
@@ -211,7 +211,7 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- string taskCode = $"CourseTask-{id}";
|
|
|
+ string taskCode = $"CourseTask-{tmdid}";
|
|
|
string taskId = $"{_courseId}";
|
|
|
Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(taskId, new PartitionKey(taskCode));
|
|
|
CourseTask courseTask = default;
|
|
@@ -222,15 +222,16 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
return Ok(new { courseTask });
|
|
|
}
|
|
|
}
|
|
|
- case bool when $"{grant_type}".Equals("insert-task", StringComparison.OrdinalIgnoreCase) :
|
|
|
+ case bool when $"{grant_type}".Equals("insert-scheduleTask", StringComparison.OrdinalIgnoreCase)
|
|
|
+ || $"{grant_type}".Equals("change-scheduleTask", StringComparison.OrdinalIgnoreCase)
|
|
|
+ || $"{grant_type}".Equals("delete-scheduleTask", StringComparison.OrdinalIgnoreCase):
|
|
|
{
|
|
|
if ( !request.TryGetProperty("scope", out JsonElement _scope)|| !request.TryGetProperty("datas", out JsonElement _datas))
|
|
|
{
|
|
|
return BadRequest();
|
|
|
}
|
|
|
-
|
|
|
string tbname = $"{_scope}".Equals("school", StringComparison.OrdinalIgnoreCase) ? Constant.School : Constant.Teacher;
|
|
|
- List<CourseTaskInsert> datas = _datas.ToObject<List<CourseTaskInsert>>();
|
|
|
+ List<CourseTaskChanged> datas = _datas.ToObject<List<CourseTaskChanged>>();
|
|
|
if (_scope.ToString().Equals("school", StringComparison.OrdinalIgnoreCase))
|
|
|
{
|
|
|
if (!request.TryGetProperty("periodId", out JsonElement _periodId)) return BadRequest();
|
|
@@ -272,10 +273,10 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
|
|
|
var period = schoolBase.period.Find(x => x.id.Equals($"{_periodId}"));
|
|
|
HashSet<CourseTask> courseTasks = new HashSet<CourseTask>();
|
|
|
- List<CourseTaskInsert> invalidCourseTaskInsert= new List<CourseTaskInsert>();
|
|
|
+ List<CourseTaskChanged> invalidCourseTaskInsert= new List<CourseTaskChanged>();
|
|
|
foreach (var data in datas)
|
|
|
{
|
|
|
- var courseTaskInsert = SchoolService.CheckCourseTaskInsert(data, schoolBase, period, courseBases, groupListDtos, rooms, schoolTeachers);
|
|
|
+ var courseTaskInsert = SchoolService.CheckCourseTaskInsertOrChanged($"{grant_type}", scope.ToString(),data, school, period, courseBases, groupListDtos, rooms, schoolTeachers,null);
|
|
|
if (courseTaskInsert.invalidCode == 0)
|
|
|
{
|
|
|
string taskCode = $"CourseTask-{school}";
|
|
@@ -287,7 +288,6 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
if (response.Status == 200)
|
|
|
{
|
|
|
courseTask = JsonDocument.Parse(response.Content).RootElement.ToObject<CourseTask>();
|
|
|
-
|
|
|
}
|
|
|
else
|
|
|
{
|
|
@@ -307,7 +307,8 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
teacherId = courseTaskInsert.teacherId,
|
|
|
notice=courseTaskInsert.notice,
|
|
|
startTime = courseTaskInsert.startTime,
|
|
|
- times= new List<ScheduleTime>()
|
|
|
+ times= new List<ScheduleTime>(),
|
|
|
+ school=school,
|
|
|
} }
|
|
|
};
|
|
|
}
|
|
@@ -315,31 +316,175 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
var scheduleTask = courseTask.schedules.Find(z => z.type.Equals(courseTaskInsert.type) && z.groupId.Equals(courseTaskInsert.groupId) && z.teacherId.Equals(courseTaskInsert.teacherId));
|
|
|
if (scheduleTask == null)
|
|
|
{
|
|
|
- courseTask.schedules.Add(new ScheduleTask()
|
|
|
+ scheduleTask = new ScheduleTask()
|
|
|
{
|
|
|
roomId = courseTaskInsert.roomId,
|
|
|
groupId = courseTaskInsert.groupId,
|
|
|
type = courseTaskInsert.type,
|
|
|
teacherId = courseTaskInsert.teacherId,
|
|
|
- times = new List<ScheduleTime>()
|
|
|
- });
|
|
|
+ times = new List<ScheduleTime>(),
|
|
|
+ school = school,
|
|
|
+ };
|
|
|
+ courseTask.schedules.Add(scheduleTask);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
scheduleTask.roomId = courseTaskInsert.roomId;
|
|
|
+ scheduleTask.school=school;
|
|
|
+ }
|
|
|
+ //修改教师或名单
|
|
|
+ if (grant_type.ToString().Equals("change-scheduleTask", StringComparison.OrdinalIgnoreCase)) {
|
|
|
+ if (!string.IsNullOrWhiteSpace(courseTaskInsert.teacherIdChanged)) {
|
|
|
+ scheduleTask.teacherId = courseTaskInsert.teacherIdChanged;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(courseTaskInsert.typeChanged) && !string.IsNullOrWhiteSpace(courseTaskInsert.groupIdChanged)) {
|
|
|
+ scheduleTask.groupId = courseTaskInsert.groupIdChanged;
|
|
|
+ scheduleTask.type = courseTaskInsert.typeChanged;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //删除教师及名单的排课信息
|
|
|
+ if (grant_type.ToString().Equals("delete-scheduleTask", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ courseTask.schedules.Remove(scheduleTask);
|
|
|
+ }
|
|
|
+ //如果被删除完了,就删除该条记录。
|
|
|
+ if (courseTask.schedules.Count <= 0)
|
|
|
+ {
|
|
|
+ courseTasks.Remove(courseTask);
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).DeleteItemStreamAsync(courseTask.id, new PartitionKey(courseTask.code));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(courseTask, new PartitionKey(taskCode));
|
|
|
}
|
|
|
- courseTasks.Add(courseTask);
|
|
|
- await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(courseTask, new PartitionKey(taskCode));
|
|
|
}
|
|
|
else {
|
|
|
invalidCourseTaskInsert.Add(courseTaskInsert);
|
|
|
}
|
|
|
- return Ok(new { invalidCourseTaskInsert, courseTasks });
|
|
|
}
|
|
|
+ return Ok(new { invalidCourseTaskInsert, courseTasks });
|
|
|
}
|
|
|
- else {
|
|
|
+ else {
|
|
|
+ //获取相关的名单
|
|
|
+ List<GroupListDto> groupListDtos = await GroupListService.GetGroupListByListids(client, _dingDing, datas.Select(z => z.groupId).ToHashSet().ToList(), school);
|
|
|
+ //获取相关的教室
|
|
|
+ var roomIds = datas.Where(x => !string.IsNullOrWhiteSpace(x.roomId)).Select(c => $"'{c.roomId}'");
|
|
|
+ List<Room> rooms = new List<Room>();
|
|
|
+ if (roomIds.Any() && !string.IsNullOrWhiteSpace(school))
|
|
|
+ {
|
|
|
+ string sqlRoom = $"select value c from c where c.id in ({string.Join(",", roomIds)})";
|
|
|
+ var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<Room>(sqlRoom, $"Room-{school}");
|
|
|
+ if (result.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ rooms.AddRange(result.list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取教师
|
|
|
+ List<Teacher> teachers = new List<Teacher>();
|
|
|
+ var teacherIds = datas.Where(x => !string.IsNullOrWhiteSpace(x.teacherId)).Select(c => $"'{c.teacherId}'");
|
|
|
+ if (teacherIds.Any())
|
|
|
+ {
|
|
|
+ string sqlTeacher = $"select value c from c where c.id in ({string.Join(",", teacherIds)}) ";
|
|
|
+ var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<Teacher>(sqlTeacher, $"Base");
|
|
|
+ if (result.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ teachers.AddRange(result.list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //获取课程
|
|
|
+ List<CourseBase> courseBases = new List<CourseBase>();
|
|
|
+ var courseIds = datas.Where(x => !string.IsNullOrWhiteSpace(x.courseId)).Select(c => $"'{c.courseId}'");
|
|
|
+ if (courseIds.Any())
|
|
|
+ {
|
|
|
+ string sqlCourse = $"select value c from c where c.id in ({string.Join(",", courseIds)}) ";
|
|
|
+ var result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<CourseBase>(sqlCourse, $"CourseBase-{tmdid}");
|
|
|
+ if (result.list.IsNotEmpty())
|
|
|
+ {
|
|
|
+ courseBases.AddRange(result.list);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ HashSet<CourseTask> courseTasks = new HashSet<CourseTask>();
|
|
|
+ List<CourseTaskChanged> invalidCourseTaskInsert = new List<CourseTaskChanged>();
|
|
|
+ foreach (var data in datas)
|
|
|
+ {
|
|
|
+ var courseTaskInsert = SchoolService.CheckCourseTaskInsertOrChanged($"{grant_type}", scope.ToString(),data, null, null, courseBases, groupListDtos, rooms,null, teachers);
|
|
|
+ if (courseTaskInsert.invalidCode == 0)
|
|
|
+ {
|
|
|
+ string taskCode = $"CourseTask-{tmdid}";
|
|
|
+ string taskId = courseTaskInsert.courseId;
|
|
|
+ CourseTask courseTask = courseTasks.Where(z => z.id.Equals(taskId) && z.code.Equals(taskCode)).FirstOrDefault();
|
|
|
+ if (courseTask == null)
|
|
|
+ {
|
|
|
+ Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemStreamAsync(taskId, new PartitionKey(taskCode));
|
|
|
+ if (response.Status == 200)
|
|
|
+ {
|
|
|
+ courseTask = JsonDocument.Parse(response.Content).RootElement.ToObject<CourseTask>();
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ courseTask = new CourseTask
|
|
|
+ {
|
|
|
+ id = taskId,
|
|
|
+ code = taskCode,
|
|
|
+ pk = "CourseTask",
|
|
|
+ ttl = -1,
|
|
|
+ courseId = courseTaskInsert.courseId,
|
|
|
+ schedules = new List<ScheduleTask> { new ScheduleTask {
|
|
|
+ roomId = courseTaskInsert.roomId,
|
|
|
+ groupId = courseTaskInsert.groupId,
|
|
|
+ type = courseTaskInsert.type,
|
|
|
+ teacherId = courseTaskInsert.teacherId,
|
|
|
+ notice=courseTaskInsert.notice,
|
|
|
+ startTime = courseTaskInsert.startTime,
|
|
|
+ times= new List<ScheduleTime>(),
|
|
|
+ school=courseTaskInsert.school,
|
|
|
+ } }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var scheduleTask = courseTask.schedules.Find(z => z.type.Equals(courseTaskInsert.type) && z.groupId.Equals(courseTaskInsert.groupId) && z.teacherId.Equals(courseTaskInsert.teacherId));
|
|
|
+ if (scheduleTask == null)
|
|
|
+ {
|
|
|
+ scheduleTask = new ScheduleTask()
|
|
|
+ {
|
|
|
+ roomId = courseTaskInsert.roomId,
|
|
|
+ groupId = courseTaskInsert.groupId,
|
|
|
+ type = courseTaskInsert.type,
|
|
|
+ teacherId = courseTaskInsert.teacherId,
|
|
|
+ times = new List<ScheduleTime>(),
|
|
|
+ school = courseTaskInsert.school,
|
|
|
+ };
|
|
|
+ courseTask.schedules.Add(scheduleTask);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ scheduleTask.roomId = courseTaskInsert.roomId;
|
|
|
+ scheduleTask.school = courseTaskInsert.school;
|
|
|
+ }
|
|
|
+ //修改教师或名单
|
|
|
+ if (grant_type.ToString().Equals("change-scheduleTask", StringComparison.OrdinalIgnoreCase))
|
|
|
+ {
|
|
|
+ if (!string.IsNullOrWhiteSpace(courseTaskInsert.teacherIdChanged))
|
|
|
+ {
|
|
|
+ scheduleTask.teacherId = courseTaskInsert.teacherIdChanged;
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(courseTaskInsert.typeChanged) && !string.IsNullOrWhiteSpace(courseTaskInsert.groupIdChanged))
|
|
|
+ {
|
|
|
+ scheduleTask.groupId = courseTaskInsert.groupIdChanged;
|
|
|
+ scheduleTask.type = courseTaskInsert.typeChanged;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ courseTasks.Add(courseTask);
|
|
|
+ await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).UpsertItemAsync(courseTask, new PartitionKey(taskCode));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ invalidCourseTaskInsert.Add(courseTaskInsert);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return Ok(new { invalidCourseTaskInsert, courseTasks });
|
|
|
}
|
|
|
- break;
|
|
|
}
|
|
|
//按照模板导入进行数据转换并且进行检查
|
|
|
case bool when ($"{grant_type}".Equals("import-check") && $"{scope}".Equals("school", StringComparison.OrdinalIgnoreCase)):
|
|
@@ -466,6 +611,7 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
//List<CourseCheckImport> scheduleInvalidImports = new List<CourseCheckImport>();
|
|
|
//List<CourseCheckImport> classIdNoInvalidImports = new List<CourseCheckImport>();
|
|
|
Dictionary<string,List<Class>> duplicateClasses= new Dictionary<string, List<Class>>();
|
|
|
+ //1 上课时间段的
|
|
|
var timeTables = period.timetable.Where(z => z.type.Equals("1")).ToList();
|
|
|
HashSet< CourseTask > courseTasks = new HashSet<CourseTask>();
|
|
|
int checkedCount = 0;
|
|
@@ -478,7 +624,6 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
if (!DateTimeOffset.TryParseExact(item.stime, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out sdateTime))
|
|
|
{
|
|
|
item.invalidCode = 5;
|
|
|
-
|
|
|
courseInvalidImports.Add(item);
|
|
|
continue;
|
|
|
}
|
|
@@ -686,7 +831,8 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
groupId=groupId,
|
|
|
type=item.type,
|
|
|
teacherId=teacherId,
|
|
|
- times= new List<ScheduleTime> { scheduleTime }
|
|
|
+ times= new List<ScheduleTime> { scheduleTime },
|
|
|
+ school=school,
|
|
|
}
|
|
|
}
|
|
|
};
|
|
@@ -702,11 +848,13 @@ namespace TEAMModelOS.Controllers.Both
|
|
|
groupId = groupId,
|
|
|
type = item.type,
|
|
|
teacherId = teacherId,
|
|
|
- times = new List<ScheduleTime> { scheduleTime }
|
|
|
+ times = new List<ScheduleTime> { scheduleTime },
|
|
|
+ school = school,
|
|
|
});
|
|
|
}
|
|
|
else {
|
|
|
scheduleTask.roomId = roomId;
|
|
|
+ scheduleTask.school = school;
|
|
|
if (scheduleTime != null) {
|
|
|
var shtime = scheduleTask.times.Find(z => z.id.Equals(scheduleTime.id) && z.week.Equals(scheduleTime.week) && z.mode.Equals(scheduleTime.mode));
|
|
|
if (shtime == null)
|