package com.mindskip.xzs.service.impl; import cn.hutool.core.lang.Dict; import com.mindskip.xzs.domain.*; import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.domain.enums.RoleEnum; import com.mindskip.xzs.domain.enums.UserStatusEnum; import com.mindskip.xzs.domain.other.QuestionImportCellIndex; import com.mindskip.xzs.repository.ClassesMapper; import com.mindskip.xzs.repository.ClassesUserMapper; import com.mindskip.xzs.service.*; import com.mindskip.xzs.utility.ExamUtil; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditItemVM; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.xssf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.io.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @Service @AllArgsConstructor public class ExcelImportImportServiceImpl implements ExcelImportService { private final ClassesService classesService; private final QuestionService questionService; private final SubjectService subjectService; private final UserService userService; private final KnowledgeService knowledgeService; private final AuthenticationService authenticationService; private final ClassesMapper classesMapper; private final ClassesUserMapper classesUserMapper; private final DepartmentService departmentService; private static final Logger logger = LoggerFactory.getLogger(ExcelImportImportServiceImpl.class); @Override public void teacherQuestionImport(InputStream inputStream, String outFilePath, User user) { try { XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setWrapText(true); singleChoice(workbook.getSheetAt(0), cellStyle, user, new QuestionImportCellIndex(null, 0, 1, 16, 2, 11, 12, 13, 14, 3, 11, 15)); multipleChoice(workbook.getSheetAt(1), cellStyle, user, new QuestionImportCellIndex(null, 0, 1, 16, 2, 11, 12, 13, 14, 3, 11, 15)); trueFalse(workbook.getSheetAt(2), cellStyle, user, new QuestionImportCellIndex(null, 0, 1, 10, 2, 5, 6, 7, 8, 3, 4, 9)); gapFilling(workbook.getSheetAt(3), cellStyle, user, new QuestionImportCellIndex(null, 0, 1, 15, 2, 11, 12, 13, null, 2, null, 14)); shortAnswer(workbook.getSheetAt(4), cellStyle, user, new QuestionImportCellIndex(null, 0, 1, 8, 2, 4, 5, 6, 3, null, null, 7)); try (FileOutputStream excelOutStream = new FileOutputStream(outFilePath)) { workbook.write(excelOutStream); } } catch (IOException e) { logger.error(e.getMessage(), e); } } @Override public void adminQuestionImport(InputStream inputStream, String outFilePath, User user) { try { XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setWrapText(true); singleChoice(workbook.getSheetAt(0), cellStyle, user, new QuestionImportCellIndex(0, 1, 2, 17, 3, 12, 13, 14, 15, 4, 12, 16)); multipleChoice(workbook.getSheetAt(1), cellStyle, user, new QuestionImportCellIndex(0, 1, 2, 17, 3, 12, 13, 14, 15, 4, 12, 16)); trueFalse(workbook.getSheetAt(2), cellStyle, user, new QuestionImportCellIndex(0, 1, 2, 11, 3, 6, 7, 8, 9, 4, 5, 10)); gapFilling(workbook.getSheetAt(3), cellStyle, user, new QuestionImportCellIndex(0, 1, 2, 16, 3, 12, 13, 14, null, 3, null, 15)); shortAnswer(workbook.getSheetAt(4), cellStyle, user, new QuestionImportCellIndex(0, 1, 2, 9, 3, 5, 6, 7, 4, null, null, 8)); try (FileOutputStream excelOutStream = new FileOutputStream(outFilePath)) { workbook.write(excelOutStream); } } catch (IOException e) { logger.error(e.getMessage(), e); } } @Override public void studentImport(InputStream inputStream, String outFilePath, User user) { try { Date now = new Date(); List classesList = classesService.getClassesByCreate(user.getId()); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); XSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setWrapText(true); XSSFSheet sheet = workbook.getSheetAt(0); if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = 4; for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(5)) { //已经导入过 continue; } String userName = stringCheck(row, cellStyle, 0, errorIndex, "用户名不能为空"); if (null == userName) { continue; } String passWord = stringCheck(row, cellStyle, 1, errorIndex, "密码不能为空"); if (null == passWord) { continue; } String realName = stringCheck(row, cellStyle, 2, errorIndex, "真实姓名不能为空"); if (null == realName) { continue; } String classes = stringCheck(row, cellStyle, 3, errorIndex, "班级不能为空"); if (null == classes) { continue; } User existUser = userService.getUserByUserName(userName); if (null != existUser) { writeError(row, cellStyle, errorIndex, "用户名已存在"); continue; } User newUser = new User(); newUser.setUserName(userName); newUser.setRealName(realName); String encodePwd = authenticationService.pwdEncode(passWord); newUser.setUserUuid(UUID.randomUUID().toString()); newUser.setPassword(encodePwd); newUser.setRole(RoleEnum.STUDENT.getCode()); newUser.setUserLevel(user.getUserLevel()); newUser.setStatus(UserStatusEnum.Enable.getCode()); newUser.setLastActiveTime(now); newUser.setCreateTime(now); newUser.setDeleted(false); userService.insertByFilter(newUser); row.createCell(5).setCellValue(newUser.getId()); for (String classItem : classes.split(" ")) { if (!StringUtils.isBlank(classItem)) { classesList.stream().filter(c -> c.getName().equals(classItem)).findFirst().ifPresent(d -> { ClassesUser newClassesUser = new ClassesUser(); newClassesUser.setClassesId(d.getId()); newClassesUser.setUserId(newUser.getId()); newClassesUser.setDeleted(false); newClassesUser.setCreateTime(now); newClassesUser.setClassesName(d.getName()); classesUserMapper.insertSelective(newClassesUser); classesMapper.classesNumAdd(d.getId()); }); } } } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } try (FileOutputStream excelOutStream = new FileOutputStream(outFilePath)) { workbook.write(excelOutStream); } } catch (IOException e) { logger.error(e.getMessage(), e); } } private void singleChoice(XSSFSheet sheet, XSSFCellStyle cellStyle, User user, QuestionImportCellIndex questionImportCellIndex) { if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = questionImportCellIndex.getError(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(questionImportCellIndex.getId())) { //已经导入过 continue; } Integer level = user.getUserLevel(); if (null != questionImportCellIndex.getLevel()) { level = levelCheck(row, cellStyle, questionImportCellIndex.getLevel(), errorIndex); if (null == level) { continue; } } List subjects = subjectService.getSubjectByLevel(level); Subject subject = subjectCheck(row, cellStyle, questionImportCellIndex.getSubject(), subjects, errorIndex); if (null == subject) { continue; } String title = stringCheck(row, cellStyle, questionImportCellIndex.getTitle(), errorIndex, "题干不能为空"); if (null == title) { continue; } String analyze = stringCheck(row, cellStyle, questionImportCellIndex.getAnalyze(), errorIndex, "解析不能为空"); if (null == analyze) { continue; } String score = stringCheck(row, cellStyle, questionImportCellIndex.getScore(), errorIndex, "分数不能为空"); if (null == score) { continue; } String difficult = stringCheck(row, cellStyle, questionImportCellIndex.getDifficult(), errorIndex, "难度不能为空"); if (null == difficult) { continue; } String correct = stringCheck(row, cellStyle, questionImportCellIndex.getCorrect(), errorIndex, "答案不能为空"); if (null == correct) { continue; } List knowledgePointId = new ArrayList<>(); XSSFCell knowledgeCell = row.getCell(questionImportCellIndex.getKnowledge()); if (null != knowledgeCell) { String stringCell = knowledgeCell.getStringCellValue(); if (StringUtils.isNotBlank(stringCell)) { Arrays.stream(stringCell.split(" ")).forEach(d -> { if (StringUtils.isNotBlank(d)) { KnowledgePoint knowledgePoint = knowledgeService.getKnowledgePoint(d, subject.getId(), subject.getLevel()); if (null != knowledgePoint) { knowledgePointId.add(knowledgePoint.getId()); } } }); } } List questionEditItemVMS = new ArrayList<>(); char prefix = 'A'; for (int j = questionImportCellIndex.getItemStart(); j < questionImportCellIndex.getItemEnd(); j++) { XSSFCell cell = row.getCell(j); if (null != cell) { String value = cell.getStringCellValue(); if (!StringUtils.isBlank(value)) { QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); questionEditItemVM.setPrefix(String.valueOf(prefix)); questionEditItemVM.setContent(value); questionEditItemVMS.add(questionEditItemVM); prefix = (char) (((int) prefix) + 1); } } } if (questionEditItemVMS.size() < 1) { writeError(row, cellStyle, errorIndex, "选项不能为空"); continue; } QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM(); questionEditRequestVM.setQuestionType(QuestionTypeEnum.SingleChoice.getCode()); questionEditRequestVM.setGradeLevel(level); questionEditRequestVM.setSubjectId(subject.getId()); questionEditRequestVM.setTitle(title); questionEditRequestVM.setAnalyze(analyze); questionEditRequestVM.setScore(score); questionEditRequestVM.setDifficult(Integer.parseInt(difficult)); questionEditRequestVM.setCorrect(correct); questionEditRequestVM.setItems(questionEditItemVMS); questionEditRequestVM.setKnowledgeIdList(knowledgePointId); Question question = questionService.insertFullQuestion(questionEditRequestVM, user.getId()); row.createCell(questionImportCellIndex.getId()).setCellValue(question.getId()); } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } } private void multipleChoice(XSSFSheet sheet, XSSFCellStyle cellStyle, User user, QuestionImportCellIndex questionImportCellIndex) { if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = 14; for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(questionImportCellIndex.getId())) { //已经导入过 continue; } Integer level = user.getUserLevel(); if (null != questionImportCellIndex.getLevel()) { level = levelCheck(row, cellStyle, questionImportCellIndex.getLevel(), errorIndex); if (null == level) { continue; } } List subjects = subjectService.getSubjectByLevel(level); Subject subject = subjectCheck(row, cellStyle, questionImportCellIndex.getSubject(), subjects, errorIndex); if (null == subject) { continue; } String title = stringCheck(row, cellStyle, questionImportCellIndex.getTitle(), errorIndex, "题干不能为空"); if (null == title) { continue; } String analyze = stringCheck(row, cellStyle, questionImportCellIndex.getAnalyze(), errorIndex, "解析不能为空"); if (null == analyze) { continue; } String score = stringCheck(row, cellStyle, questionImportCellIndex.getScore(), errorIndex, "分数不能为空"); if (null == score) { continue; } String difficult = stringCheck(row, cellStyle, questionImportCellIndex.getDifficult(), errorIndex, "难度不能为空"); if (null == difficult) { continue; } List knowledgePointId = new ArrayList<>(); XSSFCell knowledgeCell = row.getCell(questionImportCellIndex.getKnowledge()); if (null != knowledgeCell) { String stringCell = knowledgeCell.getStringCellValue(); if (StringUtils.isNotBlank(stringCell)) { Arrays.stream(stringCell.split(" ")).forEach(d -> { if (StringUtils.isNotBlank(d)) { KnowledgePoint knowledgePoint = knowledgeService.getKnowledgePoint(d, subject.getId(), subject.getLevel()); if (null != knowledgePoint) { knowledgePointId.add(knowledgePoint.getId()); } } }); } } String correct = stringCheck(row, cellStyle, questionImportCellIndex.getCorrect(), errorIndex, "答案不能为空"); if (null == correct) { continue; } List correctArray = new ArrayList<>(); for (char item : correct.toCharArray()) { correctArray.add(String.valueOf(item)); } List questionEditItemVMS = new ArrayList<>(); char prefix = 'A'; for (int j = questionImportCellIndex.getItemStart(); j < questionImportCellIndex.getItemEnd(); j++) { XSSFCell cell = row.getCell(j); if (null != cell) { String value = cell.getStringCellValue(); if (!StringUtils.isBlank(value)) { QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); questionEditItemVM.setPrefix(String.valueOf(prefix)); questionEditItemVM.setContent(value); questionEditItemVMS.add(questionEditItemVM); prefix = (char) (((int) prefix) + 1); } } } if (questionEditItemVMS.size() < 1) { writeError(row, cellStyle, errorIndex, "选项不能为空"); continue; } QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM(); questionEditRequestVM.setQuestionType(QuestionTypeEnum.MultipleChoice.getCode()); questionEditRequestVM.setGradeLevel(level); questionEditRequestVM.setSubjectId(subject.getId()); questionEditRequestVM.setTitle(title); questionEditRequestVM.setAnalyze(analyze); questionEditRequestVM.setScore(score); questionEditRequestVM.setDifficult(Integer.parseInt(difficult)); questionEditRequestVM.setCorrect(correct); questionEditRequestVM.setCorrectArray(correctArray); questionEditRequestVM.setItems(questionEditItemVMS); questionEditRequestVM.setKnowledgeIdList(knowledgePointId); Question question = questionService.insertFullQuestion(questionEditRequestVM, user.getId()); row.createCell(questionImportCellIndex.getId()).setCellValue(question.getId()); } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } } private void trueFalse(XSSFSheet sheet, XSSFCellStyle cellStyle, User user, QuestionImportCellIndex questionImportCellIndex) { if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = questionImportCellIndex.getError(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(questionImportCellIndex.getId())) { //已经导入过 continue; } Integer level = user.getUserLevel(); if (null != questionImportCellIndex.getLevel()) { level = levelCheck(row, cellStyle, questionImportCellIndex.getLevel(), errorIndex); if (null == level) { continue; } } List subjects = subjectService.getSubjectByLevel(level); Subject subject = subjectCheck(row, cellStyle, questionImportCellIndex.getSubject(), subjects, errorIndex); if (null == subject) { continue; } String title = stringCheck(row, cellStyle, questionImportCellIndex.getTitle(), errorIndex, "题干不能为空"); if (null == title) { continue; } String analyze = stringCheck(row, cellStyle, questionImportCellIndex.getAnalyze(), errorIndex, "解析不能为空"); if (null == analyze) { continue; } String score = stringCheck(row, cellStyle, questionImportCellIndex.getScore(), errorIndex, "分数不能为空"); if (null == score) { continue; } String difficult = stringCheck(row, cellStyle, questionImportCellIndex.getDifficult(), errorIndex, "难度不能为空"); if (null == difficult) { continue; } String correct = stringCheck(row, cellStyle, questionImportCellIndex.getCorrect(), errorIndex, "答案不能为空"); if (null == correct) { continue; } List knowledgePointId = new ArrayList<>(); XSSFCell knowledgeCell = row.getCell(questionImportCellIndex.getKnowledge()); if (null != knowledgeCell) { String stringCell = knowledgeCell.getStringCellValue(); if (StringUtils.isNotBlank(stringCell)) { Arrays.stream(stringCell.split(" ")).forEach(d -> { if (StringUtils.isNotBlank(d)) { KnowledgePoint knowledgePoint = knowledgeService.getKnowledgePoint(d, subject.getId(), subject.getLevel()); if (null != knowledgePoint) { knowledgePointId.add(knowledgePoint.getId()); } } }); } } List questionEditItemVMS = new ArrayList<>(); char prefix = 'A'; for (int j = questionImportCellIndex.getItemStart(); j <= questionImportCellIndex.getItemEnd(); j++) { XSSFCell cell = row.getCell(j); if (null != cell) { String value = cell.getStringCellValue(); if (!StringUtils.isBlank(value)) { QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); questionEditItemVM.setPrefix(String.valueOf(prefix)); questionEditItemVM.setContent(value); questionEditItemVMS.add(questionEditItemVM); prefix = (char) (((int) prefix) + 1); } } } if (questionEditItemVMS.size() < 1) { writeError(row, cellStyle, errorIndex, "选项不能为空"); continue; } QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM(); questionEditRequestVM.setQuestionType(QuestionTypeEnum.TrueFalse.getCode()); questionEditRequestVM.setGradeLevel(level); questionEditRequestVM.setSubjectId(subject.getId()); questionEditRequestVM.setTitle(title); questionEditRequestVM.setAnalyze(analyze); questionEditRequestVM.setScore(score); questionEditRequestVM.setDifficult(Integer.parseInt(difficult)); questionEditRequestVM.setCorrect(correct); questionEditRequestVM.setItems(questionEditItemVMS); questionEditRequestVM.setKnowledgeIdList(knowledgePointId); Question question = questionService.insertFullQuestion(questionEditRequestVM, user.getId()); row.createCell(questionImportCellIndex.getId()).setCellValue(question.getId()); } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } } private void gapFilling(XSSFSheet sheet, XSSFCellStyle cellStyle, User user, QuestionImportCellIndex questionImportCellIndex) { if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = questionImportCellIndex.getError(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(questionImportCellIndex.getId())) { //已经导入过 continue; } Integer level = user.getUserLevel(); if (null != questionImportCellIndex.getLevel()) { level = levelCheck(row, cellStyle, questionImportCellIndex.getLevel(), errorIndex); if (null == level) { continue; } } List subjects = subjectService.getSubjectByLevel(level); Subject subject = subjectCheck(row, cellStyle, questionImportCellIndex.getSubject(), subjects, errorIndex); if (null == subject) { continue; } String title = stringCheck(row, cellStyle, questionImportCellIndex.getTitle(), errorIndex, "题干不能为空"); if (null == title) { continue; } String analyze = stringCheck(row, cellStyle, questionImportCellIndex.getAnalyze(), errorIndex, "解析不能为空"); if (null == analyze) { continue; } String score = stringCheck(row, cellStyle, questionImportCellIndex.getScore(), errorIndex, "分数不能为空"); if (null == score) { continue; } String difficult = stringCheck(row, cellStyle, questionImportCellIndex.getDifficult(), errorIndex, "难度不能为空"); if (null == difficult) { continue; } List knowledgePointId = new ArrayList<>(); XSSFCell knowledgeCell = row.getCell(questionImportCellIndex.getKnowledge()); if (null != knowledgeCell) { String stringCell = knowledgeCell.getStringCellValue(); if (StringUtils.isNotBlank(stringCell)) { Arrays.stream(stringCell.split(" ")).forEach(d -> { if (StringUtils.isNotBlank(d)) { KnowledgePoint knowledgePoint = knowledgeService.getKnowledgePoint(d, subject.getId(), subject.getLevel()); if (null != knowledgePoint) { knowledgePointId.add(knowledgePoint.getId()); } } }); } } List questionEditItemVMS = new ArrayList<>(); StringBuilder stringBuilder = new StringBuilder(title); Pattern pattern = Pattern.compile("\\$.*?\\$"); Matcher matcher = pattern.matcher(stringBuilder); Integer index = 0; while (matcher.find()) { ++index; String grapFormat = String.format("%d", UUID.randomUUID().toString(), index); stringBuilder = stringBuilder.replace(matcher.start(), matcher.end(), grapFormat); matcher = pattern.matcher(stringBuilder); String stringCell = row.getCell(questionImportCellIndex.getItemStart() + index).getStringCellValue(); QuestionEditItemVM questionEditItemVM = new QuestionEditItemVM(); questionEditItemVM.setPrefix(index.toString()); questionEditItemVM.setScore(score); questionEditItemVM.setContent(stringCell); questionEditItemVMS.add(questionEditItemVM); } if (questionEditItemVMS.size() < 1) { writeError(row, cellStyle, errorIndex, "空答案不能为空"); continue; } String qScore = ExamUtil.scoreToVM(ExamUtil.scoreFromVM(score) * questionEditItemVMS.size()); QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM(); questionEditRequestVM.setQuestionType(QuestionTypeEnum.GapFilling.getCode()); questionEditRequestVM.setGradeLevel(level); questionEditRequestVM.setSubjectId(subject.getId()); questionEditRequestVM.setTitle(stringBuilder.toString()); questionEditRequestVM.setAnalyze(analyze); questionEditRequestVM.setScore(qScore); questionEditRequestVM.setDifficult(Integer.parseInt(difficult)); questionEditRequestVM.setItems(questionEditItemVMS); questionEditRequestVM.setKnowledgeIdList(knowledgePointId); Question question = questionService.insertFullQuestion(questionEditRequestVM, user.getId()); row.createCell(questionImportCellIndex.getId()).setCellValue(question.getId()); } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } } private void shortAnswer(XSSFSheet sheet, XSSFCellStyle cellStyle, User user, QuestionImportCellIndex questionImportCellIndex) { if (null != sheet && sheet.getLastRowNum() >= 1) { Integer errorIndex = questionImportCellIndex.getError(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); try { if (null != row.getCell(questionImportCellIndex.getId())) { //已经导入过 continue; } Integer level = user.getUserLevel(); if (null != questionImportCellIndex.getLevel()) { level = levelCheck(row, cellStyle, questionImportCellIndex.getLevel(), errorIndex); if (null == level) { continue; } } List subjects = subjectService.getSubjectByLevel(level); Subject subject = subjectCheck(row, cellStyle, questionImportCellIndex.getSubject(), subjects, errorIndex); if (null == subject) { continue; } String title = stringCheck(row, cellStyle, questionImportCellIndex.getTitle(), errorIndex, "题干不能为空"); if (null == title) { continue; } String correct = stringCheck(row, cellStyle, questionImportCellIndex.getCorrect(), errorIndex, "答案不能为空"); if (null == correct) { continue; } String analyze = stringCheck(row, cellStyle, questionImportCellIndex.getAnalyze(), errorIndex, "解析不能为空"); if (null == analyze) { continue; } String score = stringCheck(row, cellStyle, questionImportCellIndex.getScore(), errorIndex, "分数不能为空"); if (null == score) { continue; } String difficult = stringCheck(row, cellStyle, questionImportCellIndex.getDifficult(), errorIndex, "难度不能为空"); if (null == difficult) { continue; } List knowledgePointId = new ArrayList<>(); XSSFCell knowledgeCell = row.getCell(questionImportCellIndex.getKnowledge()); if (null != knowledgeCell) { String stringCell = knowledgeCell.getStringCellValue(); if (StringUtils.isNotBlank(stringCell)) { Arrays.stream(stringCell.split(" ")).forEach(d -> { if (StringUtils.isNotBlank(d)) { KnowledgePoint knowledgePoint = knowledgeService.getKnowledgePoint(d, subject.getId(), subject.getLevel()); if (null != knowledgePoint) { knowledgePointId.add(knowledgePoint.getId()); } } }); } } QuestionEditRequestVM questionEditRequestVM = new QuestionEditRequestVM(); questionEditRequestVM.setQuestionType(QuestionTypeEnum.ShortAnswer.getCode()); questionEditRequestVM.setGradeLevel(level); questionEditRequestVM.setSubjectId(subject.getId()); questionEditRequestVM.setTitle(title); questionEditRequestVM.setCorrect(correct); questionEditRequestVM.setAnalyze(analyze); questionEditRequestVM.setScore(score); questionEditRequestVM.setDifficult(Integer.parseInt(difficult)); questionEditRequestVM.setItems(new ArrayList<>()); questionEditRequestVM.setKnowledgeIdList(knowledgePointId); Question question = questionService.insertFullQuestion(questionEditRequestVM, user.getId()); row.createCell(questionImportCellIndex.getId()).setCellValue(question.getId()); } catch (Exception ex) { writeError(row, cellStyle, errorIndex, ex.getMessage()); } } } } private Integer levelCheck(XSSFRow row, XSSFCellStyle cellStyle, Integer cellIndex, Integer errorIndex) { List list = departmentService.gets(); Dict levelHash = Dict.create(); for (Department department : list) { levelHash.set(department.getName(), department.getId()); } // Dict levelHash = Dict.create().set("一年级", 1).set("二年级", 2).set("三年级", 3).set("四年级", 4).set("五年级", 5).set("六年级", 6).set("初一", 7).set("初二", 8).set("初三", 9).set("高一", 10).set("高二", 11).set("高三", 12); String levelName = stringCheck(row, cellStyle, cellIndex, errorIndex, "年级不能为空"); if (null == levelName) { return null; } Integer level = levelHash.getInt(levelName); if (null == level) { writeError(row, cellStyle, errorIndex, "年级未找到"); return null; } return level; } private Subject subjectCheck(XSSFRow row, XSSFCellStyle cellStyle, Integer cellIndex, List subjects, Integer errorIndex) { String subjectName = stringCheck(row, cellStyle, cellIndex, errorIndex, "学科不能为空"); if (null == subjectName) { return null; } Subject subject = subjects.stream().filter(d -> d.getName().equals(subjectName)).findFirst().orElse(null); if (null == subject) { writeError(row, cellStyle, errorIndex, "学科未找到"); return null; } return subject; } private String stringCheck(XSSFRow row, XSSFCellStyle cellStyle, Integer cellIndex, Integer errorIndex, String errorMsg) { row.getCell(cellIndex).setCellType(CellType.STRING); String stringCell = row.getCell(cellIndex).getStringCellValue(); if (StringUtils.isBlank(stringCell)) { writeError(row, cellStyle, errorIndex, errorMsg); return null; } return stringCell; } private void writeError(XSSFRow row, XSSFCellStyle cellStyle, Integer errorIndex, String errorMsg) { XSSFCell xssfCell = row.createCell(errorIndex); xssfCell.setCellStyle(cellStyle); xssfCell.setCellValue(errorMsg); } }