diff --git a/src/main/java/com/ccsens/braintraining/bean/dto/QuestionDto.java b/src/main/java/com/ccsens/braintraining/bean/dto/QuestionDto.java new file mode 100644 index 0000000..12de9b0 --- /dev/null +++ b/src/main/java/com/ccsens/braintraining/bean/dto/QuestionDto.java @@ -0,0 +1,30 @@ +package com.ccsens.braintraining.bean.dto; + +import lombok.Data; + +/** + * @author 逗 + */ +@Data +public class QuestionDto { + + @Data + public static class ExcelQuestionInfo{ + //训练code + private String code; + //题目序号 + private String sort; + //类型 题目还是选项 + private String type; + //题干或选项的序号 + private String questionSort; + //题干或选项的内容类型 0:文字 1:图片 2:语音 + private String questionType; + //题干或选项的内容 + private String content; + //是否是正确的选项 0否 1是 + private String correct; + //难度 + private String grade; + } +} diff --git a/src/main/java/com/ccsens/braintraining/service/ImportService.java b/src/main/java/com/ccsens/braintraining/service/ImportService.java index 7e5c479..14b66d3 100644 --- a/src/main/java/com/ccsens/braintraining/service/ImportService.java +++ b/src/main/java/com/ccsens/braintraining/service/ImportService.java @@ -1,15 +1,43 @@ package com.ccsens.braintraining.service; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.ccsens.braintraining.bean.dto.QuestionDto; +import com.ccsens.braintraining.bean.po.*; +import com.ccsens.braintraining.persist.mapper.*; import com.ccsens.braintraining.util.BrainTrainingConstant; import com.ccsens.util.PoiUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; import java.io.File; +import java.util.ArrayList; import java.util.List; /** * @author 逗 */ +@Slf4j +@Service +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class ImportService implements IImportService { + @Resource + private TrainClassifyMapper trainClassifyMapper; + @Resource + private Snowflake snowflake; + @Resource + private TrainQuestionMapper trainQuestionMapper; + @Resource + private TrainQuestionOptionMapper questionOptionMapper; + @Resource + private TrainQuestionContentMapper questionContentMapper; + @Resource + private TrainQuestionAnswerMapper questionAnswerMapper; @Override public void importQuestion(File excelFile) throws Exception { @@ -21,7 +49,171 @@ public class ImportService implements IImportService { } private void saveQuestions(List questions, String sheetName) { - System.out.println(questions); - System.out.println(sheetName); + List questionInfos = initData(questions); + Long classifyId = null; + Long questionId = null; + for (QuestionDto.ExcelQuestionInfo questionInfo : questionInfos) { + //根据code查找训练计划 + if(StrUtil.isNotBlank(questionInfo.getCode())){ + classifyId = getClassifyIdByCode(questionInfo.getCode()); + } + //1. 添加题目 + if(ObjectUtil.isNotNull(classifyId) && StrUtil.isNotBlank(questionInfo.getSort())){ + questionId = saveQuestion(classifyId, questionInfo); + } + //2. 给题目添加题干 + if(ObjectUtil.isNotNull(questionInfo.getType()) + && questionInfo.getType().equals(BrainTrainingConstant.QUESTION_CONTENT) + && StrUtil.isNotBlank(questionInfo.getContent())){ + saveQuestionContent(questionId, questionInfo); + } + //3. 给题目添加选项 + String optionId = null; + if(ObjectUtil.isNotNull(questionInfo.getType()) + && questionInfo.getType().equals(BrainTrainingConstant.QUESTION_OPTION) + && StrUtil.isNotBlank(questionInfo.getContent())){ + optionId = saveOption(questionId, questionInfo); + } + //4. 根据选项是否正确添加答案信息,答案关联选项id + if(StrUtil.isNotBlank(questionInfo.getCorrect()) && "1".equals(questionInfo.getCorrect())){ + saveAnswer(questionId, optionId, (byte)0); + } + } +// switch (sheetName){ +// case "DSHY": +// saveQuestionAll(questionInfos); +// break; +// case "JTPX": +// saveQuestionAll(questionInfos); +// break; +// case "CXNL": +// saveQuestionAll(questionInfos); +// break; +// case "ZSYS": +// case "SJGN": +// case "KJDW": +// case "SZZC": +// case "LXJF": +// default: +// +// } + } +// +// private void saveQuestionAll(List questionInfos) { +// Long classifyId = null; +// Long questionId = null; +// for (QuestionDto.ExcelQuestionInfo questionInfo : questionInfos) { +// //根据code查找训练计划 +// if(StrUtil.isNotBlank(questionInfo.getCode())){ +// classifyId = getClassifyIdByCode(questionInfo.getCode()); +// } +// //1. 添加题目 +// if(ObjectUtil.isNotNull(classifyId) && StrUtil.isNotBlank(questionInfo.getSort())){ +// questionId = saveQuestion(classifyId, questionInfo); +// } +// //2. 给题目添加题干 +// if(ObjectUtil.isNotNull(questionInfo.getType()) +// && questionInfo.getType().equals(BrainTrainingConstant.QUESTION_CONTENT) +// && StrUtil.isNotBlank(questionInfo.getContent())){ +// saveQuestionContent(questionId, questionInfo); +// } +// //3. 给题目添加选项 +// String optionId = null; +// if(ObjectUtil.isNotNull(questionInfo.getType()) +// && questionInfo.getType().equals(BrainTrainingConstant.QUESTION_OPTION) +// && StrUtil.isNotBlank(questionInfo.getContent())){ +// optionId = saveOption(questionId, questionInfo); +// } +// //4. 根据选项是否正确添加答案信息,答案关联选项id +// if(StrUtil.isNotBlank(questionInfo.getCorrect()) && "1".equals(questionInfo.getCorrect())){ +// saveAnswer(questionId, optionId, (byte)0); +// } +// } +// } + + private void saveAnswer(Long questionId, String optionId, byte optionType) { + TrainQuestionAnswer trainQuestionAnswer = new TrainQuestionAnswer(); + trainQuestionAnswer.setId(snowflake.nextId()); + trainQuestionAnswer.setQuestionId(questionId); + trainQuestionAnswer.setContent(optionId); + trainQuestionAnswer.setOptionType(optionType); + questionAnswerMapper.insertSelective(trainQuestionAnswer); + } + + private String saveOption(Long questionId, QuestionDto.ExcelQuestionInfo questionInfo) { + String optionId; + TrainQuestionOption questionOption = new TrainQuestionOption(); + questionOption.setId(snowflake.nextId()); + questionOption.setQuestionId(questionId); + questionOption.setContent(questionInfo.getContent()); + questionOption.setShowType(Byte.parseByte(questionInfo.getQuestionType())); + questionOption.setSort(Integer.parseInt(questionInfo.getQuestionSort())); + questionOptionMapper.insertSelective(questionOption); + optionId = questionOption.getId().toString(); + return optionId; + } + + private void saveQuestionContent(Long questionId, QuestionDto.ExcelQuestionInfo questionInfo) { + TrainQuestionContent questionContent = new TrainQuestionContent(); + questionContent.setId(snowflake.nextId()); + questionContent.setQuestionId(questionId); + questionContent.setContent(questionInfo.getContent()); + questionContent.setShowType(Byte.parseByte(questionInfo.getQuestionType())); + questionContent.setSort(Integer.parseInt(questionInfo.getQuestionSort())); + questionContentMapper.insertSelective(questionContent); + } + + private Long saveQuestion(Long classifyId2, QuestionDto.ExcelQuestionInfo questionInfo) { + Long questionId2; + TrainQuestion trainQuestion = new TrainQuestion(); + trainQuestion.setId(snowflake.nextId()); + trainQuestion.setClassifyId(classifyId2); + trainQuestion.setSort(Integer.parseInt(questionInfo.getSort())); + trainQuestion.setGrade(StrUtil.isBlank(questionInfo.getGrade()) ? null : Byte.parseByte(questionInfo.getGrade())); + trainQuestionMapper.insertSelective(trainQuestion); + questionId2 = trainQuestion.getId(); + return questionId2; + } + + /** + * 个根据code获取训练类型信息 + * @param code code + * @return 训练类型id + */ + private Long getClassifyIdByCode(String code) { + //根据code查找训练计划 + Long classifyId = null; + TrainClassifyExample classifyExample = new TrainClassifyExample(); + classifyExample.createCriteria().andCodeEqualTo(code); + List trainClassifies = trainClassifyMapper.selectByExample(classifyExample); + if(CollectionUtil.isNotEmpty(trainClassifies)){ + classifyId = trainClassifies.get(0).getId(); + } + return classifyId; + } + + /** + * 将excel内的数据转换成对象 + * @param questions object数组 + * @return 返回题目信息 + */ + private List initData(List questions) { + List questionInfos = new ArrayList<>(); + for (Object[] obj : questions) { + if(obj.length < 8){ + continue; + } + QuestionDto.ExcelQuestionInfo questionInfo = new QuestionDto.ExcelQuestionInfo(); + questionInfo.setCode(obj[0] == null ? null : (String) obj[0]); + questionInfo.setSort(obj[1] == null ? null : (String) obj[1]); + questionInfo.setType(obj[2] == null ? null : (String) obj[2]); + questionInfo.setQuestionSort(obj[3] == null ? null : (String) obj[3]); + questionInfo.setQuestionType(obj[4] == null ? null : (String) obj[4]); + questionInfo.setContent(obj[5] == null ? null : (String) obj[5]); + questionInfo.setCorrect(obj[6] == null ? null : (String) obj[6]); + questionInfo.setGrade(obj[7] == null ? null : (String) obj[7]); + questionInfos.add(questionInfo); + } + return questionInfos; } } diff --git a/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java b/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java index 4f5f017..f3212d1 100644 --- a/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java +++ b/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java @@ -118,5 +118,9 @@ public class BrainTrainingConstant extends WebConstant { QUESTION_TYPE.add("SZZC"); QUESTION_TYPE.add("LXJF"); } + /**题干*/ + public final static String QUESTION_CONTENT = "题干"; + /**选项*/ + public final static String QUESTION_OPTION = "选项"; }