From ddebcfaf85cbb400668f38b1efd82e439c6e1012 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 13 Aug 2021 08:39:43 +0800
Subject: [PATCH] 报名考试接口修改

---
 src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 152 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java b/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
index c13d564..887a654 100644
--- a/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
+++ b/src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
@@ -3,18 +3,43 @@
 
 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.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.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;
 
 	/**
 	 * 自定义分页数据
@@ -35,4 +60,131 @@
 	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;
+					}
+				}
+			}
+			//设置理论得分
+			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()!=""){
+					ExamScore examScore = baseMapper.getExamScoreInfoByIdCardNo(examScoreExcel.getIdCardNo());
+					if (null!=examScore) {
+						examScore.setLearnGrade(examScoreExcel.getLearnGrade());
+						if (examScore.getTheoryGrade() >= 60 && examScore.getLearnGrade() >= 60) {
+							//合格
+							examScore.setQualified(0);
+							//去生成保安证编号
+							//查询当前保安信息
+							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();
+	}
 }

--
Gitblit v1.9.3