|
package org.springblade.modules.exam.service.impl;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.AllArgsConstructor;
|
import org.springblade.common.utils.arg;
|
import org.springblade.core.mp.support.Condition;
|
import org.springblade.modules.apply.entity.Apply;
|
import org.springblade.modules.apply.service.ApplyService;
|
import org.springblade.modules.exam.entity.ExamExaminationSubject;
|
import org.springblade.modules.exam.entity.ExamPaper;
|
import org.springblade.modules.exam.entity.ExamScore;
|
import org.springblade.modules.exam.entity.ExamSubjectChoices;
|
import org.springblade.modules.exam.excel.ExamScoreExcel;
|
import org.springblade.modules.exam.mapper.ExamScoreMapper;
|
import org.springblade.modules.exam.service.ExamPaperService;
|
import org.springblade.modules.exam.service.ExamScoreService;
|
import org.springblade.modules.exam.service.ExamSubjectChoicesService;
|
import org.springblade.modules.exam.util.SecurityPaperUtil;
|
import org.springblade.modules.exam.vo.ExamResultVO;
|
import org.springblade.modules.exam.vo.ExamScoreVO;
|
import org.springblade.modules.system.entity.User;
|
import org.springblade.modules.system.service.IUserService;
|
import org.springblade.modules.training.entity.TrainingRegistration;
|
import org.springblade.modules.training.service.TrainingRegistrationService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.text.DecimalFormat;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Map;
|
|
import static com.bstek.ureport.expression.model.condition.Join.and;
|
|
/**
|
* 考试成绩服务实现类
|
* @author zhongrj
|
*/
|
@Service
|
@AllArgsConstructor
|
public class ExamScoreServiceImpl extends ServiceImpl<ExamScoreMapper, ExamScore> implements ExamScoreService {
|
|
private final IUserService userService;
|
|
private final ExamSubjectChoicesService examSubjectChoicesService;
|
|
private final ExamPaperService examPaperService;
|
|
private final ApplyService applyService;
|
|
private final TrainingRegistrationService trainingRegistrationService;
|
|
/**
|
* 自定义分页数据
|
* @param page 分页条件
|
* @param examScore 考试成绩对象
|
* @return
|
*/
|
@Override
|
public IPage<ExamScoreVO> selectExamScorePage(IPage<ExamScoreVO> page, ExamScoreVO examScore) {
|
return page.setRecords(baseMapper.selectExamScorePage(page, examScore));
|
}
|
|
/**
|
* 详情
|
* @param examScore 考试成绩信息对象
|
*/
|
@Override
|
public ExamScoreVO selectExamScoreInfo(ExamScore examScore) {
|
return baseMapper.selectExamScoreInfo(examScore);
|
}
|
|
/**
|
* 保存考试成绩
|
* @param examScore 考试成绩信息对象
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Boolean saveExamScore(ExamScoreVO examScore) {
|
//取出考试结果
|
if (examScore.getExamResultVOS().size()>0){
|
List<ExamResultVO> examResultVOS = examScore.getExamResultVOS();
|
//获取试卷的内容(题号,答案)
|
// ExamPaper examPaper = new ExamPaper();
|
// examPaper.setId(examScore.getPapersId());
|
// List<ExamExaminationSubject> examExaminationSubjects
|
// = examPaperService.PagerSubject(examPaper).getExamExaminationSubjects();
|
List<ExamSubjectChoices> list = examSubjectChoicesService.list();
|
//比对考试结果
|
//声明理论得分
|
int theoryGrade = 0;
|
for (ExamResultVO examResultVO : examResultVOS) {
|
for (ExamSubjectChoices es: list) {
|
//对比题目id
|
if (examResultVO.getSubjectChoicesId().equals(es.getId())) {
|
//对比答案
|
if (es.getChoicesType() == 2 || es.getChoicesType() == 3){
|
//判断题逻辑
|
if (examResultVO.getValue().equals(es.getAnswer())) {
|
theoryGrade += examResultVO.getGrade();
|
}
|
}else if(es.getChoicesType() == 0 || es.getChoicesType() == 1){
|
//处理多选题的答案排序
|
String[] split = examResultVO.getValue().split(",");
|
StringBuilder builder = new StringBuilder();
|
for (String s : split) {
|
builder.append(s);
|
}
|
char[] arrayCh = builder.toString().toCharArray();
|
//利用数组帮助类自动排序
|
Arrays.sort(arrayCh);
|
String sub0 = Arrays.toString(arrayCh);
|
String sub = sub0.substring(1,sub0.length()-1).replaceAll(" ","");
|
if (sub.equals(es.getAnswer())) {
|
theoryGrade += examResultVO.getGrade();
|
}
|
}
|
//移除当前试卷题目答案对象
|
list.remove(es);
|
break;
|
}
|
}
|
}
|
//获取考试信息
|
ExamPaper paper = examPaperService.getById(examScore.getPapersId());
|
//使用准考证号查询报名信息,修改考试状态为已考试
|
if(paper.getExamType()==1){
|
Apply apply = new Apply();
|
apply.setCandidateNo(examScore.getCandidateNo());
|
Apply apply1 = applyService.getOne(Condition.getQueryWrapper(apply));
|
//修改为已考试
|
apply1.setIsExam(2);
|
applyService.updateById(apply1);
|
}
|
//模拟考试
|
if(paper.getExamType()==2){
|
TrainingRegistration trainingRegistration = new TrainingRegistration();
|
trainingRegistration.setCandidateNo(examScore.getCandidateNo());
|
TrainingRegistration trainingRegistration1 = trainingRegistrationService.getOne(Condition.getQueryWrapper(trainingRegistration));
|
//修改为已考试
|
trainingRegistration1.setIsExam(2);
|
trainingRegistrationService.updateById(trainingRegistration1);
|
}
|
//设置考试ID
|
examScore.setExamId(examScore.getPapersId().toString());
|
//设置理论得分
|
examScore.setTheoryGrade(theoryGrade);
|
//计算总成绩,此时没有实操成绩,总成绩为实操成绩和理论成绩和的一半
|
examScore.setAllGrade(Math.round(theoryGrade/2));
|
//设置状态
|
if (theoryGrade>=60){
|
examScore.setQualified(2);
|
}else {
|
examScore.setQualified(1);
|
}
|
//保存成绩数据
|
int i = baseMapper.insert(examScore);
|
//修改考试状态
|
|
if (i>0){
|
//返回结果
|
return true;
|
}
|
}
|
//返回结果
|
return false;
|
}
|
|
/**
|
* 导入实操成绩
|
* @param examScoreExcelList
|
* @param isCovered 是否覆盖
|
*/
|
@Override
|
public void importExamScore(List<ExamScoreExcel> examScoreExcelList, Boolean isCovered) {
|
if (examScoreExcelList.size()>0){
|
examScoreExcelList.forEach(examScoreExcel -> {
|
if (null!=examScoreExcel.getLearnGrade() && null!=examScoreExcel.getIdCardNo() && examScoreExcel.getIdCardNo()!=""){
|
//使用考试名称匹配考试信息
|
ExamPaper examPaper = examPaperService.getExamInfoByExamName(examScoreExcel.getExamName());
|
//查询出成绩数据
|
ExamScore examScore = baseMapper.getExamScoreInfoByIdCardNo(examScoreExcel.getIdCardNo(),examPaper.getId());
|
if (null!=examScore) {
|
examScore.setLearnGrade(examScoreExcel.getLearnGrade());
|
if (examScore.getTheoryGrade() >= 60 && examScore.getLearnGrade() >= 60) {
|
//合格
|
examScore.setQualified(0);
|
//正式考试通过生成保安证编号
|
if (examPaper.getExamType()==1) {
|
//去生成保安证编号
|
//查询当前保安信息
|
User user = userService.getById(examScore.getUserId());
|
String pre = SecurityPaperUtil.getSecurityPaper();
|
//查询当前年份已有的保安证编号
|
int count = userService.getSecurityPaperCount(pre);
|
String result = null;
|
if (count == 0) {
|
result = pre + "00000";
|
} else {
|
//格式化
|
DecimalFormat decimalFormat = new DecimalFormat("00000");
|
result = pre + (decimalFormat.format(count++));
|
}
|
user.setSecuritynumber(result);
|
//更新保安数据
|
userService.updateById(user);
|
}
|
} else {
|
//不合格
|
examScore.setQualified(1);
|
}
|
//总成绩
|
examScore.setAllGrade(Math.round((examScore.getTheoryGrade()+examScoreExcel.getLearnGrade())/2));
|
//更新成绩数据
|
baseMapper.updateById(examScore);
|
}
|
}
|
});
|
}
|
}
|
|
@Override
|
public List<Map<String, Object>> scoreStatistics() {
|
return baseMapper.scoreStatistics();
|
}
|
}
|