Bläddra i källkod

ly 特种设备

ly 1 år sedan
förälder
incheckning
ea84bc96e1

+ 179 - 11
master/src/main/java/com/ruoyi/project/training/elearn/controller/TElQuController.java

@@ -49,7 +49,7 @@ public class TElQuController extends BaseController {
     /**
      * 查询试题列表
      */
-    @PostMapping ("/list")
+    @PostMapping("/list")
     public TableDataInfo list(@RequestBody TElQu tElQu) {
         startPage();
         List<TElQu> list = tElQuService.selectTElQuList(tElQu);
@@ -80,17 +80,15 @@ public class TElQuController extends BaseController {
      */
     @Log(title = "试题图片上传", businessType = BusinessType.UPDATE)
     @PostMapping("/uploadFile")
-    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws IOException
-    {
-        if (!file.isEmpty())
-        {
+    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) throws IOException {
+        if (!file.isEmpty()) {
             // 获取当前日期
             LocalDate currentDate = LocalDate.now();
             // 获取年份
             int year = currentDate.getYear();
             // 获取月份
             int month = currentDate.getMonthValue();
-            String dir = "/elearn/" + year ;
+            String dir = "/elearn/" + year;
             String avatar = FileUploadUtils.upload(RuoYiConfig.getFilePath(dir), file);
             return AjaxResult.success(avatar);
         }
@@ -129,12 +127,12 @@ public class TElQuController extends BaseController {
      *
      * @param file          用户上传的文件
      * @param updateSupport 是否更新支持,如果已存在,则进行更新数据
-     * @param repoIds        题库id
+     * @param repoIds       题库id
      * @return
      * @throws Exception
      */
-    @PostMapping("/importData")
-    public AjaxResult importData(MultipartFile file, boolean updateSupport, String repoIds) throws Exception {
+    @PostMapping("/importData2")
+    public AjaxResult importData2(MultipartFile file, boolean updateSupport, String repoIds) throws Exception {
         logger.info("xzst-------------------");
         if (StringUtils.isEmpty(repoIds)) {
             return AjaxResult.error("未选择题库");
@@ -377,14 +375,184 @@ public class TElQuController extends BaseController {
                     quStr = "";
                 }
 
-            }else if (text.startsWith("正确答案")) {
+            } else if (text.startsWith("正确答案")) {
                 if (qu.getQuType() != -1) {
                     qu.setAnalysis(text);
                     tElQuService.updateTElQu(qu);
                 }
-            }else {
+            } else {
+                quStr = quStr + text;
+            }
+        }
+
+        return AjaxResult.success();
+    }
+
+    /**
+     * 导入题目
+     *
+     * @param file          用户上传的文件
+     * @param updateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param repoIds       题库id
+     * @return
+     * @throws Exception
+     */
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file, boolean updateSupport, String repoIds) throws Exception {
+        logger.info("xzst-------------------");
+        if (StringUtils.isEmpty(repoIds)) {
+            return AjaxResult.error("未选择题库");
+        }
+        List<String> repos = Arrays.asList(repoIds.split(",").clone());
+
+
+        FileInputStream fis = (FileInputStream) file.getInputStream();
+        XWPFDocument document = new XWPFDocument(fis);
+
+        List<XWPFParagraph> paragraphs = document.getParagraphs();
+        // 正则表达式匹配选项
+        Pattern pattern = Pattern.compile("\\[T\\](.*?)A、");
+        TElQu qu = new TElQu();
+        String quStr = "";
+        String anStr = "";
+        for (XWPFParagraph para : paragraphs) {
+            logger.info(para.getParagraphText());
+            String text = para.getParagraphText().trim();
+            if (text.startsWith("[多选]")) {
+                qu.setQuType(2l);
+                quStr = text.replaceAll("\\[多选\\]", "");
+            } else if (text.startsWith("[单选]")) {
+                qu.setQuType(1l);
+                quStr = text.replaceAll("\\[单选\\]", "");
+            } else if (text.startsWith("[判断]")) {
+                qu.setQuType(3l);
+                quStr = text.replaceAll("\\[判断\\]", "");
+            } else if (text.startsWith("[判断]")) {
+                qu.setQuType(3l);
+                quStr = text.replaceAll("\\[判断\\]", "");
+            } else if (text.startsWith("A.")) {
+                qu.setContent(quStr);
+                quStr = text;
+
+            } else if (text.startsWith("[D]")) {
+                if (qu.getQuType() == 3) { //判断题题目
+                    qu.setContent(quStr);
+
+                    TElQuAnswer answerA = new TElQuAnswer();
+                    answerA.setIsRight(0l);
+                    answerA.setContent("正确");
+                    TElQuAnswer answerB = new TElQuAnswer();
+                    answerB.setIsRight(0l);
+                    answerB.setContent("错误");
+                    if (text.contains("对")) {
+                        answerA.setIsRight(1l);
+                    } else {
+                        answerB.setIsRight(1l);
+                    }
+                    // 插入判断题
+                    List<TElQuAnswer> answerList = new ArrayList<>();
+                    answerList.add(answerA);
+                    answerList.add(answerB);
+                    qu.setAnswerList(answerList);
+                    qu.setRepoIds(repos);
+                    logger.info(JSON.toJSONString(qu));
+                    tElQuService.insertTElQu(qu);
+                    quStr = "";
+                } else { // 单选多选
+                    //答案
+                    quStr = quStr + text;
+
+                    TElQuAnswer answerA = new TElQuAnswer();
+                    answerA.setIsRight(0l);
+                    TElQuAnswer answerB = new TElQuAnswer();
+                    answerB.setIsRight(0l);
+                    TElQuAnswer answerC = new TElQuAnswer();
+                    answerC.setIsRight(0l);
+                    TElQuAnswer answerD = new TElQuAnswer();
+                    answerD.setIsRight(0l);
+
+                    Pattern patternA = Pattern.compile("A\\.(.*?)B\\.");
+                    Matcher matcherA = patternA.matcher(quStr);
+                    if (matcherA.find()) {
+                        String content = matcherA.group(1);
+                        System.out.println("从A、到B、之间的内容是: " + content);
+                        answerA.setContent(content);
+                    } else {
+                        System.out.println("未找到匹配的内容");
+                    }
+
+                    Pattern patternB = Pattern.compile("B\\.(.*?)C\\.");
+                    Matcher matcherB = patternB.matcher(quStr);
+                    if (matcherB.find()) {
+                        String content = matcherB.group(1);
+                        System.out.println("从B、到C、之间的内容是: " + content);
+                        answerB.setContent(content);
+                    } else {
+                        System.out.println("未找到匹配的内容");
+                    }
+                    if (quStr.contains("D.")) { //有D选项
+                        Pattern patternC = Pattern.compile("C\\.(.*?)D\\.");
+                        Matcher matcherC = patternC.matcher(quStr);
+                        if (matcherC.find()) {
+                            String content = matcherC.group(1);
+                            System.out.println("从C、到D、之间的内容是: " + content);
+                            answerC.setContent(content);
+                        } else {
+                            System.out.println("未找到匹配的内容");
+                        }
+
+                        Pattern patternD = Pattern.compile("D\\.(.*?)(?=\\[D])");
+                        Matcher matcherD = patternD.matcher(quStr);
+                        if (matcherD.find()) {
+                            String content = matcherD.group(1);
+                            System.out.println("从D、到[D]、之间的内容是: " + content);
+                            answerD.setContent(content);
+                        } else {
+                            System.out.println("未找到匹配的内容");
+                        }
+                    } else {//无D选项
+                        Pattern patternC = Pattern.compile("C\\.(.*?)(?=\\[D])");
+                        Matcher matcherC = patternC.matcher(quStr);
+                        if (matcherC.find()) {
+                            String content = matcherC.group(1);
+                            System.out.println("从C、到D、之间的内容是: " + content);
+                            answerC.setContent(content);
+                        } else {
+                            System.out.println("未找到匹配的内容");
+                        }
+                    }
+                    anStr = text.replaceAll("\\[D\\]", "").replaceAll("\\[/D\\]", "");
+                    System.out.println("匹配答案:" + anStr);
+                    if (anStr.contains("A")) {
+                        answerA.setIsRight(1l);
+                    }
+                    if (anStr.contains("B")) {
+                        answerB.setIsRight(1l);
+                    }
+                    if (anStr.contains("C")) {
+                        answerC.setIsRight(1l);
+                    }
+                    if (anStr.contains("D")) {
+                        answerD.setIsRight(1l);
+                    }
+                    List<TElQuAnswer> answerList = new ArrayList<>();
+                    answerList.add(answerA);
+                    answerList.add(answerB);
+                    answerList.add(answerC);
+                    if (quStr.contains("D.")) { //有D选项
+                        answerList.add(answerD);
+                    }
+                    qu.setAnswerList(answerList);
+                    qu.setRepoIds(repos);
+                    logger.info(JSON.toJSONString(qu));
+                    tElQuService.insertTElQu(qu);
+                    quStr = "";
+
+                }
+            } else {
                 quStr = quStr + text;
             }
+
         }
 
         return AjaxResult.success();