Commit 7e1a909a authored by cy's avatar cy

方案优化

parent 56cfc490
...@@ -409,7 +409,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -409,7 +409,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
return R.error("考生无副科成绩!"); return R.error("考生无副科成绩!");
} }
//本科or专科 //本科or专科
String gradeType=StringUtils.isBlank(schemeVo.getGradeType()) ? null : schemeVo.getGradeType(); String gradeType = StringUtils.isBlank(schemeVo.getGradeType()) ? null : schemeVo.getGradeType();
//文化分 //文化分
Double majorGrade = scoreInfo.getMajorGrade(); Double majorGrade = scoreInfo.getMajorGrade();
//专业分 //专业分
...@@ -516,7 +516,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -516,7 +516,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
} }
//筛选出带和的字符串的限专业学校 //筛选出带和的字符串的限专业学校
Iterator<Volunteer> iterator = list.iterator(); Iterator<Volunteer> iterator = list.iterator();
while(iterator.hasNext()){ while (iterator.hasNext()) {
Volunteer info = iterator.next(); Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) { if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和"); String[] course = info.getCourseDemand().split("和");
...@@ -541,7 +541,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -541,7 +541,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
volunteerVo.setUserId(user.getId()); volunteerVo.setUserId(user.getId());
//筛选出带和的字符串的限专业学校 //筛选出带和的字符串的限专业学校
Iterator<Volunteer> iterator = list.iterator(); Iterator<Volunteer> iterator = list.iterator();
while(iterator.hasNext()){ while (iterator.hasNext()) {
Volunteer info = iterator.next(); Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) { if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和"); String[] course = info.getCourseDemand().split("和");
...@@ -728,6 +728,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -728,6 +728,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("type", SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); map.put("type", SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode());
map.put("downGrade", downGrade); map.put("downGrade", downGrade);
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
if (list.size() < firstRule.getNumber()) { if (list.size() < firstRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade,
SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode(), classNames); SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode(), classNames);
...@@ -741,7 +756,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -741,7 +756,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode()); map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode());
map.put("downGrade", downGrade); map.put("downGrade", downGrade);
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//如果数据不满足最大数量,取不限专业最低分补充 //如果数据不满足最大数量,取不限专业最低分补充
if (list.size() < secondRule.getNumber()) { if (list.size() < secondRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
...@@ -788,7 +817,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -788,7 +817,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade); map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode()); map.put("type", SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode());
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//如果数据不满足最大数量,取不限专业最低分补充 //如果数据不满足最大数量,取不限专业最低分补充
if (list.size() < secondRule.getNumber()) { if (list.size() < secondRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade,
...@@ -813,7 +856,6 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -813,7 +856,6 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
//2、考生是否能报取美术专科 //2、考生是否能报取美术专科
if (secondCulture >= secondRule.getCultureMin() && secondMajor >= secondRule.getProfessionMin()) { if (secondCulture >= secondRule.getCultureMin() && secondMajor >= secondRule.getProfessionMin()) {
//浮动分数 //浮动分数
double upGrade = secondRuleTotal + secondRule.getUpMark(); double upGrade = secondRuleTotal + secondRule.getUpMark();
double downGrade = secondRuleTotal - secondRule.getDownMark(); double downGrade = secondRuleTotal - secondRule.getDownMark();
...@@ -823,7 +865,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -823,7 +865,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
} }
map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode()); map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode());
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//如果数据不满足最大数量,取不限专业最低分补充 //如果数据不满足最大数量,取不限专业最低分补充
if (list.size() < secondRule.getNumber()) { if (list.size() < secondRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
...@@ -869,7 +925,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -869,7 +925,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade); map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode()); map.put("type", SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode());
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//如果数据不满足最大数量,取不限专业最低分补充 //如果数据不满足最大数量,取不限专业最低分补充
if (list.size() < secondRule.getNumber()) { if (list.size() < secondRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
...@@ -916,7 +986,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -916,7 +986,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade); map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode()); map.put("type", SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode());
list = volunteerMapper.getVolunteerList(map); list = volunteerMapper.getVolunteerList(map);
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//如果数据不满足最大数量,取不限专业最低分补充 //如果数据不满足最大数量,取不限专业最低分补充
if (list.size() < secondRule.getNumber()) { if (list.size() < secondRule.getNumber()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade, List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
...@@ -995,20 +1079,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -995,20 +1079,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
private List<Volunteer> fillUpVolunteer(List<Volunteer> list, Integer number, double max, double min, Integer type, List<String> classNames) { private List<Volunteer> fillUpVolunteer(List<Volunteer> list, Integer number, double max, double min, Integer type, List<String> classNames) {
String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(",")); String classStr = classNames.stream().map(String::valueOf).collect(Collectors.joining(","));
//筛选出带和的字符串的限专业学校并进行判断
Iterator<Volunteer> iterator = list.iterator();
while(iterator.hasNext()){
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
for (String co : course) {
if (!classStr.contains(co)) {
iterator.remove();
break;
}
}
}
}
//已存在的志愿ids //已存在的志愿ids
List<Integer> volunteerIds = list.stream().map(Volunteer::getId).collect(Collectors.toList()); List<Integer> volunteerIds = list.stream().map(Volunteer::getId).collect(Collectors.toList());
...@@ -1025,6 +1096,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1025,6 +1096,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
List<Volunteer> fillList = volunteerMapper.getFillList(map); List<Volunteer> fillList = volunteerMapper.getFillList(map);
List<Volunteer> resultList = new ArrayList<>(); List<Volunteer> resultList = new ArrayList<>();
List<Volunteer> otherList = new ArrayList<>(); List<Volunteer> otherList = new ArrayList<>();
List<Volunteer> endList = new ArrayList<>();
Map<Double, List<Volunteer>> mapObj = fillList.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark Map<Double, List<Volunteer>> mapObj = fillList.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark
)); ));
...@@ -1036,7 +1108,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1036,7 +1108,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
int count = mRandom.nextInt(volunteers.size()); int count = mRandom.nextInt(volunteers.size());
//判断限制专业 //判断限制专业
String courseDemand = volunteers.get(count).getCourseDemand(); String courseDemand = volunteers.get(count).getCourseDemand();
if(courseDemand.contains("和")){ if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和"); String[] course = courseDemand.split("和");
for (String co : course) { for (String co : course) {
if (!classStr.contains(co)) { if (!classStr.contains(co)) {
...@@ -1044,12 +1116,12 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1044,12 +1116,12 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
break; break;
} }
} }
}else{ } else {
resultList.add(volunteers.get(count)); resultList.add(volunteers.get(count));
volunteers.remove(count); volunteers.remove(count);
otherList.addAll(volunteers);
} }
} }
otherList.addAll(volunteers);
} else { } else {
resultList.addAll(volunteers); resultList.addAll(volunteers);
} }
...@@ -1071,7 +1143,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1071,7 +1143,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
int count = mRandom.nextInt(volunteers.size()); int count = mRandom.nextInt(volunteers.size());
//判断限制专业 //判断限制专业
String courseDemand = volunteers.get(count).getCourseDemand(); String courseDemand = volunteers.get(count).getCourseDemand();
if(courseDemand.contains("和")){ if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和"); String[] course = courseDemand.split("和");
for (String co : course) { for (String co : course) {
if (!classStr.contains(co)) { if (!classStr.contains(co)) {
...@@ -1079,12 +1151,13 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1079,12 +1151,13 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
break; break;
} }
} }
}else{ } else {
resultList.add(volunteers.get(count)); resultList.add(volunteers.get(count));
volunteers.remove(count); volunteers.remove(count);
otherList.addAll(volunteers);
} }
} }
endList.addAll(volunteers);
} else { } else {
resultList.addAll(volunteers); resultList.addAll(volunteers);
} }
...@@ -1096,36 +1169,32 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1096,36 +1169,32 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
} }
//从剩下的数据中随机抽取,添满数组 //从剩下的数据中随机抽取,添满数组
Collections.shuffle(otherList); Collections.shuffle(endList);
if (resultList.size() < totalNumber) { if (resultList.size() < totalNumber) {
int num = totalNumber - resultList.size(); int num = totalNumber - resultList.size();
List<Volunteer> volunteers = new ArrayList<>(); List<Volunteer> volunteers = new ArrayList<>();
if (otherList.size() > 0) { if (endList.size() > 0) {
for (int i = 0; i < num; i++) { for (int i = 0; i < num; i++) {
Random mRandom = new Random(); Random mRandom = new Random();
if (otherList.size() > 0) { int count = mRandom.nextInt(endList.size());
int count = mRandom.nextInt(otherList.size()); if (resultList.contains(endList.get(count))) {
if (resultList.contains(otherList.get(count))) { endList.remove(count);
otherList.remove(count);
continue; continue;
} }
//判断限制专业 //判断限制专业
String courseDemand = otherList.get(count).getCourseDemand(); String courseDemand = endList.get(count).getCourseDemand();
if(courseDemand.contains("和")){ if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和"); String[] course = courseDemand.split("和");
for (String co : course) { for (String co : course) {
if (!classStr.contains(co)) { if (!classStr.contains(co)) {
otherList.remove(count); endList.remove(count);
break; break;
} }
} }
continue; continue;
} }
volunteers.add(otherList.get(count)); volunteers.add(endList.get(count));
otherList.remove(count); endList.remove(count);
} else {
break;
}
} }
} }
resultList.addAll(volunteers); resultList.addAll(volunteers);
...@@ -1246,4 +1315,5 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1246,4 +1315,5 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment