updates
This commit is contained in:
parent
469b41d533
commit
2d466cf943
|
|
@ -42,11 +42,11 @@ import java.util.*;
|
|||
@Slf4j
|
||||
@RequestMapping("/mini/major")
|
||||
public class MiniMajorController {
|
||||
@Autowired
|
||||
@Resource
|
||||
private IYxMajorService yxMajorService;
|
||||
@Autowired
|
||||
@Resource
|
||||
private IYxCalculationMajorService yxCalculationMajorService;
|
||||
@Autowired
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
@Resource
|
||||
private MiniTestCulturalService testCulturalService;
|
||||
|
|
@ -116,11 +116,11 @@ public class MiniMajorController {
|
|||
String str = null;
|
||||
List<String> notList= Arrays.asList("文7专3","专过文排","文8专2","文6专4","文5专5");
|
||||
if (queryRecommendMajorVO.getProfessionalCategory().equals("音乐类")) {
|
||||
str = "[\"文过专排主科\",\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\"]";
|
||||
str = "[\"文过专排主科\",\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\",\"文8专2\"]";
|
||||
} else if (queryRecommendMajorVO.getProfessionalCategory().equals("体育类")) {
|
||||
str = "[\"文过专排\",\"专过文排\",\"文3专7\",\"文5专5\",\"文7专3\"]";
|
||||
str = "[\"专过文排\",\"文7专3\" ,\"文5专5\",\"文3专7\",\"文过专排\"]";
|
||||
} else {
|
||||
str = "[\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\"]";
|
||||
str = "[\"文过专排\",\"专过文排\",\"文1专1\",\"文3专7\",\"文3专10\",\"文4专10\",\"文4专6\",\"文5专10\",\"文5专5\",\"文6专10\",\"文6专4\",\"文7专3\",\"文8专2\"]";
|
||||
}//277
|
||||
JSONArray objects = JSONArray.parseArray(str);
|
||||
List<String> javaList = objects.toJavaList(String.class);
|
||||
|
|
@ -146,7 +146,7 @@ public class MiniMajorController {
|
|||
String schoolCode = queryRecommendMajorVO.getSchoolCode();
|
||||
String year = queryRecommendMajorVO.getYear();
|
||||
AssertUtils.notNull(loginUser, "未获取到登录信息");
|
||||
AssertUtils.notNull(year, "请选择年份");
|
||||
// AssertUtils.notNull(year, "请选择年份");
|
||||
return Result.OK(testCulturalService.testCultural(schoolCode));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,24 +15,24 @@ public class YxConstant {
|
|||
/**
|
||||
* 当前年
|
||||
*/
|
||||
public static final String nowYear = "2024";
|
||||
public static final String nowYear = "2025";
|
||||
|
||||
/**
|
||||
* 使用省控线年份
|
||||
*/
|
||||
public static String historyControlLineYear = "2023";
|
||||
public static String historyControlLineYear = "2025";
|
||||
/**
|
||||
* 旧日期
|
||||
*/
|
||||
public static final List<String> oldYearList = Arrays.asList("2023", "2022", "2021", "2020");
|
||||
public static final List<String> oldYearList = Arrays.asList("2024", "2023", "2022", "2021");
|
||||
|
||||
public static final List<String> showOldYearList = Arrays.asList("2024", "2023", "2022", "2021", "2020");
|
||||
public static final List<String> showOldYearList = Arrays.asList("2024", "2023", "2022", "2021");
|
||||
|
||||
public static List<String> cankaoMajorTypeList = Arrays.asList("音乐类", "舞蹈类", "播音与主持类", "表演类", "戏曲类");
|
||||
|
||||
public static List<String> betaMajorTypeList = Arrays.asList("美术与设计类", "书法类", "体育类");
|
||||
|
||||
public static List<String> cankaoYearList = Arrays.asList("2023", "2022");
|
||||
public static List<String> cankaoYearList = Arrays.asList("2024", "2023");
|
||||
|
||||
public static String w1z1 = "文1专1";
|
||||
public static String w1jiaz1 = "文1+专1";
|
||||
|
|
|
|||
|
|
@ -444,16 +444,13 @@ public class YxHistoryMajorEnrollController extends JeecgController<YxHistoryMaj
|
|||
AssertUtils.notNull(major, String.format("行[%s],专业未在系统中找到", index));
|
||||
yxHistoryMajorEnroll.setMajorCode(major.getMajorCode());
|
||||
|
||||
if (index==11) {
|
||||
System.out.println("1");
|
||||
}
|
||||
|
||||
if ("提前批".equals(batch)) {
|
||||
batch = "本科提前批";
|
||||
}
|
||||
//省控线
|
||||
//文科_本科A段_美术与设计_2023
|
||||
if ("舞蹈类".equals(majorType)) {
|
||||
if ("舞蹈类".equals(majorType) && Integer.parseInt(year) <= 2023) {
|
||||
AssertUtils.notEmpty(mainSubjects, String.format("行[%s],未识别到舞蹈类型", index));
|
||||
if (mainSubjects.contains("艺术舞蹈")) {
|
||||
key = category + "_" + batch + "_" + "艺术舞蹈类" + "_" + year;
|
||||
|
|
|
|||
|
|
@ -69,9 +69,11 @@ public class YxScoreController {
|
|||
String professionalCategoryChildren = userScoreUpdateDTO.getProfessionalCategoryChildren();
|
||||
AssertUtils.notNull(professionalCategory, "请选择[专业类别]");
|
||||
AssertUtils.notNull(cognitioPolyclinic, "请选择[选考科目]");
|
||||
AssertUtils.hasSize(userScoreUpdateDTO.getSubjectList(),"请选择[选考科目]");
|
||||
AssertUtils.notTrue(userScoreUpdateDTO.getSubjectList().size() != 2,"选考科目必须选两项");
|
||||
|
||||
if("表演类".equals(professionalCategory) || "音乐类".equals(professionalCategory)){
|
||||
AssertUtils.hasSize(userScoreUpdateDTO.getSubjectList(),"请选择[专业选课]");
|
||||
AssertUtils.notTrue(userScoreUpdateDTO.getSubjectList().size() != 2,"选考科目必须选两项");
|
||||
}
|
||||
AssertUtils.notTrue(culturalScore.compareTo(YxConstant.bigDecimal750) > 0, "[文化成绩]最高分为750");
|
||||
AssertUtils.notTrue(culturalScore.compareTo(YxConstant.bigDecimal0) < 0, "[文化成绩]最低分为0");
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,10 @@
|
|||
package org.jeecg.modules.yx.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.jeecg.common.util.RedisUtil;
|
||||
import org.jeecg.modules.web.dto.ArtRecommendMajorBaseDTO;
|
||||
import org.jeecg.modules.web.dto.RecommendMajorDTO;
|
||||
import org.jeecg.modules.web.vo.QueryRecommendMajorVO;
|
||||
|
|
@ -54,8 +52,6 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl<YxCalculationMajo
|
|||
private YxSchoolMajorMapper yxSchoolMajorMapper;
|
||||
@Resource
|
||||
private YxSchoolMapper yxSchoolMapper;
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@Override
|
||||
public List<RecommendMajorDTO> calculationMajor(YxUserScore userScore) {
|
||||
|
|
@ -556,6 +552,11 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl<YxCalculationMajo
|
|||
continue;
|
||||
}
|
||||
|
||||
// 判断 schoolCode 6110
|
||||
if ("6110".equals(recommendMajorDTO.getSchoolCode()) && "动画".equals(recommendMajorDTO.getMajorName())) {
|
||||
System.out.println("qvq");
|
||||
}
|
||||
|
||||
//不是体育类的专业,如果是文过专排,并且没有录取计算运算符时,文过专排是文*0+专*1,专过文排是文*1+专*0
|
||||
if ("文过专排".equals(rulesEnrollProbability) && StringUtils.isBlank(probabilityOperator)) {
|
||||
probabilityOperator = "文*0+专*1";
|
||||
|
|
@ -581,8 +582,8 @@ public class YxCalculationMajorServiceImpl extends ServiceImpl<YxCalculationMajo
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//算分用
|
||||
// 当前学生的分数折合
|
||||
studentScore = ScoreUtil.convertIntoScore(rulesEnrollProbability, activeCurrentUserScore.getCulturalScore(), activeCurrentUserScore.getProfessionalScore(), recommendMajorDTO.getFirstLevelDiscipline(), probabilityOperator);
|
||||
recommendMajorDTO.setPrivateStudentScore(studentScore);
|
||||
if (StringUtils.isNotBlank(recommendMajorDTO.getRulesEnrollProbability())) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package org.jeecg.modules.yx.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
|
@ -8,6 +9,7 @@ import org.apache.commons.lang.StringUtils;
|
|||
import org.apache.shiro.SecurityUtils;
|
||||
import org.jeecg.common.system.vo.LoginUser;
|
||||
import org.jeecg.common.util.AssertUtils;
|
||||
import org.jeecg.common.util.RedisUtil;
|
||||
import org.jeecg.modules.yx.dto.ProfessionalCategoryChildrenDTO;
|
||||
import org.jeecg.modules.yx.dto.UserScoreUpdateDTO;
|
||||
import org.jeecg.modules.yx.entity.YxCalculationMajor;
|
||||
|
|
@ -38,6 +40,9 @@ import java.util.stream.Collectors;
|
|||
public class YxUserScoreServiceImpl extends ServiceImpl<YxUserScoreMapper, YxUserScore> implements IYxUserScoreService {
|
||||
@Autowired
|
||||
private IYxVipCardService yxVipCardService;
|
||||
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
@Override
|
||||
public YxUserScore getActiveUserScore(String createBy) {
|
||||
LambdaQueryWrapper<YxUserScore> queryWrapper=new LambdaQueryWrapper<>();
|
||||
|
|
@ -52,8 +57,15 @@ public class YxUserScoreServiceImpl extends ServiceImpl<YxUserScoreMapper, YxUse
|
|||
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
||||
AssertUtils.notNull(sysUser,"请先登录!");
|
||||
String userId = sysUser.getId();
|
||||
// 获取redis中的成绩缓存
|
||||
String scoreKey = "USER:SCORE:"+ userId;
|
||||
YxUserScore userScore = null;
|
||||
if(redisUtil.hasKey(scoreKey)){
|
||||
userScore = JSONObject.parseObject((String)redisUtil.get(scoreKey), YxUserScore.class);
|
||||
return userScore;
|
||||
}
|
||||
//查询成绩
|
||||
YxUserScore userScore = getActiveUserScore(userId);
|
||||
userScore = getActiveUserScore(userId);
|
||||
if (userScore==null) {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -82,6 +94,9 @@ public class YxUserScoreServiceImpl extends ServiceImpl<YxUserScoreMapper, YxUse
|
|||
}
|
||||
}
|
||||
userScore.setProfessionalCategoryChildrenList(professionalCategoryChildrenList);
|
||||
|
||||
// 将成绩记录缓存
|
||||
redisUtil.set(scoreKey, JSONObject.toJSONString(userScore), 3600);
|
||||
}
|
||||
return userScore;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,10 +74,59 @@ public class ScoreUtil {
|
|||
return sum;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算历年录取分差(录取线 - 省控线),并返回平均分差
|
||||
* @param rulesEnrollProbability 当前录取方式(如"文过专排")
|
||||
* @param historyMajorEnrollList 历年录取数据
|
||||
* @return Map<String, Object> 包含平均分差(scoreDifference)
|
||||
*/
|
||||
public static Map<String, Object> computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability(
|
||||
String rulesEnrollProbability,
|
||||
List<YxHistoryMajorEnroll> historyMajorEnrollList) {
|
||||
// 1. 提前返回空结果,避免后续空指针
|
||||
if (CollectionUtils.isEmpty(historyMajorEnrollList)) {
|
||||
return Collections.singletonMap("scoreDifference", BigDecimal.ZERO);
|
||||
}
|
||||
// 2. 使用更高效的累加方式(避免频繁BigDecimal运算)
|
||||
BigDecimal sum = BigDecimal.ZERO;
|
||||
int validYearCount = 0;
|
||||
for (YxHistoryMajorEnroll enrollData : historyMajorEnrollList) {
|
||||
BigDecimal admissionLine = enrollData.getAdmissionLine();
|
||||
BigDecimal controlLine = enrollData.getControlLine();
|
||||
// 3. 跳过无效数据(录取线≤0)
|
||||
if (admissionLine.signum() <= 0) {
|
||||
continue;
|
||||
}
|
||||
// 4. 计算当前年份分差(录取线 - 省控线)
|
||||
BigDecimal currentDiff = admissionLine.subtract(controlLine);
|
||||
// 5. 特殊逻辑:高职高专(非体育类)需计算分差率(分差/省控线)
|
||||
boolean isVocationalCollege = "高职高专".equals(enrollData.getBatch());
|
||||
boolean isSportsMajor = "体育类".equals(enrollData.getMajorType());
|
||||
if (isVocationalCollege && !isSportsMajor) {
|
||||
currentDiff = currentDiff.divide(controlLine, 6, RoundingMode.HALF_UP);
|
||||
}
|
||||
// 6. 非高职高专 or 体育类:检查录取方式是否一致 validYearCount >= 1 &&
|
||||
else if (!rulesEnrollProbability.equals(enrollData.getRulesEnrollProbability())) {
|
||||
continue; // 录取方式不一致,跳过
|
||||
}
|
||||
|
||||
sum = sum.add(currentDiff);
|
||||
validYearCount++;
|
||||
}
|
||||
|
||||
// 7. 计算平均分差(避免除零错误)
|
||||
BigDecimal averageDiff = validYearCount > 0
|
||||
? sum.divide(new BigDecimal(validYearCount), 4, RoundingMode.HALF_UP)
|
||||
: BigDecimal.ZERO;
|
||||
|
||||
return Collections.singletonMap("scoreDifference", averageDiff);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据 当前年一致的录取方式,计算 往年分数差之和 (往年的录取线-省控线)
|
||||
*/
|
||||
public static Map<String,Object> computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability(String rulesEnrollProbability,List<YxHistoryMajorEnroll> historyMajorEnrollList){
|
||||
public static Map<String,Object> computeHistoryMajorEnrollScoreLineDifferenceWithRulesEnrollProbability_old(String rulesEnrollProbability,List<YxHistoryMajorEnroll> historyMajorEnrollList){
|
||||
BigDecimal sum=new BigDecimal("0");//历年分差之和
|
||||
BigDecimal nowSum=new BigDecimal("0");
|
||||
Map<String,Object> data=new LinkedHashMap<>();
|
||||
|
|
@ -88,10 +137,10 @@ public class ScoreUtil {
|
|||
int yearNum=0;
|
||||
BigDecimal controlLine = null;//文科-省控线
|
||||
BigDecimal admissionLine = null;//文科-录取线
|
||||
YxHistoryMajorEnroll yxHistoryMajorEnroll1 = historyMajorEnrollList.get(0);
|
||||
for (YxHistoryMajorEnroll yxHistoryMajorEnroll : historyMajorEnrollList) {
|
||||
controlLine = yxHistoryMajorEnroll.getControlLine();
|
||||
admissionLine = yxHistoryMajorEnroll.getAdmissionLine();
|
||||
// 如果录取分数线(admissionLine)小于等于0,就直接跳过当前循环,处理下一条数据
|
||||
if (admissionLine.compareTo(YxConstant.bigDecimal0) <=0) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -106,9 +155,6 @@ public class ScoreUtil {
|
|||
//将 分差/省控线
|
||||
nowSum = nowSum.divide(yxHistoryMajorEnroll.getControlLine(),6,RoundingMode.HALF_UP);
|
||||
}
|
||||
/*if (!sum.equals(BigDecimal.ZERO)) {
|
||||
// 判断 两年分差double v = sum.subtract(nowSum).doubleValue();if (v <=2 || v>=2) { //历年分差 在 2 至上时,将用户当前年分差-2 data.put("flag",true);}
|
||||
}*/
|
||||
sum=sum.add(nowSum);//录取线-省控线
|
||||
yearNum++;
|
||||
}
|
||||
|
|
@ -117,20 +163,6 @@ public class ScoreUtil {
|
|||
data.put("scoreDifference",divide);
|
||||
}
|
||||
return data;
|
||||
/*if (wenFlag) {
|
||||
//文科生
|
||||
}else{
|
||||
//理科生
|
||||
BigDecimal scienceControlLine=null;//理科-省控线
|
||||
BigDecimal scienceAdmissionLine=null;//理科-录取线
|
||||
for (YxHistoryMajorEnroll yxHistoryMajorEnroll : historyMajorEnrollList) {
|
||||
scienceControlLine = yxHistoryMajorEnroll.getScienceControlLine();
|
||||
scienceAdmissionLine = yxHistoryMajorEnroll.getScienceAdmissionLine();
|
||||
sum=sum.add(scienceAdmissionLine.subtract(scienceControlLine));//录取线-省控线
|
||||
yearNum++;
|
||||
}
|
||||
}*/
|
||||
//return sum;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue