|
|
|
@ -9,6 +9,7 @@ import com.sztzjy.trade.service.StuHomeworkExamService;
|
|
|
|
|
import com.sztzjy.trade.util.BigDecimalUtils;
|
|
|
|
|
import com.sztzjy.trade.util.ConvertUtil;
|
|
|
|
|
import com.sztzjy.trade.util.PageUtil;
|
|
|
|
|
import com.sztzjy.trade.util.compute.ScoringUtil;
|
|
|
|
|
import org.springframework.http.HttpStatus;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
@ -43,6 +44,8 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
TchTopicDetailsMapper topicDetailsMapper;
|
|
|
|
|
@Resource
|
|
|
|
|
BigDecimalUtils bigDecimalUtils;
|
|
|
|
|
@Resource
|
|
|
|
|
ScoringUtil scoringUtil;
|
|
|
|
|
@Override
|
|
|
|
|
public PageInfo getHomeworks(String userId, String homeworkType, Integer index, Integer size) {
|
|
|
|
|
|
|
|
|
@ -50,9 +53,9 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
StuUser stuUser = stuUserMapper.selectByPrimaryKey(userId);
|
|
|
|
|
String className = stuUser.getClassName();
|
|
|
|
|
|
|
|
|
|
//根据班级查询该班级作业
|
|
|
|
|
//根据班级查询该班级已发布的作业
|
|
|
|
|
TchHomeworkManageExample homeworkManageExample=new TchHomeworkManageExample();
|
|
|
|
|
homeworkManageExample.createCriteria().andHomeworkClassLike("%"+className+"%");
|
|
|
|
|
homeworkManageExample.createCriteria().andHomeworkClassLike("%"+className+"%").andStateEqualTo(1).andHomeworkTypeEqualTo(homeworkType);
|
|
|
|
|
|
|
|
|
|
List<TchHomeworkManage> tchHomeworkManages = homeworkManageMapper.selectByExample(homeworkManageExample);
|
|
|
|
|
|
|
|
|
@ -82,6 +85,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
achievementInfo.setStartingTime(tchHomeworkManage.getStartingTime());
|
|
|
|
|
achievementInfo.setEndTime(tchHomeworkManage.getEndTime());
|
|
|
|
|
achievementInfo.setNumberOfAnswer(0);
|
|
|
|
|
achievementInfo.setHomeworkType(homeworkType);
|
|
|
|
|
|
|
|
|
|
//取到本次作业的题目总量
|
|
|
|
|
if (!tchHomeworkManage.getHomeworkType().equals("附件作业")){
|
|
|
|
@ -103,11 +107,9 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<StuTopicDTO> getTopics(String id) {
|
|
|
|
|
public List<StuTopicDTO> getTopics(String id,String type) {
|
|
|
|
|
StuAchievementInfo achievementInfo = achievementInfoMapper.selectByPrimaryKey(id);
|
|
|
|
|
|
|
|
|
|
//根据作业ID查询作业详情
|
|
|
|
|
TchHomeworkManage tchHomeworkManage = homeworkManageMapper.selectByPrimaryKey(achievementInfo.getTaskId());
|
|
|
|
|
//取到作业开始时间和结束时间
|
|
|
|
|
Date startingTime = achievementInfo.getStartingTime();
|
|
|
|
|
Date endTime = achievementInfo.getEndTime();
|
|
|
|
@ -116,15 +118,25 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
LocalDateTime startLocalDateTime = LocalDateTime.ofInstant(startingTime.toInstant(), ZoneId.systemDefault());
|
|
|
|
|
LocalDateTime endLocalDateTime = LocalDateTime.ofInstant(endTime.toInstant(), ZoneId.systemDefault());
|
|
|
|
|
|
|
|
|
|
// 判断本次作业是否已过期
|
|
|
|
|
// 获取当前时间
|
|
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
|
|
|
|
// 判断本次作业是否已过期
|
|
|
|
|
|
|
|
|
|
// 检查当前时间是否在作业时间段内
|
|
|
|
|
if (now.isBefore(startLocalDateTime) || now.isAfter(endLocalDateTime)) {
|
|
|
|
|
throw new ServiceException(HttpStatus.ACCEPTED, "当前时间不在题目操作的时间段!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//设置题目归类返回map
|
|
|
|
|
Map<String,List<StuTopicDTO>> map=new HashMap<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(type.equals("作业")){
|
|
|
|
|
//根据作业ID查询作业详情
|
|
|
|
|
TchHomeworkManage tchHomeworkManage = homeworkManageMapper.selectByPrimaryKey(achievementInfo.getTaskId());
|
|
|
|
|
|
|
|
|
|
//判断是否已达到最大做题次数
|
|
|
|
|
if(achievementInfo.getNumberOfAnswer()>=tchHomeworkManage.getAnswersFrequency()){
|
|
|
|
|
throw new ServiceException(HttpStatus.ACCEPTED,"已超过最大作答次数");
|
|
|
|
@ -135,18 +147,87 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
// 转换数组为List
|
|
|
|
|
List<String> list = Arrays.asList(split);
|
|
|
|
|
List<StuLearningAssessment> learningAssessments= learningAssessmentMapper.selectTopicsById(list);
|
|
|
|
|
List<StuTopicDTO> stuTopicDTOS = convertUtil.entityToDTOList(learningAssessments, StuTopicDTO.class);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(tchHomeworkManage.getTopicNumberState()==1){ //题目乱序
|
|
|
|
|
Collections.shuffle(stuTopicDTOS);
|
|
|
|
|
Collections.shuffle(learningAssessments);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(tchHomeworkManage.getOptionNumberState()==1){ //选项乱序
|
|
|
|
|
for (StuLearningAssessment learningAssessment:learningAssessments) {
|
|
|
|
|
|
|
|
|
|
//只有单选或者多选乱序
|
|
|
|
|
if(learningAssessment.getTopicType().equals("单选题") || learningAssessment.getTopicType().equals("多选题")){
|
|
|
|
|
|
|
|
|
|
//打乱顺序
|
|
|
|
|
learningAssessment.shuffleOptions();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<StuTopicDTO> stuTopicDTOS = convertUtil.entityToDTOList(learningAssessments, StuTopicDTO.class);
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// for (StuTopicDTO assessment : stuTopicDTOS) {
|
|
|
|
|
// String topicType = assessment.getTopicType();
|
|
|
|
|
// // 检查Map中是否已经存在该题型的列表
|
|
|
|
|
// map.putIfAbsent(topicType, new ArrayList<>());
|
|
|
|
|
// // 将当前的StuLearningAssessment添加到对应题型的列表中
|
|
|
|
|
// map.get(topicType).add(assessment);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return stuTopicDTOS;
|
|
|
|
|
}else {
|
|
|
|
|
//根据考试ID查询考试详情
|
|
|
|
|
TchExamManage examManage = examManageMapper.selectByPrimaryKey(achievementInfo.getTaskId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//判断是否已达到最大做题次数
|
|
|
|
|
if(achievementInfo.getNumberOfAnswer()>=examManage.getAnswersFrequency()){
|
|
|
|
|
throw new ServiceException(HttpStatus.ACCEPTED,"已超过最大作答次数");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//取到本次作业的题目id转为集合,查询出题目信息
|
|
|
|
|
String[] split = examManage.getTopicId().split(",");
|
|
|
|
|
// 转换数组为List
|
|
|
|
|
List<String> list = Arrays.asList(split);
|
|
|
|
|
List<StuLearningAssessment> learningAssessments= learningAssessmentMapper.selectTopicsById(list);
|
|
|
|
|
|
|
|
|
|
if(examManage.getTopicNumberState()==1){ //题目乱序
|
|
|
|
|
Collections.shuffle(learningAssessments);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(examManage.getOptionNumberState()==1){ //选项乱序
|
|
|
|
|
for (StuLearningAssessment learningAssessment:learningAssessments) {
|
|
|
|
|
|
|
|
|
|
//只有单选或者多选乱序
|
|
|
|
|
if(learningAssessment.getTopicType().equals("单选题") || learningAssessment.getTopicType().equals("多选题")){
|
|
|
|
|
|
|
|
|
|
//打乱顺序
|
|
|
|
|
learningAssessment.shuffleOptions();
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < stuTopicDTOS.size(); i++) {
|
|
|
|
|
stuTopicDTOS.get(i).setNumber(i);
|
|
|
|
|
stuTopicDTOS.get(i).setOptionsOrder(tchHomeworkManage.getOptionNumberState());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<StuTopicDTO> stuTopicDTOS = convertUtil.entityToDTOList(learningAssessments, StuTopicDTO.class);
|
|
|
|
|
|
|
|
|
|
// for (StuTopicDTO assessment : stuTopicDTOS) {
|
|
|
|
|
// String topicType = assessment.getTopicType();
|
|
|
|
|
// // 检查Map中是否已经存在该题型的列表
|
|
|
|
|
// map.putIfAbsent(topicType, new ArrayList<>());
|
|
|
|
|
// // 将当前的StuLearningAssessment添加到对应题型的列表中
|
|
|
|
|
// map.get(type).add(assessment);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return stuTopicDTOS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public StuScoreDetailsInfoDTO getHomeworkScoreDetails(String id) {
|
|
|
|
|
StuAchievementInfo achievementInfo = achievementInfoMapper.selectByPrimaryKey(id);
|
|
|
|
@ -224,7 +305,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
TchExamManage tchExamManage=new TchExamManage();
|
|
|
|
|
List<StuLearningAssessment> learningAssessments=new ArrayList<>();
|
|
|
|
|
//判断本次交卷为题库作业还是考试
|
|
|
|
|
if(dto.getType().equals("题库作业")){
|
|
|
|
|
if(dto.getType().equals("作业")){
|
|
|
|
|
tchHomeworkManage = homeworkManageMapper.selectByPrimaryKey(achievementInfo.getTaskId()); //作业信息管理
|
|
|
|
|
//取到本次作业的题目id转为集合,查询出题目信息
|
|
|
|
|
String[] split = tchHomeworkManage.getTopicId().split(",");
|
|
|
|
@ -282,7 +363,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
|
|
|
|
|
if (stuLearningAssessment.getTopicId().equals(stuTopicDTO.getTopicId())) {
|
|
|
|
|
//取出该题目对应的题型的分值和答案进行比较
|
|
|
|
|
if (stuLearningAssessment.getAnswer().equals(stuTopicDTO.getStudentAnswer())) {
|
|
|
|
|
if (scoringUtil.handInAPaper(stuLearningAssessment,stuTopicDTO)) {
|
|
|
|
|
detailsInfo.setState("正确");
|
|
|
|
|
|
|
|
|
|
for (int k = 0; k < tchTopicDetails.size(); k++) {
|
|
|
|
@ -310,7 +391,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
|
|
|
|
|
double average=0;
|
|
|
|
|
double passRate=0;
|
|
|
|
|
if(dto.getType().equals("题库作业")){
|
|
|
|
|
if(dto.getType().equals("作业")){
|
|
|
|
|
//更新作业管理信息表
|
|
|
|
|
Integer totalPeople = tchHomeworkManage.getTotalPeople();
|
|
|
|
|
totalPeople++; //已提交人数+1
|
|
|
|
@ -397,7 +478,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
StuScoreDetailsInfo detailsInfo = stuScoreDetailsInfos.get(l);
|
|
|
|
|
detailsInfo.setMySelect(stuTopicDTO.getStudentAnswer());
|
|
|
|
|
|
|
|
|
|
if (stuLearningAssessment.getAnswer().equals(stuTopicDTO.getStudentAnswer())) { //比较答案
|
|
|
|
|
if (scoringUtil.handInAPaper(stuLearningAssessment,stuTopicDTO)) { //比较答案
|
|
|
|
|
|
|
|
|
|
if (detailsInfo.getTopicId().equals(stuTopicDTO.getTopicId())) { //表示为同一题再进行更新信息
|
|
|
|
|
for (int k = 0; k < tchTopicDetails.size(); k++) {
|
|
|
|
@ -427,7 +508,7 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
|
|
|
|
|
double average=0;
|
|
|
|
|
double passRate=0;
|
|
|
|
|
if(dto.getType().equals("题库作业")){
|
|
|
|
|
if(dto.getType().equals("作业")){
|
|
|
|
|
//更新作业管理信息表
|
|
|
|
|
Integer totalPeople = tchHomeworkManage.getTotalPeople();
|
|
|
|
|
BigDecimal tatalScore = tchHomeworkManage.getTatalScore();
|
|
|
|
@ -521,4 +602,6 @@ public class StuHomeworkExamServiceImpl implements StuHomeworkExamService {
|
|
|
|
|
dto.setHomeworkAsk(tchHomeworkManage.getHomeworkAsk());
|
|
|
|
|
return dto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|