From a267242f4458fb96d4a88c4e115b4602fe353f10 Mon Sep 17 00:00:00 2001 From: tianea Date: Tue, 2 Aug 2022 09:38:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/api/question.js | 18 ++ .../views/competition/components/survey.vue | 4 + .../src/views/competition/components/task.vue | 2 +- backend/src/views/resource/exam/add/batch.vue | 6 +- front/src/views/system/exam.vue | 49 +++--- .../classes/META-INF/build-info.properties | 2 +- tz/exam/exam-service/pom.xml | 11 ++ .../pc/PCQuestionImportController.java | 5 + .../tz/platform/pc/biz/QuestionImportBiz.java | 166 ++++++++++++++++++ .../com/tz/platform/pc/excel/QuestionEx.java | 17 ++ .../tz/platform/repository/QuestionDao.java | 2 + .../tz/platform/excel/QuestionImportTest.java | 35 ++++ .../classes/META-INF/build-info.properties | 2 +- .../target/maven-archiver/pom.properties | 2 +- tz/gateway/target/tianze-gateway.jar.original | Bin 13133 -> 13135 bytes 15 files changed, 291 insertions(+), 30 deletions(-) create mode 100644 tz/exam/exam-service/src/main/java/com/tz/platform/pc/excel/QuestionEx.java create mode 100644 tz/exam/exam-service/src/test/java/com/tz/platform/excel/QuestionImportTest.java diff --git a/backend/src/api/question.js b/backend/src/api/question.js index 9ebcb4b..0755cd5 100644 --- a/backend/src/api/question.js +++ b/backend/src/api/question.js @@ -77,4 +77,22 @@ export function getList(query) { method: 'post', data: fd }) + } + export function importQuestion(obj){ + let fd = new FormData() + if(obj instanceof Object){ + Object.keys(obj).forEach(key =>{ + const o = obj[key] + if(o instanceof Object){ + fd.append(key,o) + }else{ + fd.append(key,o) + } + }) + } + return request({ + url: "/api/question/importQuestion", + method: 'post', + data: fd + }) } \ No newline at end of file diff --git a/backend/src/views/competition/components/survey.vue b/backend/src/views/competition/components/survey.vue index fd6576d..55061e6 100644 --- a/backend/src/views/competition/components/survey.vue +++ b/backend/src/views/competition/components/survey.vue @@ -195,6 +195,7 @@ export default { if(this.survey.organizer){ this.organizerList = this.survey.organizer.split('|') } + console.log(this.survey) if(this.survey.supporter2){ this.supporterList2 = this.survey.supporter2.split('|') } @@ -209,6 +210,9 @@ export default { if(nv.supporter){ this.supporterList = this.survey.supporter.split('|') } + if(nv.supporter2){ + this.supporterList2 = this.survey.supporter2.split('|') + } if(nv.organizer){ this.organizerList = this.survey.organizer.split('|') } diff --git a/backend/src/views/competition/components/task.vue b/backend/src/views/competition/components/task.vue index f719b37..cc8a753 100644 --- a/backend/src/views/competition/components/task.vue +++ b/backend/src/views/competition/components/task.vue @@ -178,7 +178,7 @@ { if(res.code == 200){ this.list = res.data.list diff --git a/front/src/views/system/exam.vue b/front/src/views/system/exam.vue index 88e8789..5125eca 100644 --- a/front/src/views/system/exam.vue +++ b/front/src/views/system/exam.vue @@ -111,37 +111,38 @@ - -
- - 案例题(共{{anliInfo.size}}题,每题{{anliInfo.score}}分,共{{anliInfo.sumScore}}分) -
-
- -
案例名称:
-
- {{cq.item.stem}} +
+ -
案例介绍:
-
-
-
-
- {{subcq.id}}.{{subcq.stem}} + diff --git a/tz/competition/target/classes/META-INF/build-info.properties b/tz/competition/target/classes/META-INF/build-info.properties index bae0263..29e1e54 100644 --- a/tz/competition/target/classes/META-INF/build-info.properties +++ b/tz/competition/target/classes/META-INF/build-info.properties @@ -1,5 +1,5 @@ build.artifact=competition build.group=com.tz build.name=competition -build.time=2022-05-16T13\:19\:35.289Z +build.time=2022-07-25T01\:13\:41.151Z build.version=1.0-SNAPSHOT diff --git a/tz/exam/exam-service/pom.xml b/tz/exam/exam-service/pom.xml index 8e8a8ec..1378ad9 100644 --- a/tz/exam/exam-service/pom.xml +++ b/tz/exam/exam-service/pom.xml @@ -32,6 +32,16 @@ com.tz system-feign + + com.monitorjbl + xlsx-streamer + 2.1.0 + + + com.alibaba + easyexcel + 3.0.5 + org.springframework.boot @@ -43,6 +53,7 @@ spring-boot-starter-test test + diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java index 066df6c..f5798b6 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java @@ -21,4 +21,9 @@ public class PCQuestionImportController extends BaseController { public Result importExcell(MultipartFile file){ return importBiz.importExcel(file,getUserNo()); } + + @PostMapping(value = "importQuestion") + public Result importQuestion(MultipartFile file,Long courseId,Integer levelId){ + return importBiz.importExecl2(file,getUserNo(),courseId,levelId); + } } diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java index 222e8f4..43ef26b 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java @@ -1,5 +1,8 @@ package com.tz.platform.pc.biz; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; import com.tz.platform.common.core.base.Result; import com.tz.platform.common.core.bo.Answer; import com.tz.platform.common.core.enmus.QuestionTypeEnum; @@ -13,6 +16,7 @@ import com.tz.platform.feign.user.vo.UserVo; import com.tz.platform.feign.vo.StudentLevelVo; import com.tz.platform.pc.dto.ListQuestionImportDTO; import com.tz.platform.pc.dto.QuestionImportDTO; +import com.tz.platform.pc.excel.QuestionEx; import com.tz.platform.repository.CourseDao; import com.tz.platform.repository.QuestionDao; import org.apache.catalina.User; @@ -23,6 +27,7 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -169,4 +174,165 @@ public class QuestionImportBiz { return Result.success(dto); } + + public Result importExecl2(MultipartFile file,Long userNo,Long courseId,Integer leveId){ + if(userNo == null ||userNo<=0){ + return Result.error("无权操作"); + } + UserVo user = feignUser.getByUserNo(userNo); + if(user==null||user.getUserType()< UserTypeEnum.TEACHER.getCode()){ + return Result.error("无权操作"); + } + Course course = courseDao.getById(courseId); + List levelList = feignStudentLevel.list(); + StudentLevelVo levelVo = levelList.stream().filter(studentLevelVo -> studentLevelVo.getId().equals(leveId)).findFirst().orElse(null); + if(course == null ){ + return Result.error("请选择课程"); + } + try { + final List list = new ArrayList(); + EasyExcel.read(file.getInputStream(), QuestionEx.class, new AnalysisEventListener() { + @Override + public void invoke(Object object, AnalysisContext analysisContext) { + list.add(object); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).doReadAll(); + + ListQuestionImportDTO dto = new ListQuestionImportDTO(); + List list2 = new ArrayList<>(); + for (Object o :list){ + QuestionEx questionEx = (QuestionEx) o; + QuestionImportDTO subDto = new QuestionImportDTO(); + subDto.setStem(questionEx.getSub()); + subDto.setQuestionType(questionEx.getType()); + subDto.setCourseName(course.getName()); + if(StringUtils.isEmpty(questionEx.getSub())){ + subDto.setStatus("题干为空"); + }else{ + List temp = questionDao.findAllByStem(questionEx.getSub()); + if (temp.size()>0) { + subDto.setStatus("题干已存在"); + } + + Question question = new Question(); + + + if (levelVo == null) { + question.setLevelId(0); + question.setLevelName("通用"); + } else { + question.setLevelId(levelVo.getId()); + question.setLevelName(levelVo.getName()); + } + + question.setStem(questionEx.getSub()); + question.setUserNo(userNo); + question.setCreateTime(new Date()); + question.setStatus(0); + question.setScore(questionEx.getScore()); + question.setCreatorId(userNo); + question.setCreator(user.getName()); + question.setType(0); + question.setAnalysis(questionEx.getAnalysis()); + question.setCourseId(course.getId()); + QuestionTypeEnum qt = null; + if(questionEx.getType().contains(QuestionTypeEnum.SINGLE.getDesc())){ + qt = QuestionTypeEnum.SINGLE; + }else if(questionEx.getType().contains(QuestionTypeEnum.MULTY.getDesc())){ + qt = QuestionTypeEnum.MULTY; + }else if(questionEx.getType().contains(QuestionTypeEnum.JUDGE.getDesc())) { + qt= QuestionTypeEnum.JUDGE; + } + if(qt == null){ + subDto.setStatus("题型未匹配"); + }else{ + List answerList = new ArrayList<>(); + List answerIds = new ArrayList<>(); + if(StringUtils.hasText(questionEx.getOptionA())){ + Answer answer = new Answer(); + answer.setId(1); + answer.setTitle(questionEx.getOptionA()); + answerList.add(answer); + } + + if(StringUtils.hasText(questionEx.getOptionB())){ + Answer answer = new Answer(); + answer.setId(2); + answer.setTitle(questionEx.getOptionB()); + answerList.add(answer); + } + if(StringUtils.hasText(questionEx.getOptionC())){ + Answer answer = new Answer(); + answer.setId(3); + answer.setTitle(questionEx.getOptionC()); + answerList.add(answer); + } + + if(StringUtils.hasText(questionEx.getOptionD())){ + Answer answer = new Answer(); + answer.setId(4); + answer.setTitle(questionEx.getOptionD()); + answerList.add(answer); + } + if(StringUtils.hasText(questionEx.getOptionE())){ + Answer answer = new Answer(); + answer.setId(5); + answer.setTitle(questionEx.getOptionE()); + answerList.add(answer); + } + + + String[] answerS = questionEx.getAnswer().split(","); + for(int i =0;i0&&answerList.size()>0&&qt!=null){ + question.setQuestionType(qt.getCode()); + question.setAnswerList(answerList); + question.setAnswerId(answerIds); + question = questionDao.save(question); + subDto.setId(question.getId()); + subDto.setStatus("成功"); + } + } + list2.add(subDto); + } + + } + dto.setList(list2); + return Result.success(dto); + } catch (IOException e) { + e.printStackTrace(); + } + return Result.error("操作失败"); + } } diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/excel/QuestionEx.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/excel/QuestionEx.java new file mode 100644 index 0000000..af88129 --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/excel/QuestionEx.java @@ -0,0 +1,17 @@ +package com.tz.platform.pc.excel; + +import lombok.Data; + +@Data +public class QuestionEx { + private String type; + private String sub; + private String optionA; + private String optionB; + private String optionC; + private String optionD; + private String optionE; + private String answer; + private Long score; + private String analysis; +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java index c7de81f..d5815a3 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java @@ -37,6 +37,8 @@ public interface QuestionDao extends JpaRepository { Question getByStem(String stem); + List findAllByStem(String stem); + @Transactional @Modifying @Query(value = "update question set status=:status where id in (:ids)",nativeQuery = true) diff --git a/tz/exam/exam-service/src/test/java/com/tz/platform/excel/QuestionImportTest.java b/tz/exam/exam-service/src/test/java/com/tz/platform/excel/QuestionImportTest.java new file mode 100644 index 0000000..aed4fdd --- /dev/null +++ b/tz/exam/exam-service/src/test/java/com/tz/platform/excel/QuestionImportTest.java @@ -0,0 +1,35 @@ +package com.tz.platform.excel; + + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.tz.platform.pc.excel.QuestionEx; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class QuestionImportTest { + @Test + public void importTest(){ + final List list = new ArrayList(); + EasyExcel.read("/Users/tianchengjun/Desktop/资料/冠军邀请赛数据/test.xlsx", QuestionEx.class, new AnalysisEventListener() { + @Override + public void invoke(Object object, AnalysisContext analysisContext) { + list.add(object); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } + }).doReadAll(); + + for (Object o :list){ + QuestionEx questionEx = (QuestionEx) o; + System.out.println(questionEx.getSub()); + } + } +} diff --git a/tz/gateway/target/classes/META-INF/build-info.properties b/tz/gateway/target/classes/META-INF/build-info.properties index 08f12d6..7ecb9aa 100644 --- a/tz/gateway/target/classes/META-INF/build-info.properties +++ b/tz/gateway/target/classes/META-INF/build-info.properties @@ -1,5 +1,5 @@ build.artifact=gateway build.group=com.tz build.name=gateway -build.time=2022-05-16T13\:19\:35.289Z +build.time=2022-07-25T01\:13\:41.151Z build.version=1.0-SNAPSHOT diff --git a/tz/gateway/target/maven-archiver/pom.properties b/tz/gateway/target/maven-archiver/pom.properties index 8b023f4..0db009e 100644 --- a/tz/gateway/target/maven-archiver/pom.properties +++ b/tz/gateway/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Mon May 16 21:19:46 CST 2022 +#Mon Jul 25 09:13:46 CST 2022 version=1.0-SNAPSHOT groupId=com.tz artifactId=gateway diff --git a/tz/gateway/target/tianze-gateway.jar.original b/tz/gateway/target/tianze-gateway.jar.original index fccecc5e1a28ce5de049b448a11f71373992fdc8..adb0007b4b2da308ab8d328aaa7db59e55c54b43 100644 GIT binary patch delta 416 zcmX?`c0P?az?+$civa|7c>bKotHQh;NSQ2RW?T4U;!Sxl^;-!7UZq{ou3F_uTob+AAM<>1dtw@%GVU z>{`NnR?mOU6DEcLZ$>5&X1M1kGwGRtd_UPz&mQF1$<=!LV0x{d5tx3YXAPzm^qs+U zn!Xp9-mGr{rr+sDfN4*II554+AOTGC8bbJahS6X@pE0xo)0{?*VA|Jc4kz5}lRp`S KvVGMBMF;?HMWGS^ delta 414 zcmX?~b~cSSz?+$civa{GR&AKbtHN9kq)Zlpshjd(>bDYznykR64W|7VjlpyaqZODw z$ao7xZ=T1*!31WkWU=A|GoJAZGJ_ev1dPSO3l<@T?$MQqV>Z$jKz%;j!BbfF#n!^eA_~b7}p=_UZLD2yK Dk<6mH