智慧保安后台管理-外网项目备份
1. 新增考试时间到达后成绩计算接口
2. 修改个人考试查询接口,新增考试状态,成绩id,考试开始时间(防止考试中途关闭浏览器)
5 files modified
200 ■■■■ changed files
src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java 11 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml 85 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/exam/service/ExamScoreService.java 7 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java 83 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/exam/vo/ExamPaperVO.java 14 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/exam/controller/ExamScoreController.java
@@ -106,12 +106,21 @@
     */
    @PostMapping("/saveExamScore")
    public R saveExamScore(@RequestBody ExamScoreVO examScore) {
        return R.status(examScoreService.saveExamScore(examScore));
    }
    /**
     * 点击了开始考试后超过60分钟后再考试的,计算之前的考试成绩
     * @param examScore 考试成绩信息对象
     */
    @GetMapping("/getExamScore")
    public R getExamScore(ExamScoreVO examScore) {
        return R.status(examScoreService.getExamScore(examScore));
    }
    /**
     * 修改
     *
     * @param examScore 考试成绩信息对象
src/main/java/org/springblade/modules/exam/mapper/ExamPaperMapper.xml
@@ -170,33 +170,59 @@
    </delete>
    <!--查询考试人员考试信息-->
<!--    <select id="getExamDetail" resultType="org.springblade.modules.exam.vo.ExamPaperVO">-->
<!--        (select-->
<!--            ke.id,ke.exam_name examName,ke.start_time startTime,ke.end_time endTime,ke.exam_type examType,-->
<!--            sa.candidate_no candidateNo,sa.id applyId,-->
<!--            bu.real_name realName,bu.sex,bu.cardid idCardNo-->
<!--        from-->
<!--            ksxt_exam ke-->
<!--        left join-->
<!--            sys_apply sa-->
<!--        on-->
<!--            sa.exam_id = ke.id-->
<!--        left join-->
<!--            blade_user bu-->
<!--        on-->
<!--            bu.id = sa.user_id-->
<!--        where sa.user_id = #{userId}-->
<!--        and is_apply = 1-->
<!--        and is_exam = 1-->
<!--        and sa.apply_status = 2-->
<!--        )-->
<!--        union all-->
<!--        (select-->
<!--            ke.id,ke.exam_name examName,ke.start_time startTime,ke.end_time endTime,ke.exam_type examType,-->
<!--            str.candidate_no candidateNo,str.id applyId,-->
<!--            bu.real_name realName,bu.sex,bu.cardid idCardNo-->
<!--        from-->
<!--            ksxt_exam ke-->
<!--        left join-->
<!--            sys_training_registration str-->
<!--        on-->
<!--            str.train_exam_id = ke.id-->
<!--        left join-->
<!--            blade_user bu-->
<!--        on-->
<!--            bu.id = str.user_id-->
<!--        where str.user_id = #{userId}-->
<!--        and bu.is_train = 1-->
<!--        and (str.is_exam = 1 or str.is_exam = 3)-->
<!--        and ke.audit_status = 1-->
<!--        and str.cancel = 1-->
<!--        and str.audit_status = 1-->
<!--        )-->
<!--    </select>    、-->
    <!--查询考试人员考试信息-->
    <select id="getExamDetail" resultType="org.springblade.modules.exam.vo.ExamPaperVO">
        (select
        select
            ke.id,ke.exam_name examName,ke.start_time startTime,ke.end_time endTime,ke.exam_type examType,
            sa.candidate_no candidateNo,sa.id applyId,
            bu.real_name realName,bu.sex,bu.cardid idCardNo
        from
            ksxt_exam ke
        left join
            sys_apply sa
        on
            sa.exam_id = ke.id
        left join
            blade_user bu
        on
            bu.id = sa.user_id
        where sa.user_id = #{userId}
        and is_apply = 1
        and is_exam = 1
        and sa.apply_status = 2
        )
        union all
        (select
            ke.id,ke.exam_name examName,ke.start_time startTime,ke.end_time endTime,ke.exam_type examType,
            str.candidate_no candidateNo,str.id applyId,
            bu.real_name realName,bu.sex,bu.cardid idCardNo
            str.candidate_no candidateNo,str.id applyId,str.is_exam isExam,
            bu.real_name realName,bu.sex,bu.cardid idCardNo,
            es.exam_time examStartTime,es.id scoreId
        from
            ksxt_exam ke
        left join
@@ -207,13 +233,18 @@
            blade_user bu
        on
            bu.id = str.user_id
        left join
            exam_score es
        on
        es.apply_id = str.id
        where str.user_id = #{userId}
        and bu.is_train = 1
        and is_exam = 1
        and (str.is_exam = 1 or str.is_exam = 3)
        and ke.audit_status = 1
        and str.cancel = 1
        and str.audit_status = 1
        )
        and ke.start_time &lt;= now() and ke.end_time &gt; now()
        order by str.id desc
    </select>
    <!--查询是当前前缀已生成准考证号码最大的一位-->
src/main/java/org/springblade/modules/exam/service/ExamScoreService.java
@@ -92,5 +92,10 @@
    Boolean refreshTrainExamScore();
    /**
     * 点击了开始考试后超过60分钟后再考试的,计算之前的考试成绩
     * @param examScore
     * @return
     */
    boolean getExamScore(ExamScoreVO examScore);
}
src/main/java/org/springblade/modules/exam/service/impl/ExamScoreServiceImpl.java
@@ -192,7 +192,7 @@
                //数据同步
                String s =
                    "update sys_training_registration set is_exam = " + trainingRegistration1.getIsExam() + " " +"where id = " + "'" + trainingRegistration1.getId() + "';" +
                        "update blade_user set is_apply = " + user.getIsApply() + " " +"where id = " + "'" + user.getId() + "'";
                        "update blade_user set is_train = " + user.getIsTrain() + " " +"where id = " + "'" + user.getId() + "'";
                FtpUtil.sqlFileUpload(s);
            }
