diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java index 2919957..fffae39 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniMajorController.java @@ -42,11 +42,11 @@ import java.util.*; @Slf4j @RequestMapping("/mini/major") public class MiniMajorController { - @Autowired + @Resource private IYxMajorService yxMajorService; - @Autowired + @Resource private IYxCalculationMajorService yxCalculationMajorService; - @Autowired + @Resource private RedisUtil redisUtil; @Resource private MiniTestCulturalService testCulturalService; @@ -116,11 +116,11 @@ public class MiniMajorController { String str = null; List notList= Arrays.asList("文7专3","专过文排","文8专2","文6专4","文5专5"); if (queryRecommendMajorVO.getProfessionalCategory().equals("音乐类")) { - str = "[\"文过专排主科\",\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\"]"; + str = "[\"文过专排主科\",\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\",\"文8专2\"]"; } else if (queryRecommendMajorVO.getProfessionalCategory().equals("体育类")) { - str = "[\"文过专排\",\"专过文排\",\"文3专7\",\"文5专5\",\"文7专3\"]"; + str = "[\"专过文排\",\"文7专3\" ,\"文5专5\",\"文3专7\",\"文过专排\"]"; } else { - str = "[\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\"]"; + str = "[\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\",\"文8专2\"]"; }//277 JSONArray objects = JSONArray.parseArray(str); List javaList = objects.toJavaList(String.class); @@ -146,7 +146,7 @@ public class MiniMajorController { String schoolCode = queryRecommendMajorVO.getSchoolCode(); String year = queryRecommendMajorVO.getYear(); AssertUtils.notNull(loginUser, "未获取到登录信息"); - AssertUtils.notNull(year, "请选择年份"); + // AssertUtils.notNull(year, "请选择年份"); return Result.OK(testCulturalService.testCultural(schoolCode)); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java index 8c362c8..5ca7b0c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/constant/YxConstant.java @@ -15,24 +15,24 @@ public class YxConstant { /** * 当前年 */ - public static final String nowYear = "2024"; + public static final String nowYear = "2025"; /** * 使用省控线年份 */ - public static String historyControlLineYear = "2023"; + public static String historyControlLineYear = "2025"; /** * 旧日期 */ - public static final List oldYearList = Arrays.asList("2023", "2022", "2021", "2020"); + public static final List oldYearList = Arrays.asList("2024", "2023", "2022", "2021"); - public static final List showOldYearList = Arrays.asList("2024", "2023", "2022", "2021", "2020"); + public static final List showOldYearList = Arrays.asList("2024", "2023", "2022", "2021"); public static List cankaoMajorTypeList = Arrays.asList("音乐类", "舞蹈类", "播音与主持类", "表演类", "戏曲类"); public static List betaMajorTypeList = Arrays.asList("美术与设计类", "书法类", "体育类"); - public static List cankaoYearList = Arrays.asList("2023", "2022"); + public static List cankaoYearList = Arrays.asList("2024", "2023"); public static String w1z1 = "文1专1"; public static String w1jiaz1 = "文1+专1"; 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 6e258fe..238b7b9 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 @@ -444,16 +444,13 @@ 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/YxCalculationMajorServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java index 5fe882b..da74d44 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxCalculationMajorServiceImpl.java @@ -1,12 +1,10 @@ package org.jeecg.modules.yx.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; -import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.web.dto.ArtRecommendMajorBaseDTO; import org.jeecg.modules.web.dto.RecommendMajorDTO; import org.jeecg.modules.web.vo.QueryRecommendMajorVO; @@ -54,8 +52,6 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl calculationMajor(YxUserScore userScore) { @@ -556,6 +552,11 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl implements IYxUserScoreService { @Autowired private IYxVipCardService yxVipCardService; + + @Resource + private RedisUtil redisUtil; @Override public YxUserScore getActiveUserScore(String createBy) { LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper<>(); @@ -52,8 +57,15 @@ public class YxUserScoreServiceImpl extends ServiceImpl 包含平均分差(scoreDifference) + */ + public static Map computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability( + String rulesEnrollProbability, + List historyMajorEnrollList) { + // 1. 提前返回空结果,避免后续空指针 + if (CollectionUtils.isEmpty(historyMajorEnrollList)) { + return Collections.singletonMap("scoreDifference", BigDecimal.ZERO); + } + // 2. 使用更高效的累加方式(避免频繁BigDecimal运算) + BigDecimal sum = BigDecimal.ZERO; + int validYearCount = 0; + for (YxHistoryMajorEnroll enrollData : historyMajorEnrollList) { + BigDecimal admissionLine = enrollData.getAdmissionLine(); + BigDecimal controlLine = enrollData.getControlLine(); + // 3. 跳过无效数据(录取线≤0) + if (admissionLine.signum() <= 0) { + continue; + } + // 4. 计算当前年份分差(录取线 - 省控线) + BigDecimal currentDiff = admissionLine.subtract(controlLine); + // 5. 特殊逻辑:高职高专(非体育类)需计算分差率(分差/省控线) + boolean isVocationalCollege = "高职高专".equals(enrollData.getBatch()); + boolean isSportsMajor = "体育类".equals(enrollData.getMajorType()); + if (isVocationalCollege && !isSportsMajor) { + currentDiff = currentDiff.divide(controlLine, 6, RoundingMode.HALF_UP); + } + // 6. 非高职高专 or 体育类:检查录取方式是否一致 validYearCount >= 1 && + else if (!rulesEnrollProbability.equals(enrollData.getRulesEnrollProbability())) { + continue; // 录取方式不一致,跳过 + } + + sum = sum.add(currentDiff); + validYearCount++; + } + + // 7. 计算平均分差(避免除零错误) + BigDecimal averageDiff = validYearCount > 0 + ? sum.divide(new BigDecimal(validYearCount), 4, RoundingMode.HALF_UP) + : BigDecimal.ZERO; + + return Collections.singletonMap("scoreDifference", averageDiff); + } + + /** * 根据 当前年一致的录取方式,计算 往年分数差之和 (往年的录取线-省控线) */ - public static Map computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability(String rulesEnrollProbability,List historyMajorEnrollList){ + public static Map computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability_old(String rulesEnrollProbability,List historyMajorEnrollList){ BigDecimal sum=new BigDecimal("0");//历年分差之和 BigDecimal nowSum=new BigDecimal("0"); Map data=new LinkedHashMap<>(); @@ -88,10 +137,10 @@ public class ScoreUtil { int yearNum=0; BigDecimal controlLine = null;//文科-省控线 BigDecimal admissionLine = null;//文科-录取线 - YxHistoryMajorEnroll yxHistoryMajorEnroll1 = historyMajorEnrollList.get(0); for (YxHistoryMajorEnroll yxHistoryMajorEnroll : historyMajorEnrollList) { controlLine = yxHistoryMajorEnroll.getControlLine(); admissionLine = yxHistoryMajorEnroll.getAdmissionLine(); + // 如果录取分数线(admissionLine)小于等于0,就直接跳过当前循环,处理下一条数据 if (admissionLine.compareTo(YxConstant.bigDecimal0) <=0) { continue; } @@ -106,9 +155,6 @@ public class ScoreUtil { //将 分差/省控线 nowSum = nowSum.divide(yxHistoryMajorEnroll.getControlLine(),6,RoundingMode.HALF_UP); } - /*if (!sum.equals(BigDecimal.ZERO)) { - // 判断 两年分差double v = sum.subtract(nowSum).doubleValue();if (v <=2 || v>=2) { //历年分差 在 2 至上时,将用户当前年分差-2 data.put("flag",true);} - }*/ sum=sum.add(nowSum);//录取线-省控线 yearNum++; } @@ -117,20 +163,6 @@ public class ScoreUtil { data.put("scoreDifference",divide); } return data; - /*if (wenFlag) { - //文科生 - }else{ - //理科生 - BigDecimal scienceControlLine=null;//理科-省控线 - BigDecimal scienceAdmissionLine=null;//理科-录取线 - for (YxHistoryMajorEnroll yxHistoryMajorEnroll : historyMajorEnrollList) { - scienceControlLine = yxHistoryMajorEnroll.getScienceControlLine(); - scienceAdmissionLine = yxHistoryMajorEnroll.getScienceAdmissionLine(); - sum=sum.add(scienceAdmissionLine.subtract(scienceControlLine));//录取线-省控线 - yearNum++; - } - }*/ - //return sum; }