Commit d2f1a65d authored by licc's avatar licc

优化查询方案2

parent 91921606
...@@ -250,15 +250,15 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -250,15 +250,15 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
return R.ok(volunteerVo); return R.ok(volunteerVo);
} }
//6保存用户方案记录、志愿之间的关联关系,扣减查询次数 // //6保存用户方案记录、志愿之间的关联关系,扣减查询次数
R<Integer> bool = volunteerManager.saveUserVolunteer(user, list, scoreInfo, queryVo.getBigMajorNames()); // R<Integer> bool = volunteerManager.saveUserVolunteer(user, list, scoreInfo, queryVo.getBigMajorNames());
if (null != bool && bool.getCode() == 500) { // if (null != bool && bool.getCode() == 500) {
return R.error(bool.getMessage()); // return R.error(bool.getMessage());
} // }
volunteerVo.setUserId(user.getId()); volunteerVo.setUserId(user.getId());
assert bool != null; // assert bool != null;
volunteerVo.setRecordId(bool.getData()); // volunteerVo.setRecordId(bool.getData());
//设置查询时间 //设置查询时间
SetQueryTime(list); SetQueryTime(list);
...@@ -709,7 +709,6 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -709,7 +709,6 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode()); SchemeTypeEnums.UNDERGRADUATE_CULTURE.getCode());
list.addAll(fillList); list.addAll(fillList);
} }
} else { } else {
//考生的分数是在专科一批中 //考生的分数是在专科一批中
double upGrade = secondCulture + secondRule.getUpMark(); double upGrade = secondCulture + secondRule.getUpMark();
...@@ -1048,14 +1047,14 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1048,14 +1047,14 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
List<Volunteer> result = new ArrayList<>(); List<Volunteer> result = new ArrayList<>();
List<Volunteer> otherList = new ArrayList<>(); List<Volunteer> otherList = new ArrayList<>();
//分组,每组数量大于4的,取4条,小于等于则全取 //分组,每组数量大于2的,取2条,小于等于则全取
Map<Double, List<Volunteer>> map = list.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark Map<Double, List<Volunteer>> map = list.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark
)); ));
for (Map.Entry<Double, List<Volunteer>> entry : map.entrySet()) { for (Map.Entry<Double, List<Volunteer>> entry : map.entrySet()) {
List<Volunteer> volunteers = entry.getValue(); List<Volunteer> volunteers = entry.getValue();
if (volunteers.size() > 4) { if (volunteers.size() > 2) {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 2; i++) {
Random mRandom = new Random(); Random mRandom = new Random();
int number = mRandom.nextInt(volunteers.size()); int number = mRandom.nextInt(volunteers.size());
result.add(volunteers.get(number)); result.add(volunteers.get(number));
...@@ -1071,19 +1070,43 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp ...@@ -1071,19 +1070,43 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
} }
} }
//分组,每组数量大于2的,取2条,小于等于则全取
Map<Double, List<Volunteer>> mapOther = otherList.stream().collect(Collectors.groupingBy(Volunteer::getLowestMark
));
List<Volunteer> endList = new ArrayList<>();
for (Map.Entry<Double, List<Volunteer>> entry : mapOther.entrySet()) {
List<Volunteer> volunteers = entry.getValue();
if (volunteers.size() > 2) {
for (int i = 0; i < 2; i++) {
Random mRandom = new Random();
int number = mRandom.nextInt(volunteers.size());
result.add(volunteers.get(number));
volunteers.remove(number);
}
endList.addAll(volunteers);
} else {
result.addAll(volunteers);
}
if (result.size() >= total) {
return result.subList(0, total);
}
}
//从剩下的数据中随机抽取,添满数组 //从剩下的数据中随机抽取,添满数组
if (result.size() < total) { if (result.size() < total) {
int number = total - result.size(); int number = total - result.size();
List<Volunteer> volunteers = new ArrayList<>(); List<Volunteer> volunteers = new ArrayList<>();
for (int i = 0; i < number; i++) { for (int i = 0; i < number; i++) {
Random mRandom = new Random(); Random mRandom = new Random();
int count = mRandom.nextInt(otherList.size()); int count = mRandom.nextInt(endList.size());
if (result.contains(otherList.get(count))) { if (result.contains(endList.get(count))) {
otherList.remove(count); endList.remove(count);
continue; continue;
} }
volunteers.add(otherList.get(count)); volunteers.add(endList.get(count));
otherList.remove(count); endList.remove(count);
} }
result.addAll(volunteers); result.addAll(volunteers);
} }
......
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