Bläddra i källkod

考试批次和场次启用/禁用加入考试记录查询

wangliang 2 år sedan
förälder
incheckning
ae954c0ef4

+ 7 - 3
themis-admin/src/main/java/com/qmth/themis/admin/api/TEExamController.java

@@ -313,10 +313,14 @@ public class TEExamController {
         }
         Integer enable = Integer.parseInt(String.valueOf(mapParameter.get("enable")));
         ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
-        if (Objects.isNull(examCacheBean)) {
-            throw new BusinessException(ExceptionResultEnum.EXAM_NO);
-        }
+        Optional.ofNullable(examCacheBean).orElseThrow(() -> new BusinessException(ExceptionResultEnum.EXAM_NO));
         TEExam teExam = teExamService.cacheConvert(examCacheBean);
+        if (Objects.nonNull(enable) && enable.intValue() == 0) {
+            Integer examCount = tOeExamRecordService.findByExamIdOrExamActivityIdCount(teExam.getId(), null);
+            if (Objects.nonNull(examCount) && examCount.intValue() > 0) {
+                throw new BusinessException("已有考试记录不能禁用");
+            }
+        }
         TBUser tbUser = (TBUser) ServletUtil.getRequestAccount();
         teExam.setEnable(enable);
         teExam.setUpdateId(tbUser.getId());

+ 9 - 0
themis-business/src/main/java/com/qmth/themis/business/dao/TOeExamRecordMapper.java

@@ -521,4 +521,13 @@ public interface TOeExamRecordMapper extends BaseMapper<TOeExamRecord> {
      * @return
      */
     public List<TOeExamRecord> findExamRecordByExamIdAndExamActivityId(@Param("examId") Long examId, @Param("examActivityId") Long examActivityId);
+
+    /**
+     * 根据考试批次id或考试场次id查找
+     *
+     * @param examId
+     * @param examActivityId
+     * @return
+     */
+    public Integer findByExamIdOrExamActivityIdCount(@Param("examId") Long examId, @Param("examActivityId") Long examActivityId);
 }

+ 9 - 0
themis-business/src/main/java/com/qmth/themis/business/service/TOeExamRecordService.java

@@ -512,4 +512,13 @@ public interface TOeExamRecordService extends IService<TOeExamRecord> {
      * @return
      */
     public List<TOeExamRecord> findExamRecordByExamIdAndExamActivityId(Long examId, Long examActivityId);
+
+    /**
+     * 根据考试批次id或考试场次id查找
+     *
+     * @param examId
+     * @param examActivityId
+     * @return
+     */
+    public Integer findByExamIdOrExamActivityIdCount(Long examId, Long examActivityId);
 }

+ 45 - 36
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamActivityServiceImpl.java

@@ -81,7 +81,7 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
     TSLogService tsLogService;
 
     @Resource
