updates 25年音乐修复

This commit is contained in:
zhouwentao 2025-06-04 14:42:03 +08:00
parent 4a435a1efb
commit 7c6c232706
3 changed files with 205 additions and 7 deletions

View File

@ -216,11 +216,28 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
public Result<?> insertNewMajorList() {
LambdaQueryWrapper<YxHistoryMajorEnroll> helqw = new LambdaQueryWrapper<>();
helqw.eq(YxHistoryMajorEnroll::getYear,"2024");
helqw.eq(YxHistoryMajorEnroll::getMajorType,"美术与设计");
helqw.eq(YxHistoryMajorEnroll::getMajorType,"音乐");
List<YxHistoryMajorEnroll> list = yxHistoryMajorEnrollService.list(helqw);
LambdaQueryWrapper<YxSchoolMajor> smlqw = new LambdaQueryWrapper<>();
smlqw.eq(YxSchoolMajor::getMajorType,"音乐类");
List<YxSchoolMajor> yxSchoolMajorList = yxSchoolMajorService.list(smlqw);
Map<String ,YxSchoolMajor> map = new HashMap<>();
String key = "";
String key2 = "";
for (YxSchoolMajor yxSchoolMajor : yxSchoolMajorList) {
key = yxSchoolMajor.getSchoolCode()+"_"+ yxSchoolMajor.getMajorName() + "_" + yxSchoolMajor.getBatch() + "_" + yxSchoolMajor.getCategory();
map.put(key,yxSchoolMajor);
}
YxSchoolMajor yxSchoolMajor = null;
List<YxSchoolMajor> saveOrUpdateList = new ArrayList<>();
for (YxHistoryMajorEnroll yxHistoryMajorEnroll : list) {
yxSchoolMajor = new YxSchoolMajor();
key2 = yxHistoryMajorEnroll.getSchoolCode()+"_"+ yxHistoryMajorEnroll.getMajorName() + "_" + yxHistoryMajorEnroll.getBatch() + "_" + yxHistoryMajorEnroll.getCategory();
yxSchoolMajor = map.get(key2);
if (yxSchoolMajor == null){
yxSchoolMajor = new YxSchoolMajor();
}
yxSchoolMajor.setSchoolCode(yxHistoryMajorEnroll.getSchoolCode());
yxSchoolMajor.setMajorCode(yxHistoryMajorEnroll.getMajorCode());
yxSchoolMajor.setBatch(yxHistoryMajorEnroll.getBatch());
@ -230,11 +247,31 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
yxSchoolMajor.setMajorType(yxHistoryMajorEnroll.getMajorType());
yxSchoolMajor.setMajorTypeChild(yxHistoryMajorEnroll.getMajorTypeChild());
yxSchoolMajor.setTuition(yxHistoryMajorEnroll.getTuition());
//
yxSchoolMajor.setMainSubjects(yxHistoryMajorEnroll.getMainSubjects());
yxSchoolMajor.setDetail(yxHistoryMajorEnroll.getDetail());
yxSchoolMajor.setCategory(yxHistoryMajorEnroll.getCategory());
yxSchoolMajor.setPlanNum(yxHistoryMajorEnroll.getEnrollNum());
yxSchoolMajor.setKslx("统考");
yxSchoolMajor.setRulesEnrollProbability(yxHistoryMajorEnroll.getRulesEnrollProbability());
yxSchoolMajor.setProbabilityOperator(yxHistoryMajorEnroll.getProbabilityOperator());
yxSchoolMajor.setPrivateProbabilityOperator(yxHistoryMajorEnroll.getProbabilityOperator());
yxSchoolMajor.setRulesEnrollProbabilitySx(yxHistoryMajorEnroll.getRulesEnrollProbability());
yxSchoolMajor.setPrivateRulesEnrollProbability(yxHistoryMajorEnroll.getRulesEnrollProbability());
yxSchoolMajor.setState("2");
//
if ("音乐类".equals(yxSchoolMajor.getMajorType())) {
yxSchoolMajor.setMajorTypeChild(yxHistoryMajorEnroll.getMajorTypeChild());
if(StringUtils.isNotBlank(yxHistoryMajorEnroll.getMajorTypeChild()) && "音乐教育".equals(yxHistoryMajorEnroll.getMajorTypeChild())){
// yxSchoolMajor.setMainSubjects("音乐教育");
yxSchoolMajor.setMainSubjects("声乐,器乐");
}else if("音乐表演".equals(yxHistoryMajorEnroll.getMajorTypeChild())){
yxSchoolMajor.setMainSubjects(yxHistoryMajorEnroll.getMainSubjects());
}
}
yxSchoolMajor.setCreateTime(new Date());
saveOrUpdateList.add(yxSchoolMajor);
}
System.out.println(saveOrUpdateList.size());
yxSchoolMajorService.saveBatch(saveOrUpdateList);
// yxHistoryMajorEnrollService.renewControlLine(id);
return Result.OK("操作成功");
}

