package com.sp.exam.service.impl;
import com.sp.exam.dao.*;
import com.sp.exam.dto.CourseExamDTO;
import com.sp.exam.pojo.CourseExam;
import com.sp.exam.pojo.CourseRemix;
import com.sp.exam.pojo.CourseRemixRecord;
import com.sp.exam.pojo.TimeTable;
import com.sp.exam.service.ArrangedCourseService;
import com.sp.exam.utils.GetSemester;
import com.sp.exam.utils.RemixCourseUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description:把课程根据权重优先放入时间表里面
* @author: SSp1ash
* @Date: 2019/4/24
*/
@Service
public class ArrangedCourseServiceImpl implements ArrangedCourseService {
@Autowired
private TimeTableDao timeTableDao;
@Autowired
private CourseRemixDao courseRemixDao;
@Autowired
private CourseDao courseDao;
@Autowired
private CourseExamDao courseExamDao;
@Autowired
private CourseRemixRecordDao courseRemixRecordDao;
/**
* @Description:这个函数目前是排出学生一天最多考一堂课的函数,
* 还有一些没有排到时间表上的课程,在自动排课课程中,接下来会进行尽量不在一个上午或者一个下午考试的安排方法,
* 最后才是无条件地直接插入空位,如果位置还是不够,管理员可以考虑增加时间表,当前默认时间表是一周5天
* @author: SSp1ash
* @Date: 2019/4/24
*/
@Override
public void arrangedTimeTableByDay() {
//1.取出需要拍的课程还有可用的时间
List<CourseRemix> courseRemixes = courseRemixDao.findByTimeAndBeArrangedOrderByWeightDesc(GetSemester.get(), "0");
List<TimeTable> timeTables = timeTableDao.findByBeArrangedAndTimeSemester("0",GetSemester.get());
//2.给课程排考,排考有个原则,不要再一天内考多堂
int flag=0;
for(int i=0;i<courseRemixes.size();i++){
for(int j=0;j<timeTables.size();j++){
flag=0;
CourseRemix courseRemix = courseRemixes.get(i);
TimeTable timeTable = timeTables.get(j);
//开始进行判断
String dayTime = timeTable.getTimeDetail().substring(0, 2);
List<TimeTable> nearbyTime = timeTableDao.findByTimeDetailLike(dayTime + "%");
for(int x=0;x<nearbyTime.size();x++){
//把remix课程中设计到的课程号生成一个List
if(nearbyTime.get(x).getRemixId()!=null){
String remixLimit = courseRemixDao.findById(nearbyTime.get(x).getRemixId()).get().getRemixLimit();
//把remixLimit字符串分割开形成了String数组
String[] near=remixLimit.split("\\+");
String[] thisRemix=courseRemix.getRemixLimit().split("\\+");
//此处为了扩展remix更多课程时的操作
for(int q=0;q<near.length;q++){
for(int w=0;w<thisRemix.length;w++) {
if(RemixCourseUtil.contrastLimit(near[q],thisRemix[w])){
continue;
}else {
flag=1;
break;
}
}
if(flag==1){break;}
}
}
//这时候说明这天学生只会考一堂考试,可以直接把当前课程插入当前时间
if(flag==0&&x==nearbyTime.size()-1){
timeTable.setRemixId(courseRemix.getRemixId());
timeTable.setBeArranged("1");
timeTableDao.save(timeTable);
courseRemix.setBeArranged("1");
courseRemixDao.save(courseRemix);
List<CourseRemixRecord> byRemixId = courseRemixRecordDao.findByRemixId(courseRemix.getRemixId());
for(CourseRemixRecord courseRemixRecord:byRemixId){
courseRemixRecord.setBeArranged("1");
courseRemixRecordDao.save(courseRemixRecord);
}
List<String> courseList = byRemixId.stream().map(e -> e.getCourseId()).collect(Collectors.toList());
for(String courseNo:courseList){
CourseExam courseExam = courseExamDao.findById(courseNo).get();
courseExam.setBeArranged("1");
courseExamDao.save(courseExam);
}
//保存执行完毕
flag=2;
break;
}
//如果发现有一天考多门,就先考虑第二天的,这里先不做直接跳到下一天的操作
if(flag==1){
break;
}
}
if(flag==2){
timeTables.remove(j);
break;
}
}
}
}
/**
* @Description:排考时考虑为学生将不会在一个上午或者下午考多堂考试,这个方法最好是在ByDay执行完后再次执行此方法
* @author: SSp1ash
* @Date: 2019/4/24
*/
@Override
public void arrangedTimeTableByTimeSlot() {
//1.取出需要拍的课程还有可用的时间
List<CourseRemix> courseRemixes = courseRemixDao.findByTimeAndBeArrangedOrderByWeightDesc(GetSemester.get(), "0");
List<TimeTable> timeTables = timeTableDao.findByBeArrangedAndTimeSemester("0",GetSemester.get());
//2.给课程排考,此时考虑的是不在同一个上午或者下午
int flag=0;
for(int i=0;i<courseRemixes.size();i++){
for(int j=0;j<timeTables.size();j++){
flag=0;
CourseRemix courseRemix = courseRemixes.get(i);
TimeTable timeTable = timeTables.get(j);
if(timeTable.getBeArranged().equals("1")){continue;}
//开始进行判断
String dayTime = timeTable.getTimeDetail().substring(0, 2);
List<TimeTable> nearbyTime = timeTableDao.findByTimeDetailLikeAndTimeSlot(dayTime + "%",timeTable.getTimeSlot());
TimeTable theNearTime=new TimeTable();
for(TimeTable nearTime:nearbyTime){
if(!nearTime.getTimeDetail().equals(timeTable.getTimeDetail())){
theNearTime=nearTime;
}
}
//theNearTime就是同是上午或者下午的他的相邻的那堂考试
//如果theNearTime没有被安排自然就可以吧当前考试插入当前时间
if(theNearTime.getBeArranged().equals("0")){
}else{
String remixLimit = courseRemixDao.findById(theNearTime.getRemixId()).get().getRemixLimit();
//把remixLimit字符串分割开形成了String数组
String[] near=remixLimit.split("\\+");
String[] thisRemix=courseRemix.getRemixLimit().split("\\+");
for(int q=0;q<near.length;q++){
for(int w=0;w<thisRemix.length;w++) {
if(RemixCourseUtil.contrastLimit(near[q],thisRemix[w])){
continue;
}else {
f
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot的考务管理系统.zip
共174个文件
java:139个
ftl:25个
css:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 139 浏览量
2023-05-30
15:42:40
上传
评论
收藏 284KB ZIP 举报
温馨提示
基于SpringBoot框架开发的程序,可以作为毕业设计,包含数据库文件
资源推荐
资源详情
资源评论
收起资源包目录
基于SpringBoot的考务管理系统.zip (174个子文件)
amazeui.min.css 249KB
style.css 6KB
manualExamArranged.ftl 25KB
autoExamArranged.ftl 12KB
studentData.ftl 10KB
courseData.ftl 8KB
confirmSelectCourse.ftl 8KB
teacherData.ftl 8KB
examRoomData.ftl 8KB
addScore.ftl 5KB
viewScoreAnalyse.ftl 3KB
userInfo.ftl 3KB
examDetailArranged.ftl 3KB
navAdmin.ftl 3KB
index.ftl 2KB
examScore.ftl 2KB
examDetail.ftl 2KB
Invigilate.ftl 2KB
autoSelect.ftl 2KB
navTeacher.ftl 785B
navStudent.ftl 775B
success.ftl 618B
error.ftl 589B
header.ftl 441B
teacherHome.ftl 187B
studentHome.ftl 185B
adminHome.ftl 183B
.gitignore 303B
maven-wrapper.jar 47KB
ArrangedCourseServiceImpl.java 13KB
RemixCourseServiceImpl.java 13KB
ExamArrangedController.java 10KB
ArrangedExamRoomServiceImpl.java 10KB
DataManagementController.java 8KB
RandomNameUtil.java 6KB
MavenWrapperDownloader.java 5KB
UserController.java 4KB
SelectCourseController.java 4KB
SelectCourseServiceImpl.java 4KB
TeacherAffairServiceImpl.java 4KB
TeacherSelectedUtil.java 3KB
ScoreAnalyseServiceImpl.java 3KB
CourseExamServiceImpl.java 3KB
DataManagementServiceImpl.java 3KB
ExamRoomArranged2ExamRoomArrangedDTOConverter.java 3KB
ScoreAnalyseController.java 3KB
StudentController.java 3KB
RemixCourseUtil.java 3KB
ArrangedStuSitServiceImpl.java 2KB
StudentServiceImpl.java 2KB
StudentScoreManagementController.java 2KB
AdminAuthorizeAspect.java 2KB
SelectCourseResultServiceImpl.java 2KB
UserDaoTest.java 2KB
FindInvigilateController.java 2KB
UserServiceImpl.java 2KB
AddTeacherDao.java 2KB
ArrangedDLCServiceImpl.java 2KB
CookieUtil.java 1KB
GetSemester.java 1KB
TeacherAffairServiceImplTest.java 1KB
AddStudentDao.java 1KB
ArrangedExamRoomServiceImplTest.java 1KB
SelectCourseServiceImplTest.java 1KB
CourseAvailableServiceImpl.java 1KB
ArrangedCourseServiceImplTest.java 1KB
RemixCourseUtilTest.java 1KB
RemixCourseServiceImplTest.java 1KB
JudgeSelectCourseUtil.java 1KB
CourseDaoTest.java 1KB
TimeTableDaoTest.java 1023B
ExamExceptionHandler.java 984B
DataManagementService.java 943B
TeacherNameUtil.java 934B
CourseSelectDaoTest.java 899B
TimeDetailUtil.java 885B
TimeTableDao.java 805B
CourseAvailable2CourseAvailableDTO.java 799B
TeacherSelectedUtilTest.java 787B
DataManagementServiceImplTest.java 769B
SelectCourseResultServiceImplTest.java 722B
ScoreAnalyseServiceImplTest.java 685B
ArrangedCourseService.java 659B
ArrangedStuSitServiceImplTest.java 656B
CourseExamServiceImplTest.java 655B
StudentDaoTest.java 647B
CourseAvailable.java 644B
CourseAvailableDTO.java 618B
ExamRoomArrangedDao.java 607B
ResultVOUtil.java 601B
CourseSelectDao.java 582B
LimitDaoTest.java 567B
ScoreAnalyse.java 562B
CourseSelect.java 553B
TimeTable.java 551B
TimeDetailUtilTest.java 535B
Course.java 535B
StuExamDetail.java 535B
RemixCourseService.java 521B
TeacherFrequency.java 519B
共 174 条
- 1
- 2
资源评论
我慢慢地也过来了
- 粉丝: 7412
- 资源: 4013
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功