feat: 算投档分院校关联bug及优化。
This commit is contained in:
parent
1a9d4e87a2
commit
1cc2800238
|
|
@ -158,99 +158,27 @@ public class MiniMajorController {
|
|||
} else {
|
||||
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<>();
|
||||
Map<String,String> 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<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;
|
||||
YxSchoolMajor yxSchoolMajor = null;
|
||||
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
|
||||
for (String probabilityOperator : rulesEnrollProbabilityList) {
|
||||
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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
|
||||
try {
|
||||
if (CollectionUtils.isEmpty(schooMajorList)) {
|
||||
return Result.OK();
|
||||
}
|
||||
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
|
||||
Integer schoolNum = 0;
|
||||
//遍历 院校专业列表,将录取方式,院校代码储存起来
|
||||
//map,key:录取方式,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();
|
||||
for (String key : ruleEnrollProbabilityCountMap.keySet()) {
|
||||
yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key);
|
||||
if (null == yxSchoolMajor) continue;
|
||||
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()));
|
||||
artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability());
|
||||
artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum());
|
||||
// 计算成绩
|
||||
artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(),
|
||||
culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator()));
|
||||
calculateInvestmentDTOList.add(artCalculateInvestmentDTO);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return Result.error("计算折合分出错,请联系管理员");
|
||||
}
|
||||
}catch (Exception e){
|
||||
Result.error(e.getMessage());
|
||||
}
|
||||
return Result.OK(calculateInvestmentDTOList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,102 +77,27 @@ public class ArtRecommendMajorController {
|
|||
} else {
|
||||
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<>();
|
||||
Map<String,String> 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<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;
|
||||
YxSchoolMajor yxSchoolMajor = null;
|
||||
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
|
||||
for (String probabilityOperator : rulesEnrollProbabilityList) {
|
||||
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<YxSchoolMajor> schooMajorList = yxSchoolMajorService.list(yxSchoolMajorLambdaQueryWrapper);
|
||||
try {
|
||||
if (CollectionUtils.isEmpty(schooMajorList)) {
|
||||
return Result.OK();
|
||||
}
|
||||
ArtCalculateInvestmentDTO artCalculateInvestmentDTO = null;
|
||||
Integer schoolNum = 0;
|
||||
//遍历 院校专业列表,将录取方式,院校代码储存起来
|
||||
//map,key:录取方式,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();
|
||||
for (String key : ruleEnrollProbabilityCountMap.keySet()) {
|
||||
yxSchoolMajor = ruleEnrollProbabilityCountMap.get(key);
|
||||
if (null == yxSchoolMajor) continue;
|
||||
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()));
|
||||
artCalculateInvestmentDTO.setRulesEnrollProbability(yxSchoolMajor.getRulesEnrollProbability());
|
||||
artCalculateInvestmentDTO.setSchoolNum(yxSchoolMajor.getPlanNum());
|
||||
// 计算成绩
|
||||
artCalculateInvestmentDTO.setScore(ScoreUtil.convertIntoScore(yxSchoolMajor.getRulesEnrollProbability(),
|
||||
culturalScore, professionalScore,yxSchoolMajor.getProbabilityOperator()));
|
||||
calculateInvestmentDTOList.add(artCalculateInvestmentDTO);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return Result.error("计算折合分出错,请联系管理员");
|
||||
}
|
||||
}catch (Exception e){
|
||||
Result.error(e.getMessage());
|
||||
}
|
||||
return Result.OK(calculateInvestmentDTOList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ public class YxConstant {
|
|||
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 List<String> batchList1 = Arrays.asList("提前批", "本科", "本科A段", "本科B段");
|
||||
|
|
|
|||
|
|
@ -87,4 +87,6 @@ public interface IYxSchoolMajorService extends IService<YxSchoolMajor> {
|
|||
* 获取院校下其他可报专业
|
||||
*/
|
||||
ArtRecommendMajorBaseDTO schoolOtherMajor(QueryRecommendMajorVO queryRecommendMajorVO);
|
||||
|
||||
Map<String, YxSchoolMajor> countMajorTypeWithProbability(String category, String batch, String professionalCategory);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<YxSchoolMajorMapper, Y
|
|||
artRecommendMajorBaseDTO.setList(recommendMajorList);
|
||||
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)
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,11 +306,13 @@ public class ScoreUtil {
|
|||
return score;
|
||||
}
|
||||
|
||||
try {
|
||||
if (StringUtils.isNotBlank(operator)) {
|
||||
score = new BigDecimal("0");
|
||||
String[] operators = operator.split("\\+");
|
||||
String[] split = null;
|
||||
for (String d : operators) {
|
||||
String[] split = d.split("\\*");
|
||||
split = d.split("\\*");
|
||||
if (split[0].contains("文")) {
|
||||
score = score.add(culturalScore.multiply(new BigDecimal(split[1])));
|
||||
} else {
|
||||
|
|
@ -318,6 +321,9 @@ public class ScoreUtil {
|
|||
}
|
||||
}
|
||||
score = score.divide(decimal1, 4, RoundingMode.HALF_UP);
|
||||
}catch (Exception e){
|
||||
throw new RuntimeException("计算分数出错: "+ rulesEnrollProbability +":"+ operator);
|
||||
}
|
||||
return score;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue