From ccce75df4fbe75b16e3edc90395fabd04602f7c7 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Wed, 16 Apr 2025 17:26:07 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=AE=8C=E6=88=90=E6=95=99=E7=A0=94?= =?UTF-8?q?=E6=95=99=E5=AD=A6=20=20=E8=8D=A3=E8=AA=89=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E7=AC=AC=E4=B8=80=E7=89=88?= 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 | 178 ++++++++++++++---- .../model/dto/admin/teacher/GpTeacherDto.java | 4 +- .../model/entity/teacher/HonorInfo.java | 23 +++ .../java/cn/teammodel/utils/GroupUtil.java | 6 +- 6 files changed, 180 insertions(+), 38 deletions(-) create mode 100644 src/main/java/cn/teammodel/model/entity/teacher/HonorInfo.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 4bf4937..fd701c0 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java @@ -72,6 +72,12 @@ public class TeacherController { List>> res = teacherService.getTeachingOfTeacher(teacherDto,request); return R.success(res); } + @PostMapping("getTeacherOfCapabilityAssessment") + @ApiOperation("获取教师能力考核数据") + public R> getTeacherOfCapabilityAssessment(@Valid @RequestBody TeacherDto teacherDto, HttpServletRequest request) { + Map res = teacherService.getTeacherOfCapabilityAssessment(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 9ca4305..f5d3a30 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java +++ b/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java @@ -17,4 +17,5 @@ public interface TeacherService { List>> getDistributionOfTeachers(TeacherDto teacherDto, HttpServletRequest request); Map getTeachingAndResearch(TeacherDto teacherDto, HttpServletRequest request); List>> getTeachingOfTeacher(TeacherDto teacherDto, HttpServletRequest request); + Map getTeacherOfCapabilityAssessment(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 70823eb..89f726f 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 @@ -8,6 +8,7 @@ import cn.teammodel.model.dto.admin.teacher.GpTeacherDto; import cn.teammodel.model.dto.admin.teacher.TeacherDto; import cn.teammodel.model.entity.common.GroupList; import cn.teammodel.model.entity.school.*; +import cn.teammodel.model.entity.teacher.HonorInfo; import cn.teammodel.model.vo.admin.GpTeacherVo; import cn.teammodel.model.vo.admin.SugVo; import cn.teammodel.model.vo.admin.TeacherGradeVo; @@ -60,7 +61,7 @@ public class TeacherServiceImpl implements TeacherService { private PaperTeacherRepository paperTeacherRepository; @Autowired private Environment env; - + private static final double K = 0.08; // 衰减系数常量 @Override public List> getTeacherList(TeacherDto teacherDto) { List> result = new ArrayList<>(); @@ -911,40 +912,8 @@ public class TeacherServiceImpl implements TeacherService { mapTeach.put("Lessons",records.size()); //资源数量:试卷数量 mapTeach.put("paperCount",count); - return mapTeach; } - - //Map map = new HashMap<>(); - /*//录课数 - map.put("Lessons",new Random().nextInt(100) + 1); - //T(数据) - map.put("TData",new Random().nextInt(100) + 1); - //T(绿灯) - map.put("TGreen",new Random().nextInt(100) + 1); - //双绿灯 - map.put("DoubleGreen",new Random().nextInt(100) + 1); - //观课数 - map.put("WLessons",new Random().nextInt(100) + 1); - //议课数 - map.put("TLessons",new Random().nextInt(100) + 1); - //频道数 - map.put("Channels",new Random().nextInt(20) + 1); - //公开课 - map.put("OLessons",new Random().nextInt(100) + 1); - //课件数 - map.put("Coursewares",new Random().nextInt(100) + 1); - //教案数 - map.put("TeachingPlan",new Random().nextInt(40) + 1); - //公开标记 - map.put("OMarkers",new Random().nextInt(30) + 1); - //个人标记 - map.put("PMarkers",new Random().nextInt(30) + 1); - //被标记数 - map.put("TMarkers",new Random().nextInt(30) + 1); - //被点阅数 - map.put("ClickAndRead",new Random().nextInt(100) + 1);*/ - //return map; } @Override @@ -1032,6 +1001,130 @@ public class TeacherServiceImpl implements TeacherService { return list; } + @Override + public Map getTeacherOfCapabilityAssessment(TeacherDto teacherDto, HttpServletRequest request) { + Map result = new HashMap<>(); + try { + // 初始化四项数据 + double TData = 0, TGreen = 0, Lessons = 0, paperCount = 0,LessonCount = 0,DoubleGreenCount = 0,MaterialCount = 0,PublicCount = 0; + + // 获取原始数据集合 + Map resMap = getTeachingAndResearch(teacherDto, request); + Map detailMap = getTeacherDetail(teacherDto, request); + GpTeacherDto gpTeacherDto = new GpTeacherDto(); + List ownerIds = gpTeacherDto.getOwnerIds(); // 假设有一个 getOwnerIds 方法 + if (ownerIds == null) { + ownerIds = new ArrayList<>(); + } + ownerIds.add(teacherDto.getTmdId()); + gpTeacherDto.setOwnerIds(ownerIds); + + List teachersList = new ArrayList<>(); + teachersList = (List) detailMap.get("info"); + // 遍历并提取八项数据 + for (Map.Entry entry : resMap.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + if (value instanceof Integer) { // 类型安全校验 + switch (key) { + case "TData": TData = (Integer) value; break; + case "TGreen": TGreen = (Integer) value; break; + case "Lessons": Lessons = (Integer) value; break; + case "paperCount": paperCount = (Integer) value; break; + case "LessonCount": LessonCount = (Integer) value; break; + case "DoubleGreenCount": DoubleGreenCount = (Integer) value; break; + case "MaterialCount": MaterialCount = (Integer) value; break; + case "PublicCount": PublicCount = (Integer) value; break; + } + } + } + if (!StringUtils.isNotEmpty(teacherDto.getTmdId())) { + TData = Math.round((TData / teachersList.size()) * 100.0) / 100.0; + TGreen = Math.round((TGreen / teachersList.size()) * 100.0) / 100.0; + Lessons = Math.round((Lessons / teachersList.size()) * 100.0) / 100.0; + paperCount = Math.round((paperCount / teachersList.size()) * 100.0) / 100.0; + LessonCount = Math.round((LessonCount / teachersList.size()) * 100.0) / 100.0; + DoubleGreenCount = Math.round((DoubleGreenCount / teachersList.size()) * 100.0) / 100.0; + MaterialCount = Math.round((MaterialCount / teachersList.size()) * 100.0) / 100.0; + PublicCount = Math.round((PublicCount / teachersList.size()) * 100.0) / 100.0; + List ids = teachersList.stream() + .map(GpTeacherVo::getId) + .collect(Collectors.toList()); + gpTeacherDto.setOwnerIds(ids); + } + + Map honor = getTeacherHonors(gpTeacherDto, request); + List honors = new ArrayList<>(); + Object honorsObj = honor.get("honors"); + if (honorsObj instanceof List) { + List rawHonors = (List) honorsObj; + + for (Object item : rawHonors) { + if (item instanceof Map) { + Map map = (Map) item; + HonorInfo info = new HonorInfo(); + + // 手动设置属性,假设 HonorInfo 有对应的 setter 方法 + info.setScore((Integer) map.get("score")); // 根据字段名称匹配 + // 设置其他字段 + // info.setHonorName((String) map.get("honorName")); + honors.add(info); + } else if (item instanceof HonorInfo) { + honors.add((HonorInfo) item); + } + } + } + double honorScores = 0; + for (HonorInfo honorInfo : honors) { + double score = honorInfo.getScore().doubleValue(); + honorScores += score; + } + + // 基础分计算 + double honorScore = (honorScores > 0) ? 100.0 - 20.0 / honorScores : 60; + + // 计算各维度贡献值(使用指数衰减函数) + double tDataScore = 25 * (1 - Math.exp(-K * TData)); + double tGreenScore = 50 * (1 - Math.exp(-K * TGreen)); + double lessonsScore = 15 * (1 - Math.exp(-K * Lessons)); + double paperScore = 10 * (1 - Math.exp(-K * paperCount)); + //计算教学贡献值 + // 基础分计算 + double baseScore = (DoubleGreenCount > 0) ? 100.0 - 40.0 / DoubleGreenCount : 0; + + // 附加分计算 + double lessonScore = (LessonCount >= 1) ? (5.0 - 3.0 / LessonCount) : 0; + double materialScore = (MaterialCount >= 1) ? (3.0 - 1.0 / MaterialCount) : 0; + double publicScore = (PublicCount >= 1) ? (2.0 - 1.0 / PublicCount) : 0; + + // 总分计算(不超过100) + double totalTeachingScore = baseScore + lessonScore + materialScore + publicScore; + totalTeachingScore = Math.round(totalTeachingScore * 100.0) / 100.0; + totalTeachingScore = Math.min(totalTeachingScore, 100.0); + + // 计算总分(保留两位小数) + double totalScore = tDataScore + tGreenScore + lessonsScore + paperScore; + totalScore = Math.round(totalScore * 100.0) / 100.0; // 四舍五入 + + // 特殊规则处理:TGreen>1时最低60分 + if (TGreen > 1 && totalScore < 60) { + totalScore = 60.0; + } + + // 构建返回结果 + result.put("teachingScore", totalScore); + result.put("researchScore", totalTeachingScore); + result.put("honorScore", honorScore); + result.put("trainingScore", 0); + result.put("scientificScore", 0); + + + } catch (Exception ex) { + throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "数据转换错误: " + ex.getMessage()); + } + return result; + } + private @NotNull List getSugVos(TeacherDto teacherDto, HttpServletRequest request) { String url = env.getProperty("ies.server-url-get-channel-data"); Map overView; @@ -1125,7 +1218,24 @@ public class TeacherServiceImpl implements TeacherService { Map gradeMap; try { - gradeMap = GroupUtil.getTeacherInfo(gpTeacherDto,new GroupUtil(env), request); + String url = "open_teacher/find"; + gpTeacherDto.setGrant_type("mobiles_infos"); + gradeMap = GroupUtil.getTeacherInfo(gpTeacherDto,new GroupUtil(env), request, url); + }catch (Exception e) { + throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "国培数据转换错误"); + + } + return gradeMap; + } + + //获取教师荣誉 + public Map getTeacherHonors(GpTeacherDto gpTeacherDto, HttpServletRequest request) { + + Map gradeMap; + try { + String url = "open_honor/find"; + gpTeacherDto.setGrant_type("list"); + gradeMap = GroupUtil.getTeacherInfo(gpTeacherDto,new GroupUtil(env), request, url); }catch (Exception e) { throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "国培数据转换错误"); diff --git a/src/main/java/cn/teammodel/model/dto/admin/teacher/GpTeacherDto.java b/src/main/java/cn/teammodel/model/dto/admin/teacher/GpTeacherDto.java index cc64ce6..9ca1ab6 100644 --- a/src/main/java/cn/teammodel/model/dto/admin/teacher/GpTeacherDto.java +++ b/src/main/java/cn/teammodel/model/dto/admin/teacher/GpTeacherDto.java @@ -6,7 +6,9 @@ import java.util.List; @Data public class GpTeacherDto { - private String grant_type = "mobiles_infos"; + private String grant_type ; private String client = "7D340153-3B66-4BAF-8F1E-2EE02F7E1828"; + private String itemClient = "7D340153-3B66-4BAF-8F1E-2EE02F7E1828"; private List mobiles; + private List ownerIds; } diff --git a/src/main/java/cn/teammodel/model/entity/teacher/HonorInfo.java b/src/main/java/cn/teammodel/model/entity/teacher/HonorInfo.java new file mode 100644 index 0000000..6af81bf --- /dev/null +++ b/src/main/java/cn/teammodel/model/entity/teacher/HonorInfo.java @@ -0,0 +1,23 @@ +package cn.teammodel.model.entity.teacher; + +import cn.teammodel.model.entity.BaseItem; +import com.azure.spring.data.cosmos.core.mapping.Container; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Container(containerName = " Common") +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class HonorInfo extends BaseItem { + public Integer type; + public Integer order; + public String aliasName; + public String desc; + public String ownerId; + public String ownerName; + public Integer status; + public Integer score = 0; + public Integer source; +} diff --git a/src/main/java/cn/teammodel/utils/GroupUtil.java b/src/main/java/cn/teammodel/utils/GroupUtil.java index f16d86d..b08e927 100644 --- a/src/main/java/cn/teammodel/utils/GroupUtil.java +++ b/src/main/java/cn/teammodel/utils/GroupUtil.java @@ -77,16 +77,16 @@ public class GroupUtil { return mapper; } - public static Map getTeacherInfo(Object obj, GroupUtil groupUtil, HttpServletRequest request) { + public static Map getTeacherInfo(Object obj, GroupUtil groupUtil, HttpServletRequest request,String url) { Map mapper = new HashMap<>(); String evnStr = groupUtil.env.getProperty("spring.env"); String apiUrl; if (evnStr != null && evnStr.equalsIgnoreCase("dev")) { - apiUrl = "https://gp.winteach.cn/open_teacher/find"; + apiUrl = "https://gp-test.winteach.cn/"+url; }else { - apiUrl = "https://gp.winteach.cn/open_teacher/find"; + apiUrl = "https://gp.winteach.cn/"+url; } try (CloseableHttpClient httpClient = HttpClients.createDefault()) {