diff --git a/web/src/main/java/com/ibeetl/jlw/dao/ResourcesQuestionDao.java b/web/src/main/java/com/ibeetl/jlw/dao/ResourcesQuestionDao.java index 7513ebaf..cb38ba4a 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/ResourcesQuestionDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/ResourcesQuestionDao.java @@ -3,6 +3,8 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.CourseInfo; import com.ibeetl.jlw.entity.ResourcesQuestion; import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO; +import com.ibeetl.jlw.enums.MatchTypeEnum; +import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.web.query.CourseInfoQuery; import com.ibeetl.jlw.web.query.ResourcesQuestionQuery; import org.beetl.sql.core.engine.PageQuery; @@ -36,4 +38,15 @@ public interface ResourcesQuestionDao extends BaseMapper{ List getGroupQuestionTypeCount(Long courseInfoId); int checkUnique(ResourcesQuestion question); + + /** + * 获取数据库中的课程或者章节ID + * + * @param courseInfoTitle 导入的标题,取出课程名称部分 + * @param importCourseId 导入的标题,取出课程或者章节ID + * @param matchType 匹配类型 + * @param businessType 来源类型 + * @return + */ + Long getCourseInfoByBusinessTypeAndTitle(String courseInfoTitle, String importCourseId, MatchTypeEnum matchType, QuestionBusinessTypeEnum businessType); } \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/entity/vo/ImportQuestionByWordTemplateResultVO.java b/web/src/main/java/com/ibeetl/jlw/entity/vo/ImportQuestionByWordTemplateResultVO.java index 9efb0664..f07c3c34 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/vo/ImportQuestionByWordTemplateResultVO.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/vo/ImportQuestionByWordTemplateResultVO.java @@ -1,10 +1,14 @@ package com.ibeetl.jlw.entity.vo; +import com.fasterxml.jackson.annotation.JsonInclude; import com.ibeetl.jlw.entity.ResourcesQuestion; +import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import lombok.Data; import java.util.List; +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + /** * 功能描述:
* word导入试题的结果类 @@ -16,12 +20,29 @@ import java.util.List; * @version: 1.0 */ @Data +@JsonInclude(NON_NULL) public class ImportQuestionByWordTemplateResultVO { /** * 导入的题目标题 */ private String title; + + + /** + * 根据来源字段,来保存相应的课程或者章节ID + * + * 保证 {@link #title} 不能为空,然后传递个 {@link #businessType} + * 这里如果通过title 查询到的课程ID或者章节ID,会存放在这里 + */ + private Long courseInfoId; + + /** + * 来源 + * 系统方:则代表是公共的课程表; + * 开课方:代表从开课的课程表中去查询 + */ + private QuestionBusinessTypeEnum businessType; /** * 其他信息暂存,集合可能存在多条记录; */ diff --git a/web/src/main/java/com/ibeetl/jlw/enums/MatchTypeEnum.java b/web/src/main/java/com/ibeetl/jlw/enums/MatchTypeEnum.java new file mode 100644 index 00000000..d46724a6 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/enums/MatchTypeEnum.java @@ -0,0 +1,27 @@ +package com.ibeetl.jlw.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.beetl.sql.annotation.entity.EnumMapping; +import org.beetl.sql.annotation.entity.EnumValue; + +/** + * 功能描述:
+ * 且或交 给前端来决定 + * @author: mlx + * @description: + * @date: 2023/1/16 0:54 + * @version: 1.0 + */ +@Getter +@EnumMapping("name") +@AllArgsConstructor +public enum MatchTypeEnum { + + AND( "且"), + OR("或"); + + @EnumValue + private String text; + +} diff --git a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionService.java b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionService.java index b763cc1e..58b9fdc1 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionService.java @@ -18,6 +18,8 @@ import com.ibeetl.jlw.entity.*; import com.ibeetl.jlw.entity.dto.QuestionSettingDTO; import com.ibeetl.jlw.entity.vo.ImportQuestionByWordTemplateResultVO; import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO; +import com.ibeetl.jlw.enums.MatchTypeEnum; +import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum; import com.ibeetl.jlw.service.strategy.StrategyContext; import com.ibeetl.jlw.validator.QuestionValidator; @@ -929,10 +931,10 @@ public class ResourcesQuestionService extends CoreBaseService } /** 最后检测属性, 并行处理,没有向外部非线程安全的变量写入东西,无需担心丢数据 */ - questionList.parallelStream().forEach(item -> { - questionValidator.checkQuestion(item); - checkUnique(item); - }); +// questionList.parallelStream().forEach(item -> { +// questionValidator.checkQuestion(item); +// checkUnique(item); +// }); /** 本次上传的题目判断唯一性 */ checkLocalQuestionsUnique(questionList); @@ -952,6 +954,37 @@ public class ResourcesQuestionService extends CoreBaseService return resultVO; } + /** + * 根据传入的参数,模糊匹配课程ID,并放在返回值中 + * @param fileEntityList 文件列表 + * @param businessType 来源类型 + * @param matchType 匹配类型 + * @param coreUser 用户 + * @return + */ + public ImportQuestionByWordTemplateResultVO importQuestionByWordTemplateType(List fileEntityList, QuestionBusinessTypeEnum businessType, + MatchTypeEnum matchType, CoreUser coreUser) { + ImportQuestionByWordTemplateResultVO resultVO = importQuestionByWordTemplate(fileEntityList, coreUser); + final String title = resultVO.getTitle(); + resultVO.setBusinessType(businessType); + + String[] titleSplit = title.split("-"); + + // 导入的文件,从标题中获取课程或者章节的名称信息 + final String courseInfoTitle = ArrayUtil.get(titleSplit, 0); + // 查询到的课程编号,看着像的那种 + final String courseInfoLikeId = ArrayUtil.get(titleSplit, 1); + if (StrUtil.isNotEmpty(courseInfoLikeId)) { + // 获取纯数字,用来代表带入的课程或者章节ID + String importCourseId = courseInfoLikeId.replaceAll("\\D+", ""); + // 获取数据库中的课程或者章节ID + Long getDBCourseId = resourcesQuestionDao.getCourseInfoByBusinessTypeAndTitle(courseInfoTitle, importCourseId, matchType, businessType); + resultVO.setCourseInfoId(getDBCourseId); + } + + return resultVO; + } + /** * 给题目添加选项 * @param text 单个选项的内容 diff --git a/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionController.java b/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionController.java index 33d7af2b..7e99c65c 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/ResourcesQuestionController.java @@ -16,6 +16,8 @@ import com.ibeetl.jlw.entity.ResourcesQuestion; import com.ibeetl.jlw.entity.vo.ImportQuestionByWordTemplateResultVO; import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO; import com.ibeetl.jlw.enums.AddTypeEnum; +import com.ibeetl.jlw.enums.MatchTypeEnum; +import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.service.CourseInfoService; import com.ibeetl.jlw.service.ResourcesQuestionService; import com.ibeetl.jlw.web.query.CourseInfoQuery; @@ -648,4 +650,24 @@ public class ResourcesQuestionController{ public JsonResult importQuestionByWordTemplate(@RFile List fileEntityList, @SCoreUser CoreUser coreUser) { return JsonResult.success(resourcesQuestionService.importQuestionByWordTemplate(fileEntityList, coreUser)); } + + /** + * 功能描述:
+ * word方式导入题目 + * + * @param fileEntityList 文件列表 (前端传递name:file) + * @param businessType 来源 + * @param matchType 匹配类型 (非必传) + * @param coreUser 传入的用户,使用机构ID和用户ID + * @return {@link JsonResult} + * @Author: lx + * @Date: 2023/1/8 22:49 + */ + @PostMapping(MODEL + "/importQuestionByWordTemplateType.json") + @ResponseBody + public JsonResult importQuestionByWordTemplateType(@RFile List fileEntityList, QuestionBusinessTypeEnum businessType, + @RequestParam(required = false) MatchTypeEnum matchType, @SCoreUser CoreUser coreUser) { + return JsonResult.success(resourcesQuestionService.importQuestionByWordTemplateType(fileEntityList, businessType, matchType, coreUser)); + } + } diff --git a/web/src/main/resources/sql/jlw/resourcesQuestion.md b/web/src/main/resources/sql/jlw/resourcesQuestion.md index a0fe3d92..a2c5dfb7 100644 --- a/web/src/main/resources/sql/jlw/resourcesQuestion.md +++ b/web/src/main/resources/sql/jlw/resourcesQuestion.md @@ -378,7 +378,6 @@ getGroupQuestionTypeCount checkUnique === - * 验证题干是否可能存在重复 SELECT @@ -388,4 +387,46 @@ checkUnique WHERE 1 = 1 AND replace(replace(t.question_stem,'(','('),')',')') REGEXP #questionStemRegexp# - AND t.question_status = 1 \ No newline at end of file + AND t.question_status = 1 + +getCourseInfoByBusinessTypeAndTitle +=== +* 获取数据库中的课程或者章节ID + + @// 系统的课程表查询 + @if(!isEmpty(businessType) && businessType == 'FROM_SYSTEM'){ + SELECT course_info_id + FROM course_info t + WHERE 1 AND ( 1 + @if(!isEmpty(courseInfoTitle)){ + AND t.course_info_name like #"%"+courseInfoTitle+"%"# + @} + @if(!isEmpty(importCourseId)){ + @if(isNotEmpty(matchType) && matchType == 'OR') { + OR + @} else { + AND + @} + t.course_info_id = #importCourseId# + @} + ) + + @// 开课的课程表查询 + @} else if(!isEmpty(businessType) && businessType == 'FROM_OPEN_COURSE') { + SELECT teacher_open_course_merge_course_info_id + FROM teacher_open_course_merge_course_info t + WHERE 1 AND ( 1 + @if(!isEmpty(courseInfoTitle)){ + AND ( + t.course_info_name like #"%"+courseInfoTitle+"%"# + @} + @if(!isEmpty(importCourseId)){ + @if(isNotEmpty(matchType) && matchType == 'OR') { + OR + @} else { + AND + @} + t.teacher_open_course_merge_course_info_id = #importCourseId# + @} + ) + @} \ No newline at end of file