From 269031cf8e6d1e4643e1be2b822bbfebcf87ea4b Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Fri, 16 Jul 2021 22:39:49 +0800
Subject: [PATCH] 考试成绩计算接口新增

---
 src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java |    5 
 src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java |   53 ++++++++++
 src/main/java/org/springblade/modules/exam/vo/ExamPaperSubjectVO.java             |    9 +
 src/main/java/org/springblade/modules/exam/entity/ExamScore.java                  |   10 +
 src/main/java/org/springblade/modules/exam/service/ExamScoreService.java          |    8 +
 src/main/java/org/springblade/modules/exam/vo/ExamScoreVO.java                    |    9 +
 src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.java            |    3 
 src/main/java/org/springblade/modules/exam/vo/ExamResultVO.java                   |   23 ++++
 src/main/java/org/springblade/modules/exam/service/ExamPaperService.java          |    3 
 src/main/java/org/springblade/modules/exam/controller/ExamPaperController.java    |    6 
 src/main/java/org/springblade/modules/exam/entity/ExamExaminationSubject.java     |   75 +++++++++++++++
 src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml             |   13 +-
 src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java    |   27 ++++
 src/main/resources/application.yml                                                |    1 
 14 files changed, 229 insertions(+), 16 deletions(-)

diff --git a/src/main/java/org/springblade/modules/exam/controller/ExamPaperController.java b/src/main/java/org/springblade/modules/exam/controller/ExamPaperController.java
index 2eff8a8..0fe5fa3 100644
--- a/src/main/java/org/springblade/modules/exam/controller/ExamPaperController.java
+++ b/src/main/java/org/springblade/modules/exam/controller/ExamPaperController.java
@@ -28,6 +28,7 @@
 import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.exam.entity.ExamPaper;
 import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
 import org.springblade.modules.exam.vo.ExamPaperVO;
 import org.springblade.modules.exam.wrapper.ExamPaperWrapper;
 import org.springframework.web.bind.annotation.*;
@@ -46,6 +47,7 @@
 public class ExamPaperController extends BladeController {
 
 	private final ExamPaperService examPaperService;
+
 
 	/**
 	 * 详情
@@ -128,8 +130,8 @@
 	@GetMapping("/queryPagerSubject")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "考试题目绑定", notes = "传入exam")
-	public R<ExamPaperVO> queryPagerSubject(@ApiParam(value = "主键集合") ExamPaper exam) {
-		ExamPaperVO subject = examPaperService.queryPagerSubject(exam);
+	public R<ExamPaperSubjectVO> queryPagerSubject(@ApiParam(value = "主键集合") ExamPaper exam) {
+		ExamPaperSubjectVO subject = examPaperService.queryPagerSubject(exam);
 		return R.data(subject);
 	}
 
diff --git a/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java b/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
index 32f2265..0b1db56 100644
--- a/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
+++ b/src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
@@ -14,6 +14,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author zhongrj
@@ -57,6 +58,17 @@
 		return R.status(examScoreService.save(examScore));
 	}
 
+
+	/**
+	 * 保存考试成绩
+	 * @param examScore 考试成绩信息对象
+	 */
+	@PostMapping("/saveExamScore")
+	public R saveExamScore(@RequestBody ExamScoreVO examScore) {
+		return R.status(examScoreService.saveExamScore(examScore));
+	}
+
+
 	/**
 	 * 修改
 	 * @param examScore 考试成绩信息对象
@@ -67,14 +79,23 @@
 	}
 
 	/**
+	 * 修改总成绩
+	 * @param examScore 考试成绩信息对象
+	 */
+	@PostMapping("/updateExamScore")
+	public R updateExamScore(@RequestBody ExamScore examScore) {
+		if (null!=examScore.getLearnGrade() && null!=examScore.getTheoryGrade()){
+			examScore.setAllGrade(examScore.getLearnGrade()+examScore.getTheoryGrade());
+		}
+		return R.status(examScoreService.updateById(examScore));
+	}
+
+	/**
 	 * 新增或修改
 	 * @param examScore 考试成绩信息对象
 	 */
 	@PostMapping("/submit")
 	public R submit(@RequestBody ExamScore examScore) {
-//		if (null!=examScore.getId()){
-//			examScore.setExamTime(new Date());
-//		}
 		return R.status(examScoreService.saveOrUpdate(examScore));
 	}
 
diff --git a/src/main/java/org/springblade/modules/exam/entity/ExamExaminationSubject.java b/src/main/java/org/springblade/modules/exam/entity/ExamExaminationSubject.java
new file mode 100644
index 0000000..6eec851
--- /dev/null
+++ b/src/main/java/org/springblade/modules/exam/entity/ExamExaminationSubject.java
@@ -0,0 +1,75 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.exam.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ *  试卷分类实体类
+ *
+ * @author Chill
+ */
+@Data
+@TableName("exam_examination_subject")
+public class ExamExaminationSubject implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * ID
+	 */
+	@ApiModelProperty(value = "id")
+	@TableId(value = "id", type = IdType.AUTO)
+	private Long id;
+
+	/**
+	 * 试卷id
+	 */
+	@TableField("examination_id")
+	private String examinationId;
+
+	/**
+	 * 分类
+	 */
+	@TableField("category_id")
+	private Integer categoryId;
+
+	/**
+	 * 题目id
+	 */
+	@TableField("subject_id")
+	private String subjectId;
+
+
+	/**
+	 * 题目对象
+	 */
+	private ExamSubjectChoices examSubjectChoices;
+
+
+
+
+}
diff --git a/src/main/java/org/springblade/modules/exam/entity/ExamScore.java b/src/main/java/org/springblade/modules/exam/entity/ExamScore.java
index a16519c..00fcf26 100644
--- a/src/main/java/org/springblade/modules/exam/entity/ExamScore.java
+++ b/src/main/java/org/springblade/modules/exam/entity/ExamScore.java
@@ -67,7 +67,7 @@
 	private String company;
 
 	/**
-	 * 考试时间
+	 * 考试开始时间
 	 */
 	@TableField("exam_time")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@@ -75,6 +75,14 @@
 	private Date examTime;
 
 	/**
+	 * 考试结束时间
+	 */
+	@TableField("exam_end_time")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date examEndTime;
+
+	/**
 	 * 考试名称
 	 */
 	@TableField("exam_name")
diff --git a/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.java b/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.java
index 9188a2b..a9c4ea4 100644
--- a/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.java
+++ b/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.java
@@ -22,6 +22,7 @@
 import org.springblade.modules.desk.entity.Notice;
 import org.springblade.modules.desk.vo.NoticeVO;
 import org.springblade.modules.exam.entity.ExamPaper;
+import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
 import org.springblade.modules.exam.vo.ExamPaperVO;
 
 import java.util.List;
@@ -33,5 +34,5 @@
  */
 public interface ExamPaperMapper extends BaseMapper<ExamPaper> {
 
-	ExamPaperVO queryPagerSubject(@Param("paper") ExamPaper paper);
+	ExamPaperSubjectVO queryPagerSubject(@Param("paper") ExamPaper paper);
 }
diff --git a/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml b/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml
index d68caa2..910ee3d 100644
--- a/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml
+++ b/src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml
@@ -5,15 +5,19 @@
     <resultMap id="PagerSubject" type="org.springblade.modules.exam.vo.ExamPaperSubjectVO"
                autoMapping="true">
         <id property="id" column="id"/>
-        <collection property="subjectList" javaType="java.util.List"
-                    ofType="org.springblade.modules.exam.entity.ExamSubjectChoices" autoMapping="true">
-            <id property="id" column="tmxq.id"/>
+        <collection property="examExaminationSubjects" javaType="java.util.List" ofType="org.springblade.modules.exam.entity.ExamExaminationSubject" autoMapping="true">
+            <id property="id" column="tid"/>
+            <association property="examSubjectChoices" javaType="org.springblade.modules.exam.entity.ExamSubjectChoices" autoMapping="true">
+                <id property="id" column="sid"/>
+            </association>
         </collection>
     </resultMap>
 
     <select id="queryPagerSubject" resultMap="PagerSubject">
         SELECT
-        sj.exam_name,sj.exam_type,sj.exam_attention,sj.total_score,sj.exam_status,tmxq.id,tmxq.subject_name,tmxq.answer,tmxq.analysis
+        sj.*,
+        tm.id tid,
+        tmxq.id as sid,tmxq.subject_name,tmxq.answer,tmxq.analysis
         FROM
         ksxt_exam sj
         LEFT JOIN exam_examination_subject tm ON sj.id = tm.examination_id
@@ -23,7 +27,6 @@
         <if test="paper.id !=null">
         and sj.id = #{paper.id}
         </if>
-
     </select>
 
 </mapper>
diff --git a/src/main/java/org/springblade/modules/exam/service/ExamPaperService.java b/src/main/java/org/springblade/modules/exam/service/ExamPaperService.java
index e9905ec..fe7b885 100644
--- a/src/main/java/org/springblade/modules/exam/service/ExamPaperService.java
+++ b/src/main/java/org/springblade/modules/exam/service/ExamPaperService.java
@@ -18,6 +18,7 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springblade.modules.exam.entity.ExamPaper;
+import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
 import org.springblade.modules.exam.vo.ExamPaperVO;
 
 /**
@@ -27,6 +28,6 @@
  */
 public interface ExamPaperService extends IService<ExamPaper> {
 
-	ExamPaperVO queryPagerSubject(ExamPaper paper);
+	ExamPaperSubjectVO queryPagerSubject(ExamPaper paper);
 
 }
diff --git a/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java b/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
index cf3da9f..1f8e3e8 100644
--- a/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
+++ b/src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
@@ -22,6 +22,14 @@
 	/**
 	 * 详情
 	 * @param examScore 考试成绩信息对象
+	 * @return
 	 */
 	ExamScoreVO selectExamScoreInfo(ExamScore examScore);
+
+	/**
+	 * 保存考试成绩
+	 * @param examScore 考试成绩信息对象
+	 * @return
+	 */
+	Boolean saveExamScore(ExamScoreVO examScore);
 }
diff --git a/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java b/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
index 0cef8ad..dde57a4 100644
--- a/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/org/springblade/modules/exam/service/impl/ExamPaperServiceImpl.java
@@ -20,6 +20,7 @@
 import org.springblade.modules.exam.entity.ExamPaper;
 import org.springblade.modules.exam.mapper.ExamPaperMapper;
 import org.springblade.modules.exam.service.ExamPaperService;
+import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
 import org.springblade.modules.exam.vo.ExamPaperVO;
 import org.springframework.stereotype.Service;
 
@@ -33,7 +34,9 @@
 
 
 	@Override
-	public ExamPaperVO queryPagerSubject(ExamPaper paper) {
+	public ExamPaperSubjectVO queryPagerSubject(ExamPaper paper) {
+		//查询试卷分类信息
+
 		return baseMapper.queryPagerSubject(paper);
 	}
 }
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..1f8944b 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,32 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+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.mapper.ExamScoreMapper;
+import org.springblade.modules.exam.service.ExamPaperService;
 import org.springblade.modules.exam.service.ExamScoreService;
+import org.springblade.modules.exam.vo.ExamPaperSubjectVO;
+import org.springblade.modules.exam.vo.ExamResultVO;
 import org.springblade.modules.exam.vo.ExamScoreVO;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 考试成绩服务实现类
  * @author zhongrj
  */
 @Service
