From e447351729799e89cbbb1117dc5a605ee063b592 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Tue, 3 Dec 2024 10:56:23 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=95=99=E5=B8=88=E5=88=86=E5=B8=83?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TeacherController.java | 6 + .../admin/service/TeacherService.java | 1 + .../service/impl/TeacherServiceImpl.java | 293 +++++++++++++++++- .../model/entity/school/GpTeacher.java | 1 + .../teammodel/model/vo/admin/GpTeacherVo.java | 1 + .../model/vo/admin/TeacherGradeVo.java | 17 + 6 files changed, 318 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cn/teammodel/model/vo/admin/TeacherGradeVo.java diff --git a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java index 37199f0..351e905 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java @@ -54,5 +54,11 @@ public class TeacherController { Map res = teacherService.getTeacherGradeCount(teacherDto,request); return R.success(res); } + @PostMapping("getDistributionOfTeachers") + @ApiOperation("获取教师分布情况") + public R>>> getDistributionOfTeachers(@Valid @RequestBody TeacherDto teacherDto, HttpServletRequest request) { + List>> res = teacherService.getDistributionOfTeachers(teacherDto,request); + return R.success(res); + } } diff --git a/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java b/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java index 30a64a2..b3425e8 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java +++ b/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java @@ -13,4 +13,5 @@ public interface TeacherService { Map getTeacherByRecord(TeacherDto teacherDto); Map getTeacherLearningCategory(TeacherDto teacherDto); Map getTeacherGradeCount(TeacherDto teacherDto, HttpServletRequest request); + List>> getDistributionOfTeachers(TeacherDto teacherDto, HttpServletRequest request); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java index 48b9502..4774d95 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java @@ -12,6 +12,7 @@ import cn.teammodel.model.entity.school.LessonRecord; import cn.teammodel.model.entity.school.School; import cn.teammodel.model.entity.school.SchoolTeacher; import cn.teammodel.model.vo.admin.GpTeacherVo; +import cn.teammodel.model.vo.admin.TeacherGradeVo; import cn.teammodel.repository.LessonRecordRepository; import cn.teammodel.repository.SchoolGroupListRepository; import cn.teammodel.repository.SchoolRepository; @@ -226,7 +227,22 @@ public class TeacherServiceImpl implements TeacherService { teacher.setIname((String) map.get("iname")); teacher.setJob((String) map.get("job")); teacher.setRoles((List) map.get("roles")); - teacher.setGroups((List) map.get("groups")); + //teacher.setGroups((List) map.get("groups")); + List> groupList = (List>) map.get("groups"); + if (groupList != null) { + + List groups = new ArrayList<>(); + for (Map groupMap : groupList) { + GpTeacherVo.IdNameCode group = new GpTeacherVo.IdNameCode(); + group.setId((String) groupMap.get("id")); + group.setName((String) groupMap.get("name")); + group.setCode((String) groupMap.get("code")); + group.setPicture((String) groupMap.get("picture")); + group.setNickname((String) groupMap.get("nickname")); + groups.add(group); + } + teacher.setGroups(groups); + } //teacher.setDegree((String) map.get("degree")); //teacher.setPracticeTime((String) map.get("practiceTime")); //teacher.setGender((String) map.get("gender")); @@ -236,6 +252,26 @@ public class TeacherServiceImpl implements TeacherService { // 根据实际属性进行转换 return teacher; } + + private TeacherGradeVo convertToTeacherGradeVo(Map map) { + TeacherGradeVo teacher = new TeacherGradeVo(); + teacher.setName((String) map.get("name")); + teacher.setId((String) map.get("tmdId")); + // 处理 grade 字段 + List> gradeList = (List>) map.get("grade"); + if (gradeList != null) { + List grades = new ArrayList<>(); + for (Map gradeMap : gradeList) { + TeacherGradeVo.IdAndName grade = new TeacherGradeVo.IdAndName(); + grade.setGrade((Integer) gradeMap.get("grade")); + grade.setGradeName((String) gradeMap.get("gradeName")); + grades.add(grade); + } + teacher.setGrade(grades); + } + // 根据实际属性进行转换 + return teacher; + } private GpTeacher convertToGpTeacher(Map map) { GpTeacher teacher = new GpTeacher(); // 假设 GpTeacherVo 有以下属性:name, age, subject @@ -245,6 +281,12 @@ public class TeacherServiceImpl implements TeacherService { } else { teacher.setDescribe(null); // 或者设置一个默认值 } + Object IdObj = map.get("id"); + if (describeObj instanceof String) { + teacher.setId((String) IdObj); + } else { + teacher.setId(null); // 或者设置一个默认值 + } Object depictObj = map.get("depict"); if (depictObj instanceof String) { teacher.setDepict((String) depictObj); @@ -430,6 +472,255 @@ public class TeacherServiceImpl implements TeacherService { return gradeMap; } + @Override + public List>> getDistributionOfTeachers(TeacherDto teacherDto, HttpServletRequest request) { + + List>> distributionList = new ArrayList<>(); + Map> gradesMap = new HashMap<>(); + Map> degreesMap = new HashMap<>(); + Map> subjectsMap= new HashMap<>(); + Map> groupsMap = new HashMap<>(); + Map teachers; + //获取全学校教师名单详情 + String url = env.getProperty("ies.server-url-get-teacher-all"); + try { + teachers = GroupUtil.getGroupId(teacherDto,new GroupUtil(env), request,url); + List teachersList = new ArrayList<>(); + for (Map.Entry entry : teachers.entrySet()) { + // 假设 entry.getValue() 返回的是 List> + List> mapList = (List>) entry.getValue(); + for (Map map : mapList) { + // 将 Map 转换为 GpTeacherVo 对象 + GpTeacherVo teacher = convertToGpTeacherVo(map); + teachersList.add(teacher); + } + } + List phones = new ArrayList<>(); + // 进一步处理 teachersList + for (GpTeacherVo teacher : teachersList) { + phones.add(teacher.getPhone()); + } + GpTeacherDto gpTeacherDto = new GpTeacherDto(); + gpTeacherDto.setMobiles(phones); + Map tBase = getTeacherBase(gpTeacherDto, request); + List gpTeachers = new ArrayList<>(); + for (Map.Entry entry : tBase.entrySet()) { + if (entry.getKey().equals("teachers")) { + List> dataList = (List>) entry.getValue(); + for (Map dataMap : dataList) { + GpTeacher gpTeacher = convertToGpTeacher(dataMap); + gpTeachers.add(gpTeacher); + } + } + } + //把对应年级的信息进行映射 + List gradeList = new ArrayList<>(); + Map gradeInfo = getTeacherGradeCount(teacherDto, request); + for (Map.Entry entry : gradeInfo.entrySet()) { + if (entry.getKey().equals("teacher")) { + List> dataList = (List>) entry.getValue(); + for (Map dataMap : dataList) { + TeacherGradeVo teacherGradeVo = convertToTeacherGradeVo(dataMap); + gradeList.add(teacherGradeVo); + } + } + } + for (GpTeacherVo teacher : teachersList) { + for(GpTeacher gpTeacher : gpTeachers) { + if(StringUtils.isNotEmpty(teacher.phone) && teacher.phone.equalsIgnoreCase(gpTeacher.mobile)) { + if(gpTeacher.basic.gender != null) { + teacher.setGender(gpTeacher.basic.gender); + }else { + teacher.setGender(""); + } + if (gpTeacher.getPracticeTime() != null && gpTeacher.getPracticeTime() > 0) { + teacher.setPracticeTime(gpTeacher.getPracticeTime()); + }else { + teacher.setPracticeTime(0L); + } + if(gpTeacher.degree != null) { + teacher.setDegree(gpTeacher.degree); + }else { + teacher.setDegree(""); + } + break; + } + } + for (TeacherGradeVo grade : gradeList) { + if(teacher.getId().equals(grade.getId())) { + List grades = grade.getGrade(); + for (TeacherGradeVo.IdAndName gg : grades) { + String id = String.valueOf(teacherDto.year - gg.getGrade()); + if (teacher.grade == null) { + teacher.setGrade(new ArrayList<>()); + } + teacher.grade.add(id); + + } + } + } + } + + Map gradeCount = new HashMap<>(); + Map degreeCount = new HashMap<>(); + Map subjectCount = new HashMap<>(); + Map GroupCount = new HashMap<>(); + if(StringUtils.isNotEmpty(teacherDto.getGrade()) && StringUtils.isNotEmpty(teacherDto.getSubjectId())) { + for (GpTeacherVo teacher : teachersList) { + if(teacher.getGrade() != null &&teacher.getSubjectIds() != null &&teacher.getGrade().contains(teacherDto.getGrade()) && teacher.getSubjectIds().contains(teacherDto.getSubjectId())) { + { + Long count = gradeCount.getOrDefault(teacherDto.getGrade(), 0L); + gradeCount.put(teacherDto.getGrade(), count + 1); + } + if(StringUtils.isNotEmpty(teacher.getDegree())) { + { + Long count = degreeCount.getOrDefault(teacher.getDegree(), 0L); + degreeCount.put(teacher.getDegree(), count + 1); + } + } + { + int index = teacher.subjectIds.indexOf(teacherDto.getSubjectId()); + String name = ""; + if (index >= 0) { + name = teacher.subjectNames.get(index); + } + Long count = subjectCount.getOrDefault(name, 0L); + subjectCount.put(name, count + 1); + } + if(teacher.getGroups() != null) { + for (GpTeacherVo.IdNameCode group : teacher.getGroups()) { + Long count = GroupCount.getOrDefault(group.getName(), 0L); + GroupCount.put(group.getName(), count + 1); + } + } + } + } + }else if(StringUtils.isEmpty(teacherDto.getGrade()) && StringUtils.isNotEmpty(teacherDto.getSubjectId())) { + for (GpTeacherVo teacher : teachersList) { + if(teacher.getSubjectIds() != null && teacher.getSubjectIds().contains(teacherDto.getSubjectId())) { + if(teacher.getGrade() != null) { + for (String grade : teacher.getGrade()) { + Long count = gradeCount.getOrDefault(grade, 0L); + gradeCount.put(grade, count + 1); + } + } + if(StringUtils.isNotEmpty(teacher.getDegree())) { + { + Long count = degreeCount.getOrDefault(teacher.getDegree(), 0L); + degreeCount.put(teacher.getDegree(), count + 1); + } + } + { + int index = teacher.subjectIds.indexOf(teacherDto.getSubjectId()); + String name = ""; + if (index >= 0) { + name = teacher.subjectNames.get(index); + } + Long count = subjectCount.getOrDefault(name, 0L); + subjectCount.put(name, count + 1); + } + if(teacher.getGroups() != null) { + for (GpTeacherVo.IdNameCode group : teacher.getGroups()) { + Long count = GroupCount.getOrDefault(group.getName(), 0L); + GroupCount.put(group.getName(), count + 1); + } + } + } + } + }else if(StringUtils.isNotEmpty(teacherDto.getGrade()) && StringUtils.isEmpty(teacherDto.getSubjectId())) { + + for (GpTeacherVo teacher : teachersList) { + if(teacher.getGrade() != null && teacher.getGrade().contains(teacherDto.getGrade())) { + { + Long count = gradeCount.getOrDefault(teacherDto.getGrade(), 0L); + gradeCount.put(teacherDto.getGrade(), count + 1); + } + if(StringUtils.isNotEmpty(teacher.getDegree())) { + { + Long count = degreeCount.getOrDefault(teacher.getDegree(), 0L); + degreeCount.put(teacher.getDegree(), count + 1); + } + } + if(teacher.getSubjectIds()!= null) { + for (String subjectId : teacher.getSubjectIds()) { + int index = teacher.subjectIds.indexOf(subjectId); + String name = ""; + if (index >= 0) { + name = teacher.subjectNames.get(index); + } + Long count = subjectCount.getOrDefault(name, 0L); + subjectCount.put(name, count + 1); + } + } + if(teacher.getGroups() != null) { + for (GpTeacherVo.IdNameCode group : teacher.getGroups()) { + Long count = GroupCount.getOrDefault(group.getName(), 0L); + GroupCount.put(group.getName(), count + 1); + } + } + } + } + + }else { + for (GpTeacherVo teacher : teachersList) { + if(teacher.getGrade() != null) { + for (String grade : teacher.getGrade()) { + Long count = gradeCount.getOrDefault(grade, 0L); + gradeCount.put(grade, count + 1); + } + } + if(StringUtils.isNotEmpty(teacher.getDegree())) { + { + Long count = degreeCount.getOrDefault(teacher.getDegree(), 0L); + degreeCount.put(teacher.getDegree(), count + 1); + } + } + if(teacher.getSubjectIds()!= null) { + for (String subjectId : teacher.getSubjectIds()) { + int index = teacher.subjectIds.indexOf(subjectId); + String name = ""; + if (index >= 0) { + name = teacher.subjectNames.get(index); + } + Long count = subjectCount.getOrDefault(name, 0L); + subjectCount.put(name, count + 1); + } + } + if(teacher.getGroups() != null) { + for (GpTeacherVo.IdNameCode group : teacher.getGroups()) { + Long count = GroupCount.getOrDefault(group.getName(), 0L); + GroupCount.put(group.getName(), count + 1); + } + } + + } + } + + gradesMap.put("grade", gradeCount); + degreesMap.put("degree", degreeCount); + subjectsMap.put("subject", subjectCount); + groupsMap.put("group", GroupCount); + distributionList.add(gradesMap); + distributionList.add(degreesMap); + distributionList.add(subjectsMap); + distributionList.add(groupsMap); + + /* Map genderCount = gpTeachers.stream() + .collect(Collectors.groupingBy(gpTeacher -> gpTeacher.getBasic().getGender(), Collectors.counting())); + Map degreeCount = gpTeachers.stream() + .filter(gpTeacher -> gpTeacher.getDegree() != null) + .collect(Collectors.groupingBy(GpTeacher::getDegree, Collectors.counting()));*/ + + + + + }catch (Exception e) { + throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据转换错误"); + + } + return distributionList; + } + public Map getTeacherBase(GpTeacherDto gpTeacherDto, HttpServletRequest request) { Map gradeMap; diff --git a/src/main/java/cn/teammodel/model/entity/school/GpTeacher.java b/src/main/java/cn/teammodel/model/entity/school/GpTeacher.java index 787b9f8..11fd9fb 100644 --- a/src/main/java/cn/teammodel/model/entity/school/GpTeacher.java +++ b/src/main/java/cn/teammodel/model/entity/school/GpTeacher.java @@ -13,6 +13,7 @@ public class GpTeacher { /// 简介 /// public String describe ; + public String id ; /// /// 描述 diff --git a/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java b/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java index af59296..526c5ee 100644 --- a/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java +++ b/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java @@ -21,6 +21,7 @@ public class GpTeacherVo { public String degree; public Long practiceTime ; public String gender ; + public List grade; @Data public static class IdNameCode{ public String id ; diff --git a/src/main/java/cn/teammodel/model/vo/admin/TeacherGradeVo.java b/src/main/java/cn/teammodel/model/vo/admin/TeacherGradeVo.java new file mode 100644 index 0000000..cf279c9 --- /dev/null +++ b/src/main/java/cn/teammodel/model/vo/admin/TeacherGradeVo.java @@ -0,0 +1,17 @@ +package cn.teammodel.model.vo.admin; + +import lombok.Data; + +import java.util.List; + +@Data +public class TeacherGradeVo { + private List grade; + private String id; + private String name; + @Data + public static class IdAndName{ + public Integer grade; + public String gradeName; + } +}