feat: 算投档分院校关联bug及优化。

This commit is contained in:
zhouwentao 2025-12-12 16:58:28 +08:00
parent 1a9d4e87a2
commit 1cc2800238
6 changed files with 72 additions and 193 deletions

View File

@ -158,99 +158,27 @@ public class MiniMajorController {
} else { } else {
yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch()); yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch());
} }
// TODO 2025年后 录取方式统一
Map<String, YxSchoolMajor> 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<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>(); List<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>();
Map<String,String> rulesEnrollProbabilityMap=new HashMap<>(); YxSchoolMajor yxSchoolMajor = null;
rulesEnrollProbabilityMap.put("专过文排","专过文排"); ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
rulesEnrollProbabilityMap.put("文*0.8+专*0.5","文8专2"); try {
rulesEnrollProbabilityMap.put("文*0.7+专*0.75","文7专3"); for (String key : ruleEnrollProbabilityCountMap.keySet()) {
rulesEnrollProbabilityMap.put("文*0.6+专*1","文6专4"); yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key);
rulesEnrollProbabilityMap.put("文*0.5+专*1.25","文5专5"); if (null == yxSchoolMajor) continue;
if (!"体育类".equals(queryCalculateInvestmentVO.getProfessionalCategory())) {
//非体育类
List<String> 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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
BigDecimal wenhuaBili = null;
BigDecimal zhuanyeBili = null;
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
for (String probabilityOperator : rulesEnrollProbabilityList) {
artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO();
if (probabilityOperator.equals("专过文排")) { artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator());
artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability());
artCalculateInvestmentDTO.setProbabilityOperator("文*1"); artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum());
artCalculateInvestmentDTO.setScore(culturalScore); // 计算成绩
artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getRulesEnrollProbability().equals("专过文排")).count()); artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(),
calculateInvestmentDTOList.add(artCalculateInvestmentDTO); culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator()));
} else { calculateInvestmentDTOList.add(artCalculateInvestmentDTO);
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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
try {
if (CollectionUtils.isEmpty(schooMajorList)) {
return Result.OK();
}
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
Integer schoolNum = 0;
//遍历 院校专业列表将录取方式院校代码储存起来
//mapkey:录取方式value: array[院校代码]
Map<String, Set<String>> maps = new LinkedHashMap<>();
Set<String> 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<YxSchoolMajor> 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("计算折合分出错,请联系管理员");
} }
}catch (Exception e){
Result.error(e.getMessage());
} }
return Result.OK(calculateInvestmentDTOList); return Result.OK(calculateInvestmentDTOList);
} }

View File

@ -77,102 +77,27 @@ public class ArtRecommendMajorController {
} else { } else {
yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch()); yxSchoolMajorLambdaQueryWrapper.eq(YxSchoolMajor::getBatch, queryCalculateInvestmentVO.getBatch());
} }
// TODO 2025年后 录取方式统一
Map<String, YxSchoolMajor> 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<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>(); List<ArtCalculateInvestmentDTO> calculateInvestmentDTOList = new ArrayList<>();
Map<String,String> rulesEnrollProbabilityMap=new HashMap<>(); YxSchoolMajor yxSchoolMajor = null;
rulesEnrollProbabilityMap.put("专过文排","专过文排"); ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
rulesEnrollProbabilityMap.put("文*0.8+专*0.5","文8专2"); try {
rulesEnrollProbabilityMap.put("文*0.7+专*0.75","文7专3"); for (String key : ruleEnrollProbabilityCountMap.keySet()) {
rulesEnrollProbabilityMap.put("文*0.6+专*1","文6专4"); yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key);
rulesEnrollProbabilityMap.put("文*0.5+专*1.25","文5专5"); if (null == yxSchoolMajor) continue;
if (!"体育类".equals(queryCalculateInvestmentVO.getProfessionalCategory())) {
//非体育类
List<String> 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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
BigDecimal wenhuaBili = null;
BigDecimal zhuanyeBili = null;
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
for (String probabilityOperator : rulesEnrollProbabilityList) {
artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO(); artCalculateInvestmentDTO = new ArtCalculateInvestmentDTO();
if (probabilityOperator.equals("专过文排")) { artCalculateInvestmentDTO.setProbabilityOperator(yxSchoolMajor.getProbabilityOperator());
artCalculateInvestmentDTO.setRulesEnrollProbability(rulesEnrollProbabilityMap.get(probabilityOperator)); artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability());
artCalculateInvestmentDTO.setProbabilityOperator("文*1"); artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum());
artCalculateInvestmentDTO.setScore(culturalScore); // 计算成绩
artCalculateInvestmentDTO.setSchoolNum((int) schooMajorList.stream().filter(s->s.getRulesEnrollProbability().equals("专过文排")).count()); artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(),
calculateInvestmentDTOList.add(artCalculateInvestmentDTO); culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator()));
} else { calculateInvestmentDTOList.add(artCalculateInvestmentDTO);
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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
try {
if (CollectionUtils.isEmpty(schooMajorList)) {
return Result.OK();
}
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
Integer schoolNum = 0;
//遍历 院校专业列表将录取方式院校代码储存起来
//mapkey:录取方式value: array[院校代码]
Map<String, Set<String>> maps = new LinkedHashMap<>();
Set<String> 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<YxSchoolMajor> 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("计算折合分出错,请联系管理员");
} }
}catch (Exception e){
Result.error(e.getMessage());
} }
return Result.OK(calculateInvestmentDTOList); return Result.OK(calculateInvestmentDTOList);
} }

