Ver Fonte

放开语数外考试

mingfu há 2 semanas atrás
pai
commit
b8b3942791

+ 10 - 0
ie-admin/pom.xml

@@ -16,6 +16,11 @@
     </description>
 
     <dependencies>
+        <dependency>
+            <groupId>com.vladsch.flexmark</groupId>
+            <artifactId>flexmark-all</artifactId>
+            <version>0.42.14</version>
+        </dependency>
 
         <dependency>
             <groupId>org.jxls</groupId>
@@ -68,6 +73,11 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 

+ 1 - 1
ie-admin/src/main/java/com/ruoyi/web/controller/front/FrontExamController.java

@@ -49,7 +49,7 @@ public class FrontExamController {
     public AjaxResult subjects()
     {
         SysUser sysUser = SecurityUtils.getLoginUser().getUser();
-        List<DzSubject> list = dzSubjectService.selectDzSubjectBySubjectIds(ExamType.OHS.equals(sysUser.getExamType()) ? new Long[] {11L} : new Long[] {11L}); // 中职暂停 1L, 2L, 3L,
+        List<DzSubject> list = dzSubjectService.selectDzSubjectBySubjectIds(ExamType.OHS.equals(sysUser.getExamType()) ? new Long[] {11L} : new Long[] {1L, 2L, 3L, 11L}); // 中职暂停 1L, 2L, 3L,
         JSONObject evalCounts = JSONObject.parseObject(sysUserService.selectUserById(sysUser.getUserId()).getEvalCounts());
         return AjaxResult.success(list.stream().map(t -> {
             JSONObject o = new JSONObject();

+ 9 - 0
ie-admin/src/main/java/com/ruoyi/web/service/ExamService.java

@@ -518,6 +518,15 @@ public class ExamService {
         paperCond.setSubjectId(subjectId);
         paperCond.setPaperType(PaperType.Simulated.name());
         String baseKey = plan.getUniversityId() + "_" + examType.name();
+        if(!subjectId.equals(11L)) {
+            List<LearnPaper> paperList = learnPaperService.selectLearnPaperList(paperCond);
+            for(LearnPaper paper : paperList) {
+                if(existPaperIdSet.add(paper.getId())) {
+                    return paper;
+                }
+            }
+            throw new ValidationException("未初始化院校模拟题库: " + subjectId + ":" + plan.getId());
+        }
         for(int i = 3; i>0; i--) {
             if(i == 3) {
                 paperCond.setDirectKey(baseKey + "_" + groupName + "_" + plan.getMajorName());

+ 58 - 8
ie-admin/src/main/java/com/ruoyi/web/service/PaperService.java

@@ -42,9 +42,9 @@ public class PaperService {
     private final LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper;
     private final IBBusiWishUniversitiesService wishUniversitiesService;
     private final BBusiWishUniversitiesMapper bBusiWishUniversitiesMapper;
+    private final LearnKnowledgeTreeMapper learnKnowledgeTreeMapper;
 
-
-    PaperService(LearnPaperMapper paperMapper, LearnPaperQuestionMapper paperQuestionMapper, LearnQuestionsMapper questionsMapper, ILearnQuestionsService learnQuestionsService, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, IBBusiWishUniversitiesService wishUniversitiesService, BBusiWishUniversitiesMapper bBusiWishUniversitiesMapper) {
+    PaperService(LearnPaperMapper paperMapper, LearnPaperQuestionMapper paperQuestionMapper, LearnQuestionsMapper questionsMapper, ILearnQuestionsService learnQuestionsService, LearnDirectedKnowledgeMapper learnDirectedKnowledgeMapper, IBBusiWishUniversitiesService wishUniversitiesService, BBusiWishUniversitiesMapper bBusiWishUniversitiesMapper, LearnKnowledgeTreeMapper learnKnowledgeTreeMapper) {
         this.paperMapper = paperMapper;
         this.paperQuestionMapper = paperQuestionMapper;
         this.questionsMapper = questionsMapper;
@@ -52,10 +52,12 @@ public class PaperService {
         this.learnDirectedKnowledgeMapper = learnDirectedKnowledgeMapper;
         this.wishUniversitiesService = wishUniversitiesService;
         this.bBusiWishUniversitiesMapper = bBusiWishUniversitiesMapper;
+        this.learnKnowledgeTreeMapper = learnKnowledgeTreeMapper;
         // buildAllPapers(0);
         // buildSimulatedPaper(20154L, 1001L);
         // buildSimulatedPaper(20950L, 1001L);
         // test2();
+        // testCulture();
     }
 
     public void buildAllPapers(Integer seq) {
@@ -75,6 +77,49 @@ public class PaperService {
         }
     }
 
+    public void testCulture() {
+        LearnPaper paper = new LearnPaper();
+
+//        TestPaperVO.PaperDef2 paperDef = new TestPaperVO.PaperDef2("", "[{\"score\":40,\"knowledges\":[2001,2002,2003,2004,2005,2006,2007,2010,2013],\"types\":{\"judgment\":\"0\",\"single\":\"10/4\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":20,\"knowledges\":[2012],\"types\":{\"judgment\":\"0\",\"single\":\"5/4\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":40,\"knowledges\":[2011],\"types\":{\"judgment\":\"0\",\"single\":\"8/5\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}}]");
+//        paperDef.setFillExclude(false);
+//        paper.setSubjectId(1010L);
+//        paper.setRelateId(1010L); // 定向ID
+//        paper.setPaperName("语文");
+
+//        TestPaperVO.PaperDef2 paperDef = new TestPaperVO.PaperDef2("", "[{\"score\":80,\"knowledges\":[1005,1006,1007,1008,1009,1010,1011,1013,1015,2044,2043],\"types\":{\"judgment\":\"10/2\",\"single\":\"15/4\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":10,\"knowledges\":[2043],\"types\":{\"judgment\":\"0\",\"single\":\"1/10\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":10,\"knowledges\":[2043],\"types\":{\"judgment\":\"0\",\"single\":\"1/10\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}}]");
+//        paperDef.setFillExclude(false);
+//        paper.setSubjectId(1011L);
+//        paper.setRelateId(1011L);
+//        paper.setPaperName("数学");
+
+        TestPaperVO.PaperDef2 paperDef = new TestPaperVO.PaperDef2("", "[{\"score\":60,\"knowledges\":[1022,1193,1023],\"types\":{\"judgment\":\"0\",\"single\":\"15/4\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":20,\"knowledges\":[1022,1193,1023],\"types\":{\"judgment\":\"0\",\"single\":\"5/4\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}},{\"score\":20,\"knowledges\":[1022,1193,1023],\"types\":{\"judgment\":\"0\",\"single\":\"10/2\",\"multiple\":\"0\",\"subjective\":\"0\",\"fill\":\"0\",\"essay\":\"0\",\"short\":\"0\"}}]");
+        paperDef.setFillExclude(false);
+        paper.setSubjectId(1012L);
+        paper.setRelateId(1012L);
+        paper.setPaperName("英语");
+
+        paper.setPaperType(PaperType.Simulated.name());
+        paper.setYear(2025);
+        paper.setPaperSource(1);
+        paper.setDirectKey("");
+        paper.setStatus(PaperStatus.Valid.getVal());
+        paper.setNumber(paperDef.getTotal());
+        paper.setFenshu(paperDef.getScore().intValue());
+        AnswerSheet.PaperCond info = new AnswerSheet.PaperCond();
+        info.setScore(paper.getFenshu());
+        info.setTime(60 * 60);
+        info.setTypes(paperDef.getTypes().stream().map(t -> new AnswerSheet.PaperCondType(t.getType().getTitle(), t.getCount(), t.getScore())).collect(Collectors.toList()));
+        paper.setPaperInfo(JSONObject.toJSONString(info));
+        try {
+            Pair<LearnPaper, List<LearnPaperQuestion>> paperResult = buildPaper2(null, paper, paperDef);
+            savePaper(paperResult.getKey(), paperResult.getValue());
+            return;
+        } catch(Exception e) {
+            log.error(e.getMessage());
+        }
+
+    }
+
     public void test2() {
         TestPaperVO.PaperDef paperDef = new TestPaperVO.PaperDef();
         paperDef.setFillExclude(true);
@@ -308,9 +353,14 @@ public class PaperService {
         List<LearnPaperQuestion> pqList = Lists.newArrayList();
         Set<Long> existQuestionIdSet = Sets.newHashSet();
         for(TestPaperVO.KnowledgeTypeDef2 ktd : paperDef.getKnowTypes()) {
-            Map<String, KnowTypeAssign> knowTypeAssignMap = buildKnowTypeAssignMap(studentId, ktd.getTypes().stream().map(t -> t.getType().getTitle()).collect(Collectors.toList()), ktd.getKnowledges(), paperDef.getFillExclude());
+            Set<Long> knownIdSet = Sets.newHashSet(ktd.getKnowledges());
+            for(LearnKnowledgeTree kt : learnKnowledgeTreeMapper.selectLearnKnowledgeTreeByParentIds(ktd.getKnowledges())) {
+                knownIdSet.remove(kt.getPid());
+                knownIdSet.add(kt.getId());
+            }
+            Map<String, KnowTypeAssign> knowTypeAssignMap = buildKnowTypeAssignMap(studentId, ktd.getTypes().stream().map(t -> t.getType().getTitle()).collect(Collectors.toList()), knownIdSet, paperDef.getFillExclude());
             assignTypeFirst(paperDef.getFillExclude(), ktd, knowTypeAssignMap);
-            pqList.addAll(getQuestions2(studentId, ktd.getCount(), ktd, knowTypeAssignMap, existQuestionIdSet));
+            pqList.addAll(getQuestions2(studentId, ktd.getCount(), knownIdSet, ktd.getTypes(), knowTypeAssignMap, existQuestionIdSet));
         }
         return pqList;
     }
@@ -639,14 +689,14 @@ public class PaperService {
         return pqList;
     }
 
-    public List<LearnPaperQuestion> getQuestions2(Long studentId, Integer total, TestPaperVO.KnowledgeTypeDef2 knowledgeTypeDef2, Map<String, KnowTypeAssign> knowTypeAssignMap, Set<Long> existQuestionIdSet) {
+    public List<LearnPaperQuestion> getQuestions2(Long studentId, Integer total, Collection<Long> knownIds, List<TestPaperVO.TypeDef2> types, Map<String, KnowTypeAssign> knowTypeAssignMap, Set<Long> existQuestionIdSet) {
         // 知识点已经分配,准备题型分配
         LearnQuestions qCond = new LearnQuestions();
         Random random = new Random();
         List<LearnPaperQuestion> pqList = Lists.newArrayList();
-        for (TestPaperVO.TypeDef2 typeDef : knowledgeTypeDef2.getTypes()) {
+        for (TestPaperVO.TypeDef2 typeDef : types) {
             String typeTitle = typeDef.getType().getTitle();
-            for (Long knowId : knowledgeTypeDef2.getKnowledges()) {
+            for (Long knowId : knownIds) {
                 String key = knowId + "_" + typeTitle;
                 KnowTypeAssign ktc = knowTypeAssignMap.get(key);
                 if(null == ktc) {
@@ -702,7 +752,7 @@ public class PaperService {
      * @param fillExclude
      * @return
      */
-    private Map<String, KnowTypeAssign> buildKnowTypeAssignMap(Long studentId, List<String> types, List<Long> knownIds, Boolean fillExclude) {
+    private Map<String, KnowTypeAssign> buildKnowTypeAssignMap(Long studentId, List<String> types, Collection<Long> knownIds, Boolean fillExclude) {
         Map<String, KnowTypeAssign> knowTypeAssignMap = Maps.newHashMap();
         Map cond = Maps.newHashMap();
         cond.put("studentId", studentId);

+ 4 - 0
ie-system/src/main/java/com/ruoyi/learn/mapper/LearnKnowledgeTreeMapper.java

@@ -1,7 +1,9 @@
 package com.ruoyi.learn.mapper;
 
+import java.util.Collection;
 import java.util.List;
 import com.ruoyi.learn.domain.LearnKnowledgeTree;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 知识点树Mapper接口
@@ -18,6 +20,8 @@ public interface LearnKnowledgeTreeMapper
      * @return 知识点树
      */
     public LearnKnowledgeTree selectLearnKnowledgeTreeById(Long id);
+    public List<LearnKnowledgeTree> selectLearnKnowledgeTreeByParentIds(@Param("ids") Collection<Long> ids);
+
 
     /**
      * 查询知识点树列表

+ 5 - 0
ie-system/src/main/resources/mapper/learn/LearnKnowledgeTreeMapper.xml

@@ -41,6 +41,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
 
+    <select id="selectLearnKnowledgeTreeByParentIds" resultMap="LearnKnowledgeTreeResult">
+        <include refid="selectLearnKnowledgeTreeVo"/>
+        where pid in <foreach item="id" collection="ids" open="(" separator="," close=")">#{id}</foreach>
+    </select>
+
     <insert id="insertLearnKnowledgeTree" parameterType="LearnKnowledgeTree" useGeneratedKeys="true" keyProperty="id">
         insert into learn_knowledge_tree
         <trim prefix="(" suffix=")" suffixOverrides=",">