Commit d2f1a65d authored by licc's avatar licc

优化查询方案2

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