完成将若干人随机补全到若干位置上要求某个属性值必须进行分类
以下使用的技术是springboot,mybatisplus,spring,springmvc,这是完成选择导师系统的真是案例希望对你有帮助,代码不是特别好希望大佬可以指点!!!
@Override
@Transactional
public boolean thressFp() {
//查找未选满的教师(还有名额的教师)
List<Tutor> tutors=tutorMapper.notFull();
HashMap<String,Integer> hashMapTutor=new HashMap();
//教师id对应分配的学生
Map<String,List<Student>> stringListMap=new HashMap();
// 将所有教师剩余名额存进map集合
for (Tutor tutor : tutors) {
hashMapTutor.put(tutor.getTutorId(),tutor.getStudentSize());
}
//未被选中的学生
List<Student> list=tutorMapper.notTutor();
//便利所有老师的key和所带学生数
for(HashMap.Entry<String,Integer> entry : hashMapTutor.entrySet()) {
//便利老师的key获取选择的数
String tutorId = entry.getKey();
//获取老师的名额
Integer name = hashMapTutor.get(tutorId);
Integer nasss = name;
// 创建一个生产随机数的对象
Random r = new Random();
List<Student> students=new ArrayList<>();
List<String> major=new ArrayList<>();
//根据老师名额带学生
for (int i = nasss-1; i >= 0; i--) {
//学生都分配完成直接跳出本次循环
if(list.size()==0){
continue;
}
//对list集合进行筛选(老师分为三个状态:一个没选、已选)
//(1)根据学号获得教师信息
if(name==8){
name--;
// 通过对象方法获取随机数
if(list.size()==0){
continue;
}
int i1 = r.nextInt(list.size());
//获取学生信息
Student integer = list.get(i1);
major.add(integer.getMajor());
//存入学生的List集合
students.add(integer);
//移除这个下标对应的值进行下一次循环
list.remove(i1);
}else {
if(major.size()==0){
Tutor tu = tutorService.getById(tutorId);
List<StudentExcel> excelFinalTutor = studentMapper.findExcelFinalTutor(tu.getTutorName());
major.add(excelFinalTutor.get(0).getMajor());
}
String s = major.get(0);
List<Student> studentList=new ArrayList<>();
for (Student student : list) {
if(student.getMajor().equals(s)){
studentList.add(student);
}
}
if(studentList.size()==0){
continue;
}
// 通过对象方法获取随机数
int i1 = r.nextInt(studentList.size());
//获取学生信息
Student integer = studentList.get(i1);
//存入学生的List集合
students.add(integer);
for (int i2 = 0; i2 < list.size(); i2++) {
if(list.get(i2).getStudentId().equals(integer.getStudentId())){
list.remove(i2);
}
}
//移除这个下标对应的值进行下一次循环
studentList.remove(i1);
}
}
//录入map集合
stringListMap.put(entry.getKey(),students);
//判断
if(list.size()==0){
break;
}
}
for (Tutor tutor : tutors) {
int i=0;
List<Student> students = stringListMap.get(tutor.getTutorId());
if(students==null){
continue;
}
for (Student student : students) {
student.setPd(1);
studentMapper.updateById(student);
//封装SelectedTopic对象
SelectedTopic selectedTopic=new SelectedTopic();
selectedTopic.setPd(1);
selectedTopic.setStudentId(student.getStudentId());
selectedTopic.setTutorName(tutor.getTutorName());
UpdateWrapper<SelectedTopic> updateWrapper=new UpdateWrapper<>();
updateWrapper.lambda().set(SelectedTopic::getPd,1).set(SelectedTopic::getTutorName,tutor.getTutorName())
.eq(SelectedTopic::getStudentId,student.getStudentId());
QueryWrapper<SelectedTopic> selectedTopicQueryWrapper=new QueryWrapper<>();
selectedTopicQueryWrapper.lambda().eq(SelectedTopic::getStudentId,student.getStudentId());
if(selectedTopicMapper.selectOne(selectedTopicQueryWrapper)!=null){
selectedTopicMapper.update(selectedTopic,updateWrapper);
}else{
selectedTopic.setTopic("未知");
selectedTopic.setDirection("未知");
//如果没有该学生的任何信息直接进行录入
selectedTopicMapper.insert(selectedTopic);
}
i++;
}
tutor.setStudentSize(tutor.getStudentSize()-i);
tutorMapper.updateById(tutor);
if(tutor.getStudentSize()==0){
tutor.setTutorStudentJudge(1);
}
}
return true;
}