Преглед изворни кода

update 调整验证属性方式

CrazyIter_Bin пре 3 година
родитељ
комит
0271041104

+ 67 - 72
TEAMModelAPI/Controllers/School/CourseController.cs

@@ -133,31 +133,64 @@ namespace TEAMModelAPI.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("upsert-course-infos")]
         [ApiToken(Auth = "1304", Name = "课程详细信息", RW = "W", Limit = false)]
-        public async Task<IActionResult> UpsertCourseInfo(JsonElement json)
+        public async Task<IActionResult> UpsertCourseInfo(CourseDtoImpt json)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("courses", out JsonElement _courses)) { return Ok(new { error = 1, msg = "课程对象不存在" }); }
-            List<CourseDto> courseDtos = _courses.ToObject<List<CourseDto>>();
+            List<CourseDto> courseDtos = json.courses;
             List<Dictionary<string, string>> errorData = new List<Dictionary<string, string>>();
             List<Course> courses = new List<Course>() ;
-            if (courseDtos != null && courseDtos.Valid().isVaild) {
-                School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
-                foreach (var courseDto in courseDtos) {
-                    var period = data.period.Find(x => x.id.Equals($"{courseDto.periodId}"));
-                    if (period != null)
+             
+            School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
+            foreach (var courseDto in courseDtos) {
+                var period = data.period.Find(x => x.id.Equals($"{courseDto.periodId}"));
+                if (period != null)
+                {
+                    //同名学科
+                    var subject = period.subjects.Find(x => x.id.Equals($"{courseDto.subjectId}"));
+                    if (subject == null) {
+                        subject = period.subjects.Find(x => x.name.Equals($"{courseDto.subjectName}"));
+                    }
+                    if (subject == null) {
+                        subject = new Subject { id = courseDto.subjectId, name = subject.name, type = 1 };
+                        period.subjects.Add(subject);
+                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(data, data.id, new PartitionKey("Base"));
+                    }
+                    Course course = null;
+                    if (string.IsNullOrWhiteSpace(courseDto?.id))
                     {
-                        //同名学科
-                        var subject = period.subjects.Find(x => x.id.Equals($"{courseDto.subjectId}"));
-                        if (subject == null) {
-                            subject = period.subjects.Find(x => x.name.Equals($"{courseDto.subjectName}"));
-                        }
-                        if (subject == null) {
-                            subject = new Subject { id = courseDto.subjectId, name = subject.name, type = 1 };
-                            period.subjects.Add(subject);
-                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(data, data.id, new PartitionKey("Base"));
+                        course = new Course
+                        {
+                            pk = "Course",
+                            id = Guid.NewGuid().ToString(),
+                            code = $"Course-{school}",
+                            name = courseDto.name,
+                            subject = new SubjectSimple { id = subject.id, name = subject.name },
+                            period = new PeriodSimple { id = period.id, name = period.name },
+                            school = school,
+                            desc = courseDto.desc,
+                            scope = "school",
+                            no = courseDto.no,
+                        };
+                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(course, new PartitionKey(course.code));
+                    }
+                    else
+                    {
+                        Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{course.id}", new PartitionKey($"Course-{school}"));
+                        if (response.Status == 200)
+                        {
+                            JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
+                            course = jsonDocument.RootElement.ToObject<Course>();
+                            course.pk = "Course";
+                            course.name = string.IsNullOrWhiteSpace(courseDto.name) ? course.name : courseDto.name;
+                            course.subject = new SubjectSimple { id = subject.id, name = subject.name };
+                            course.period = new PeriodSimple { id = period.id, name = period.name };
+                            course.school = school;
+                            course.desc = string.IsNullOrWhiteSpace(courseDto.desc) ? course.desc : courseDto.desc;
+                            course.scope = "school";
+                            course.no = string.IsNullOrWhiteSpace(courseDto.no) ? course.no : courseDto.no;
+                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(course, course.id, new PartitionKey(course.code));
                         }
-                        Course course = null;
-                        if (string.IsNullOrWhiteSpace(courseDto?.id))
+                        else
                         {
                             course = new Course
                             {
@@ -174,57 +207,25 @@ namespace TEAMModelAPI.Controllers
                             };
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(course, new PartitionKey(course.code));
                         }
-                        else
-                        {
-                            Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{course.id}", new PartitionKey($"Course-{school}"));
-                            if (response.Status == 200)
-                            {
-                                JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
-                                course = jsonDocument.RootElement.ToObject<Course>();
-                                course.pk = "Course";
-                                course.name = string.IsNullOrWhiteSpace(courseDto.name) ? course.name : courseDto.name;
-                                course.subject = new SubjectSimple { id = subject.id, name = subject.name };
-                                course.period = new PeriodSimple { id = period.id, name = period.name };
-                                course.school = school;
-                                course.desc = string.IsNullOrWhiteSpace(courseDto.desc) ? course.desc : courseDto.desc;
-                                course.scope = "school";
-                                course.no = string.IsNullOrWhiteSpace(courseDto.no) ? course.no : courseDto.no;
-                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(course, course.id, new PartitionKey(course.code));
-                            }
-                            else
-                            {
-                                course = new Course
-                                {
-                                    pk = "Course",
-                                    id = Guid.NewGuid().ToString(),
-                                    code = $"Course-{school}",
-                                    name = courseDto.name,
-                                    subject = new SubjectSimple { id = subject.id, name = subject.name },
-                                    period = new PeriodSimple { id = period.id, name = period.name },
-                                    school = school,
-                                    desc = courseDto.desc,
-                                    scope = "school",
-                                    no = courseDto.no,
-                                };
-                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(course, new PartitionKey(course.code));
-                            }
-                        }
-                        if (course != null) { courses.Add(course); }
-                    }
-                    else
-                    {
-                        errorData.Add(new Dictionary<string, string> { { "course", courseDto.name }, { "periodId", courseDto.periodId } });
-                        //return Ok(new { error = 2, msg = "学段不存在!" });
                     }
+                    if (course != null) { courses.Add(course); }
+                }
+                else
+                {
+                    errorData.Add(new Dictionary<string, string> { { "course", courseDto.name }, { "periodId", courseDto.periodId } });
+                    //return Ok(new { error = 2, msg = "学段不存在!" });
                 }
             }
-            else
-            {
-                return Ok(new { error = 3, msg = courseDtos.Valid() });
-            }
+            
             return Ok(new { courses = courses ,errorData});
         }
         //[Required(ErrorMessage = "{0} 课程的科目id必须填写"), RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}",ErrorMessage ="科目的uuid格式错误!")]
+
+        public class ImportCourseDto {
+            public List<ImportCourse> courses { get; set; } = new List<ImportCourse>();
+        }
+
+
         public class ImportCourse {
             [Required(ErrorMessage = "课程id  必须设置"), RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}", ErrorMessage = "科目的uuid格式错误!")]
             public string courseId { get; set; }
@@ -244,16 +245,10 @@ namespace TEAMModelAPI.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("upsert-course-schedule")]
         [ApiToken(Auth = "1305", Name = "更新课程的排课信息", RW = "W", Limit = false)]
-        public async Task<IActionResult> UpsertCourseSchedule(JsonElement json)
+        public async Task<IActionResult> UpsertCourseSchedule(ImportCourseDto json)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("courses", out JsonElement _courses)) { return Ok(new { error = 1, msg = "课程参数错误!" }); }
-            List<ImportCourse> importCourses = _courses.ToObject<List<ImportCourse>>();
-            var result = importCourses .Valid();
-            if (!result.isVaild) {
-                return Ok(new { error = 2, msg =result});
-            }
-         
+            List<ImportCourse> importCourses = json.courses;
             HashSet<string> courseIds= importCourses .Select(x => x.courseId).ToHashSet();
             if (courseIds.Count < 1) { return Ok(new { error = 1, msg = "课程参数错误!" }); }
 

+ 96 - 115
TEAMModelAPI/Controllers/School/GroupListController.cs

@@ -289,25 +289,53 @@ namespace TEAMModelAPI.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("upsert-teach-groups")]
         [ApiToken(Auth = "1206", Name = "创建或更新教学班", RW = "W", Limit = false)]
