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 2540a4c..351e905 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java @@ -31,7 +31,7 @@ public class TeacherController { return R.success(res); } @PostMapping("getTeacherDetail") - @ApiOperation("获取教师素质素养数据") + @ApiOperation("获取教师详细数据") public R> getTeacherDetail(@Valid @RequestBody TeacherDto teacherDto, HttpServletRequest request) { Map res = teacherService.getTeacherDetail(teacherDto,request); return R.success(res); @@ -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/CommonServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/CommonServiceImpl.java index 439bc32..7d1a810 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/CommonServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/CommonServiceImpl.java @@ -12,11 +12,14 @@ import cn.teammodel.repository.CommentRepository; import cn.teammodel.repository.SchoolRepository; import cn.teammodel.utils.MonthToNumberConverter; import com.azure.cosmos.models.PartitionKey; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.Instant; +import java.time.LocalDate; import java.time.Month; +import java.time.ZoneId; import java.util.ArrayList; import java.util.List; @@ -38,10 +41,20 @@ public class CommonServiceImpl implements CommonService { //获取当前学校该学段下详细信息 List period = schoolRepository.findPeriodById(gcDto.getSchoolId(), gcDto.getPeriodId()); List classes = classRepository.findClassBySchoolIdAndPeriodId(gcDto.getPeriodId()); - int year = now().getYear(); - Month month = now().getMonth(); - int mon = MonthToNumberConverter.convertMonthToNumber(month.name()); - int day = now().getDayOfMonth(); + int year = 0; + int mon = 0; + int day = 0; + if (gcDto.getTime() != null && gcDto.getTime() != 0L) { + LocalDate date = Instant.ofEpochMilli(gcDto.getTime()).atZone(ZoneId.systemDefault()).toLocalDate(); + year = date.getYear(); + mon = date.getMonthValue(); + day = date.getDayOfMonth(); + }else { + year = now().getYear(); + Month month = now().getMonth(); + mon = MonthToNumberConverter.convertMonthToNumber(month.name()); + day = now().getDayOfMonth(); + } //处理年级ID for (ClassInfo classInfo : classes) { if(period.get(0).getId().equalsIgnoreCase(classInfo.getPeriodId())) { 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 0b652fd..3443214 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; @@ -144,11 +145,51 @@ public class TeacherServiceImpl implements TeacherService { Map degreeCount = gpTeachers.stream() .filter(gpTeacher -> gpTeacher.getDegree() != null) .collect(Collectors.groupingBy(GpTeacher::getDegree, Collectors.counting())); - Map practiceCount = getStringIntegerMap(teacherDto, gpTeachers); + //Map practiceCount = getStringIntegerMap(teacherDto, gpTeachers); + + if(!genderCount.containsKey("F")) { + genderCount.put("F",0L); + }else if (!genderCount.containsKey("S")) { + genderCount.put("S",0L); + }else if (!genderCount.containsKey("M")){ + genderCount.put("M",0L); + } + /* Map genderMap = new HashMap<>(); + Map practiceMap = new HashMap<>(); + for (GpTeacher gpTeacher : gpTeachers) { + genderMap.put(gpTeacher.basic.name, gpTeacher.basic.gender); + practiceMap.put(gpTeacher.basic.name, gpTeacher.practiceTime); + }*/ - teachers.put("practice", practiceCount); + 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; + } + } + } + //teachers.put("practice", practiceCount); + //teachers.put("practiceMap", practiceMap); + //teachers.put("genderMap", genderMap); teachers.put("gender", genderCount); teachers.put("degree", degreeCount); + teachers.put("info", teachersList); + teachers.remove("teachers"); }catch (Exception e) { throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据转换错误"); @@ -181,6 +222,54 @@ public class TeacherServiceImpl implements TeacherService { teacher.setName((String) map.get("name")); teacher.setPhone((String) map.get("phone")); teacher.setId((String) map.get("id")); + teacher.setEmail((String) map.get("email")); + teacher.setPicture((String) map.get("picture")); + teacher.setIname((String) map.get("iname")); + teacher.setJob((String) map.get("job")); + teacher.setRoles((List) map.get("roles")); + //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")); + teacher.setNote((String) map.get("note")); + teacher.setSubjectIds((List) map.get("subjectIds")); + teacher.setSubjectNames((List) map.get("subjectNames")); + // 根据实际属性进行转换 + return teacher; + } + + private TeacherGradeVo convertToTeacherGradeVo(Map map) { + TeacherGradeVo teacher = new TeacherGradeVo(); + teacher.setName((String) map.get("name")); + teacher.setId((String) map.get("tmdId")); + teacher.setPeriodId((String) map.get("periodId")); + // 处理 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; } @@ -193,6 +282,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); @@ -214,6 +309,12 @@ public class TeacherServiceImpl implements TeacherService { } else { teacher.setTitle(null); // 或者设置一个默认值 } + Object mobileObj = map.get("mobile"); + if (mobileObj instanceof String) { + teacher.setMobile((String) mobileObj); + } else { + teacher.setMobile(null); // 或者设置一个默认值 + } Object degreeObj = map.get("degree"); if (degreeObj instanceof String) { teacher.setDegree((String) degreeObj); @@ -372,6 +473,261 @@ 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(StringUtils.isNotEmpty(teacher.getId()) && teacher.getId().equals(grade.getId())) { + if(StringUtils.isNotEmpty(grade.getPeriodId())) { + teacher.setPeriodId(grade.getPeriodId()); + } + 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); + + } + } + } + } + + teachersList = teachersList.stream() + .filter(teacher -> teacherDto.periodId.equals(teacher.getPeriodId())) + .collect(Collectors.toList()); + 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); + } + } + + } + } + gradeCount.keySet().removeIf(key -> key.startsWith("20")); + 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/dto/admin/common/GCDto.java b/src/main/java/cn/teammodel/model/dto/admin/common/GCDto.java index d3afa41..22c8955 100644 --- a/src/main/java/cn/teammodel/model/dto/admin/common/GCDto.java +++ b/src/main/java/cn/teammodel/model/dto/admin/common/GCDto.java @@ -6,4 +6,5 @@ import lombok.Data; public class GCDto { private String schoolId; private String periodId; + private Long time; } diff --git a/src/main/java/cn/teammodel/model/dto/admin/teacher/TeacherDto.java b/src/main/java/cn/teammodel/model/dto/admin/teacher/TeacherDto.java index 86e1c2d..211e1ad 100644 --- a/src/main/java/cn/teammodel/model/dto/admin/teacher/TeacherDto.java +++ b/src/main/java/cn/teammodel/model/dto/admin/teacher/TeacherDto.java @@ -20,4 +20,5 @@ public class TeacherDto { public String grade; @ApiModelProperty("科目信息") public String subjectId; + public String semesterId; } 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 ff09116..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,12 +13,15 @@ public class GpTeacher { /// 简介 /// public String describe ; + public String id ; /// /// 描述 /// public String depict ; + public String mobile; + /// /// 学段 /// 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 941e401..efd5d6b 100644 --- a/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java +++ b/src/main/java/cn/teammodel/model/vo/admin/GpTeacherVo.java @@ -2,9 +2,34 @@ package cn.teammodel.model.vo.admin; import lombok.Data; +import java.util.List; + @Data public class GpTeacherVo { public String id ; public String name ; public String phone ; + public String email ; + public String picture ; + public String iname ; + public String job ; + public List subjectIds ; + public List subjectNames ; + public List roles; + public List groups; + public String note ; + public String degree; + public Long practiceTime ; + public String gender ; + public List grade; + public String periodId ; + @Data + public static class IdNameCode{ + public String id ; + public String name ; + public String code ; + public String picture ; + public String nickname ; + } + } 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..6efb10e --- /dev/null +++ b/src/main/java/cn/teammodel/model/vo/admin/TeacherGradeVo.java @@ -0,0 +1,18 @@ +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; + private String periodId; + @Data + public static class IdAndName{ + public Integer grade; + public String gradeName; + } +}