@@ -716,4 +716,85 @@
        });
        return false;
    }
    /**
     * 点击了开始考试后超过60分钟后再考试的,计算之前的考试成绩
     * @param examScore
     * @return
     */
    @Override
    public boolean getExamScore(ExamScoreVO examScore) {
        //查询考试成绩
        ExamScore score = this.getById(examScore.getId());
        //查询考试记录
        ExamAnswerRecord examAnswerRecord = new ExamAnswerRecord();
        examAnswerRecord.setScoreId(examScore.getId());
        List<ExamAnswerRecord> list = examAnswerRecordService.list(Condition.getQueryWrapper(examAnswerRecord));
        //设置默认理论成绩为0
        int count = 0;
        //计算成绩
        if (list.size()>0){
            //成绩相加
            count = list.stream().mapToInt(ExamAnswerRecord::getAnswerScore).sum();
        }else {
            //没有考试记录,本次考试理论成绩为 0
            count = 0;
        }
        int age = 0;
        UserVO user = new UserVO();
        //查询培训报名数据
        TrainingRegistration trainingRegistration = new TrainingRegistration();
        trainingRegistration.setCandidateNo(score.getCandidateNo());
        trainingRegistration.setCancel(1);
        TrainingRegistration trainingRegistration1 = trainingRegistrationService.getOne(Condition.getQueryWrapper(trainingRegistration));
        //查询用户年龄,根据年龄计算总分
        user = userService.getUserAgeById(Long.parseLong(trainingRegistration1.getUserId()));
        //修改用户的培训状态,理论考试结束
        user.setIsTrain(3);
        age = user.getAge();
        userService.updateById(user);
        //修改为已考试
        trainingRegistration1.setIsExam(2);
        trainingRegistrationService.updateById(trainingRegistration1);
        //数据同步
        String s =
            "update sys_training_registration set is_exam = " + trainingRegistration1.getIsExam() + " " +"where id = " + "'" + trainingRegistration1.getId() + "';" +
                "update blade_user set is_train = " + user.getIsTrain() + " " +"where id = " + "'" + user.getId() + "'";
        FtpUtil.sqlFileUpload(s);
        //设置理论得分
        score.setTheoryGrade(count);
        //计算总成绩,此时没有实操成绩,总成绩为实操成绩和理论成绩和的一半
        if (age<=50) {
            score.setAllGrade(Math.round(count / 2));
        }
        if (age>50) {
            score.setAllGrade(Integer.parseInt(String.valueOf(Math.round(count*0.5))));
        }
        //设置状态
        if (count>=60){
            score.setQualified(2);
        }else {
            score.setQualified(1);
        }
        //修改成绩数据
        int i = baseMapper.updateById(score);
        String s1 =
            "update exam_score set exam_id = " + score.getExamId() +
                ",theory_grade = " + "'" + score.getTheoryGrade() + "'" +
                ",all_grade = " + "'" + score.getAllGrade() + "'" +
                ",exam_end_time = " + "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:dd").format(new Date()) + "'" +
                ",qualified = " + "'" + score.getQualified() + "'" +
                " " +"where id = " + "'" + score.getId() + "'";
        FtpUtil.sqlFileUpload(s1);
        if (i>0){
            //返回结果
            return true;
        }
        return false;
    }
}
src/main/java/org/springblade/modules/exam/vo/ExamPaperVO.java
@@ -4,6 +4,8 @@
import lombok.EqualsAndHashCode;
import org.springblade.modules.exam.entity.ExamPaper;
import java.util.Date;
/**
 * 考试类
 *
@@ -53,7 +55,7 @@
    private String deptId;
    /**
     * 得分
     * 得分id
     */
    private Long scoreId;
@@ -71,4 +73,14 @@
     * 计算截止时间
     */
    private String deadline;
    /**
     * 考试状态
     */
    private Integer isExam;
    /**
     * 考试开始时间
     */
    private Date examStartTime;
}