diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java index 20f86a57c..0c429414d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -17,7 +17,9 @@ public @interface Excel /** * 导出到Excel中的名字. */ - public String name(); + public String name() default ""; + + public int order() default 0; /** * 日期格式, 如: yyyy-MM-dd @@ -63,4 +65,7 @@ public @interface Excel * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. */ public boolean isExport() default true; + + + } \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java index 20dfee65d..7bda6eae3 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExcelUtil.java @@ -112,16 +112,20 @@ public class ExcelUtil { // 设置类的私有字段属性可访问. field.setAccessible(true); - fieldsMap.put(++serialNum, field); + Excel annotation = field.getAnnotation(Excel.class); + fieldsMap.put(annotation.order(), field); + if(annotation.order()>serialNum){ + serialNum=annotation.order(); + } } } - for (int i = 1; i < rows; i++) + for (int i = 2; i < rows; i++) { // 从第2行开始取数据,默认第一行是表头. Row row = sheet.getRow(i); int cellNum = serialNum; T entity = null; - for (int j = 0; j < cellNum; j++) + for (int j = 0; j < serialNum; j++) { Cell cell = row.getCell(j); if (cell == null) @@ -145,6 +149,9 @@ public class ExcelUtil entity = (entity == null ? clazz.newInstance() : entity); // 从map中得到对应列的field. Field field = fieldsMap.get(j + 1); + if(field==null){ + continue; + } // 取得类型,并根据对象类型设置值. Class fieldType = field.getType(); if (String.class == fieldType) diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ExamQuestionController.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ExamQuestionController.java index 4a8257440..db7b5d52e 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ExamQuestionController.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/controller/ExamQuestionController.java @@ -1,15 +1,20 @@ package com.ruoyi.exam.controller; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.Enumeration; import java.util.List; import cn.hutool.json.JSONArray; import com.ruoyi.common.json.JSONObject; import com.ruoyi.exam.domain.ExamQuestionCategory; +import com.ruoyi.exam.domain.ExamQuestionFile; import com.ruoyi.exam.domain.ExamQuestionItem; import com.ruoyi.exam.service.IExamQuestionCategoryService; import com.ruoyi.exam.service.IExamQuestionItemService; +import com.ruoyi.framework.web.util.ShiroUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -23,6 +28,7 @@ import com.ruoyi.framework.web.base.BaseController; import com.ruoyi.framework.web.page.TableDataInfo; import com.ruoyi.common.base.AjaxResult; import com.ruoyi.common.utils.ExcelUtil; +import org.springframework.web.multipart.MultipartFile; /** @@ -97,14 +103,16 @@ public class ExamQuestionController extends BaseController * @return */ private List getListByIds(List list,ExamQuestion examQuestion){ - list.addAll(examQuestionService.selectExamQuestionList(examQuestion)); + list.addAll(examQuestionService.selectQuestionList(examQuestion)); String categoryId = examQuestion.getCategoryId(); - ExamQuestionCategory examQuestionCategory = new ExamQuestionCategory(); - examQuestionCategory.setParentId(Long.parseLong(categoryId)); - List examQuestionCategories = examQuestionCategoryService.selectList(examQuestionCategory); - for (ExamQuestionCategory questionCategory : examQuestionCategories) { - examQuestion.setCategoryId(questionCategory.getId().toString()); - getListByIds(list,examQuestion); + if (categoryId != null) { + ExamQuestionCategory examQuestionCategory = new ExamQuestionCategory(); + examQuestionCategory.setParentId(Long.parseLong(categoryId)); + List examQuestionCategories = examQuestionCategoryService.selectList(examQuestionCategory); + for (ExamQuestionCategory questionCategory : examQuestionCategories) { + examQuestion.setCategoryId(questionCategory.getId().toString()); + getListByIds(list,examQuestion); + } } return list; } @@ -207,5 +215,107 @@ public class ExamQuestionController extends BaseController examQuestionItemService.deleteByQuestionIds(ids); return toAjax(examQuestionService.deleteExamQuestionByIds(ids)); } + + + @RequiresPermissions("exam:examQuestion:edit") + @Log(title = "问题", businessType = BusinessType.DELETE) + @PostMapping( "/importfile") + @ResponseBody + public AjaxResult importfile(@RequestParam("file") MultipartFile file, @RequestParam("categoryId")String id) throws Exception { + + InputStream inputStream = file.getInputStream(); + + ExcelUtil util = new ExcelUtil(ExamQuestionFile.class); + List examQuestions = util.importExcel(inputStream); + + for (ExamQuestionFile item : examQuestions) { + ExamQuestion insert = new ExamQuestion(); + insert.setCategoryId(id); + insert.setCreateBy(ShiroUtils.getLoginName()); + insert.setAnswer(item.getAnswer()); + insert.setCreateDate(new Date()); + insert.setDelFlag("0"); + insert.setTitle(item.getName()); + String type = "1"; + + if (item.getItemA().equals("正确")||item.getItemA().equals("错误")) { + type ="3"; + }else if(item.getAnswer().split(",").length>1){ + type="2"; + } + insert.setType(type); + insert.setAnswer(item.getAnswer()); + examQuestionService.insertExamQuestion(insert); + if(item.getItemA()!=null&&!item.getItemA().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("A"); + examQuestionItem.setContent(item.getItemA()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + } + if(item.getItemB()!=null&&!item.getItemB().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("B"); + examQuestionItem.setContent(item.getItemB()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + + } + if(item.getItemC()!=null&&!item.getItemC().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("C"); + examQuestionItem.setContent(item.getItemC()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + } + if(item.getItemD()!=null&&!item.getItemD().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("D"); + examQuestionItem.setContent(item.getItemD()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + } + if(item.getItemE()!=null&&!item.getItemE().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("E"); + examQuestionItem.setContent(item.getItemE()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + } + if(item.getItemF()!=null&&!item.getItemF().trim().equals("")){ + ExamQuestionItem examQuestionItem = new ExamQuestionItem(); + examQuestionItem.setExamQuestionId(insert.getId()); + examQuestionItem.setNumber("F"); + examQuestionItem.setContent(item.getItemF()); + examQuestionItem.setCreateBy(ShiroUtils.getLoginName()); + examQuestionItem.setCreateDate(new Date()); + examQuestionItem.setDelFlag("0"); + examQuestionItemService.insert(examQuestionItem); + + } + + } + return success("导入成功"); + } } diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestion.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestion.java index a41a6a7ba..7ab871d32 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestion.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestion.java @@ -1,5 +1,6 @@ package com.ruoyi.exam.domain; +import com.ruoyi.common.annotation.Excel; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.base.BaseEntity; @@ -20,10 +21,10 @@ public class ExamQuestion @Id private String id; /** 问题标题 */ - + private String title; /** 问题答案 */ - + private String answer; /** 问题类型 */ diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestionFile.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestionFile.java new file mode 100644 index 000000000..760ebefba --- /dev/null +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/domain/ExamQuestionFile.java @@ -0,0 +1,90 @@ +package com.ruoyi.exam.domain; + +import com.ruoyi.common.annotation.Excel; + +/** + * Created by flower on 2019/1/1. + */ +public class ExamQuestionFile { + + @Excel(order = 1) + private String name; + @Excel(order = 10) + private String answer; + @Excel(order = 4) + private String itemA; + @Excel(order = 5) + private String itemB; + @Excel(order = 6) + private String itemC; + @Excel(order = 7) + private String itemD; + @Excel(order = 8) + private String itemE; + @Excel(order = 9) + private String itemF; + + public String getItemA() { + return itemA; + } + + public void setItemA(String itemA) { + this.itemA = itemA; + } + + public String getItemB() { + return itemB; + } + + public void setItemB(String itemB) { + this.itemB = itemB; + } + + public String getItemC() { + return itemC; + } + + public void setItemC(String itemC) { + this.itemC = itemC; + } + + public String getItemD() { + return itemD; + } + + public void setItemD(String itemD) { + this.itemD = itemD; + } + + public String getItemE() { + return itemE; + } + + public void setItemE(String itemE) { + this.itemE = itemE; + } + + public String getItemF() { + return itemF; + } + + public void setItemF(String itemF) { + this.itemF = itemF; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAnswer() { + return answer; + } + + public void setAnswer(String answer) { + this.answer = answer; + } +} diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamQuestionService.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamQuestionService.java index bc58175a9..9f439e161 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamQuestionService.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/IExamQuestionService.java @@ -1,6 +1,8 @@ package com.ruoyi.exam.service; import com.ruoyi.exam.domain.ExamQuestion; + +import java.util.Collection; import java.util.List; import com.ruoyi.framework.web.base.AbstractBaseService; /** @@ -56,4 +58,6 @@ public interface IExamQuestionService extends AbstractBaseService int updateQuestion(ExamQuestion examQuestion, String[] number, String[] content); List selectByIds(List ids); + + List selectQuestionList(ExamQuestion examQuestion); } diff --git a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java index 3bd4ff96a..ec287b51f 100644 --- a/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java +++ b/ruoyi-exam/src/main/java/com/ruoyi/exam/service/impl/ExamQuestionServiceImpl.java @@ -150,4 +150,9 @@ public class ExamQuestionServiceImpl extends AbstractBaseServiceImpl selectQuestionList(ExamQuestion examQuestion) { + return examQuestionMapper.selectExamQuestionList(examQuestion); + } + } diff --git a/ruoyi-exam/src/main/resources/mapper/exam/ExamQuestionMapper.xml b/ruoyi-exam/src/main/resources/mapper/exam/ExamQuestionMapper.xml index a84bc6889..b22b1b326 100644 --- a/ruoyi-exam/src/main/resources/mapper/exam/ExamQuestionMapper.xml +++ b/ruoyi-exam/src/main/resources/mapper/exam/ExamQuestionMapper.xml @@ -46,7 +46,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - + insert into exam_question id, diff --git a/ruoyi-exam/src/main/resources/templates/exam/examQuestion/examQuestion.html b/ruoyi-exam/src/main/resources/templates/exam/examQuestion/examQuestion.html index b80e707b4..2a3abebd2 100644 --- a/ruoyi-exam/src/main/resources/templates/exam/examQuestion/examQuestion.html +++ b/ruoyi-exam/src/main/resources/templates/exam/examQuestion/examQuestion.html @@ -46,7 +46,8 @@
  • 问题类型:
  • @@ -61,6 +62,9 @@ + + +
    @@ -114,8 +136,8 @@ showExport: true, columns: [{ checkbox: true - },{ - field:"id", + }, { + field: "id", title: '#', visible: false }, @@ -128,7 +150,7 @@ field: 'type', title: '问题类型', sortable: true, - formatter: function(value, item, index) { + formatter: function (value, item, index) { debugger return $.table.selectDictLabel(type, item.type); } @@ -196,40 +218,73 @@ createMenuItem(url, "题库管理"); } - function addChoiceQuestion(){ - if(!$.tree.notAllowParents($._tree)){ - return ; + function addChoiceQuestion() { + if (!$.tree.notAllowParents($._tree)) { + return; } - if($("#categoryId").val()==1){ + if ($("#categoryId").val() == 1) { $.modal.alertWarning("请选择试题分类"); return; } - var url = prefix + "/choiceadd/"+$("#categoryId").val(); - $.operate.jumpModeltoUrl("添加单选题",url); + var url = prefix + "/choiceadd/" + $("#categoryId").val(); + $.operate.jumpModeltoUrl("添加单选题", url); } - function addMoreChoiceQuestion(){ - if(!$.tree.notAllowParents($._tree)){ - return ; + function addMoreChoiceQuestion() { + if (!$.tree.notAllowParents($._tree)) { + return; } - if($("#categoryId").val()==1){ + if ($("#categoryId").val() == 1) { $.modal.alertWarning("请选择试题分类"); return; } - var url = prefix + "/morechoiceadd/"+$("#categoryId").val(); - $.operate.jumpModeltoUrl("添加多选题",url); + var url = prefix + "/morechoiceadd/" + $("#categoryId").val(); + $.operate.jumpModeltoUrl("添加多选题", url); } - function addJudgeQuestion(){ - if(!$.tree.notAllowParents($._tree)){ - return ; + function addJudgeQuestion() { + if (!$.tree.notAllowParents($._tree)) { + return; } - if($("#categoryId").val()==1){ + if ($("#categoryId").val() == 1) { $.modal.alertWarning("请选择试题分类"); return; } - var url = prefix + "/judgeadd/"+$("#categoryId").val(); - $.operate.jumpModeltoUrl("添加多选题",url); + var url = prefix + "/judgeadd/" + $("#categoryId").val(); + $.operate.jumpModeltoUrl("添加多选题", url); + } + + function importFile() { + if (!$.tree.notAllowParents($._tree)) { + return; + } + if ($("#categoryId").val() == 1) { + $.modal.alertWarning("请选择试题分类"); + return; + } + + + var formData = new FormData(); + formData.append("file", document.getElementById("questionFile").files[0]); + formData.append("categoryId", $("#categoryId").val()); + $.ajax({ + type: 'post', + url: prefix + "/importfile", + dataType: 'json', + data: formData, + contentType: false, + processData: false, + success: function (data) { + if (data.code == web_status.SUCCESS) { + $.modal.msgSuccess(data.msg); + $('#myModal').modal('hide') + $.table.search(); + }else{ + $.modal.msgError(result.msg); + } + } + }); + }