-    CacheService cacheService;
+    TOeExamRecordService tOeExamRecordService;
 
     /**
      * 表是否存在
@@ -307,9 +307,9 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
         if (ac == null) {
             return ret;
         }
-        if (ac.getEnable() != null && ac.getEnable().intValue() == 0) {
-            return ret;
-        }
+//        if (ac.getEnable() != null && ac.getEnable().intValue() == 0) {
+//            return ret;
+//        }
         ret = new ExamActivityCacheBean();
         ret.setId(ac.getId());
         ret.setCode(ac.getCode());
@@ -367,39 +367,48 @@ public class TEExamActivityServiceImpl extends ServiceImpl<TEExamActivityMapper,
                     if (count == 0) {
                         teAudioList.add(new TEAudio(tbUser.getOrgId(), s.getId(), SystemConstant.AFTER_AUDIO_ATTACHMENT_Id, AudioTypeEnum.AFTER.getTitle(), AudioTypeEnum.AFTER, AudioDefaultEnum.SYS, tbUser.getId(), SystemConstant.AFTER_AUDIO_SECOND, teExam, s));//考试结束前语音
                     }
-                    TEExamActivity teExamActivityDb = teExamActivityService.getById(s.getId());
-                    if (Objects.nonNull(teExamActivityDb)) {
-                        s.setCode(teExamActivityDb.getCode());
-                        if (!s.equals(teExamActivityDb)) {//不一样则日志记录
-                            if (s.getFinishTime().longValue() < teExamActivityDb.getFinishTime().longValue()) {
-                                throw new BusinessException("修改的场次结束时间只能大于未修改前的场次结束时间");
-                            }
-                            if (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1
-                                    && s.getFinishTime().longValue() != teExamActivityDb.getFinishTime().longValue()) {
-                                //删除quartz任务,发送mq消息start
-                                Map<String, Object> prop = new HashMap<>();
-                                prop.put(SystemConstant.OPER, SystemConstant.DELETE);
-                                prop.put(SystemConstant.EXAM, teExam);
-                                MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name(),
-                                        JacksonUtil.parseJson(Arrays.asList(s)), MqTagEnum.EXAM_ACTIVITY,
-                                        String.valueOf(teExam.getId()), prop, tbUser.getName());
-                                mqDtoService.assembleSendOneOrderMsg(mqDto);
-                                //删除quartz任务,发送mq消息end
-
-                                //新增quartz任务,发送mq消息start
-                                prop = new HashMap<>();
-                                prop.put(SystemConstant.OPER, SystemConstant.INSERT);
-                                prop.put(SystemConstant.EXAM, teExam);
-                                mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name(),
-                                        JacksonUtil.parseJson(Arrays.asList(s)), MqTagEnum.EXAM_ACTIVITY,
-                                        String.valueOf(teExam.getId()), prop, tbUser.getName());
-                                mqDtoService.assembleSendOneOrderMsg(mqDto);
-                                //新增quartz任务,发送mq消息end
+                    if (Objects.nonNull(s.getEnable()) && s.getEnable().intValue() == 0) {
+                        Integer examCount = tOeExamRecordService.findByExamIdOrExamActivityIdCount(teExam.getId(), s.getId());
+                        if (Objects.nonNull(examCount) && examCount.intValue() > 0) {
+                            throw new BusinessException("已有考试记录不能禁用");
+                        }
+                    } else {
+                        if (Objects.nonNull(s.getFinishTime())) {
+                            TEExamActivity teExamActivityDb = teExamActivityService.getById(s.getId());
+                            if (Objects.nonNull(teExamActivityDb)) {
+                                s.setCode(teExamActivityDb.getCode());
+                                if (!s.equals(teExamActivityDb)) {//不一样则日志记录
+                                    if (s.getFinishTime().longValue() < teExamActivityDb.getFinishTime().longValue()) {
+                                        throw new BusinessException("修改的场次结束时间只能大于未修改前的场次结束时间");
+                                    }
+                                    if (Objects.nonNull(teExam.getForceFinish()) && teExam.getForceFinish().intValue() == 1
+                                            && s.getFinishTime().longValue() != teExamActivityDb.getFinishTime().longValue()) {
+                                        //删除quartz任务,发送mq消息start
+                                        Map<String, Object> prop = new HashMap<>();
+                                        prop.put(SystemConstant.OPER, SystemConstant.DELETE);
+                                        prop.put(SystemConstant.EXAM, teExam);
+                                        MqDto mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name(),
+                                                JacksonUtil.parseJson(Arrays.asList(s)), MqTagEnum.EXAM_ACTIVITY,
+                                                String.valueOf(teExam.getId()), prop, tbUser.getName());
+                                        mqDtoService.assembleSendOneOrderMsg(mqDto);
+                                        //删除quartz任务,发送mq消息end
+
+                                        //新增quartz任务,发送mq消息start
+                                        prop = new HashMap<>();
+                                        prop.put(SystemConstant.OPER, SystemConstant.INSERT);
+                                        prop.put(SystemConstant.EXAM, teExam);
+                                        mqDto = new MqDto(mqUtil.getMqGroupDomain().getTopic(), MqTagEnum.EXAM_ACTIVITY.name(),
+                                                JacksonUtil.parseJson(Arrays.asList(s)), MqTagEnum.EXAM_ACTIVITY,
+                                                String.valueOf(teExam.getId()), prop, tbUser.getName());
+                                        mqDtoService.assembleSendOneOrderMsg(mqDto);
+                                        //新增quartz任务,发送mq消息end
+                                    }
+                                    tsLogService.save(new TSLog(LogEnum.EXAM_ACTIVITY, s.getCode(),
+                                            JacksonUtil.parseJson(teExamActivityDb),
+                                            JacksonUtil.parseJson(s),
+                                            tbUser.getId(), s.getId()));
+                                }
                             }
-                            tsLogService.save(new TSLog(LogEnum.EXAM_ACTIVITY, s.getCode(),
-                                    JacksonUtil.parseJson(teExamActivityDb),
-                                    JacksonUtil.parseJson(s),
-                                    tbUser.getId(), s.getId()));
                         }
                     }
                 } else {

+ 3 - 3
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamStudentServiceImpl.java

@@ -111,9 +111,9 @@ public class TEExamStudentServiceImpl extends ServiceImpl<TEExamStudentMapper, T
         if (es == null) {
             return ret;
         }
-        if (es.getEnable() != null && es.getEnable().intValue() == 0) {
-            return ret;
-        }
+//        if (es.getEnable() != null && es.getEnable().intValue() == 0) {
+//            return ret;
+//        }
         ret = new ExamStudentCacheBean();
         ret.setId(es.getId());
         ret.setExamId(es.getExamId());

+ 12 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -1438,6 +1438,18 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
         return tOeExamRecordMapper.findExamRecordByExamIdAndExamActivityId(examId, examActivityId);
     }
 
+    /**
+     * 根据考试批次id或考试场次id查找
+     *
+     * @param examId
+     * @param examActivityId
+     * @return
+     */
+    @Override
+    public Integer findByExamIdOrExamActivityIdCount(Long examId, Long examActivityId) {
+        return tOeExamRecordMapper.findByExamIdOrExamActivityIdCount(examId, examActivityId);
+    }
+
     /**
      * 取最高分
      *

+ 16 - 0
themis-business/src/main/resources/mapper/TOeExamRecordMapper.xml

@@ -1716,4 +1716,20 @@
             or toer.status = 'BREAK_OFF'
             or toer.status = 'RESUME_PREPARE')
     </select>
+
+    <select id="findByExamIdOrExamActivityIdCount" resultType="java.lang.Integer">
+        select count(1) from t_oe_exam_record toer
+        <where>
+            <if test="examId != null and examId != ''">
+                and toer.exam_id = #{examId}
+            </if>
+            <if test="examActivityId != null and examActivityId != ''">
+                and toer.exam_activity_id = #{examActivityId}
+            </if>
+            and (toer.status = 'FIRST_PREPARE'
+                or toer.status = 'ANSWERING'
+                or toer.status = 'BREAK_OFF'
+                or toer.status = 'RESUME_PREPARE')
+        </where>
+    </select>
 </mapper>