-        public async Task<IActionResult> UpsertTeachGroups(JsonElement json) {
+        public async Task<IActionResult> UpsertTeachGroups(GroupListDtoImpt json) {
             var (_, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("groupLists", out JsonElement _groupLists)  || !_groupLists.ValueKind.Equals(JsonValueKind.Array)) { return Ok(new { error=1,msg="名单对象不存在"}); }
-            var groupListsDto = _groupLists.ToObject<List<GroupListDto>>();
+            var groupListsDto = json.groupLists;
             List<GroupList> groupLists = new List<GroupList>(); ;
             List<Dictionary<string, string>> errorData = new List<Dictionary<string, string>>();
-            if (groupListsDto != null && groupListsDto.Valid().isVaild)
-            {
-                School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
-                foreach (var list in groupListsDto) {
-                    Period period = data.period.Find(x => x.id.Equals($"{list.periodId}"));
-                    if (period != null)
+            School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
+            foreach (var list in groupListsDto) {
+                Period period = data.period.Find(x => x.id.Equals($"{list.periodId}"));
+                if (period != null)
+                {
+                    GroupList groupList = null;
+                    if (string.IsNullOrWhiteSpace(list.id))
                     {
-                        GroupList groupList = null;
-                        if (string.IsNullOrWhiteSpace(list.id))
+                        groupList = new GroupList()
+                        {
+                            pk = "GroupList",
+                            id = Guid.NewGuid().ToString(),
+                            code = $"GroupList-{school}",
+                            name = list.name,
+                            periodId = list.periodId,
+                            scope = "school",
+                            school = school,
+                            type = "teach",
+                            year = list.year,
+                            froms = 3
+                        };
+                        groupList = await GroupListService.CheckListNo(groupList, _azureCosmos, _dingDing, _option);
+                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(groupList, new PartitionKey(groupList.code));
+                    }
+                    else
+                    {
+                        Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{list.id}", new PartitionKey($"GroupList-{school}"));
+                        if (response.Status == 200)
+                        {
+                            JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
+                            groupList = jsonDocument.RootElement.ToObject<GroupList>();
+                            groupList.name = string.IsNullOrWhiteSpace(list.name) ? groupList.name : list.name;
+                            groupList.periodId = string.IsNullOrWhiteSpace(list.periodId) ? groupList.periodId : list.periodId;
+                            groupList.school = school;
+                            groupList.scope = "school";
+                            groupList.froms = 3;
+                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(groupList, groupList.id, new PartitionKey(groupList.code));
+                        }
+                        else
                         {
                             groupList = new GroupList()
                             {
-                                pk = "GroupList",
                                 id = Guid.NewGuid().ToString(),
                                 code = $"GroupList-{school}",
                                 name = list.name,
@@ -321,56 +349,26 @@ namespace TEAMModelAPI.Controllers
                             groupList = await GroupListService.CheckListNo(groupList, _azureCosmos, _dingDing, _option);
                             await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(groupList, new PartitionKey(groupList.code));
                         }
-                        else
-                        {
-                            Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{list.id}", new PartitionKey($"GroupList-{school}"));
-                            if (response.Status == 200)
-                            {
-                                JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
-                                groupList = jsonDocument.RootElement.ToObject<GroupList>();
-                                groupList.name = string.IsNullOrWhiteSpace(list.name) ? groupList.name : list.name;
-                                groupList.periodId = string.IsNullOrWhiteSpace(list.periodId) ? groupList.periodId : list.periodId;
-                                groupList.school = school;
-                                groupList.scope = "school";
-                                groupList.froms = 3;
-                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(groupList, groupList.id, new PartitionKey(groupList.code));
-                            }
-                            else
-                            {
-                                groupList = new GroupList()
-                                {
-                                    id = Guid.NewGuid().ToString(),
-                                    code = $"GroupList-{school}",
-                                    name = list.name,
-                                    periodId = list.periodId,
-                                    scope = "school",
-                                    school = school,
-                                    type = "teach",
-                                    year = list.year,
-                                    froms = 3
-                                };
-                                groupList = await GroupListService.CheckListNo(groupList, _azureCosmos, _dingDing, _option);
-                                await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(groupList, new PartitionKey(groupList.code));
-                            }
-                        }
-                        if (groupList != null) {
-                            groupLists.Add(groupList);
-                        }
                     }
-                    else
-                    {
-                        errorData.Add(new Dictionary<string, string> { { "group",list.name}, { "periodId",list.periodId} });
-                        // return Ok(new { error = 2, msg ="学段不存在!" });
+                    if (groupList != null) {
+                        groupLists.Add(groupList);
                     }
                 }
+                else
+                {
+                    errorData.Add(new Dictionary<string, string> { { "group",list.name}, { "periodId",list.periodId} });
+                    // return Ok(new { error = 2, msg ="学段不存在!" });
+                }
             }
-            else
-            {
-                return Ok(new { error = 3, msg = groupListsDto.Valid() });
-            }
+             
             return Ok(new { groupLists, errorData });
         }
 
+        public class MemberImpt {
+            public List<Member> members { get; set; } = new List<Member>();
+            public string groupId { get; set; } 
+        }
+
         /// <summary>
         /// 导入教学班学生
         /// </summary>
@@ -379,81 +377,64 @@ namespace TEAMModelAPI.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("import-teach-members")]
         [ApiToken(Auth = "1207", Name = "导入教学班学生", RW = "W", Limit = false)]
-        public async Task<IActionResult> ImportTeachMembers(JsonElement json)
+        public async Task<IActionResult> ImportTeachMembers(MemberImpt json)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("groupId", out JsonElement _groupId)) {    return Ok(new { error = 2, msg = "名单错误!" }); } 
-            if(!json.TryGetProperty("members", out JsonElement _members)) return Ok(new { error = 1, msg = "名单列表格式错误" });
-            if (_members.ValueKind.Equals(JsonValueKind.Array))
+            //School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
+            List<Member> members = json.members;
+            var tmds = members.Where(x => x.type == 1);
+            var stus = members.Where(x => x.type == 2);
+            List<Student> students = await StudentService.GeStudentData(_azureCosmos, school, stus?.Select(x => x.id));
+            List<TmdInfo> infos = null;
+            string tmdstr = "";
+            try
+            {
+                var content = new StringContent(tmds.Select(x => x.id).ToJsonString(), Encoding.UTF8, "application/json");
+                tmdstr = await _coreAPIHttpService.GetUserInfos(content);
+                infos = tmdstr.ToObject<List<TmdInfo>>();
+            }
+            catch (Exception ex)
             {
-                //School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
-                List<Member> members = _members.ToObject<List<Member>>();
-                ValidResult valid = members.Valid();
-                if (valid.isVaild)
+                await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.Get("Default").location}用户转换失败:{_coreAPIHttpService.options.Get("Default").url}{tmdstr}\n {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
+                //return Ok(new { error =3, msg = "醍摩豆ID验证错误!" });
+            }
+            var unexist_student = stus.Select(x => x.id).Except(students.Select(y => y.id));
+            var unexist_tmdids = tmds.Select(x => x.id).Except(infos.Select(y => y.id));
+            Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{json.groupId}", new PartitionKey($"GroupList-{school}"));
+            if (response.Status == 200)
+            {
+                JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
+                var list =  jsonDocument.RootElement.ToObject<GroupList>();
+                if (list.type.Equals("teach") && list.school.Equals(school))
                 {
-                    var tmds = members.Where(x => x.type == 1);
-                    var stus = members.Where(x => x.type == 2);
-                    List<Student> students = await StudentService.GeStudentData(_azureCosmos, school, stus?.Select(x => x.id));
-                    List<TmdInfo> infos = null;
-                    string tmdstr = "";
-                    try
-                    {
-                        var content = new StringContent(tmds.Select(x => x.id).ToJsonString(), Encoding.UTF8, "application/json");
-                        tmdstr = await _coreAPIHttpService.GetUserInfos(content);
-                        infos = tmdstr.ToObject<List<TmdInfo>>();
-                    }
-                    catch (Exception ex)
-                    {
-                        await _dingDing.SendBotMsg($"{_coreAPIHttpService.options.Get("Default").location}用户转换失败:{_coreAPIHttpService.options.Get("Default").url}{tmdstr}\n {ex.Message}{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
-                        //return Ok(new { error =3, msg = "醍摩豆ID验证错误!" });
-                    }
-                    var unexist_student = stus.Select(x => x.id).Except(students.Select(y => y.id));
-                    var unexist_tmdids = tmds.Select(x => x.id).Except(infos.Select(y => y.id));
-                    Azure.Response response = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync($"{_groupId}", new PartitionKey($"GroupList-{school}"));
-                    if (response.Status == 200)
+                    if (infos.Any())
                     {
-                        JsonDocument jsonDocument = JsonDocument.Parse(response.Content);
-                        var list =  jsonDocument.RootElement.ToObject<GroupList>();
-                        if (list.type.Equals("teach") && list.school.Equals(school))
-                        {
-                            if (infos.Any())
-                            {
-                                infos.ToList().ForEach(x => {
-                                    if (!list.members.Where(z => z.type == 1).Select(x => x.id).Contains(x.id))
-                                    {
-                                        GroupListService.JoinList(list, x.id , 1 , school);
-                                    }
-                                });
-                            }
-                            if (stus.Any()) 
+                        infos.ToList().ForEach(x => {
+                            if (!list.members.Where(z => z.type == 1).Select(x => x.id).Contains(x.id))
                             {
-                                stus.ToList().ForEach(x => {
-                                    if (!list.members.Where(z => z.type == 2).Select(x => x.id).Contains(x.id)) {
-                                        GroupListService.JoinList(list, x.id ,2 , school);
-                                    }    
-                                });
+                                GroupListService.JoinList(list, x.id , 1 , school);
                             }
-                            list = await GroupListService.CheckListNo(list, _azureCosmos, _dingDing, _option);
-                            list = await GroupListService.UpsertList(list, _azureCosmos, _configuration, _serviceBus);
-                            return Ok(new { unexist_student, unexist_tmdids, import_list=list });
-                        }
-                        else {
-                            return Ok(new { error = 3, msg = $"名单类型不是教学班或者不是当前学校的名单!{list.type},{list.school}" });
-                        }
+                        });
                     }
-                    else
+                    if (stus.Any()) 
                     {
-                        return Ok(new { error = 2, msg = "名单错误!" });
+                        stus.ToList().ForEach(x => {
+                            if (!list.members.Where(z => z.type == 2).Select(x => x.id).Contains(x.id)) {
+                                GroupListService.JoinList(list, x.id ,2 , school);
+                            }    
+                        });
                     }
+                    list = await GroupListService.CheckListNo(list, _azureCosmos, _dingDing, _option);
+                    list = await GroupListService.UpsertList(list, _azureCosmos, _configuration, _serviceBus);
+                    return Ok(new { unexist_student, unexist_tmdids, import_list=list });
                 }
-                else
-                {
-                    return Ok(new { error = 3, msg = valid });
+                else {
+                    return Ok(new { error = 3, msg = $"名单类型不是教学班或者不是当前学校的名单!{list.type},{list.school}" });
                 }
             }
             else
             {
-                return Ok(new { error = 1, msg = "名单列表格式错误" });
+                return Ok(new { error = 2, msg = "名单错误!" });
             }
         }
 

+ 44 - 39
TEAMModelAPI/Controllers/School/RoomController.cs

@@ -100,6 +100,13 @@ namespace TEAMModelAPI.Controllers
                 return Ok(new { error = 1, msg = "教室不存在!" });
             }
         }
+
+        public class RoomDto
+        {
+            public List<Room> rooms { get; set; } = new List<Room>();
+
+        }
+
         /// <summary>
         /// 创建或更新教学班基本信息
         /// </summary>
@@ -108,52 +115,50 @@ namespace TEAMModelAPI.Controllers
         [ProducesDefaultResponseType]
         [HttpPost("upsert-room-infos")]
         [ApiToken(Auth = "1403", Name = "创建或更新教学班", RW = "W", Limit = false)]
-        public async Task<IActionResult> UpsertRoomInfo(JsonElement json)
+        public async Task<IActionResult> UpsertRoomInfo(RoomDto json)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("rooms", out JsonElement _rooms)) { return Ok(new { error = 1, msg = "名单对象不存在" }); }
-            var rooms = _rooms.ToObject<List<RoomDto>>();
+
+            var rooms = json.rooms ;
             List<Room> db_rooms = new List<Room>();
             List<Room> roomCreate = new List<Room>();
-            if (rooms != null && rooms.Valid().isVaild)
+           
+            School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
+            string sql = $"select value(c) from c  where c.id in({string.Join(",", rooms.Select(x => $"'{x.id}'"))})";
+            await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
+                .GetItemQueryIterator<Room>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Room-{school}") }))
             {
-                School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
-                string sql = $"select value(c) from c  where c.id in({string.Join(",", rooms.Select(x => $"'{x.id}'"))})";
-                await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
-                    .GetItemQueryIterator<Room>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Room-{school}") }))
-                {
-                    db_rooms.Add(item);
-                }
-                //不存在的教室,可以被直接创建
-                var unexistRoomIds = rooms.Select(x=>x.id).Except(db_rooms.Select(x => x.id));
-                foreach (var roomId in unexistRoomIds) {
-                    var room_web = rooms.Find(x => x.id.Equals(roomId));
-                    if (room_web != null) {
-                        var room = new Room
-                        {
-                            id = room_web.id,
-                            name = room_web.name,
-                            code = $"Room-{school}",
-                            pk = "Room",
-                            no = room_web.no,
-                            address = room_web.address,
-                        };
-                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(room, new PartitionKey(room.code));
-                        roomCreate.Add(room);
-                    }
-                }
-                foreach (var room in db_rooms) {
-                    var room_web = rooms.Find(x => x.id.Equals(room.id));
-                    if (room_web != null)
+                db_rooms.Add(item);
+            }
+            //不存在的教室,可以被直接创建
+            var unexistRoomIds = rooms.Select(x=>x.id).Except(db_rooms.Select(x => x.id));
+            foreach (var roomId in unexistRoomIds) {
+                var room_web = rooms.Find(x => x.id.Equals(roomId));
+                if (room_web != null) {
+                    var room = new Room
                     {
-                        room.name = string.IsNullOrWhiteSpace(room_web.name) ? room.name : room_web.name;  
-                        room.code = $"Room-{school}";
-                        room.pk = "Room";
-                        room.no =string.IsNullOrWhiteSpace(room_web.no)?room.no : room_web.no;
-                        room.address = string.IsNullOrWhiteSpace(room_web.address) ? room.address : room_web.address; 
-                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(room,room.id, new PartitionKey(room.code));
+                        id = room_web.id,
+                        name = room_web.name,
+                        code = $"Room-{school}",
+                        pk = "Room",
+                        no = room_web.no,
+                        address = room_web.address,
+                    };
+                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(room, new PartitionKey(room.code));
+                    roomCreate.Add(room);
+                }
+            }
+            foreach (var room in db_rooms) {
+                var room_web = rooms.Find(x => x.id.Equals(room.id));
+                if (room_web != null)
+                {
+                    room.name = string.IsNullOrWhiteSpace(room_web.name) ? room.name : room_web.name;  
+                    room.code = $"Room-{school}";
+                    room.pk = "Room";
+                    room.no =string.IsNullOrWhiteSpace(room_web.no)?room.no : room_web.no;
+                    room.address = string.IsNullOrWhiteSpace(room_web.address) ? room.address : room_web.address; 
+                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(room,room.id, new PartitionKey(room.code));
                         
-                    }
                 }
             }
             return Ok(new { roomUpdate= db_rooms, roomCreate= roomCreate });

+ 18 - 14
TEAMModelAPI/Controllers/School/TeacherController.cs

@@ -106,7 +106,7 @@ namespace TEAMModelAPI.Controllers
             teachers.Select(x => new { x.id, x.name, x.picture, x.job, x.subjectIds, x.roles }).ToList().ForEach(x => {
                 var  coreUser= coreUsers.Find(c=>c.id.Equals(x.id));
                 if (coreUser != null) {
-                    tchs.Add(new {x.id,coreUser.name, coreUser.picture,x.job,x.subjectIds,x.roles,coreUser.searchKey });
+                    tchs.Add(new {x.id,coreUser.name, coreUser.picture,x.job,x.subjectIds,x.roles,coreUser.searchKey,school });
                 }
             });
             return Ok(new
@@ -158,25 +158,22 @@ namespace TEAMModelAPI.Controllers
                 return Ok(new { error = 1, msg = "教师未就职该学校!" });
             }
         }
