Commit 7e1a909a authored by cy's avatar cy

方案优化

parent 56cfc490
......@@ -409,7 +409,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
return R.error("考生无副科成绩!");
}
//本科or专科
String gradeType=StringUtils.isBlank(schemeVo.getGradeType()) ? null : schemeVo.getGradeType();
String gradeType = StringUtils.isBlank(schemeVo.getGradeType()) ? null : schemeVo.getGradeType();
//文化分
Double majorGrade = scoreInfo.getMajorGrade();
//专业分
......@@ -516,7 +516,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
}
//筛选出带和的字符串的限专业学校
Iterator<Volunteer> iterator = list.iterator();
while(iterator.hasNext()){
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
......@@ -541,7 +541,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
volunteerVo.setUserId(user.getId());
//筛选出带和的字符串的限专业学校
Iterator<Volunteer> iterator = list.iterator();
while(iterator.hasNext()){
while (iterator.hasNext()) {
Volunteer info = iterator.next();
if (info.getCourseDemand().contains("和")) {
String[] course = info.getCourseDemand().split("和");
......@@ -728,6 +728,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("type", SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode());
map.put("downGrade", downGrade);
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade,
SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode(), classNames);
......@@ -741,7 +756,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_MAJOR.getCode());
map.put("downGrade", downGrade);
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
......@@ -788,7 +817,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_ARTS.getCode());
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, firstRule.getNumber(), upGrade, downGrade,
......@@ -813,7 +856,6 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
//2、考生是否能报取美术专科
if (secondCulture >= secondRule.getCultureMin() && secondMajor >= secondRule.getProfessionMin()) {
//浮动分数
double upGrade = secondRuleTotal + secondRule.getUpMark();
double downGrade = secondRuleTotal - secondRule.getDownMark();
......@@ -823,7 +865,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
}
map.put("type", SchemeTypeEnums.JUNIOR_COLLEGE_ARTS.getCode());
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
......@@ -869,7 +925,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_LITERATURE.getCode());
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
......@@ -916,7 +986,21 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
map.put("downGrade", downGrade);
map.put("type", SchemeTypeEnums.UNDERGRADUATE_SPORTS.getCode());
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()) {
List<Volunteer> fillList = fillUpVolunteer(list, secondRule.getNumber(), upGrade, downGrade,
......@@ -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) {
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
List<Integer> volunteerIds = list.stream().map(Volunteer::getId).collect(Collectors.toList());
......@@ -1025,6 +1096,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
List<Volunteer> fillList = volunteerMapper.getFillList(map);
List<Volunteer> resultList = new ArrayList<>();
List<Volunteer> otherList = new ArrayList<>();
List<Volunteer> endList = new ArrayList<>();
Map<Double, List<Volunteer>> mapObj = fillList.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark
));
......@@ -1036,7 +1108,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
int count = mRandom.nextInt(volunteers.size());
//判断限制专业
String courseDemand = volunteers.get(count).getCourseDemand();
if(courseDemand.contains("和")){
if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和");
for (String co : course) {
if (!classStr.contains(co)) {
......@@ -1044,12 +1116,12 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
break;
}
}
}else{
} else {
resultList.add(volunteers.get(count));
volunteers.remove(count);
otherList.addAll(volunteers);
}
}
otherList.addAll(volunteers);
} else {
resultList.addAll(volunteers);
}
......@@ -1071,7 +1143,7 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
int count = mRandom.nextInt(volunteers.size());
//判断限制专业
String courseDemand = volunteers.get(count).getCourseDemand();
if(courseDemand.contains("和")){
if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和");
for (String co : course) {
if (!classStr.contains(co)) {
......@@ -1079,12 +1151,13 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
break;
}
}
}else{
} else {
resultList.add(volunteers.get(count));
volunteers.remove(count);
otherList.addAll(volunteers);
}
}
endList.addAll(volunteers);
} else {
resultList.addAll(volunteers);
}
......@@ -1096,36 +1169,32 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
}
//从剩下的数据中随机抽取,添满数组
Collections.shuffle(otherList);
Collections.shuffle(endList);
if (resultList.size() < totalNumber) {
int num = totalNumber - resultList.size();
List<Volunteer> volunteers = new ArrayList<>();
if (otherList.size() > 0) {
if (endList.size() > 0) {
for (int i = 0; i < num; i++) {
Random mRandom = new Random();
if (otherList.size() > 0) {
int count = mRandom.nextInt(otherList.size());
if (resultList.contains(otherList.get(count))) {
otherList.remove(count);
continue;
}
//判断限制专业
String courseDemand = otherList.get(count).getCourseDemand();
if(courseDemand.contains("和")){
String[] course = courseDemand.split("和");
for (String co : course) {
if (!classStr.contains(co)) {
otherList.remove(count);
break;
}
int count = mRandom.nextInt(endList.size());
if (resultList.contains(endList.get(count))) {
endList.remove(count);
continue;
}
//判断限制专业
String courseDemand = endList.get(count).getCourseDemand();
if (courseDemand.contains("和")) {
String[] course = courseDemand.split("和");
for (String co : course) {
if (!classStr.contains(co)) {
endList.remove(count);
break;
}
continue;
}
volunteers.add(otherList.get(count));
otherList.remove(count);
} else {
break;
continue;
}
volunteers.add(endList.get(count));
endList.remove(count);
}
}
resultList.addAll(volunteers);
......@@ -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