From 1cc280023819d0b6033420e559b0b759bd5bb832 Mon Sep 17 00:00:00 2001 From: zhouwentao Date: Fri, 12 Dec 2025 16:58:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=97=E6=8A=95=E6=A1=A3=E5=88=86?= =?UTF-8?q?=E9=99=A2=E6=A0=A1=E5=85=B3=E8=81=94bug=E5=8F=8A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mini/controller/MiniMajorController.java | 106 +++-------------- .../ArtRecommendMajorController.java | 109 +++--------------- .../jeecg/modules/yx/constant/YxConstant.java | 3 +- .../yx/service/IYxSchoolMajorService.java | 2 + .../impl/YxSchoolMajorServiceImpl.java | 17 +++ .../org/jeecg/modules/yx/util/ScoreUtil.java | 28 +++-- 6 files changed, 72 insertions(+), 193 deletions(-) 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 dab1505..188d52c 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 @@ -158,99 +158,27 @@ public class MiniMajorController { } else { yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch()); } + // TODO 2025年后 录取方式统一 + Map ruleEnrollProbabilityCountMap = yxSchoolMajorService.countMajorTypeWithProbability(queryCalculateInvestmentVO.getCategory(), queryCalculateInvestmentVO.getBatch(), queryCalculateInvestmentVO.getProfessionalCategory()); - yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory()); - yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory()); - yxSchoolMajorLambdaQueryWrapper.orderByDesc(YxSchoolMajor::getRulesEnrollProbabilitySx); List calculateInvestmentDTOList = new ArrayList<>(); - Map rulesEnrollProbabilityMap=new HashMap<>(); - rulesEnrollProbabilityMap.put("专过文排","专过文排"); - rulesEnrollProbabilityMap.put("文*0.8+专*0.5","文8专2"); - rulesEnrollProbabilityMap.put("文*0.7+专*0.75","文7专3"); - rulesEnrollProbabilityMap.put("文*0.6+专*1","文6专4"); - rulesEnrollProbabilityMap.put("文*0.5+专*1.25","文5专5"); - if (!"体育类".equals(queryCalculateInvestmentVO.getProfessionalCategory())) { - //非体育类 - List rulesEnrollProbabilityList = null; - if ("高职高专".equals(queryCalculateInvestmentVO.getBatch())) { - rulesEnrollProbabilityList = Arrays.asList("文*0.5+专*1.25"); - }else{ - rulesEnrollProbabilityList = Arrays.asList("文*0.8+专*0.5", "文*0.7+专*0.75", "文*0.6+专*1", "文*0.5+专*1.25", "专过文排"); - } - - yxSchoolMajorLambdaQueryWrapper.in(YxSchoolMajor::getRulesEnrollProbability, rulesEnrollProbabilityList); - List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); - BigDecimal wenhuaBili = null; - BigDecimal zhuanyeBili = null; - ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; - for (String probabilityOperator : rulesEnrollProbabilityList) { + YxSchoolMajor yxSchoolMajor = null; + ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; + try { + for (String key : ruleEnrollProbabilityCountMap.keySet()) { + yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key); + if (null == yxSchoolMajor) continue; artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - if (probabilityOperator.equals("专过文排")) { - artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); - artCalculateInvestmentDTO.setProbabilityOperator("文*1"); - artCalculateInvestmentDTO.setScore(culturalScore); - artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getRulesEnrollProbability().equals("专过文排")).count()); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } else { - wenhuaBili = null; - zhuanyeBili = null; - String[] operators = probabilityOperator.split("\\+"); - for (String operator : operators) { - if (operator.contains("文")) { - wenhuaBili = new BigDecimal(operator.split("\\*")[1]); - } - if (operator.contains("专")) { - zhuanyeBili = new BigDecimal(operator.split("\\*")[1]); - } - } - if (wenhuaBili == null || zhuanyeBili == null) { - wenhuaBili = YxConstant.bigDecimal100; - zhuanyeBili = YxConstant.bigDecimal100; - } - artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); - artCalculateInvestmentDTO.setProbabilityOperator(probabilityOperator); - artCalculateInvestmentDTO.setScore((culturalScore.multiply(wenhuaBili)).add((professionalScore.multiply(zhuanyeBili)))); - artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getProbabilityOperator().contains(probabilityOperator)).count()); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } - } - } else { - List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); - try { - if (CollectionUtils.isEmpty(schooMajorList)) { - return Result.OK(); - } - ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; - Integer schoolNum = 0; - //遍历 院校专业列表,将录取方式,院校代码储存起来 - //map,key:录取方式,value: array[院校代码] - Map> maps = new LinkedHashMap<>(); - Set schoolCodeSet = null; - for (YxSchoolMajor yxSchoolMajor : schooMajorList) { - schoolCodeSet = maps.getOrDefault(yxSchoolMajor.getRulesEnrollProbability(), new HashSet<>()); - schoolCodeSet.add(yxSchoolMajor.getSchoolCode()); - maps.put(yxSchoolMajor.getRulesEnrollProbability(), schoolCodeSet); - } - if (maps.isEmpty()) { - return Result.OK(); - } - //根据录取方式,计算折合分数 - for (String rulesEnrollProbability : maps.keySet()) { - Optional any = schooMajorList.stream().filter(s -> s.getRulesEnrollProbability().equals(rulesEnrollProbability)).findAny(); - if (any.isPresent()) { - YxSchoolMajor yxSchoolMajor = any.get(); - artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - artCalculateInvestmentDTO.setSchoolNum(maps.get(rulesEnrollProbability).size()); - artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbabilitySx()); - artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator()); - artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(rulesEnrollProbability, culturalScore, professionalScore, null, yxSchoolMajor.getProbabilityOperator())); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } - } - } catch (Exception e) { - return Result.error("计算折合分出错,请联系管理员"); + artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator()); + artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability()); + artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum()); + // 计算成绩 + artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(), + culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator())); + calculateInvestmentDTOList.add(artCalculateInvestmentDTO); } + }catch (Exception e){ + Result.error(e.getMessage()); } return Result.OK(calculateInvestmentDTOList); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java index c32e43a..34a3394 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/ArtRecommendMajorController.java @@ -77,102 +77,27 @@ public class ArtRecommendMajorController { } else { yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch()); } + // TODO 2025年后 录取方式统一 + Map ruleEnrollProbabilityCountMap = yxSchoolMajorService.countMajorTypeWithProbability(queryCalculateInvestmentVO.getCategory(), queryCalculateInvestmentVO.getBatch(), queryCalculateInvestmentVO.getProfessionalCategory()); - yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getCategory()), YxSchoolMajor::getCategory, queryCalculateInvestmentVO.getCategory()); - yxSchoolMajorLambdaQueryWrapper.eq(StringUtils.isNotBlank(queryCalculateInvestmentVO.getProfessionalCategory()), YxSchoolMajor::getMajorType, queryCalculateInvestmentVO.getProfessionalCategory()); - yxSchoolMajorLambdaQueryWrapper.orderByDesc(YxSchoolMajor::getRulesEnrollProbabilitySx); List calculateInvestmentDTOList = new ArrayList<>(); - Map rulesEnrollProbabilityMap=new HashMap<>(); - rulesEnrollProbabilityMap.put("专过文排","专过文排"); - rulesEnrollProbabilityMap.put("文*0.8+专*0.5","文8专2"); - rulesEnrollProbabilityMap.put("文*0.7+专*0.75","文7专3"); - rulesEnrollProbabilityMap.put("文*0.6+专*1","文6专4"); - rulesEnrollProbabilityMap.put("文*0.5+专*1.25","文5专5"); - if (!"体育类".equals(queryCalculateInvestmentVO.getProfessionalCategory())) { - //非体育类 - List rulesEnrollProbabilityList = null; - if ("高职高专".equals(queryCalculateInvestmentVO.getBatch())) { - rulesEnrollProbabilityList = Arrays.asList("文*0.5+专*1.25"); - }else{ - rulesEnrollProbabilityList = Arrays.asList("文*0.8+专*0.5", "文*0.7+专*0.75", "文*0.6+专*1", "文*0.5+专*1.25", "专过文排"); - } - - yxSchoolMajorLambdaQueryWrapper.in(YxSchoolMajor::getRulesEnrollProbability, rulesEnrollProbabilityList); - List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); - BigDecimal wenhuaBili = null; - BigDecimal zhuanyeBili = null; - ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; - for (String probabilityOperator : rulesEnrollProbabilityList) { + YxSchoolMajor yxSchoolMajor = null; + ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; + try { + for (String key : ruleEnrollProbabilityCountMap.keySet()) { + yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key); + if (null == yxSchoolMajor) continue; artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - if (probabilityOperator.equals("专过文排")) { - artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); - artCalculateInvestmentDTO.setProbabilityOperator("文*1"); - artCalculateInvestmentDTO.setScore(culturalScore); - artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getRulesEnrollProbability().equals("专过文排")).count()); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } else { - wenhuaBili = null; - zhuanyeBili = null; - String[] operators = probabilityOperator.split("\\+"); - for (String operator : operators) { - if (operator.contains("文")) { - wenhuaBili = new BigDecimal(operator.split("\\*")[1]); - } - if (operator.contains("专")) { - zhuanyeBili = new BigDecimal(operator.split("\\*")[1]); - } - } - if (wenhuaBili == null || zhuanyeBili == null) { - wenhuaBili = YxConstant.bigDecimal100; - zhuanyeBili = YxConstant.bigDecimal100; - } - artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); - artCalculateInvestmentDTO.setProbabilityOperator(probabilityOperator); - artCalculateInvestmentDTO.setScore((culturalScore.multiply(wenhuaBili)).add((professionalScore.multiply(zhuanyeBili)))); - artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getProbabilityOperator().contains(probabilityOperator)).count()); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } - } - } else { - List schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper); - try { - if (CollectionUtils.isEmpty(schooMajorList)) { - return Result.OK(); - } - ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null; - Integer schoolNum = 0; - //遍历 院校专业列表,将录取方式,院校代码储存起来 - //map,key:录取方式,value: array[院校代码] - Map> maps = new LinkedHashMap<>(); - Set schoolCodeSet = null; - for (YxSchoolMajor yxSchoolMajor : schooMajorList) { - schoolCodeSet = maps.getOrDefault(yxSchoolMajor.getRulesEnrollProbability(), new HashSet<>()); - schoolCodeSet.add(yxSchoolMajor.getSchoolCode()); - maps.put(yxSchoolMajor.getRulesEnrollProbability(), schoolCodeSet); - } - if (maps.isEmpty()) { - return Result.OK(); - } - //根据录取方式,计算折合分数 - for (String rulesEnrollProbability : maps.keySet()) { - if (StringUtils.isBlank(rulesEnrollProbability)) { - continue; - } - Optional any = schooMajorList.stream().filter(s -> s.getRulesEnrollProbability().equals(rulesEnrollProbability)).findAny(); - if (any.isPresent()) { - YxSchoolMajor yxSchoolMajor = any.get(); - artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); - artCalculateInvestmentDTO.setSchoolNum(maps.get(rulesEnrollProbability).size()); - artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbabilitySx()); - artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator()); - artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(rulesEnrollProbability, culturalScore, professionalScore, null, yxSchoolMajor.getProbabilityOperator())); - calculateInvestmentDTOList.add(artCalculateInvestmentDTO); - } - } - } catch (Exception e) { - return Result.error("计算折合分出错,请联系管理员"); + artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator()); + artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability()); + artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum()); + // 计算成绩 + artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(), + culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator())); + calculateInvestmentDTOList.add(artCalculateInvestmentDTO); } + }catch (Exception e){ + Result.error(e.getMessage()); } return Result.OK(calculateInvestmentDTOList); } 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 91c5eae..fb90a63 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 @@ -65,7 +65,8 @@ public class YxConstant { public static String culturalControlLineGuo2 = "文过专排主科"; - public static List defaultRulesEnrollProbabilityList = Arrays.asList("文过专排", "专过文排"); + public static List defaultRulesEnrollProbabilityList = Arrays.asList("文5专5","文6专4","专过文排","文8专2","文7专3"); + public static List default_TiYu_RulesEnrollProbabilityList = Arrays.asList("文3专7","文过专排","文5专5","专过文排","文7专3"); public static String zhuanke = "高职高专"; public static List batchList1 = Arrays.asList("提前批", "本科", "本科A段", "本科B段"); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxSchoolMajorService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxSchoolMajorService.java index 8ce8750..a4bbca2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxSchoolMajorService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/IYxSchoolMajorService.java @@ -87,4 +87,6 @@ public interface IYxSchoolMajorService extends IService { * 获取院校下其他可报专业 */ ArtRecommendMajorBaseDTO schoolOtherMajor(QueryRecommendMajorVO queryRecommendMajorVO); + + Map countMajorTypeWithProbability(String category, String batch, String professionalCategory); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxSchoolMajorServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxSchoolMajorServiceImpl.java index f23d71d..f547a45 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxSchoolMajorServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/service/impl/YxSchoolMajorServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.jeecg.common.util.RedisUtil; @@ -1342,4 +1343,20 @@ public class YxSchoolMajorServiceImpl extends ServiceImpl countMajorTypeWithProbability(String category, String batch, String majorType) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.select("CONCAT(major_type, '-', rules_enroll_probability) as rules_enroll_probability_sx", + "rules_enroll_probability", "probability_operator", "COUNT(0) as plan_num") + .eq(StringUtils.isNotBlank(category), "category", category) + .like(StringUtils.isNotBlank(batch), "batch", batch) + .eq(StringUtils.isNotBlank(majorType), "major_type", majorType) + .isNotNull("rules_enroll_probability") + .groupBy("CONCAT(major_type, '-', rules_enroll_probability)"); + return baseMapper.selectList(wrapper).stream().collect(Collectors.toMap( + YxSchoolMajor::getRulesEnrollProbabilitySx,(r->r) + )); + } + } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java index 9706ab1..107f2a8 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/yx/util/ScoreUtil.java @@ -246,6 +246,7 @@ public class ScoreUtil { * @param professionalScore 专业成绩 * @return 折合成绩 */ + /* public static BigDecimal convertIntoScore(String rulesEnrollProbability, BigDecimal culturalScore, BigDecimal professionalScore) { BigDecimal score = new BigDecimal(0); if (rulesEnrollProbability == null || culturalScore == null || professionalScore == null) { @@ -276,7 +277,7 @@ public class ScoreUtil { score = score.divide(decimal1, 4, RoundingMode.HALF_UP); return score; } - +*/ /** * 转换主项成绩 @@ -305,19 +306,24 @@ public class ScoreUtil { return score; } - if (StringUtils.isNotBlank(operator)) { - score = new BigDecimal("0"); - String[] operators = operator.split("\\+"); - for (String d : operators) { - String[] split = d.split("\\*"); - if (split[0].contains("文")) { - score = score.add(culturalScore.multiply(new BigDecimal(split[1]))); - } else { - score = score.add(professionalScore.multiply(new BigDecimal(split[1]))); + try { + if (StringUtils.isNotBlank(operator)) { + score = new BigDecimal("0"); + String[] operators = operator.split("\\+"); + String[] split = null; + for (String d : operators) { + split = d.split("\\*"); + if (split[0].contains("文")) { + score = score.add(culturalScore.multiply(new BigDecimal(split[1]))); + } else { + score = score.add(professionalScore.multiply(new BigDecimal(split[1]))); + } } } + score = score.divide(decimal1, 4, RoundingMode.HALF_UP); + }catch (Exception e){ + throw new RuntimeException("计算分数出错: "+ rulesEnrollProbability +":"+ operator); } - score = score.divide(decimal1, 4, RoundingMode.HALF_UP); return score; }