From 7c6c2327060a9b7b2835f926d0a9f56cbee2e7b3 Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Wed, 4 Jun 2025 14:42:03 +0800 Subject: [PATCH] =?UTF-8?q?updates=2025=E5=B9=B4=E9=9F=B3=E4=B9=90?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YxHistoryMajorEnrollController.java | 47 ++++- .../yx/controller/YxScoreController.java | 3 +- .../modules/yx/service/impl/MusicService.java | 162 +++++++++++++++++- 3 files changed, 205 insertions(+), 7 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java index a7e6b16..1ac1b60 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/controller/YxHistoryMajorEnrollController.java @@ -216,11 +216,28 @@ public class YxHistoryMajorEnrollController extends JeecgController insertNewMajorList() { LambdaQueryWrapper helqw = new LambdaQueryWrapper<>(); helqw.eq(YxHistoryMajorEnroll::getYear,"2024"); - helqw.eq(YxHistoryMajorEnroll::getMajorType,"美术与设计类"); + helqw.eq(YxHistoryMajorEnroll::getMajorType,"音乐类"); List list = yxHistoryMajorEnrollService.list(helqw); + + LambdaQueryWrapper smlqw = new LambdaQueryWrapper<>(); + smlqw.eq(YxSchoolMajor::getMajorType,"音乐类"); + List yxSchoolMajorList = yxSchoolMajorService.list(smlqw); + Map map = new HashMap<>(); + String key = ""; + String key2 = ""; + for (YxSchoolMajor yxSchoolMajor : yxSchoolMajorList) { + key = yxSchoolMajor.getSchoolCode()+"_"+ yxSchoolMajor.getMajorName() + "_" + yxSchoolMajor.getBatch() + "_" + yxSchoolMajor.getCategory(); + map.put(key,yxSchoolMajor); + } YxSchoolMajor yxSchoolMajor = null; + + List saveOrUpdateList = new ArrayList<>(); for (YxHistoryMajorEnroll yxHistoryMajorEnroll : list) { - yxSchoolMajor = new YxSchoolMajor(); + key2 = yxHistoryMajorEnroll.getSchoolCode()+"_"+ yxHistoryMajorEnroll.getMajorName() + "_" + yxHistoryMajorEnroll.getBatch() + "_" + yxHistoryMajorEnroll.getCategory(); + yxSchoolMajor = map.get(key2); + if (yxSchoolMajor == null){ + yxSchoolMajor = new YxSchoolMajor(); + } yxSchoolMajor.setSchoolCode(yxHistoryMajorEnroll.getSchoolCode()); yxSchoolMajor.setMajorCode(yxHistoryMajorEnroll.getMajorCode()); yxSchoolMajor.setBatch(yxHistoryMajorEnroll.getBatch()); @@ -230,11 +247,31 @@ public class YxHistoryMajorEnrollController extends JeecgController 0, "[文化成绩]最高分为750"); AssertUtils.notTrue(culturalScore.compareTo(YxConstant.bigDecimal0) < 0, "[文化成绩]最低分为0"); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/MusicService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/MusicService.java index 664825a..5514071 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/MusicService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/MusicService.java @@ -1,6 +1,7 @@ package org.jeecg.modules.yx.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.jeecg.modules.web.dto.ArtTestCulturalDTO; @@ -18,6 +19,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -29,6 +31,7 @@ import java.util.stream.Collectors; * @Date 2024/3/4 11:13 */ @Service +@Slf4j public class MusicService { @Resource private IYxHistoryScoreControlLineService yxHistoryScoreControlLineService; @@ -38,7 +41,7 @@ public class MusicService { /** * 音乐类的 分数计算方式 */ - public void musicRecommendMajorListSetEnrollProbability(List recommendMajorList, YxUserScore activeCurrentUserScore) { + public void musicRecommendMajorListSetEnrollProbability_2024year(List recommendMajorList, YxUserScore activeCurrentUserScore) { try { //专业类别 String professionalCategory = activeCurrentUserScore.getProfessionalCategory(); @@ -325,6 +328,163 @@ public class MusicService { } } + /** + * 音乐类的 分数计算方式 + */ + public void musicRecommendMajorListSetEnrollProbability(List recommendMajorList, YxUserScore activeCurrentUserScore) { + int index = 0; + try { + long startTime = new Date().getTime(); + //专业类别 + String professionalCategory = activeCurrentUserScore.getProfessionalCategory(); + String rulesEnrollProbability = null; + String probabilityOperator = null; + String showRulesEnrollProbability = null; + String showProbabilityOperator = null; + String nowBatch = activeCurrentUserScore.getBatch(); + BigDecimal studentScore = null;//学生折合分 + BigDecimal privateStudentScore = null;//学生折合分显示用 + BigDecimal culturalScore = activeCurrentUserScore.getCulturalScore();//学生的文化分 + BigDecimal professionalScore = activeCurrentUserScore.getProfessionalScore();//学生的专业分 + BigDecimal nowYearDiff = null;//当前年分差 + Map batchControlLineMaps = new LinkedHashMap<>(); + // batchControlLineMaps = yxHistoryScoreControlLineService.mapsBatchByProfessionalCategoryOfYear(Integer.parseInt(YxConstant.nowYear), professionalCategory, activeCurrentUserScore.getCognitioPolyclinic()) + LambdaQueryWrapper yhsclWrapper = new LambdaQueryWrapper<>(); + yhsclWrapper.eq(YxHistoryScoreControlLine::getCategory,activeCurrentUserScore.getCognitioPolyclinic()); + yhsclWrapper.in(YxHistoryScoreControlLine::getBatch,"本科","高职高专"); + yhsclWrapper.like(YxHistoryScoreControlLine::getProfessionalCategory,"音乐类-"); + List yhsclList = yxHistoryScoreControlLineService.list(yhsclWrapper); + String key = null; + for (YxHistoryScoreControlLine yhscl : yhsclList) { + key = yhscl.getCategory()+"-"+ yhscl.getBatch()+"-"+yhscl.getProfessionalCategory(); + batchControlLineMaps.put(key,yhscl); + } + // Map historyScoreControlLineMap = yxHistoryScoreControlLineService.mapsBatchByProfessionalCategoryOfYear(Integer.parseInt(YxConstant.nowYear), professionalCategory, activeCurrentUserScore.getCognitioPolyclinic()); + BigDecimal culturalControlLine = null;//文化分省控线 + BigDecimal specialControlLine = null;//专业分省控线 + BigDecimal nowYearProvincialControlLine = null;//当前年省控线 + BigDecimal historyThreeYearDiff = null;//近三年平均差值 + BigDecimal enrollProbability = null;//录取率 + Map differenceMap = null; + List historyMajorEnrollList = null;//历年录取信息 + if (CollectionUtils.isNotEmpty(recommendMajorList)) { + //遍历专业列表 + for (RecommendMajorDTO recommendMajorDTO : recommendMajorList) { + index++; + //取出往年的分数信息, 算出 三年平均差值 + historyMajorEnrollList = recommendMajorDTO.getHistoryMajorEnrollList(); + rulesEnrollProbability = recommendMajorDTO.getPrivateRulesEnrollProbability(); + probabilityOperator = recommendMajorDTO.getPrivateProbabilityOperator(); + if ("1103".equals(recommendMajorDTO.getSchoolCode())) { + System.out.println("111"); + } + + key = recommendMajorDTO.getCategory(); + + if("高职高专".equals(recommendMajorDTO.getBatch())){ + key = key + "-" + recommendMajorDTO.getBatch(); + }else{ + key = key + "-本科"; + } + // 判断是 音乐教育还是音乐表演 器乐/声乐 + if ("音乐类".equals(professionalCategory)) { + key = key +"-音乐类-"+ recommendMajorDTO.getMajorTypeChild(); + if ("音乐表演".equals(recommendMajorDTO.getMajorTypeChild())) { + key += recommendMajorDTO.getMainSubjects(); + if("器乐".equals(recommendMajorDTO.getMainSubjects())){ + professionalScore = activeCurrentUserScore.getYybyqy(); + }else{ + professionalScore = activeCurrentUserScore.getYybysy(); + } + }else{ + professionalScore = activeCurrentUserScore.getYyjy(); + } + batchControlLineMaps.get(recommendMajorDTO.getBatch()); + } + culturalControlLine = batchControlLineMaps.get(key).getCulturalScore(); + specialControlLine = batchControlLineMaps.get(key).getSpecialScore(); + //没有计算方式 跳过 + if (StringUtils.isBlank(rulesEnrollProbability)) { + continue; + } + + //不是体育类的专业,如果是文过专排,并且没有录取计算运算符时,文过专排是文*0+专*1,专过文排是文*1+专*0 + if ("文过专排".equals(rulesEnrollProbability) && StringUtils.isBlank(probabilityOperator)) { + probabilityOperator = "文*0+专*1"; + } else if ("专过文排".equals(rulesEnrollProbability) && StringUtils.isBlank(probabilityOperator)) { + probabilityOperator = "文*1+专*0"; + } + if (StringUtils.isBlank(probabilityOperator)) { + recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0); + continue; + } + + //判断其他录取要求 + if(!ScoreUtil.otherScoreJudge(professionalScore,activeCurrentUserScore,recommendMajorDTO)){ + recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0); + continue; + } +// // 体育类不判断分数过线 +// if (!professionalCategory.equals("体育类")) { +// //判断录取方式,分数是否过省控线 +// if (!ScoreUtil.crossingControlLine(rulesEnrollProbability, culturalScore, professionalScore, culturalControlLine, specialControlLine)) { +// recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0); +// continue; +// } +// } + + //算分用 + // 当前学生的分数折合 + + studentScore = ScoreUtil.convertIntoScore(rulesEnrollProbability, activeCurrentUserScore.getCulturalScore(), professionalScore, recommendMajorDTO.getFirstLevelDiscipline(), probabilityOperator); + + recommendMajorDTO.setPrivateStudentScore(studentScore); + if (StringUtils.isNotBlank(recommendMajorDTO.getRulesEnrollProbability())) { + //recommendMajorDTO.setStudentConvertedScore(studentScore); + //计算展示用分数 + recommendMajorDTO.setStudentScore(studentScore); + } + + //没有往年录取分数线信息 + if (CollectionUtils.isEmpty(historyMajorEnrollList) || !(ScoreUtil.hasComputeEnrollProbabilityPermissions(nowBatch, recommendMajorDTO.getBatch()))) { + recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0); + continue; + } + + // 如果没有24年数据,则不计算 + if(CollectionUtils.isEmpty(historyMajorEnrollList) && historyMajorEnrollList.stream().noneMatch(h -> "2024".equals(h.getYear()))){ + recommendMajorDTO.setEnrollProbability(YxConstant.bigDecimal0); + continue; + } + + //当前年省控线 折合后 + nowYearProvincialControlLine = ScoreUtil.covertIntoControlLine(rulesEnrollProbability, culturalControlLine, specialControlLine, recommendMajorDTO.getFirstLevelDiscipline(), probabilityOperator); + if (nowYearProvincialControlLine == null) { + continue; + } + //历年分差 + differenceMap = ScoreUtil.computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability(rulesEnrollProbability, probabilityOperator, historyMajorEnrollList); + historyThreeYearDiff = (BigDecimal) differenceMap.get("scoreDifference"); + //当前年线差 + nowYearDiff = studentScore.subtract(nowYearProvincialControlLine); + //艺术类,高职高专 算 当前年线差率 (当前年线差/当前年省控线) + // "高职高专".equals(recommendMajorDTO.getBatch()) + if ("高职高专".equals(recommendMajorDTO.getBatch()) && !"体育类".equals(recommendMajorDTO.getMajorType())) { + nowYearDiff = nowYearDiff.divide(nowYearProvincialControlLine,6,RoundingMode.HALF_UP); + } + enrollProbability = ScoreUtil.commonCheckEnrollProbability(nowYearDiff,historyThreeYearDiff); + + enrollProbability = ScoreUtil.commonCheckEnrollProbabilityBeilv(enrollProbability); + recommendMajorDTO.setEnrollProbability(enrollProbability); + } + } + long endTime = new Date().getTime(); + log.warn("用时:"+(endTime-startTime)+"毫秒"); + } catch (Exception e) { + e.printStackTrace(); + } + } + /** * 文化分测算