From 74a36d72a1e66c5220ab1608dc3226ff4887dc6a Mon Sep 17 00:00:00 2001 From: yang <1175@qq.com> Date: Tue, 8 Oct 2024 17:40:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AF=BC=E5=87=BA=EF=BC=8C?= =?UTF-8?q?=E8=80=83=E8=AF=95=E9=9A=8F=E6=9C=BA=E9=80=89=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/course/api/CourseContentApi.java | 26 ++-- .../course/service/ICourseContentService.java | 2 + .../impl/CourseContentServiceImpl.java | 113 +++++++++++++++--- 3 files changed, 118 insertions(+), 23 deletions(-) diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseContentApi.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseContentApi.java index d82811d2..198311ca 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseContentApi.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/api/CourseContentApi.java @@ -4,13 +4,10 @@ import java.util.List; import javax.annotation.Resource; +import com.xboe.common.utils.StringUtil; +import com.xboe.core.log.AutoLog; import org.apache.commons.lang3.StringUtils; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.xboe.core.JsonResponse; import com.xboe.core.api.ApiBaseController; @@ -77,7 +74,22 @@ public class CourseContentApi extends ApiBaseController{ } return success(obj); } - + + @GetMapping("/exam/paper-content") + @AutoLog(module = "试卷",action = "查看试卷试题",info = "查看当前试题内容") + public JsonResponse paperContent(String courseExamId){ + if(StringUtil.isBlank(courseExamId)){ + return badRequest("缺少必要参数"); + } + try { + Object paperContentOfOnline = ccontentService.getPaperContentOfOnline(courseExamId); + return success(paperContentOfOnline); + } catch (Exception e) { + log.error("查询试卷内容json错误",e); + return error("查询失败",e.getMessage()); + } + } + /** * 获取评估信息 * @param ccid diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java index f1f7d543..99a4514f 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/ICourseContentService.java @@ -85,4 +85,6 @@ public interface ICourseContentService{ void updateProcessVideo(String contentId, String courseId, Float processVideo); + Object getPaperContentOfOnline(String courseExamId); + } diff --git a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java index d517167d..a77620ea 100644 --- a/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java +++ b/servers/boe-server-all/src/main/java/com/xboe/module/course/service/impl/CourseContentServiceImpl.java @@ -1,23 +1,17 @@ package com.xboe.module.course.service.impl; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.List; - -import javax.annotation.Resource; -import javax.transaction.Transactional; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.xboe.common.OrderCondition; +import com.xboe.core.cache.IXaskCache; +import com.xboe.core.cache.XaskCacheProvider; import com.xboe.core.orm.FieldFilters; import com.xboe.core.orm.UpdateBuilder; -import com.xboe.module.course.dao.CourseAssessDao; -import com.xboe.module.course.dao.CourseContentDao; -import com.xboe.module.course.dao.CourseExamDao; -import com.xboe.module.course.dao.CourseHomeWorkDao; -import com.xboe.module.course.dao.CourseSectionDao; +import com.xboe.module.course.dao.*; import com.xboe.module.course.dto.CourseContentDto; import com.xboe.module.course.dto.SortItem; import com.xboe.module.course.entity.CourseAssess; @@ -25,8 +19,21 @@ import com.xboe.module.course.entity.CourseContent; import com.xboe.module.course.entity.CourseExam; import com.xboe.module.course.entity.CourseHomeWork; import com.xboe.module.course.service.ICourseContentService; +import com.xboe.module.exam.dao.ExamPaperDao; +import com.xboe.module.exam.vo.TestQuestionVo; import com.xboe.standard.enums.BoedxContentType; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import javax.transaction.Transactional; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Slf4j @Service public class CourseContentServiceImpl implements ICourseContentService { @@ -44,7 +51,13 @@ public class CourseContentServiceImpl implements ICourseContentService { @Resource private CourseHomeWorkDao homeworkDao; - + + @Resource + private CourseExamDao courseExamDao; + + @Resource + private ExamPaperDao examPaperDao; + @Override @Transactional @@ -78,6 +91,9 @@ public class CourseContentServiceImpl implements ICourseContentService { assessDao.saveOrUpdate(assess); } if(exam!=null) { + if ((exam.getRandomMode() && !(exam.getQnum() > 0)) || (!exam.getRandomMode() && exam.getQnum() > 0)) { + throw new RuntimeException("随机选题处参数错误"); + } exam.setCourseId(cc.getCourseId()); exam.setContentId(cc.getId()); if(exam.getPercentScore()==null) { @@ -188,4 +204,69 @@ public class CourseContentServiceImpl implements ICourseContentService { return ccDao.sumDurationByCourseId(courseId); } + + @Override + public Object getPaperContentOfOnline(String courseExamId) { + CourseExam courseExam = courseExamDao.findOne(FieldFilters.eq("id", courseExamId)); + if (courseExam == null) { + throw new RuntimeException("课程考试不存在"); + } + + String paperId = courseExam.getPaperId(); + Integer qnum = courseExam.getQnum(); + Boolean randomMode = courseExam.getRandomMode(); + + String paperJson = ""; + ObjectMapper objectMapper = new ObjectMapper(); + + try { + // 判断试卷类型 + if (courseExam.getPaperType() == 1 && StringUtils.isNotBlank(courseExam.getPaperContent()) && randomMode && qnum != null && qnum > 0) { + + paperJson = courseExam.getPaperContent(); + JsonNode rootNode = objectMapper.readTree(paperJson); + JsonNode itemsNode = rootNode.path("items"); + List itemsNodes = new ArrayList<>(); + itemsNode.forEach(itemsNodes::add); + + if (randomMode && qnum != null && qnum > 0 && itemsNodes.size() > qnum) { + Collections.shuffle(itemsNodes); + itemsNodes = itemsNodes.subList(0, qnum); + return itemsNodes; + } + } else if (courseExam.getPaperType() == 2 && randomMode && qnum != null && qnum > 0) { + IXaskCache cache = XaskCacheProvider.getCache(); + String cacheKey = "course:exam:" + courseExamId + ":" + paperId; + String cacheData = cache.getCacheObject(cacheKey); + + if (StringUtils.isBlank(cacheData)) { + paperJson = (String) examPaperDao.findField("paperContent", FieldFilters.eq("id", paperId)); + cache.setCacheObject(cacheKey, paperJson, 5, TimeUnit.HOURS); + } else { + paperJson = cacheData; + } + + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + List eqVoList = objectMapper.readValue(paperJson, new TypeReference>() { + }); + + if (eqVoList.size() > qnum) { + Collections.shuffle(eqVoList); + eqVoList = eqVoList.subList(0, qnum); + return eqVoList; + } + } + + } catch (JsonProcessingException e) { + log.error("JSON处理错误", e); + throw new RuntimeException(e); + } + + if (StringUtils.isBlank(paperJson)) { + throw new RuntimeException("此考试无试卷内容,考试已经过期或试卷已被删除"); + } + + return null; + } + }