xiangpei
2024-11-28 24fd92d92b1da73361a6873f31e969af78aeeee8
导入题目时,如果课目不存在自动创建
4个文件已修改
69 ■■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/excel/SelectExcel.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/SubjectMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/SubjectMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/QuestionController.java
@@ -2,6 +2,7 @@
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
@@ -330,18 +331,22 @@
                    questionService.insert(question);
                    // 查出所有的课目
                    List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE);
                    List<String> subjectNames = Arrays.asList(excelQuestion.getSubjectName().split(SPLIT));
                    List<Subject> targetSubject = subjects.stream()
                            .filter(subject -> subjectNames.contains(subject.getName()))
                            .collect(Collectors.toList());
                    if (CollectionUtils.isEmpty(targetSubject)) {
                        // todo 记录这个错误
                        continue;
                    List<Subject> subjects = subjectNames.stream().map(name -> {
                        // 判断课目是否存在于数据库,如果不存在则自动新增课目
                        Subject byName = subjectMapper.getByName(name);
                        if (Objects.isNull(byName)) {
                            byName = new Subject();
                            byName.setName(name);
                            byName.setDeleted(false);
                            subjectMapper.insert(byName);
                    }
                        return byName;
                    }).collect(Collectors.toList());
                    // 构建课目-题目信息
                    questionSubjectsList = targetSubject.stream()
                    questionSubjectsList = subjects.stream()
                            .filter(subject -> {
                                // 去重题目:题干+课目相同才算同一题
                                List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId());
@@ -359,18 +364,20 @@
                        questionSubjectService.saves(questionSubjectsList);
                    }
                } else {
                    // 查出所有的课目
                    List<Subject> subjects = subjectMapper.allSubject(new ArrayList<>(), Boolean.TRUE);
                    List<String> subjectNames = Arrays.asList(excelQuestion.getSubjectName().split(SPLIT));
                    List<Subject> targetSubject = subjects.stream()
                            .filter(subject -> subjectNames.contains(subject.getName()))
                            .collect(Collectors.toList());
                    if (CollectionUtils.isEmpty(targetSubject)) {
                        // todo 记录这个错误
                        continue;
                    List<Subject> subjects = subjectNames.stream().map(name -> {
                        // 判断课目是否存在于数据库,如果不存在则自动新增课目
                        Subject byName = subjectMapper.getByName(name);
                        if (Objects.isNull(byName)) {
                            byName = new Subject();
                            byName.setName(name);
                            byName.setDeleted(false);
                            subjectMapper.insert(byName);
                    }
                        return byName;
                    }).collect(Collectors.toList());
                    // 构建课目-题目信息
                    questionSubjectsList = targetSubject.stream()
                    questionSubjectsList = subjects.stream()
                            .filter(subject -> {
                                // 去重题目:题干+课目相同才算同一题
                                List<QuestionSubjectVO> lists = questionService.countQuestionByTitleAndSubject(excelQuestion.getTitle(), subject.getId());
src/main/java/com/mindskip/xzs/excel/SelectExcel.java
@@ -58,12 +58,12 @@
        DataValidation subjectValidation = dataValidationHelper.createValidation(subjectConstraint, subjectTypeRange);
        sheet.addValidationData(subjectValidation);
        // 设置选项下拉范围,第4列,1500行内
        CellRangeAddressList optionRange = new CellRangeAddressList(2, 1500, 3, 3);
        // 添加选项下拉
        DataValidationConstraint optionConstraint = dataValidationHelper.createExplicitListConstraint(optionList);
        DataValidation optionValidation = dataValidationHelper.createValidation(optionConstraint, optionRange);
        sheet.addValidationData(optionValidation);
//        // 设置选项下拉范围,第4列,1500行内
//        CellRangeAddressList optionRange = new CellRangeAddressList(2, 1500, 3, 3);
//        // 添加选项下拉
//        DataValidationConstraint optionConstraint = dataValidationHelper.createExplicitListConstraint(optionList);
//        DataValidation optionValidation = dataValidationHelper.createValidation(optionConstraint, optionRange);
//        sheet.addValidationData(optionValidation);
        // 设置选项下拉范围,第4列,1500行内
        CellRangeAddressList answerRange = new CellRangeAddressList(2, 1500, 5, 5);
src/main/java/com/mindskip/xzs/repository/SubjectMapper.java
@@ -41,4 +41,13 @@
     * @return
     */
    Subject selectByName(@Param("id") Integer id, @Param("name") String name);
    /**
     * 名称查询是否存在
     *
     * @param name
     * @return
     */
    Subject getByName(@Param("name") String name);
}
src/main/resources/mapper/SubjectMapper.xml
@@ -149,6 +149,11 @@
    </select>
    <select id="getByName" resultType="com.mindskip.xzs.domain.Subject">
        SELECT * FROM t_subject WHERE name = #{name} AND deleted = 0
    </select>
    <select id="page" resultMap="BaseResultMap"
            parameterType="com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM">
        SELECT