+        
+
+
 
-         
         /// <summary>
         /// 批量导入教师信息,并加入学校。可以导入学科,但需要填写学段id
         /// </summary>
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("import-school-teacher")]
-        [ApiToken(Auth = "1502", Name = "学校教师信息", RW = "R", Limit = false)]
-        public async Task<IActionResult> ImportSchoolTeacher(JsonElement json) {
+        [ApiToken(Auth = "1503", Name = "学校教师信息", RW = "R", Limit = false)]
+        public async Task<IActionResult> ImportSchoolTeacher(ImportTechDto json) {
             //如果需要同时导入学科,则需要填写学段
+           
             var (id, school) = HttpContext.GetApiTokenInfo();
-            if (!json.TryGetProperty("teachers", out JsonElement _teachers) || !_teachers.ValueKind.Equals(JsonValueKind.Array)) { return BadRequest(); }
-            IEnumerable<ImportTech> teachers = _teachers.ToObject<List<ImportTech>>();
-            var result = teachers.Valid();
-            if (!result.isVaild)
-            {
-                return Ok(new { error = 2, msg = result });
-            }
+            List<ImportTech> teachers = json.teachers;
             List<string> searchKey = teachers.Select(x=>x.id).ToList();
             var keys = searchKey.Where(x => !string.IsNullOrWhiteSpace(x));
             var content = new StringContent(keys.ToJsonString(), Encoding.UTF8, "application/json");
@@ -197,7 +194,7 @@ namespace TEAMModelAPI.Controllers
             }
             var exist = coreUsers.Select(x => x.id);
             //注册了账号的教师
-            teachers = teachers.Where(x => exist.Contains(x.id));
+            teachers = teachers.Where(x => exist.Contains(x.id)).ToList();
            
             List<Teacher> teachersList = new List<Teacher>();
             List<SchoolTeacher>  schoolTeachers = new List<SchoolTeacher>();
@@ -214,6 +211,7 @@ namespace TEAMModelAPI.Controllers
             long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
             School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
             //学校学科发生变化。
+            List<SchoolTeacher> schoolTeachersAdd = new List<SchoolTeacher>();
             bool baseChange = false;
             foreach (var item in teachers) {
                 var teacher = teachersList.Find(x => x.id.Equals(item.id));
@@ -293,6 +291,7 @@ namespace TEAMModelAPI.Controllers
                         pk = "Teacher",
                         createTime = now,
                     };
+                    schoolTeachersAdd.Add(schoolTeacher);
                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(schoolTeacher, new PartitionKey(schoolTeacher.code));
                 }
                 else {
@@ -304,20 +303,25 @@ namespace TEAMModelAPI.Controllers
                         });
                     }
                     schoolTeacher.job = string.IsNullOrWhiteSpace(item.job) ? schoolTeacher.job : item.job;
