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}} +
+
+ + 案例题(共{{anliInfo.size}}题,每题{{anliInfo.score}}分,共{{anliInfo.sumScore}}分)
-
案例介绍:
-
-
-
-
- {{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 fccecc5..adb0007 100644 Binary files a/tz/gateway/target/tianze-gateway.jar.original and b/tz/gateway/target/tianze-gateway.jar.original differ