diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsBankController.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsBankController.java index 98fbe7d..fced37a 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsBankController.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsBankController.java @@ -1,6 +1,8 @@ package com.hig.questions.controller; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -42,6 +44,8 @@ import com.ruoyi.common.core.page.TableDataInfo; @RequestMapping("/questions/questionsbank") public class ExamQuestionsBankController extends BaseController { + private static final Logger log = LoggerFactory.getLogger(ExamQuestionsBankController.class); + @Value("${cms.exam.photo-path}") private String photopath; @@ -70,7 +74,7 @@ public class ExamQuestionsBankController extends BaseController public AjaxResult arrayList(@PathVariable("bankCodes") String bankCodes) { // startPage(); - // System.out.println("bankCodes:" + bankCodes); + // log.debug("bankCodes: {}", bankCodes); List list = examQuestionsBankService.selectExamQuestionsBankListByCode(bankCodes.split(",")); return AjaxResult.success(list); } @@ -88,6 +92,32 @@ public class ExamQuestionsBankController extends BaseController return util.exportExcel(list, "题库管理数据"); } + /** + * 导入题库管理数据 + */ + @Log(title = "题库管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('questions:questionsbank:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(ExamQuestionsBank.class); + List examQuestionsBankList = util.importExcel(file.getInputStream()); + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + String operName = loginUser.getUsername(); + String message = examQuestionsBankService.importExamQuestionsBank(examQuestionsBankList, updateSupport, operName); + return AjaxResult.success(message); + } + + /** + * 下载题库管理导入模板 + */ + @GetMapping("/importTemplate") + public AjaxResult importTemplate() + { + ExcelUtil util = new ExcelUtil(ExamQuestionsBank.class); + return util.importTemplateExcel("题库管理数据"); + } + /** * 获取题库管理详细信息 */ @@ -107,13 +137,13 @@ public class ExamQuestionsBankController extends BaseController public AjaxResult add(@RequestBody ExamQuestionsBank examQuestionsBank) { LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); - System.out.println(loginUser.getUser().getUserName()); - System.out.println(loginUser.getUser().getDept().getDeptId()); + log.debug("用户名: {}", loginUser.getUser().getUserName()); + log.debug("部门ID: {}", loginUser.getUser().getDept().getDeptId()); examQuestionsBank.setCreateBy(loginUser.getUser().getUserName()); examQuestionsBank.setCreateDept(loginUser.getUser().getDept().getDeptId()); examQuestionsBank.setBankCode(UUIDGenerator.generate()); - System.out.println("examQuestionsBank:" + examQuestionsBank.toString()); + log.debug("examQuestionsBank: {}", examQuestionsBank.toString()); return toAjax(examQuestionsBankService.insertExamQuestionsBank(examQuestionsBank)); } @@ -125,7 +155,7 @@ public class ExamQuestionsBankController extends BaseController @PutMapping public AjaxResult edit(@RequestBody ExamQuestionsBank examQuestionsBank) { - System.out.println("examQuestionsBank:" + examQuestionsBank.toString()); + log.debug("examQuestionsBank: {}", examQuestionsBank.toString()); return toAjax(examQuestionsBankService.updateExamQuestionsBank(examQuestionsBank)); } @@ -152,10 +182,10 @@ public class ExamQuestionsBankController extends BaseController // 拼接路径 String path = RuoYiConfig.getProfile() + photopath; - System.out.println("拼接路径为:" + path); + log.debug("拼接路径为: {}", path); String filename = FileUpload.writeUploadFile(file,path); String fileurl = photopath + "/" + filename; - System.out.println(fileurl); + log.debug("fileurl: {}", fileurl); int count = 0; @@ -163,7 +193,7 @@ public class ExamQuestionsBankController extends BaseController // 相应赋值 ExamBankPicture examBankPicture = new ExamBankPicture(bankcode, path, fileurl, filename, originalfile); - System.out.println("examBankPicture:" + examBankPicture.toString()); + log.debug("examBankPicture: {}", examBankPicture.toString()); try { diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsController.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsController.java index f945e9a..43f7f94 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsController.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/controller/ExamQuestionsController.java @@ -1,8 +1,13 @@ package com.hig.questions.controller; -import java.util.List; +import java.util.*; + +import com.ruoyi.common.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -11,6 +16,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -40,6 +46,8 @@ import com.ruoyi.common.core.page.TableDataInfo; @RequestMapping("/questions/examquestions") public class ExamQuestionsController extends BaseController { + private static final Logger log = LoggerFactory.getLogger(ExamQuestionsController.class); + @Autowired private IExamQuestionsService examQuestionsService; @@ -80,6 +88,65 @@ public class ExamQuestionsController extends BaseController return util.exportExcel(list, "考试题目数据"); } + /** + * 导入考试题目数据 + */ + @Log(title = "考试题目", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('questions:examquestions:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport,String bankCode) throws Exception + { + ExcelUtil util = new ExcelUtil(ExamQuestions.class); + List examQuestionsList = util.importExcel(file.getInputStream()); + LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest()); + String operName = loginUser.getUsername(); + List examQuestions=new ArrayList<>(); + examQuestionsList.forEach(x->{ + x.setBankCode(bankCode); + String tmp= x.getQuestionsTypeStr(); + boolean flag=false; + if("判断题".equals(tmp)){ + x.setQuestionsType(1); + flag=true; + } + if("单选题".equals(tmp)){ + x.setQuestionsType(2); + flag=true; + } + if("多选题".equals(tmp)){ + x.setQuestionsType(3); + flag=true; + } + if(flag){ + examQuestions.add(x); + } + if(StringUtils.isEmpty(x.getRateNumberStr())){ + x.setRateNumber(0); + }else{ + x.setRateNumber(x.getRateNumberStr().length()/2); + } + x.setCreateBy(operName); + x.setCreateTime(new Date()); + x.setQuestionsCode(UUID.randomUUID().toString()); + }); + if(CollectionUtils.isEmpty(examQuestions)){ + return AjaxResult.error("导入数据为空!"); + } + + String message = examQuestionsService.importExamQuestions(examQuestions, updateSupport, operName); + return AjaxResult.success(message); + } + + /** + * 下载考试题目导入模板 + */ + @GetMapping("/importTemplate") + public AjaxResult importTemplate() + { + ExcelUtil util = new ExcelUtil(ExamQuestions.class); + return util.importTemplateExcel("考试题目数据"); + } + /** * 获取考试题目详细信息 */ @@ -110,7 +177,7 @@ public class ExamQuestionsController extends BaseController ExamQuestionsContent examQuestionsContent = new ExamQuestionsContent(examQuestions.getQuestionsCode(), examQuestions.getQuestionsContent()); - System.out.println("examQuestionsContent:" + examQuestionsContent.toString()); + log.debug("examQuestionsContent: {}", examQuestionsContent.toString()); // 开始保存数据 diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestions.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestions.java index 37411d2..2044748 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestions.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestions.java @@ -38,6 +38,8 @@ public class ExamQuestions extends BaseEntity /** 试题类型 */ @Excel(name = "试题类型") + private String questionsTypeStr; + private Integer questionsType; /** 题目分数 */ @@ -46,8 +48,49 @@ public class ExamQuestions extends BaseEntity /** 复杂度 */ @Excel(name = "复杂度") + private String rateNumberStr; private Integer rateNumber; + /** 复杂度 */ + @Excel(name = "A") + private String answerA; + + /** 复杂度 */ + @Excel(name = "B") + private String answerB; + + /** 复杂度 */ + @Excel(name = "C") + private String answerC; + + /** 复杂度 */ + @Excel(name = "D") + private String answerD; + + /** 复杂度 */ + @Excel(name = "E") + private String answerE; + + /** 复杂度 */ + @Excel(name = "F") + private String answerF; + + /** 复杂度 */ + @Excel(name = "G") + private String answerG; + + /** 复杂度 */ + @Excel(name = "H") + private String answerH; + + /** 复杂度 */ + @Excel(name = "I") + private String answerI; + + /** 复杂度 */ + @Excel(name = "J") + private String answerJ; + /** 正确答案 */ @Excel(name = "正确答案") private String rightAnswer; @@ -66,8 +109,103 @@ public class ExamQuestions extends BaseEntity /** 题目选项 */ private List answerList ; - - + + public String getQuestionsTypeStr() { + return questionsTypeStr; + } + + public void setQuestionsTypeStr(String questionsTypeStr) { + this.questionsTypeStr = questionsTypeStr; + } + + public String getRateNumberStr() { + return rateNumberStr; + } + + public void setRateNumberStr(String rateNumberStr) { + this.rateNumberStr = rateNumberStr; + } + + public String getAnswerA() { + return answerA; + } + + public void setAnswerA(String answerA) { + this.answerA = answerA; + } + + public String getAnswerB() { + return answerB; + } + + public void setAnswerB(String answerB) { + this.answerB = answerB; + } + + public String getAnswerC() { + return answerC; + } + + public void setAnswerC(String answerC) { + this.answerC = answerC; + } + + public String getAnswerD() { + return answerD; + } + + public void setAnswerD(String answerD) { + this.answerD = answerD; + } + + public String getAnswerE() { + return answerE; + } + + public void setAnswerE(String answerE) { + this.answerE = answerE; + } + + public String getAnswerF() { + return answerF; + } + + public void setAnswerF(String answerF) { + this.answerF = answerF; + } + + public String getAnswerG() { + return answerG; + } + + public void setAnswerG(String answerG) { + this.answerG = answerG; + } + + public String getAnswerH() { + return answerH; + } + + public void setAnswerH(String answerH) { + this.answerH = answerH; + } + + public String getAnswerI() { + return answerI; + } + + public void setAnswerI(String answerI) { + this.answerI = answerI; + } + + public String getAnswerJ() { + return answerJ; + } + + public void setAnswerJ(String answerJ) { + this.answerJ = answerJ; + } + public List getAnswerList() { return answerList; } diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestionsBank.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestionsBank.java index 9438398..c37ab8b 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestionsBank.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/domain/ExamQuestionsBank.java @@ -29,6 +29,7 @@ public class ExamQuestionsBank extends BaseEntity private String bankName; /** 题库描述 */ + @Excel(name = "题库描述") private String bankDescribe; /** 题库版本 */ diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsBankMapper.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsBankMapper.java index b8309b2..82d7cab 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsBankMapper.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsBankMapper.java @@ -19,6 +19,14 @@ public interface ExamQuestionsBankMapper */ public ExamQuestionsBank selectExamQuestionsBankById(String bankCode); + /** + * 根据题库名称查询题库管理 + * + * @param bankName 题库名称 + * @return 题库管理 + */ + public ExamQuestionsBank selectExamQuestionsBankByName(String bankName); + /** * 查询题库管理列表 * diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsMapper.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsMapper.java index e3c62d8..05fb79e 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsMapper.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/mapper/ExamQuestionsMapper.java @@ -19,6 +19,14 @@ public interface ExamQuestionsMapper */ public ExamQuestions selectExamQuestionsById(String questionsCode); + /** + * 根据题目标题查询考试题目 + * + * @param questionsTitle 题目标题 + * @return 考试题目 + */ + public ExamQuestions selectExamQuestionsByTitle(String questionsTitle); + /** * 查询考试题目列表 * diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsBankService.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsBankService.java index f9ecd04..d07a88f 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsBankService.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsBankService.java @@ -69,4 +69,14 @@ public interface IExamQuestionsBankService * @return 结果 */ public int deleteExamQuestionsBankById(String bankCode); + + /** + * 导入题库数据 + * + * @param examQuestionsBankList 题库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + public String importExamQuestionsBank(List examQuestionsBankList, Boolean isUpdateSupport, String operName); } diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsService.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsService.java index bee21c6..87b6b73 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsService.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/IExamQuestionsService.java @@ -58,4 +58,22 @@ public interface IExamQuestionsService * @return 结果 */ public int deleteExamQuestionsById(String questionsCode); + + /** + * 导入考试题目数据 + * + * @param examQuestionsList 考试题目数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + public String importExamQuestions(List examQuestionsList, Boolean isUpdateSupport, String operName); + + /** + * 根据题目标题查询考试题目 + * + * @param questionsTitle 题目标题 + * @return 考试题目 + */ + public ExamQuestions selectExamQuestionsByTitle(String questionsTitle); } diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsBankServiceImpl.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsBankServiceImpl.java index aa1d8a2..5171913 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsBankServiceImpl.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsBankServiceImpl.java @@ -7,7 +7,10 @@ import java.util.stream.Collectors; import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.hig.utils.UUIDGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hig.questions.mapper.ExamQuestionsBankMapper; @@ -105,5 +108,72 @@ public class ExamQuestionsBankServiceImpl implements IExamQuestionsBankService return examQuestionsBankMapper.selectExamQuestionsBankListByCode(bankCodes); } + /** + * 导入题库数据 + * + * @param examQuestionsBankList 题库数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + public String importExamQuestionsBank(List examQuestionsBankList, Boolean isUpdateSupport, String operName) + { + if (StringUtils.isNull(examQuestionsBankList) || examQuestionsBankList.size() == 0) + { + throw new CustomException("导入题库数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (ExamQuestionsBank examQuestionsBank : examQuestionsBankList) + { + try + { + // 验证是否存在这个题库 + ExamQuestionsBank b = examQuestionsBankMapper.selectExamQuestionsBankByName(examQuestionsBank.getBankName()); + if (StringUtils.isNull(b)) + { + examQuestionsBank.setBankCode(UUIDGenerator.generate()); + examQuestionsBank.setCreateBy(operName); + examQuestionsBank.setCreateTime(DateUtils.getNowDate()); + this.insertExamQuestionsBank(examQuestionsBank); + successNum++; + successMsg.append("
" + successNum + "、题库 " + examQuestionsBank.getBankName() + " 导入成功"); + } + else if (isUpdateSupport) + { + examQuestionsBank.setBankCode(b.getBankCode()); + examQuestionsBank.setUpdateBy(operName); + this.updateExamQuestionsBank(examQuestionsBank); + successNum++; + successMsg.append("
" + successNum + "、题库 " + examQuestionsBank.getBankName() + " 更新成功"); + } + else + { + failureNum++; + failureMsg.append("
" + failureNum + "、题库 " + examQuestionsBank.getBankName() + " 已存在"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "、题库 " + examQuestionsBank.getBankName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new CustomException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + } diff --git a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsServiceImpl.java b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsServiceImpl.java index b17d3b8..23b6660 100644 --- a/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsServiceImpl.java +++ b/exam-online-api/hig-application/src/main/java/com/hig/questions/service/impl/ExamQuestionsServiceImpl.java @@ -1,7 +1,18 @@ package com.hig.questions.service.impl; import java.util.List; +import java.util.UUID; + +import com.hig.questions.domain.ExamQuestionsAnswer; +import com.hig.questions.domain.ExamQuestionsContent; +import com.hig.questions.domain.ExamQuestionsProperty; +import com.hig.questions.mapper.ExamQuestionsAnswerMapper; +import com.hig.questions.mapper.ExamQuestionsContentMapper; +import com.hig.questions.mapper.ExamQuestionsPropertyMapper; +import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.hig.utils.UUIDGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hig.questions.mapper.ExamQuestionsMapper; @@ -20,6 +31,14 @@ public class ExamQuestionsServiceImpl implements IExamQuestionsService @Autowired private ExamQuestionsMapper examQuestionsMapper; + @Autowired + private ExamQuestionsPropertyMapper examQuestionsPropertyMapper; + + @Autowired + private ExamQuestionsContentMapper examQuestionsContentMapper; + + @Autowired + private ExamQuestionsAnswerMapper examQuestionsAnswerMapper; /** * 查询考试题目 * @@ -92,4 +111,99 @@ public class ExamQuestionsServiceImpl implements IExamQuestionsService { return examQuestionsMapper.deleteExamQuestionsById(questionsCode); } + + /** + * 根据题目标题查询考试题目 + * + * @param questionsTitle 题目标题 + * @return 考试题目 + */ + @Override + public ExamQuestions selectExamQuestionsByTitle(String questionsTitle) + { + return examQuestionsMapper.selectExamQuestionsByTitle(questionsTitle); + } + + /** + * 导入考试题目数据 + * + * @param examQuestionsList 考试题目数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + public String importExamQuestions(List examQuestionsList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(examQuestionsList) || examQuestionsList.size() == 0) { + throw new CustomException("导入考试题目数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (ExamQuestions examQuestions : examQuestionsList) { + + try { + ExamQuestionsProperty examProperty = new ExamQuestionsProperty(); + examProperty.setBankCode(examQuestions.getBankCode()); + examProperty.setQuestionsCode(examQuestions.getQuestionsCode()); + examProperty.setQuestionsTitle(examQuestions.getQuestionsTitle()); + examProperty.setQuestionsScore(examQuestions.getQuestionsScore()); + examProperty.setQuestionsType(examQuestions.getQuestionsType()); + examProperty.setRateNumber(examQuestions.getRateNumber()); + examProperty.setAnswerAnalyse(examQuestions.getAnswerAnalyse()); + examProperty.setRightAnswer(examQuestions.getRightAnswer()); + examProperty.setStatus(0); + examProperty.setCreateTime(DateUtils.getNowDate()); + examProperty.setCreateBy(examQuestions.getCreateBy()); + examQuestionsPropertyMapper.insertExamQuestionsProperty(examProperty); + ExamQuestionsContent examContent = new ExamQuestionsContent( + examQuestions.getQuestionsCode(), examQuestions.getQuestionsContent() + ); + examQuestionsContentMapper.insertExamQuestionsContent(examContent); + + ExamQuestionsAnswer answer = new ExamQuestionsAnswer(); + answer.setQuestionsCode(examQuestions.getQuestionsCode()); + int idx = -1; + String opt = "ABCDEFGHIJKLMN"; + + String code = ""; + String rightAnswer = examQuestions.getRightAnswer(); + if (StringUtils.isEmpty(rightAnswer)) { + rightAnswer = ""; + } + String[] tmps = new String[]{ + examQuestions.getAnswerA(), + examQuestions.getAnswerB(), + examQuestions.getAnswerC(), + examQuestions.getAnswerD(), + examQuestions.getAnswerE(), + examQuestions.getAnswerF(), + examQuestions.getAnswerG(), + examQuestions.getAnswerH() + }; + for (String tmp : tmps) { + if (StringUtils.isNotEmpty(tmp)) { + idx++; + code = "" + opt.charAt(idx); + answer.setOptionCode(code); + answer.setOptionDescribe(tmp); + answer.setIsRight(rightAnswer.contains(code) ? 0 : 1); + examQuestionsAnswerMapper.insertExamQuestionsAnswer(answer); + } + } + successNum++; + }catch (Exception e){ + failureNum++; + } + + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new CustomException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } } diff --git a/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsBankMapper.xml b/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsBankMapper.xml index 83a47c7..f0d36d0 100644 --- a/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsBankMapper.xml +++ b/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsBankMapper.xml @@ -64,6 +64,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where a.bank_code = #{bankCode} + + insert into exam_questions_bank diff --git a/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsMapper.xml b/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsMapper.xml index 6ca7514..28e6e45 100644 --- a/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsMapper.xml +++ b/exam-online-api/hig-application/src/main/resources/mapper/questions/ExamQuestionsMapper.xml @@ -37,6 +37,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where questions_code = #{questionsCode} + + insert into exam_questions diff --git a/exam-online-api/hig-common/pom.xml b/exam-online-api/hig-common/pom.xml index 2acaf2f..8986a36 100644 --- a/exam-online-api/hig-common/pom.xml +++ b/exam-online-api/hig-common/pom.xml @@ -19,7 +19,7 @@ 4.4.16 1.15 1.2 - 2.11.0 + 2.15.1 3.12.0 @@ -121,9 +121,5 @@ commons-lang3 ${commons-lang3.version} - - com.google.code.gson - gson - \ No newline at end of file diff --git a/exam-online-api/pom.xml b/exam-online-api/pom.xml index f1c4472..1b18405 100644 --- a/exam-online-api/pom.xml +++ b/exam-online-api/pom.xml @@ -28,7 +28,7 @@ 1.2.83 6.4.6 5.13.0 - 2.11.0 + 2.15.1 1.5 3.2.2 5.2.4 @@ -161,8 +161,8 @@ - mysql - mysql-connector-java + com.mysql + mysql-connector-j ${mysql.version} diff --git a/exam-online-api/ruoyi-admin/pom.xml b/exam-online-api/ruoyi-admin/pom.xml index 340d0e1..2ce124e 100644 --- a/exam-online-api/ruoyi-admin/pom.xml +++ b/exam-online-api/ruoyi-admin/pom.xml @@ -39,8 +39,8 @@ - mysql - mysql-connector-java + com.mysql + mysql-connector-j diff --git a/exam-online-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/exam-online-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 1ecd062..d577122 100644 --- a/exam-online-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/exam-online-api/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/exam_online_ui/public/data/questions.xlsx b/exam_online_ui/public/data/questions.xlsx new file mode 100644 index 0000000..e5c05a0 Binary files /dev/null and b/exam_online_ui/public/data/questions.xlsx differ diff --git a/exam_online_ui/src/api/questions/examquestions.js b/exam_online_ui/src/api/questions/examquestions.js index 83f9003..2999f12 100644 --- a/exam_online_ui/src/api/questions/examquestions.js +++ b/exam_online_ui/src/api/questions/examquestions.js @@ -50,4 +50,12 @@ export function exportExamquestions(query) { method: 'get', params: query }) +} + +// 下载考试题目导入模板 +export function importTemplate() { + return request({ + url: '/questions/examquestions/importTemplate', + method: 'get' + }) } \ No newline at end of file diff --git a/exam_online_ui/src/assets/styles/element-variables.scss b/exam_online_ui/src/assets/styles/element-variables.scss index 8b7a48e..47ec06f 100644 --- a/exam_online_ui/src/assets/styles/element-variables.scss +++ b/exam_online_ui/src/assets/styles/element-variables.scss @@ -19,6 +19,11 @@ $--border-color-lighter: #e6ebf5; $--table-border:1px solid#dfe6ec; +/* 添加缺失的变量定义 */ +$fontColorWeight: 80% !default; +$--color-white: #ffffff !default; +$--tag-success-color: $--color-success !default; + /* icon font path, required */ $--font-path: '~element-ui/lib/theme-chalk/fonts'; diff --git a/exam_online_ui/src/views/questions/examquestions/questionsList.vue b/exam_online_ui/src/views/questions/examquestions/questionsList.vue index 047d8a9..5879b4d 100644 --- a/exam_online_ui/src/views/questions/examquestions/questionsList.vue +++ b/exam_online_ui/src/views/questions/examquestions/questionsList.vue @@ -32,6 +32,10 @@ 删除 + + 导入 + 导出 @@ -62,20 +66,45 @@ - +
+ + + + + +
+ 将文件拖到此处,或 + 点击上传 +
+ +
+ 提示:仅允许导入"xls"或"xlsx"格式文件! + 下载模板 + +
+
+ +