View File

@ -72,7 +72,8 @@ public class YxScoreController {
if("表演类".equals(professionalCategory) || "音乐类".equals(professionalCategory)){
AssertUtils.hasSize(userScoreUpdateDTO.getSubjectList(),"请选择[专业选课]");
AssertUtils.notTrue(userScoreUpdateDTO.getSubjectList().size() != 2,"选考科目必须选两项");
// AssertUtils.notTrue(userScoreUpdateDTO.getSubjectList().size() <= 0,"选考科目必须选两项");
userScoreUpdateDTO.setProfessionalScore(YxConstant.bigDecimal0);
}
AssertUtils.notTrue(culturalScore.compareTo(YxConstant.bigDecimal750) > 0, "[文化成绩]最高分为750");
AssertUtils.notTrue(culturalScore.compareTo(YxConstant.bigDecimal0) < 0, "[文化成绩]最低分为0");

View File

@ -1,6 +1,7 @@
package org.jeecg.modules.yx.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.jeecg.modules.web.dto.ArtTestCulturalDTO;
@ -18,6 +19,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -29,6 +31,7 @@ import java.util.stream.Collectors;
* @Date 2024/3/4 11:13
*/
@Service
@Slf4j
public class MusicService {
@Resource
private IYxHistoryScoreControlLineService yxHistoryScoreControlLineService;
@ -38,7 +41,7 @@ public class MusicService {
/**
* 音乐类的 分数计算方式
*/
public void musicRecommendMajorListSetEnrollProbability(List<RecommendMajorDTO> recommendMajorList, YxUserScore activeCurrentUserScore) {
public void musicRecommendMajorListSetEnrollProbability_2024year(List<RecommendMajorDTO> recommendMajorList, YxUserScore activeCurrentUserScore) {
try {
//专业类别
String professionalCategory = activeCurrentUserScore.getProfessionalCategory();
@ -325,6 +328,163 @@ public class MusicService {
}
}
/**
* 音乐类的 分数计算方式
*/
public void musicRecommendMajorListSetEnrollProbability(List<RecommendMajorDTO> 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<String, YxHistoryScoreControlLine> batchControlLineMaps = new LinkedHashMap<>();
// batchControlLineMaps = yxHistoryScoreControlLineService.mapsBatchByProfessionalCategoryOfYear(Integer.parseInt(YxConstant.nowYear), professionalCategory, activeCurrentUserScore.getCognitioPolyclinic())
LambdaQueryWrapper<YxHistoryScoreControlLine> yhsclWrapper = new LambdaQueryWrapper<>();
yhsclWrapper.eq(YxHistoryScoreControlLine::getCategory,activeCurrentUserScore.getCognitioPolyclinic());
yhsclWrapper.in(YxHistoryScoreControlLine::getBatch,"本科","高职高专");
yhsclWrapper.like(YxHistoryScoreControlLine::getProfessionalCategory,"音乐类-");
List<YxHistoryScoreControlLine> yhsclList = yxHistoryScoreControlLineService.list(yhsclWrapper);
String key = null;
for (YxHistoryScoreControlLine yhscl : yhsclList) {
key = yhscl.getCategory()+"-"+ yhscl.getBatch()+"-"+yhscl.getProfessionalCategory();
batchControlLineMaps.put(key,yhscl);
}
// Map<String, YxHistoryScoreControlLine> 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<String, Object> differenceMap = null;
List<YxHistoryMajorEnroll> historyMajorEnrollList = null;//历年录取信息
if (CollectionUtils.isNotEmpty(recommendMajorList)) {
//遍历专业列表
for (RecommendMajorDTO recommendMajorDTO : recommendMajorList) {
index++;
//取出往年的分数信息, 算出 三年平均差值
historyMajorEnrollList = recommendMajorDTO.getHistoryMajorEnrollList();
rulesEnrollProbability = recommendMajorDTO.getPrivateRulesEnrollProbability();
probabilityOperator = recommendMajorDTO.getPrivateProbabilityOperator();
if ("1103".equals(recommendMajorDTO.getSchoolCode())) {
System.out.println("111");
}
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())) {
key += recommendMajorDTO.getMainSubjects();
if("器乐".equals(recommendMajorDTO.getMainSubjects())){
professionalScore = activeCurrentUserScore.getYybyqy();
}else{
professionalScore = activeCurrentUserScore.getYybysy();
}
}else{
professionalScore = activeCurrentUserScore.getYyjy();
}
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;
}
// // 体育类不判断分数过线
// if (!professionalCategory.equals("体育类")) {
// //判断录取方式分数是否过省控线
// if (!ScoreUtil.crossingControlLine(rulesEnrollProbability, culturalScore, professionalScore, culturalControlLine, specialControlLine)) {
// 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();
}
}
/**
* 文化分测算