View File

@ -65,7 +65,8 @@ public class YxConstant {
public static String culturalControlLineGuo2 = "文过专排主科"; public static String culturalControlLineGuo2 = "文过专排主科";
public static List<String> defaultRulesEnrollProbabilityList = Arrays.asList("文过专排", "专过文排"); public static List<String> defaultRulesEnrollProbabilityList = Arrays.asList("文5专5","文6专4","专过文排","文8专2","文7专3");
public static List<String> default_TiYu_RulesEnrollProbabilityList = Arrays.asList("文3专7","文过专排","文5专5","专过文排","文7专3");
public static String zhuanke = "高职高专"; public static String zhuanke = "高职高专";
public static List<String> batchList1 = Arrays.asList("提前批", "本科", "本科A段", "本科B段"); public static List<String> batchList1 = Arrays.asList("提前批", "本科", "本科A段", "本科B段");

View File

@ -87,4 +87,6 @@ public interface IYxSchoolMajorService extends IService<YxSchoolMajor> {
* 获取院校下其他可报专业 * 获取院校下其他可报专业
*/ */
ArtRecommendMajorBaseDTO schoolOtherMajor(QueryRecommendMajorVO queryRecommendMajorVO); ArtRecommendMajorBaseDTO schoolOtherMajor(QueryRecommendMajorVO queryRecommendMajorVO);
Map<String, YxSchoolMajor> countMajorTypeWithProbability(String category, String batch, String professionalCategory);
} }

View File

@ -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.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jeecg.common.util.RedisUtil; import org.jeecg.common.util.RedisUtil;
@ -1342,4 +1343,20 @@ public class YxSchoolMajorServiceImpl extends ServiceImpl<YxSchoolMajorMapper, Y
artRecommendMajorBaseDTO.setList(recommendMajorList); artRecommendMajorBaseDTO.setList(recommendMajorList);
return artRecommendMajorBaseDTO; return artRecommendMajorBaseDTO;
} }
@Override
public Map<String, YxSchoolMajor> countMajorTypeWithProbability(String category, String batch, String majorType) {
QueryWrapper<YxSchoolMajor> 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)
));
}
} }

View File

@ -246,6 +246,7 @@ public class ScoreUtil {
* @param professionalScore 专业成绩 * @param professionalScore 专业成绩
* @return 折合成绩 * @return 折合成绩
*/ */
/*
public static BigDecimal convertIntoScore(String rulesEnrollProbability, BigDecimal culturalScore, BigDecimal professionalScore) { public static BigDecimal convertIntoScore(String rulesEnrollProbability, BigDecimal culturalScore, BigDecimal professionalScore) {
BigDecimal score = new BigDecimal(0); BigDecimal score = new BigDecimal(0);
if (rulesEnrollProbability == null || culturalScore == null || professionalScore == null) { if (rulesEnrollProbability == null || culturalScore == null || professionalScore == null) {
@ -276,7 +277,7 @@ public class ScoreUtil {
score = score.divide(decimal1, 4, RoundingMode.HALF_UP); score = score.divide(decimal1, 4, RoundingMode.HALF_UP);
return score; return score;
} }
*/
/** /**
* 转换主项成绩 * 转换主项成绩
@ -305,19 +306,24 @@ public class ScoreUtil {
return score; return score;
} }
if (StringUtils.isNotBlank(operator)) { try {
score = new BigDecimal("0"); if (StringUtils.isNotBlank(operator)) {
String[] operators = operator.split("\\+"); score = new BigDecimal("0");
for (String d : operators) { String[] operators = operator.split("\\+");
String[] split = d.split("\\*"); String[] split = null;
if (split[0].contains("")) { for (String d : operators) {
score = score.add(culturalScore.multiply(new BigDecimal(split[1]))); split = d.split("\\*");
} else { if (split[0].contains("")) {
score = score.add(professionalScore.multiply(new BigDecimal(split[1]))); 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; return score;
} }