From 8fd3412bdf4572f0c7c236acbf6a9f3bb69c86f0 Mon Sep 17 00:00:00 2001 From: zhouwentao <1577701412@qq.com> Date: Fri, 6 Jun 2025 14:12:58 +0800 Subject: [PATCH] updates --- .../YxHistoryMajorEnrollController.java | 17 ++- .../mapper/xml/YxCalculationMajorMapper.xml | 6 +- .../modules/yx/service/IYxMajorService.java | 2 + .../yx/service/impl/BiaoyanService.java | 142 +++++++++++++++++- .../yx/service/impl/YxMajorServiceImpl.java | 15 ++ 5 files changed, 172 insertions(+), 10 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 8799e6c..5c486ce 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,10 @@ 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,"书法类"); + smlqw.eq(YxSchoolMajor::getMajorType,"美术与设计类"); List yxSchoolMajorList = yxSchoolMajorService.list(smlqw); Map map = new HashMap<>(); String key = ""; @@ -230,7 +229,6 @@ public class YxHistoryMajorEnrollController extends JeecgController saveOrUpdateList = new ArrayList<>(); for (YxHistoryMajorEnroll yxHistoryMajorEnroll : list) { key2 = yxHistoryMajorEnroll.getSchoolCode()+"_"+ yxHistoryMajorEnroll.getMajorName() + "_" + yxHistoryMajorEnroll.getBatch() + "_" + yxHistoryMajorEnroll.getCategory(); @@ -257,7 +255,6 @@ public class YxHistoryMajorEnrollController extends JeecgController historyScoreControlLineMap = yxHistoryScoreControlLineService.allMaps(); - Map majorMap = yxMajorService.mapsForMajorName(); + Map majorMap = yxMajorService.mapsForMajorNameBatch(); //Map schoolNameMap = yxSchoolService.mapsForSchoolName(); //Collection schoolCodeList = schoolNameMap.values(); String schoolCode = null; @@ -506,6 +505,12 @@ public class YxHistoryMajorEnrollController extends JeecgController - AND cm.main_subjects in + AND cm.major_type_child in #{b} @@ -381,7 +381,7 @@ - AND cm.main_subjects in + AND cm.major_type_child in #{b} @@ -537,7 +537,7 @@ - AND cm.main_subjects in + AND cm.major_type_child in #{b} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxMajorService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxMajorService.java index 3fa9285..8060d7f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxMajorService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxMajorService.java @@ -19,6 +19,8 @@ public interface IYxMajorService extends IService { Map mapsForMajorName(); + Map mapsForMajorNameBatch(); + Map mapsForMajorCode(); YxMajor findByMajorCode(String majorCode); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/BiaoyanService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/BiaoyanService.java index a3ed8de..4969706 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/BiaoyanService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/BiaoyanService.java @@ -20,6 +20,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; +import java.util.Date; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -41,7 +42,7 @@ public class BiaoyanService { /** * 表演类的 分数计算方式 */ - public void biaoyanRecommendMajorListSetEnrollProbability(List recommendMajorList, YxUserScore activeCurrentUserScore) { + public void biaoyanRecommendMajorListSetEnrollProbability1(List recommendMajorList, YxUserScore activeCurrentUserScore) { try { //专业类别 String professionalCategory = activeCurrentUserScore.getProfessionalCategory(); @@ -273,6 +274,145 @@ public class BiaoyanService { } } + public void biaoyanRecommendMajorListSetEnrollProbability(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(); + + 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())){ + professionalScore = activeCurrentUserScore.getXjysby(); + }else if("服装表演".equals(recommendMajorDTO.getMajorTypeChild())){ + professionalScore = activeCurrentUserScore.getFzby(); + }else{ + professionalScore = activeCurrentUserScore.getXjysdy(); + } + 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; + } + + //算分用 + // 当前学生的分数折合 + + 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(); + } + } /** * 文化分测算 * diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxMajorServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxMajorServiceImpl.java index 4459cd8..09cdfb1 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxMajorServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxMajorServiceImpl.java @@ -56,6 +56,21 @@ public class YxMajorServiceImpl extends ServiceImpl impl return maps; } + @Override + public Map mapsForMajorNameBatch() { + LambdaQueryWrapper yxMajorLambdaQueryWrapper = new LambdaQueryWrapper<>(); + yxMajorLambdaQueryWrapper.select(YxMajor::getMajorCode,YxMajor::getMajorName); + Map maps = new LinkedHashMap<>(); + for (YxMajor yxMajor : list(yxMajorLambdaQueryWrapper)) { + if ("1".equals(yxMajor.getEducationalLevel())) { + maps.put(yxMajor.getMajorName() + "_本",yxMajor); + continue; + } + maps.put(yxMajor.getMajorName() + "_专",yxMajor); + } + return maps; + } + @Override public Map mapsForMajorCode() { LambdaQueryWrapper yxMajorLambdaQueryWrapper = new LambdaQueryWrapper<>();