+@AllArgsConstructor
 public class ExamScoreServiceImpl extends ServiceImpl<ExamScoreMapper, ExamScore> implements ExamScoreService {
+
+	private final ExamPaperService examPaperService;
 
 	/**
 	 * 自定义分页数据
@@ -35,4 +49,43 @@
 	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.queryPagerSubject(examPaper).getExamExaminationSubjects();
+			//比对考试结果
+			//声明理论得分
+			int theoryGrade = 0;
+			for (int i = 0; i < examResultVOS.size(); i++) {
+				if (examResultVOS.get(i).getValue().equals(examExaminationSubjects.get(i).getExamSubjectChoices().getAnswer())){
+					theoryGrade += examResultVOS.get(i).getGrade();
+				}
+			}
+			//设置理论得分
+			examScore.setTheoryGrade(theoryGrade);
+			//计算总成绩
+			examScore.setAllGrade(theoryGrade + examScore.getLearnGrade());
+			//保存成绩数据
+			int i = baseMapper.insert(examScore);
+			if (i>0){
+				//返回结果
+				return true;
+			}
+		}
+		//返回结果
+		return false;
+	}
 }
diff --git a/src/main/java/org/springblade/modules/exam/vo/ExamPaperSubjectVO.java b/src/main/java/org/springblade/modules/exam/vo/ExamPaperSubjectVO.java
index f13c0bc..bfc1e25 100644
--- a/src/main/java/org/springblade/modules/exam/vo/ExamPaperSubjectVO.java
+++ b/src/main/java/org/springblade/modules/exam/vo/ExamPaperSubjectVO.java
@@ -2,18 +2,23 @@
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.modules.exam.entity.ExamExaminationSubject;
 import org.springblade.modules.exam.entity.ExamPaper;
 import org.springblade.modules.exam.entity.ExamSubjectChoices;
 
 import java.util.List;
 
 /**
- * 通知公告视图类
+ * 考试类目视图类
  *
  * @author Chill
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class ExamPaperSubjectVO extends ExamPaper {
-	private List<ExamSubjectChoices> subjectList;
+
+	/**
+	 * 考试类目
+	 */
+	private List<ExamExaminationSubject> examExaminationSubjects;
 }
diff --git a/src/main/java/org/springblade/modules/exam/vo/ExamResultVO.java b/src/main/java/org/springblade/modules/exam/vo/ExamResultVO.java
new file mode 100644
index 0000000..32d4c9f
--- /dev/null
+++ b/src/main/java/org/springblade/modules/exam/vo/ExamResultVO.java
@@ -0,0 +1,23 @@
+package org.springblade.modules.exam.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author zhongrj
+ */
+@Data
+public class ExamResultVO implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 提交的答案
+	 */
+	private String value;
+
+	/**
+	 * 每道题的分数
+	 */
+	private Integer grade;
+}
diff --git a/src/main/java/org/springblade/modules/exam/vo/ExamScoreVO.java b/src/main/java/org/springblade/modules/exam/vo/ExamScoreVO.java
index ab5c711..3ead552 100644
--- a/src/main/java/org/springblade/modules/exam/vo/ExamScoreVO.java
+++ b/src/main/java/org/springblade/modules/exam/vo/ExamScoreVO.java
@@ -5,6 +5,7 @@
 import org.springblade.modules.exam.entity.ExamSubjectOption;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 选择题选项实体类vo
@@ -15,5 +16,13 @@
 public class ExamScoreVO extends ExamScore implements Serializable {
 	private static final long serialVersionUID = 1L;
 
+	/**
+	 * 试卷id
+	 */
+	private Long papersId;
 
+	/**
+	 * 考勤提交的结果
+	 */
+	private List<ExamResultVO> examResultVOS;
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 869df71..959ded7 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -204,6 +204,7 @@
       - /examSubjectChoices/**
       - /exampaper/**
       - /examScore/**
+      - /exampaper/**
     #授权认证配置
     auth:
       - method: ALL

--
Gitblit v1.9.3