+                    schoolTeachersAdd.Add(schoolTeacher);
                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(schoolTeacher,schoolTeacher.id, new PartitionKey(schoolTeacher.code));
                 }
             }
             if (baseChange) {
                 await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(data, data.id, new PartitionKey("Base"));
             }
-            return Ok();
+            return Ok(new { teachers= schoolTeachersAdd.Select(x => new { x.id, x.name, x.picture, x.job, x.subjectIds, x.roles,school })});
         }
     }
+
+    public class ImportTechDto {
+        public List<ImportTech> teachers { get; set; } = new List<ImportTech>();
+    }
     public class ImportTech {
         [Required(ErrorMessage = "教师id必须设置")]
         public string id { get; set; }
         public List<ImportTechSubject> subjects { get; set; }
-        [ RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}", ErrorMessage = "学段的uuid格式错误!")]
+        [RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}", ErrorMessage = "学段的uuid格式错误!")]
         public string periodId { get; set; }
         public string job { get; set; }
     }

+ 38 - 19
TEAMModelOS.SDK/Helper/Common/ValidatorHelper/ValidatorHelper.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;
 using System.Linq;
@@ -10,34 +11,52 @@ namespace TEAMModelOS.SDK
     {
         public static ValidResult Valid(this Object obj) {
             ValidResult result = new ValidResult();
-            try {
-                var context = new ValidationContext(obj, null, null);
-                var results = new List<ValidationResult>();
-                if (Validator.TryValidateObject(obj, context, results, true))
+            var list = obj as IEnumerable;
+            if (list != null)
+            {
+                foreach (var item in list)
                 {
-                    result.isVaild = true;
+                    var validationContext = new ValidationContext(item);
+                    var validationResults = new List<ValidationResult>();
+                    var isItemValid = Validator.TryValidateObject(item, validationContext, validationResults, true);
+                    result.isVaild = isItemValid;
                 }
-                else
+            }
+            else {
+                try
                 {
-                    List<(string msg,  string name)> error = new List<(string msg, string name)>();
-                    foreach (var validationResult in results)
+                    var context = new ValidationContext(obj, null, null);
+                    var results = new List<ValidationResult>();
+                    if (Validator.TryValidateObject(obj, context, results, true))
+                    {
+                        result.isVaild = true;
+                    }
+                    else
                     {
-                        if (validationResult.MemberNames != null && validationResult.MemberNames.Count()>0) {
-                            validationResult.MemberNames.ToList().ForEach(x => {
-                                error.Add((validationResult.ErrorMessage, x));
-                            });
+                        List<(string msg, string name)> error = new List<(string msg, string name)>();
+                        foreach (var validationResult in results)
+                        {
+                            if (validationResult.MemberNames != null && validationResult.MemberNames.Count() > 0)
+                            {
+                                validationResult.MemberNames.ToList().ForEach(x => {
+                                    error.Add((validationResult.ErrorMessage, x));
+                                });
+                            }
                         }
+                        result.errors = new Dictionary<string, IEnumerable<string>>();
+                        error.GroupBy(x => x.name).ToList().ForEach(z => {
+                            result.errors.Add(z.Key, z.ToList().Select(x => x.msg));
+                        });
                     }
+                }
+                catch (Exception ex)
+                {
+                    result.isVaild = false;
                     result.errors = new Dictionary<string, IEnumerable<string>>();
-                    error.GroupBy(x => x.name).ToList().ForEach(z => {
-                        result.errors.Add(z.Key, z.ToList().Select(x => x.msg));
-                    });
+                    result.errors.Add("InternalError", new List<string> { ex.Message });
                 }
-            } catch (Exception ex) {
-                result.isVaild = false;
-                result.errors = new Dictionary<string, IEnumerable<string>>();
-                result.errors.Add("InternalError", new List<string> { ex.Message });
             }
+            
             return result;
         }
 

+ 6 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs

@@ -203,7 +203,12 @@ namespace TEAMModelOS.SDK.Models
         public HashSet<string> groupName { get; set; }
         public int froms { get; set; } = 0;
     }
-   
+
+    public class GroupListDtoImpt {
+        public List<GroupListDto> groupLists { get; set; } = new List<GroupListDto>();
+    } 
+
+
     public class GroupListDto
     {
         public string pk { get; set; }

+ 3 - 0
TEAMModelOS.SDK/Models/Cosmos/School/Course.cs

@@ -154,6 +154,9 @@ namespace TEAMModelOS.SDK.Models
         public string name { get; set; }
     }
 
+    public class CourseDtoImpt {
+        public List<CourseDto> courses { get; set; } = new List<CourseDto>();
+    }
     public class CourseDto
     {
         public string id { get; set; }