This commit is contained in:
zhouwentao 2025-06-06 14:12:58 +08:00
parent c7eea7885a
commit 8fd3412bdf
5 changed files with 172 additions and 10 deletions

View File

@ -216,11 +216,10 @@ 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,"书法");
smlqw.eq(YxSchoolMajor::getMajorType,"美术与设计");
List<YxSchoolMajor> yxSchoolMajorList = yxSchoolMajorService.list(smlqw);
Map<String ,YxSchoolMajor> map = new HashMap<>();
String key = "";
@ -230,7 +229,6 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
map.put(key,yxSchoolMajor);
}
YxSchoolMajor yxSchoolMajor = null;
List<YxSchoolMajor> saveOrUpdateList = new ArrayList<>();
for (YxHistoryMajorEnroll yxHistoryMajorEnroll : list) {
key2 = yxHistoryMajorEnroll.getSchoolCode()+"_"+ yxHistoryMajorEnroll.getMajorName() + "_" + yxHistoryMajorEnroll.getBatch() + "_" + yxHistoryMajorEnroll.getCategory();
@ -257,7 +255,6 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
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())){
@ -266,6 +263,8 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
}else if("音乐表演".equals(yxHistoryMajorEnroll.getMajorTypeChild())){
yxSchoolMajor.setMainSubjects(yxHistoryMajorEnroll.getMainSubjects());
}
}else if("表演类".equals(yxSchoolMajor.getMajorType())){
yxSchoolMajor.setMajorTypeChild(yxHistoryMajorEnroll.getMajorTypeChild());
}
yxSchoolMajor.setCreateTime(new Date());
saveOrUpdateList.add(yxSchoolMajor);
@ -411,7 +410,7 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
try {
//加载省控线
Map<String, YxHistoryScoreControlLine> historyScoreControlLineMap = yxHistoryScoreControlLineService.allMaps();
Map<String, YxMajor> majorMap = yxMajorService.mapsForMajorName();
Map<String, YxMajor> majorMap = yxMajorService.mapsForMajorNameBatch();
//Map<String, YxSchool> schoolNameMap = yxSchoolService.mapsForSchoolName();
//Collection<YxSchool> schoolCodeList = schoolNameMap.values();
String schoolCode = null;
@ -506,6 +505,12 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
if (i != -1) {
mn = majorName.substring(0, i);
}
if(yxHistoryMajorEnroll.getBatch().contains("")){
mn+="_专";
}else{
mn+="_本";
}
major = majorMap.get(mn);
AssertUtils.notNull(major, String.format("行[%s],专业未在系统中找到", index));
yxHistoryMajorEnroll.setMajorCode(major.getMajorCode());

View File

@ -192,7 +192,7 @@
<!--音乐类 子项专业查询 end-->
<!--表演类 子项专业查询 start-->
<if test="queryvo.professionalCategory!=null and queryvo.professionalCategory=='表演类' and queryvo.pCategoryChildrenList!=null and queryvo.pCategoryChildrenList.size>0">
AND cm.main_subjects in
AND cm.major_type_child in
<foreach collection="queryvo.pCategoryChildrenList" index="index" item="b" open="(" separator="," close=")">
#{b}
</foreach>
@ -381,7 +381,7 @@
<!--音乐类 子项专业查询 end-->
<!--表演类 子项专业查询 start-->
<if test="queryvo.professionalCategory!=null and queryvo.professionalCategory=='表演类' and queryvo.pCategoryChildrenList!=null and queryvo.pCategoryChildrenList.size>0">
AND cm.main_subjects in
AND cm.major_type_child in
<foreach collection="queryvo.pCategoryChildrenList" index="index" item="b" open="(" separator="," close=")">
#{b}
</foreach>
@ -537,7 +537,7 @@
<!--音乐类 子项专业查询 end-->
<!--表演类 子项专业查询 start-->
<if test="queryvo.professionalCategory!=null and queryvo.professionalCategory=='表演类' and queryvo.pCategoryChildrenList!=null and queryvo.pCategoryChildrenList.size>0">
AND cm.main_subjects in
AND cm.major_type_child in
<foreach collection="queryvo.pCategoryChildrenList" index="index" item="b" open="(" separator="," close=")">
#{b}
</foreach>

View File

@ -19,6 +19,8 @@ public interface IYxMajorService extends IService<YxMajor> {
Map<String,YxMajor> mapsForMajorName();
Map<String,YxMajor> mapsForMajorNameBatch();
Map<String,YxMajor> mapsForMajorCode();
YxMajor findByMajorCode(String majorCode);

View File

@ -20,6 +20,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -41,7 +42,7 @@ public class BiaoyanService {
/**
* 表演类的 分数计算方式
*/
public void biaoyanRecommendMajorListSetEnrollProbability(List<RecommendMajorDTO> recommendMajorList, YxUserScore activeCurrentUserScore) {
public void biaoyanRecommendMajorListSetEnrollProbability1(List<RecommendMajorDTO> recommendMajorList, YxUserScore activeCurrentUserScore) {
try {
//专业类别
String professionalCategory = activeCurrentUserScore.getProfessionalCategory();
@ -273,6 +274,145 @@ public class BiaoyanService {
}
}
public void biaoyanRecommendMajorListSetEnrollProbability(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();
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())){
professionalScore = activeCurrentUserScore.getXjysby();
}else if("服装表演".equals(recommendMajorDTO.getMajorTypeChild())){
professionalScore = activeCurrentUserScore.getFzby();
}else{
professionalScore = activeCurrentUserScore.getXjysdy();
}
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;
}
//算分用
// 当前学生的分数折合
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();
}
}
/**
* 文化分测算
*

View File

@ -56,6 +56,21 @@ public class YxMajorServiceImpl extends ServiceImpl<YxMajorMapper, YxMajor> impl
return maps;
}
@Override
public Map<String, YxMajor> mapsForMajorNameBatch() {
LambdaQueryWrapper<YxMajor> yxMajorLambdaQueryWrapper = new LambdaQueryWrapper<>();
yxMajorLambdaQueryWrapper.select(YxMajor::getMajorCode,YxMajor::getMajorName);
Map<String,YxMajor> maps = new LinkedHashMap<>();
for (YxMajor yxMajor : list(yxMajorLambdaQueryWrapper)) {
if ("1".equals(yxMajor.getEducationalLevel())) {
maps.put(yxMajor.getMajorName() + "_本",yxMajor);
continue;
}
maps.put(yxMajor.getMajorName() + "_专",yxMajor);
}
return maps;
}
@Override
public Map<String, YxMajor> mapsForMajorCode() {
LambdaQueryWrapper<YxMajor> yxMajorLambdaQueryWrapper = new LambdaQueryWrapper<>();