update 教师分布统计

develop
hhb@hotmail.com 3 weeks ago
parent 49cfb37404
commit e447351729

@ -54,5 +54,11 @@ public class TeacherController {
Map<String, Object> res = teacherService.getTeacherGradeCount(teacherDto,request);
return R.success(res);
}
@PostMapping("getDistributionOfTeachers")
@ApiOperation("获取教师分布情况")
public R<List<Map<String,Map<String, Long>>>> getDistributionOfTeachers(@Valid @RequestBody TeacherDto teacherDto, HttpServletRequest request) {
List<Map<String,Map<String, Long>>> res = teacherService.getDistributionOfTeachers(teacherDto,request);
return R.success(res);
}
}

@ -13,4 +13,5 @@ public interface TeacherService {
Map<Long, Integer> getTeacherByRecord(TeacherDto teacherDto);
Map<String,Object> getTeacherLearningCategory(TeacherDto teacherDto);
Map<String,Object> getTeacherGradeCount(TeacherDto teacherDto, HttpServletRequest request);
List<Map<String,Map<String, Long>>> getDistributionOfTeachers(TeacherDto teacherDto, HttpServletRequest request);
}

@ -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<String>) map.get("roles"));
teacher.setGroups((List<GpTeacherVo.IdNameCode>) map.get("groups"));
//teacher.setGroups((List<GpTeacherVo.IdNameCode>) map.get("groups"));
List<Map<String, Object>> groupList = (List<Map<String, Object>>) map.get("groups");
if (groupList != null) {
List<GpTeacherVo.IdNameCode> groups = new ArrayList<>();
for (Map<String, Object> 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<String, Object> map) {
TeacherGradeVo teacher = new TeacherGradeVo();
teacher.setName((String) map.get("name"));
teacher.setId((String) map.get("tmdId"));
// 处理 grade 字段
List<Map<String, Object>> gradeList = (List<Map<String, Object>>) map.get("grade");
if (gradeList != null) {
List<TeacherGradeVo.IdAndName> grades = new ArrayList<>();
for (Map<String, Object> 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<String, Object> 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<Map<String,Map<String, Long>>> getDistributionOfTeachers(TeacherDto teacherDto, HttpServletRequest request) {
List<Map<String,Map<String, Long>>> distributionList = new ArrayList<>();
Map<String,Map<String, Long>> gradesMap = new HashMap<>();
Map<String,Map<String, Long>> degreesMap = new HashMap<>();
Map<String,Map<String, Long>> subjectsMap= new HashMap<>();
Map<String,Map<String, Long>> groupsMap = new HashMap<>();
Map<String, Object> teachers;
//获取全学校教师名单详情
String url = env.getProperty("ies.server-url-get-teacher-all");
try {
teachers = GroupUtil.getGroupId(teacherDto,new GroupUtil(env), request,url);
List<GpTeacherVo> teachersList = new ArrayList<>();
for (Map.Entry<String, Object> entry : teachers.entrySet()) {
// 假设 entry.getValue() 返回的是 List<Map<String, Object>>
List<Map<String, Object>> mapList = (List<Map<String, Object>>) entry.getValue();
for (Map<String, Object> map : mapList) {
// 将 Map 转换为 GpTeacherVo 对象
GpTeacherVo teacher = convertToGpTeacherVo(map);
teachersList.add(teacher);
}
}
List<String> phones = new ArrayList<>();
// 进一步处理 teachersList
for (GpTeacherVo teacher : teachersList) {
phones.add(teacher.getPhone());
}
GpTeacherDto gpTeacherDto = new GpTeacherDto();
gpTeacherDto.setMobiles(phones);
Map<String, Object> tBase = getTeacherBase(gpTeacherDto, request);
List<GpTeacher> gpTeachers = new ArrayList<>();
for (Map.Entry<String, Object> entry : tBase.entrySet()) {
if (entry.getKey().equals("teachers")) {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) entry.getValue();
for (Map<String, Object> dataMap : dataList) {
GpTeacher gpTeacher = convertToGpTeacher(dataMap);
gpTeachers.add(gpTeacher);
}
}
}
//把对应年级的信息进行映射
List<TeacherGradeVo> gradeList = new ArrayList<>();
Map<String,Object> gradeInfo = getTeacherGradeCount(teacherDto, request);
for (Map.Entry<String, Object> entry : gradeInfo.entrySet()) {
if (entry.getKey().equals("teacher")) {
List<Map<String, Object>> dataList = (List<Map<String, Object>>) entry.getValue();
for (Map<String, Object> 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<TeacherGradeVo.IdAndName> 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<String, Long> gradeCount = new HashMap<>();
Map<String, Long> degreeCount = new HashMap<>();
Map<String, Long> subjectCount = new HashMap<>();
Map<String, Long> 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<String, Long> genderCount = gpTeachers.stream()
.collect(Collectors.groupingBy(gpTeacher -> gpTeacher.getBasic().getGender(), Collectors.counting()));
Map<String, Long> 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<String, Object> getTeacherBase(GpTeacherDto gpTeacherDto, HttpServletRequest request) {
Map<String, Object> gradeMap;

@ -13,6 +13,7 @@ public class GpTeacher {
/// 简介
/// </summary>
public String describe ;
public String id ;
/// <summary>
/// 描述

@ -21,6 +21,7 @@ public class GpTeacherVo {
public String degree;
public Long practiceTime ;
public String gender ;
public List<String> grade;
@Data
public static class IdNameCode{
public String id ;

@ -0,0 +1,17 @@
package cn.teammodel.model.vo.admin;
import lombok.Data;
import java.util.List;
@Data
public class TeacherGradeVo {
private List<IdAndName> grade;
private String id;
private String name;
@Data
public static class IdAndName{
public Integer grade;
public String gradeName;
}
}
Loading…
Cancel
Save