diff --git a/web/filesystem/template/题库导入模板.xlsx b/web/filesystem/template/题库导入模板.xlsx index 5dde424d..ddea7517 100644 Binary files a/web/filesystem/template/题库导入模板.xlsx and b/web/filesystem/template/题库导入模板.xlsx differ diff --git a/web/src/main/java/com/ibeetl/jlw/service/CourseInfoService.java b/web/src/main/java/com/ibeetl/jlw/service/CourseInfoService.java index 5f095d8c..34f7dfbe 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/CourseInfoService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/CourseInfoService.java @@ -231,7 +231,7 @@ public class CourseInfoService extends CoreBaseService{ model.setCourseInfoId(courseInfo.getCourseInfoId()); model.setCourseInfoFullId(StrUtil.prependIfMissing(StrUtil.appendIfMissing(courseInfoFullId, "_"), "_")); updateTemplate(model); - + courseInfo.setCourseInfoFullId(model.getCourseInfoFullId()); return courseInfo; } diff --git a/web/src/main/java/com/ibeetl/jlw/service/CourseLabelService.java b/web/src/main/java/com/ibeetl/jlw/service/CourseLabelService.java index 9dbfa94d..2cdfaaae 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/CourseLabelService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/CourseLabelService.java @@ -9,7 +9,6 @@ import com.ibeetl.jlw.web.query.CourseLabelQuery; import org.apache.commons.collections4.CollectionUtils; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; -import org.beetl.sql.core.page.PageResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -64,7 +63,7 @@ public class CourseLabelService extends CoreBaseService { } public CourseLabel getOnce(CourseLabel courseLabel) { - PageResult page = courseLabelDao.createLambdaQuery().addParam(courseLabel).page(1, 1); - return CollectionUtils.isEmpty(page.getList()) ? null : page.getList().get(0); + List list = courseLabelDao.template(courseLabel); + return CollectionUtils.isEmpty(list) ? null : list.get(0); } } \ No newline at end of file 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 6df588c8..1907db39 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,7 @@ 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.entity.vo.ResourcesCourseInfoAuthDetailsVO; import com.ibeetl.jlw.enums.MatchTypeEnum; import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum; @@ -27,6 +28,7 @@ import com.ibeetl.jlw.web.query.CourseInfoQuery; import com.ibeetl.jlw.web.query.ResourcesQuestionQuery; import lombok.Cleanup; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.util.Strings; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -58,13 +60,16 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Function; +import java.util.stream.Collectors; import static cn.hutool.core.util.ArrayUtil.join; +import static com.ibeetl.admin.core.util.StreamUtils.listJoin; import static com.ibeetl.jlw.entity.ResourcesQuestion.LINE_8; import static com.ibeetl.jlw.entity.ResourcesQuestion.SPLIT_; import static com.ibeetl.jlw.entity.ResourcesQuestionOptionEntity.shuffleOrderOptions; import static com.ibeetl.jlw.enums.AddTypeEnum.ADMIN_ADD; import static com.ibeetl.jlw.enums.AddTypeEnum.FACULTY_ADD; +import static com.ibeetl.jlw.enums.CourseLabelTypeEnum.THEORY; import static com.ibeetl.jlw.service.strategy.StrategyContext.QuestionParagraphTypeEnum.OTHER; import static com.ibeetl.jlw.service.strategy.StrategyContext.QuestionTypeConcatEnum.*; import static com.ibeetl.jlw.service.strategy.WordQuestionOption.OPTION_REGEX; @@ -79,66 +84,83 @@ import static java.util.stream.Collectors.joining; @Service @Slf4j @Transactional -public class ResourcesQuestionService extends CoreBaseService{ +public class ResourcesQuestionService extends CoreBaseService { - @Autowired private ResourcesQuestionDao resourcesQuestionDao; + @Autowired + private ResourcesQuestionDao resourcesQuestionDao; - @Autowired private CourseInfoService courseInfoService; + @Autowired + private CourseInfoService courseInfoService; - @Autowired private CourseInfoDao courseInfoDao; + @Autowired + private CourseInfoDao courseInfoDao; - @Autowired private CorePlatformService platformService; - @Autowired private ResourcesQuestionService resourcesQuestionService; + @Autowired + private CorePlatformService platformService; + @Autowired + private ResourcesQuestionService resourcesQuestionService; - @Autowired private StrategyContext strategyContext; - @Autowired private QuestionValidator questionValidator; + @Autowired + private StrategyContext strategyContext; + @Autowired + private QuestionValidator questionValidator; - public PageQuery queryByCondition(PageQuery query){ - PageQuery ret = resourcesQuestionDao.queryByCondition(query); + @Autowired + private CourseLabelService courseLabelService; + + @Autowired + private CorePlatformService corePlatformService; + + @Autowired + private UniversitiesCollegesJurisdictionCurriculumResourcesService universitiesCollegesJurisdictionCurriculumResourcesService; + + + public PageQuery queryByCondition(PageQuery query) { + PageQuery ret = resourcesQuestionDao.queryByCondition(query); queryListAfter(ret.getList()); return ret; } - public void deleteResourcesQuestion(String ids){ + public void deleteResourcesQuestion(String ids) { String courseInfoIds = ""; - Listlist = getByIds(ids); - for(int i=0;null != list && i list = getByIds(ids); + for (int i = 0; null != list && i < list.size(); i++) { + courseInfoIds += list.get(i).getCourseInfoId() + (i == list.size() - 1 ? "" : ","); } resourcesQuestionDao.deleteResourcesQuestionByIds(ids); - if(StringUtils.isNotBlank(courseInfoIds)){ + if (StringUtils.isNotBlank(courseInfoIds)) { courseInfoDao.updateResourcesQuestionIdsByIds(courseInfoIds); } } - public boolean add (ResourcesQuestion resourcesQuestion){ + public boolean add(ResourcesQuestion resourcesQuestion) { resourcesQuestion.setQuestionStatus(1); resourcesQuestionDao.insert(resourcesQuestion); CourseInfo courseInfo = courseInfoDao.single(resourcesQuestion.getCourseInfoId()); - if(null != courseInfo){ + if (null != courseInfo) { CourseInfo c = new CourseInfo(); c.setCourseInfoId(courseInfo.getCourseInfoId()); - c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds())?(courseInfo.getResourcesQuestionIds()+","+resourcesQuestion.getResourcesQuestionId()):resourcesQuestion.getResourcesQuestionId().toString()); + c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds()) ? (courseInfo.getResourcesQuestionIds() + "," + resourcesQuestion.getResourcesQuestionId()) : resourcesQuestion.getResourcesQuestionId().toString()); courseInfoDao.updateTemplateById(c); } return true; } - public boolean edit (ResourcesQuestion resourcesQuestion){ + public boolean edit(ResourcesQuestion resourcesQuestion) { ResourcesQuestion oldResourcesQuestion = resourcesQuestionDao.single(resourcesQuestion.getResourcesQuestionId()); CourseInfo oldCourseInfo = courseInfoDao.single(oldResourcesQuestion.getCourseInfoId()); - if(null != oldCourseInfo){ + if (null != oldCourseInfo) { CourseInfo c = new CourseInfo(); c.setCourseInfoId(oldCourseInfo.getCourseInfoId()); - c.setResourcesQuestionIds(StringUtils.isNotBlank(oldCourseInfo.getResourcesQuestionIds())?oldCourseInfo.getResourcesQuestionIds().replace(resourcesQuestion.getResourcesQuestionId().toString(),"").replace(",,",","):null); + c.setResourcesQuestionIds(StringUtils.isNotBlank(oldCourseInfo.getResourcesQuestionIds()) ? oldCourseInfo.getResourcesQuestionIds().replace(resourcesQuestion.getResourcesQuestionId().toString(), "").replace(",,", ",") : null); courseInfoDao.updateResourcesQuestionIdsById(c); } @@ -148,17 +170,17 @@ public class ResourcesQuestionService extends CoreBaseService CourseInfo courseInfo = courseInfoDao.single(resourcesQuestion.getCourseInfoId()); - if(null != courseInfo){ + if (null != courseInfo) { CourseInfo c = new CourseInfo(); c.setCourseInfoId(courseInfo.getCourseInfoId()); - c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds())?(courseInfo.getResourcesQuestionIds()+","+resourcesQuestion.getResourcesQuestionId()):resourcesQuestion.getResourcesQuestionId().toString()); + c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds()) ? (courseInfo.getResourcesQuestionIds() + "," + resourcesQuestion.getResourcesQuestionId()) : resourcesQuestion.getResourcesQuestionId().toString()); courseInfoDao.updateTemplateById(c); } return true; } - public boolean changAll(List updateResourcesQuestionList,Long oldCourseInfoId,Long newCourseInfoId){ + public boolean changAll(List updateResourcesQuestionList, Long oldCourseInfoId, Long newCourseInfoId) { updateBatchTemplate(updateResourcesQuestionList); @@ -168,107 +190,108 @@ public class ResourcesQuestionService extends CoreBaseService return true; } - public List getByIds (String resourcesQuestionIds){ + public List getByIds(String resourcesQuestionIds) { return resourcesQuestionDao.getByIds(resourcesQuestionIds); } - public List getValuesByQuery (ResourcesQuestionQuery resourcesQuestionQuery){ + public List getValuesByQuery(ResourcesQuestionQuery resourcesQuestionQuery) { return resourcesQuestionDao.getValuesByQuery(resourcesQuestionQuery); } - public List getValuesByQueryNotWithPermission (ResourcesQuestionQuery resourcesQuestionQuery){ + + public List getValuesByQueryNotWithPermission(ResourcesQuestionQuery resourcesQuestionQuery) { return resourcesQuestionDao.getValuesByQueryNotWithPermission(resourcesQuestionQuery); } - public List getValues (Object paras){ - return sqlManager.select(SqlId.of("jlw.resourcesQuestion.getResourcesQuestionValues"),ResourcesQuestion.class,paras); + public List getValues(Object paras) { + return sqlManager.select(SqlId.of("jlw.resourcesQuestion.getResourcesQuestionValues"), ResourcesQuestion.class, paras); } public List getTreeByCourseLabelTypes(String courseLabelTypes) { Long resourcesApplicationId = null; - UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem)platformService.getOther(); - if(null != uSystem && ((Integer)1).equals(uSystem.getType())){ + UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem) platformService.getOther(); + if (null != uSystem && ((Integer) 1).equals(uSystem.getType())) { resourcesApplicationId = uSystem.getTypeId(); } - ListcourseInfoList = courseInfoDao.getByCourseLabelTypes(courseLabelTypes,resourcesApplicationId);//只查 正常的 分类下 正常的 课程 + List courseInfoList = courseInfoDao.getByCourseLabelTypes(courseLabelTypes, resourcesApplicationId);//只查 正常的 分类下 正常的 课程 - if(null != courseInfoList && courseInfoList.size()>0){ - for(int i=0;i 0) { + for (int i = 0; i < courseInfoList.size(); i++) { CourseInfo c = courseInfoList.get(i); //自己加树结构的值 - c.set("id","courseInfoId_"+c.getCourseInfoId()); - c.set("spread","true"); - c.set("title",c.getCourseInfoName()); - if(null == c.getCourseInfoType()){ + c.set("id", "courseInfoId_" + c.getCourseInfoId()); + c.set("spread", "true"); + c.set("title", c.getCourseInfoName()); + if (null == c.getCourseInfoType()) { c.setCourseInfoType(1); } - getByParentCourseInfoId(c, c.getCourseInfoId(),1); + getByParentCourseInfoId(c, c.getCourseInfoId(), 1); } } return courseInfoList; } - public void getByParentCourseInfoId(CourseInfo courseInfo,Long courseInfoId,Integer n){ + public void getByParentCourseInfoId(CourseInfo courseInfo, Long courseInfoId, Integer n) { CourseInfoQuery c = new CourseInfoQuery(); c.setCourseInfoParentId(courseInfoId); c.setCourseInfoStatus(1); List courseInfoList = null; - if(n < 2){ + if (n < 2) { courseInfoList = courseInfoService.getValues(c); - for(int i=0;null != courseInfoList && i0) { + if (null != courseInfoList && courseInfoList.size() > 0) { courseInfo.putChildren(courseInfoList); n++; - if(n == 3){ + if (n == 3) { return; } for (int i = 0; i < courseInfoList.size(); i++) { - if(null == courseInfoList.get(i).getCourseInfoType()){ + if (null == courseInfoList.get(i).getCourseInfoType()) { courseInfoList.get(i).setCourseInfoType(n); } - getByParentCourseInfoId(courseInfoList.get(i), courseInfoList.get(i).getCourseInfoId(),n); + getByParentCourseInfoId(courseInfoList.get(i), courseInfoList.get(i).getCourseInfoId(), n); } - }else { + } else { courseInfo.putChildren(new ArrayList()); - if(n == 3){ + if (n == 3) { } } } - public List getTreeByParam(String courseLabelTypes,Long competitionId,String cQuestionIds,Long examId,String eQuestionIds) { + public List getTreeByParam(String courseLabelTypes, Long competitionId, String cQuestionIds, Long examId, String eQuestionIds) { Long resourcesApplicationId = null; - UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem)platformService.getOther(); - if(null != uSystem && ((Integer)1).equals(uSystem.getType())){ + UniversitiesCollegesJurisdictionExperimentalSystem uSystem = (UniversitiesCollegesJurisdictionExperimentalSystem) platformService.getOther(); + if (null != uSystem && ((Integer) 1).equals(uSystem.getType())) { resourcesApplicationId = uSystem.getTypeId(); } - ListcourseInfoList = courseInfoDao.getByParams(courseLabelTypes,cQuestionIds,eQuestionIds,resourcesApplicationId,competitionId,examId,1);//只查 正常的 分类下 正常的 课程 + List courseInfoList = courseInfoDao.getByParams(courseLabelTypes, cQuestionIds, eQuestionIds, resourcesApplicationId, competitionId, examId, 1);//只查 正常的 分类下 正常的 课程 - if(null != courseInfoList && courseInfoList.size()>0){ - for(int i=0;i 0) { + for (int i = 0; i < courseInfoList.size(); i++) { CourseInfo c = courseInfoList.get(i); //自己加树结构的值 - c.set("id","courseInfoId_"+c.getCourseInfoId()); - c.set("spread","true"); - c.set("title",c.getCourseInfoName()); - if(null == c.getCourseInfoType()){ + c.set("id", "courseInfoId_" + c.getCourseInfoId()); + c.set("spread", "true"); + c.set("title", c.getCourseInfoName()); + if (null == c.getCourseInfoType()) { c.setCourseInfoType(1); } - getByParentCourseInfoId(c, c.getCourseInfoId(),competitionId,cQuestionIds,examId,eQuestionIds,1); + getByParentCourseInfoId(c, c.getCourseInfoId(), competitionId, cQuestionIds, examId, eQuestionIds, 1); } } return courseInfoList; } - public void getByParentCourseInfoId(CourseInfo courseInfo,Long courseInfoId,Long competitionId,String cQuestionIds,Long examId,String eQuestionIds,Integer n){ + public void getByParentCourseInfoId(CourseInfo courseInfo, Long courseInfoId, Long competitionId, String cQuestionIds, Long examId, String eQuestionIds, Integer n) { CourseInfoQuery c = new CourseInfoQuery(); c.setCourseInfoParentId(courseInfoId); c.setCourseInfoStatus(1); @@ -278,69 +301,67 @@ public class ResourcesQuestionService extends CoreBaseService c.setCQuestionIds(cQuestionIds); c.setEQuestionIds(eQuestionIds); List courseInfoList = null; - if(n < 2){ + if (n < 2) { courseInfoList = courseInfoService.getValues(c); - for(int i=0;null != courseInfoList && i0) { + if (null != courseInfoList && courseInfoList.size() > 0) { courseInfo.putChildren(courseInfoList); n++; - if(n == 3){ + if (n == 3) { return; } for (int i = 0; i < courseInfoList.size(); i++) { - if(null == courseInfoList.get(i).getCourseInfoType()){ + if (null == courseInfoList.get(i).getCourseInfoType()) { courseInfoList.get(i).setCourseInfoType(n); } - getByParentCourseInfoId(courseInfoList.get(i),courseInfoList.get(i).getCourseInfoId(),competitionId,cQuestionIds,examId,eQuestionIds,n); + getByParentCourseInfoId(courseInfoList.get(i), courseInfoList.get(i).getCourseInfoId(), competitionId, cQuestionIds, examId, eQuestionIds, n); } - }else { + } else { courseInfo.putChildren(new ArrayList()); - if(n == 3){ + if (n == 3) { } } } - public List getValuesToCourseInfo(CourseInfoQuery courseInfoQuery){ + public List getValuesToCourseInfo(CourseInfoQuery courseInfoQuery) { return resourcesQuestionDao.getValuesToCourseInfo(courseInfoQuery); } - public JsonResult importTemplate(FileEntity fileEntity){ - if(null != fileEntity){ + public JsonResult importTemplate(FileEntity fileEntity, CoreUser coreUser) { + if (null != fileEntity) { + Map courseInfoCache = new HashMap<>(); + Map>> chapterCache = new HashMap<>(); File file = new File(fileEntity.getAbsoluteUrl()); - if(file.exists() && file.isFile() && file.canRead() && ToolUtils.findInSet("xls,xlsx",fileEntity.getFormat())){ - + if (file.exists() && file.isFile() && file.canRead() && ToolUtils.findInSet("xls,xlsx", fileEntity.getFormat())) { Workbook wb = null; InputStream is = null; try { is = new FileInputStream(fileEntity.getAbsoluteUrl()); - if("xls".equals(fileEntity.getFormat())){ + if ("xls".equals(fileEntity.getFormat())) { wb = new HSSFWorkbook(is); - }else if("xlsx".equals(fileEntity.getFormat())){ + } else if ("xlsx".equals(fileEntity.getFormat())) { wb = new XSSFWorkbook(is); } - } catch (FileNotFoundException e) { - e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { - if(null != is){ + if (null != is) { is.close(); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } - if(wb != null){ - ListerrMsg = new ArrayList<>(); - String msg =""; + if (wb != null) { + List errMsg = new ArrayList<>(); //获取Sheet1 Sheet sheet = wb.getSheet("Sheet1"); @@ -351,117 +372,276 @@ public class ResourcesQuestionService extends CoreBaseService //获取最大列数 int colNum = firstRow.getPhysicalNumberOfCells(); - String[] columns = {"归属课程","归属章节","题型","分值","题干","选项A","选项B","选项C","选项D","选项E","答案","解析"}; + String[] columns = {"归属课程", "理论课程分类", "归属章节", "题型", "分值", "题干", "选项A", "选项B", "选项C", "选项D", "选项E", "答案", "解析"}; - Map map = new HashMap<>();//获取需要的表头的列 + Map map = new HashMap<>();//获取需要的表头的列 //从第一列找到需要的表头 - for (int i=0; i "_" + item + "_").collect(Collectors.joining("|")); + // 如果为空字符串,那么代表这个学校,还没有授权的课程,所以是不会显示任何东西的。 + baseCourseInfo.setCourseInfoIdPlural(StrUtil.blankToDefault(ids, "未授权应用")); + } - for (int i = 1; i"; - errMsg.add(new String[]{"第"+(i+1)+"数据为空"}); + errMsg.add(new String[]{"第" + (i + 1) + "数据为空"}); continue; } + String courseInfoName = getCellFormatValue(row.getCell(map.get(columns[0]))); + String courseLabelName = getCellFormatValue(row.getCell(map.get(columns[1]))); + String chapterName = getCellFormatValue(row.getCell(map.get(columns[2]))); + String questionType = getCellFormatValue(row.getCell(map.get(columns[3]))); + + if (StringUtils.isNotBlank(questionType)) { + questionType = questionType.replace("题", "").trim(); + } - String courseInfoName = getCellFormatValue(row.getCell(map.get(columns[1]))); - String questionType = getCellFormatValue(row.getCell(map.get(columns[2]))); - String questionScore = getCellFormatValue(row.getCell(map.get(columns[3]))); - String questionStem = getCellFormatValue(row.getCell(map.get(columns[4]))); + String questionScore = getCellFormatValue(row.getCell(map.get(columns[4]))); + String questionStem = getCellFormatValue(row.getCell(map.get(columns[5]))); - String questionOptionA = getCellFormatValue(row.getCell(map.get(columns[5]))); - String questionOptionB = getCellFormatValue(row.getCell(map.get(columns[6]))); - String questionOptionC = getCellFormatValue(row.getCell(map.get(columns[7]))); - String questionOptionD = getCellFormatValue(row.getCell(map.get(columns[8]))); - String questionOptionE = getCellFormatValue(row.getCell(map.get(columns[9]))); + String questionOptionA = getCellFormatValue(row.getCell(map.get(columns[6]))); + String questionOptionB = getCellFormatValue(row.getCell(map.get(columns[7]))); + String questionOptionC = getCellFormatValue(row.getCell(map.get(columns[8]))); + String questionOptionD = getCellFormatValue(row.getCell(map.get(columns[9]))); + String questionOptionE = getCellFormatValue(row.getCell(map.get(columns[10]))); - String questionAnswer = getCellFormatValue(row.getCell(map.get(columns[10]))); - questionAnswer = answerFormat(questionType,questionAnswer);//格式化 - String questionAnalysis = getCellFormatValue(row.getCell(map.get(columns[11]))); + String questionAnswer = getCellFormatValue(row.getCell(map.get(columns[11]))); + questionAnswer = answerFormat(questionType, questionAnswer);//格式化 + String questionAnalysis = getCellFormatValue(row.getCell(map.get(columns[12]))); - if(StringUtils.isBlank(questionScore)){ + if (StringUtils.isBlank(questionScore)) { questionScore = "1";//默认一分 } - if(StringUtils.isNotBlank(questionType)){ - questionType = questionType.replace("题",""); - } String m = ""; - if(StringUtils.isNotBlank(questionAnswer)){ - m = judge(questionType,questionOptionA,questionOptionB,questionOptionC,questionOptionD,questionOptionE,questionAnswer); + if (StringUtils.isNotBlank(questionAnswer)) { + m = judge(questionType, questionOptionA, questionOptionB, questionOptionC, questionOptionD, questionOptionE, questionAnswer); } - if(StringUtils.isBlank(courseInfoName)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[1])+1)+"列,第"+(i+1)+"行归属章节为空"}); + if (StringUtils.isBlank(courseInfoName)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[0]) + 1) + "列,第" + (i + 1) + "行课程为空"}); continue; - }else if(courseInfoName.split("__ID").length != 2){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[1])+1)+"列,第"+(i+1)+"行章节ID丢失"}); + } else if (StringUtils.isBlank(chapterName)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[2]) + 1) + "列,第" + (i + 1) + "行归属章节为空"}); continue; - }else if(StringUtils.isBlank(questionType)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[2])+1)+"列,第"+(i+1)+"行题型为空"}); + } + //else if (courseInfoName.split("__ID").length != 2) { + // errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[1]) + 1) + "列,第" + (i + 1) + "行章节ID丢失"}); + // continue; + //} + else if (StringUtils.isBlank(questionType)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[3]) + 1) + "列,第" + (i + 1) + "行题型为空"}); continue; - }else if(ToolUtils.findInSet("单选,多选,判断",questionType)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[2])+1)+"列,第"+(i+1)+"行题型异常"}); + } else if (!ToolUtils.findInSet("单选,多选,判断", questionType)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[3]) + 1) + "列,第" + (i + 1) + "行题型异常"}); continue; - }else if(StringUtils.isBlank(questionScore)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[3])+1)+"列,第"+(i+1)+"行分值为空"}); + } else if (StringUtils.isBlank(questionScore)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[4]) + 1) + "列,第" + (i + 1) + "行分值为空"}); continue; - }else if(StringUtils.isBlank(questionStem)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[4])+1)+"列,第"+(i+1)+"行题干为空"}); + } else if (StringUtils.isBlank(questionStem)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[5]) + 1) + "列,第" + (i + 1) + "行题干为空"}); continue; - }else if(StringUtils.isBlank(questionAnswer)){ - errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[10])+1)+"列,第"+(i+1)+"行答案为空"}); + } else if (StringUtils.isBlank(questionAnswer)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[11]) + 1) + "列,第" + (i + 1) + "行答案为空"}); continue; - }else if(StringUtils.isNotBlank(m)){ - errMsg.add(new String[]{"第"+(i+1)+"行"+m}); + } else if (StringUtils.isNotBlank(m)) { + errMsg.add(new String[]{"第" + (i + 1) + "行" + m}); continue; - }else { - ResourcesQuestion rq = new ResourcesQuestion(); - rq.setQuestionStem(questionStem); - if(resourcesQuestionDao.template(rq).size()>0){ - errMsg.add(new String[]{"第"+(i+1)+"行题目重复"}); - continue; + } else if (!NumberUtil.isNumber(questionScore)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[4]) + 1) + "列,第" + (i + 1) + "行分值数值格式错误"}); + continue; + } else { + questionAnswer = questionAnswer.trim(); + courseInfoName = courseInfoName.trim(); + chapterName = chapterName.trim(); + questionType = questionType.trim(); + questionScore = questionScore.trim(); + questionStem = questionStem.trim(); + questionAnswer = questionAnswer.trim(); + if (!StringUtils.isBlank(courseLabelName)) { + courseLabelName = courseLabelName.trim(); + } + + + //去掉最后一个逗号 + if (StringUtils.isNotBlank(questionAnswer)) { + if (questionAnswer.lastIndexOf(",") == questionAnswer.length() - 1) { + questionAnswer = questionAnswer.substring(0, questionAnswer.length() - 1); + } + } + + CourseInfo courseInfo = null; + if (courseInfoCache.containsKey(courseInfoName)) { + courseInfo = courseInfoCache.get(courseInfoName); + if (Objects.equals(courseInfo.getCourseInfoStatus(),2)){ + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[0]) + 1) + "列,第" + (i + 1) + "行课程处于禁止状态,禁止导入"}); + continue; + } + } else { + //查课程 + CourseInfoQuery courseInfoQuery = new CourseInfoQuery(); + courseInfoQuery.setCourseLabelStatus(1); + courseInfoQuery.setCourseInfoType(1); + courseInfoQuery.setCourseInfoStatusPlural("1,2"); + courseInfoQuery.setCourseInfoName(courseInfoName); + courseInfoQuery.setOrgIdPlural(baseCourseInfo.getOrgIdPlural()); + courseInfoQuery.setCourseInfoIdPlural(baseCourseInfo.getCourseInfoIdPlural()); + + //调现有的接口去查 + List courseInfoList = courseInfoService.getCourseInfoValues(courseInfoQuery); + + //没有课程,添加课程 + if (CollectionUtils.isEmpty(courseInfoList)) { + if (StringUtils.isBlank(courseLabelName)) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[1]) + 1) + "列,第" + (i + 1) + "行此课程不存在,并且理论课程分类栏目为空"}); + continue; + } + CourseLabel courseLabel = new CourseLabel(); + courseLabel.setCourseLabelType(THEORY.getType()); + courseLabel.setCourseLabelName(courseLabelName.trim()); + courseLabel.setCourseLabelStatus(1); + CourseLabel once = courseLabelService.getOnce(courseLabel); + if (once == null) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[1]) + 1) + "列,第" + (i + 1) + "行此课程不存在,并且理论课程分类栏目的数据在数据库中检索为空"}); + continue; + } + CourseInfoQuery paras = new CourseInfoQuery(); + paras.setCourseInfoType(1); + paras.setCourseLabelId(once.getCourseLabelId()); + paras.setCourseInfoStatus(1); + paras.setCourseInfoName(courseInfoName); + paras.setOrgId(coreUser.getOrgId()); + paras.setUserId(coreUser.getId()); + paras.setAddTime(now); + paras.setCourseInfoType(1); + paras.setCourseInfoContent(courseInfoName); + + CourseInfo addCourseInfo = courseInfoService.add(paras); + + if (addCourseInfo == null || addCourseInfo.getCourseInfoId() == null) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[0]) + 1) + "列,第" + (i + 1) + "行添加课程到系统失败"}); + continue; + } + //移除缓存 + courseInfoService.flushCache(addCourseInfo.getCourseInfoId()); + corePlatformService.clearDictCache(); + courseInfoCache.put(courseInfoName, addCourseInfo); + } else { + courseInfoCache.put(courseInfoName, courseInfoList.get(0)); + List chapterList = new ArrayList<>(); + //处理子节点章节 + Object o = courseInfoList.get(0).get("chapter"); + if (o != null) { + String[] split = o.toString().split(","); + for (String s : split) { + // 第1章认识Python软件1__ID2, 第2章Python进阶操作__ID3, 第3章金融数据爬取__ID4, 第4章资产定价模型__ID5,第5章如何计算收益与风险?__ID6, 第6章股票价格涨跌趋势预测__ID7, 第7章上市公司综合评价__ID8, 第8章多因子选股策略__ID9, 第9章基于网络舆情的投资者情绪分析__ID10, 第10章个人信用违约预测与评分卡建立__ID11, 第11章银行产品精准营销__ID12, 第12章保险欺诈识别__ID13 + + CourseInfo item = new CourseInfo(); + item.setCourseInfoName(s.split("__")[0].trim()); + item.setCourseInfoId(Long.valueOf(s.split("__")[1].replace("ID", "").trim())); + item.setCourseInfoParentId(courseInfoList.get(0).getCourseInfoId()); + chapterList.add(item); + } + } + Map> collect = chapterList.stream().collect(groupingBy(CourseInfo::getCourseInfoName)); + chapterCache.put(courseInfoName, collect); + } + courseInfo = courseInfoCache.get(courseInfoName); + if (Objects.equals(courseInfo.getCourseInfoStatus(),2)){ + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[0]) + 1) + "列,第" + (i + 1) + "行课程处于禁止状态,禁止导入"}); + continue; + } + } + + //查章节 + CourseInfo chapterCourseInfo = null; + Map> chapterMap = chapterCache.get(courseInfoName); + + if (chapterMap == null) { + chapterMap = new HashMap<>(); + chapterCache.put(courseInfoName, chapterMap); } - if(StringUtils.isNotBlank(questionAnswer)){ - if(questionAnswer.lastIndexOf(",") == questionAnswer.length()-1){ - questionAnswer = questionAnswer.substring(0,questionAnswer.length()-1); + if (CollectionUtils.isEmpty(chapterMap.get(chapterName))) { + //没有这个子章节,新建,为什么不再去查呢,因为上面查课程已经顺路查了,就的话早就查出来了 + CourseInfoQuery child = new CourseInfoQuery(); + child.setCourseInfoParentId(courseInfo.getCourseInfoId()); + child.setOrgId(courseInfo.getOrgId()); + child.setUserId(courseInfo.getUserId()); + child.setCourseInfoName(chapterName); + child.setAddTime(now); + child.setCourseInfoContent(chapterName); + child.setCourseInfoStatus(1); + child.setCourseInfoType(2); + CourseInfo addChild = courseInfoService.add(child); + + if (addChild == null || addChild.getCourseInfoId() == null) { + errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[2]) + 1) + "列,第" + (i + 1) + "行添加章节到系统失败"}); + continue; } + //移除缓存 + courseInfoService.flushCache(addChild.getCourseInfoId()); + corePlatformService.clearDictCache(); + courseInfoCache.put(courseInfoName, addChild); + + chapterMap.put(chapterName, new ArrayList() {{ + add(addChild); + }}); + chapterCourseInfo = addChild; + } else { + chapterCourseInfo = chapterMap.get(chapterName).get(0); } + ResourcesQuestion rq = new ResourcesQuestion(); + rq.setQuestionStem(questionStem); + rq.setCourseInfoId(chapterCourseInfo.getCourseInfoId()); + if (resourcesQuestionDao.template(rq).size() > 0) { + errMsg.add(new String[]{"第" + (i + 1) + "行题目重复"}); + continue; + } + + //插入题目 ResourcesQuestion pojo = new ResourcesQuestion(); - pojo.setCourseInfoId(Long.parseLong(courseInfoName.split("__ID")[1])); - pojo.setQuestionType("单选".equals(questionType)?1:"多选".equals(questionType)?2:3); - pojo.setQuestionScore(StringUtils.isNotBlank(questionScore)?new BigDecimal(questionScore):BigDecimal.ONE); + pojo.setCourseInfoId(chapterCourseInfo.getCourseInfoId()); + pojo.setQuestionType("单选".equals(questionType) ? 1 : "多选".equals(questionType) ? 2 : 3); + pojo.setQuestionScore(StringUtils.isNotBlank(questionScore) ? new BigDecimal(questionScore) : BigDecimal.ONE); pojo.setQuestionStem(questionStem); - if(((Integer)3).equals(pojo.getQuestionType())){ + if (((Integer) 3).equals(pojo.getQuestionType())) { pojo.setQuestionAnswer(questionAnswer); - }else { + } else { pojo.setQuestionOptionA(questionOptionA); pojo.setQuestionOptionB(questionOptionB); pojo.setQuestionOptionC(questionOptionC); @@ -472,55 +652,65 @@ public class ResourcesQuestionService extends CoreBaseService pojo.setQuestionAnalysis(questionAnalysis); // 默认导入上架状态 pojo.setQuestionStatus(1); - pojo.setAddType(ADMIN_ADD); + if (coreUser.isUniAdmin()) { + pojo.setAddType(FACULTY_ADD); + }else { + pojo.setAddType(ADMIN_ADD); + } + insert(pojo); - CourseInfo courseInfo = courseInfoDao.single(pojo.getCourseInfoId()); + //更新章节 + CourseInfo c = new CourseInfo(); + c.setCourseInfoId(chapterCourseInfo.getCourseInfoId()); + c.setResourcesQuestionIds(StringUtils.isNotBlank(chapterCourseInfo.getResourcesQuestionIds()) ? (chapterCourseInfo.getResourcesQuestionIds() + "," + pojo.getResourcesQuestionId()) : pojo.getResourcesQuestionId().toString()); + courseInfoDao.updateTemplateById(c); - if(null != courseInfo){ - CourseInfo c = new CourseInfo(); - c.setCourseInfoId(courseInfo.getCourseInfoId()); - c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds())?(courseInfo.getResourcesQuestionIds()+","+pojo.getResourcesQuestionId()):pojo.getResourcesQuestionId().toString()); - courseInfoDao.updateTemplateById(c); - } + //更新本地缓存中章节中的题目ids + chapterCourseInfo.setResourcesQuestionIds(c.getResourcesQuestionIds()); count++; } } - if(count>0){ + if (count > 0) { JsonResult jsonResult = new JsonResult(); jsonResult.setCode(JsonReturnCode.SUCCESS.getCode()); jsonResult.setData(errMsg); - jsonResult.setMsg("导入成功,共导入"+count+"条"+(StringUtils.isNotBlank(msg)?"
"+msg:"")); + jsonResult.setMsg("导入成功,共导入" + count + "条。"); + return jsonResult; + } else { + JsonResult jsonResult = new JsonResult(); + jsonResult.setCode(JsonReturnCode.FAIL.getCode()); + jsonResult.setData(errMsg); + jsonResult.setMsg("导入全部失败,请查看下面的失败列表"); return jsonResult; - }else { - return JsonResult.failMessage("导入失败"+(StringUtils.isNotBlank(msg)?"
"+msg:"")); } } return JsonResult.failMessage("导入失败"); - }else { + } else { return JsonResult.failMessage("上传失败"); } - }else { + } else { return JsonResult.failMessage("上传失败"); } } //答案格式化 - public String answerFormat(Integer questionType,String questionAnswer){ - return answerFormat(((Integer)1).equals(questionType)?"单选":((Integer)2).equals(questionType)?"多选":"判断",questionAnswer); + public String answerFormat(Integer questionType, String questionAnswer) { + return answerFormat(((Integer) 1).equals(questionType) ? "单选" : ((Integer) 2).equals(questionType) ? "多选" : "判断", questionAnswer); } + //答案格式化 - public String answerFormat(String questionType,String questionAnswer){ - if(StringUtils.isNotBlank(questionType)){ - if("判断".equals(questionType)){ - if(StringUtils.isNotBlank(questionAnswer)){ - if("A".equalsIgnoreCase(questionAnswer)){ + public String answerFormat(String questionType, String questionAnswer) { + if (StringUtils.isNotBlank(questionType)) { + if ("判断".equals(questionType)) { + if (StringUtils.isNotBlank(questionAnswer)) { + if ("A".equalsIgnoreCase(questionAnswer)) { questionAnswer = "对"; - }else if("B".equalsIgnoreCase(questionAnswer)){ + } else if ("B".equalsIgnoreCase(questionAnswer)) { questionAnswer = "错"; } } @@ -530,18 +720,18 @@ public class ResourcesQuestionService extends CoreBaseService standardOption.add("错"); String[] answer = questionAnswer.split(""); questionAnswer = ""; - for(int i=0;i standardOption = new ArrayList<>(); standardOption.add("A"); @@ -552,10 +742,10 @@ public class ResourcesQuestionService extends CoreBaseService String[] answer = questionAnswer.split(""); questionAnswer = ""; - for(int i=0;i String questionOptionC, String questionOptionD, String questionOptionE, - String questionAnswer){ - return judge(((Integer)1).equals(questionType)?"单选":((Integer)2).equals(questionType)?"多选":"判断",questionOptionA,questionOptionB,questionOptionC,questionOptionD,questionOptionE,questionAnswer); + String questionAnswer) { + return judge(((Integer) 1).equals(questionType) ? "单选" : ((Integer) 2).equals(questionType) ? "多选" : "判断", questionOptionA, questionOptionB, questionOptionC, questionOptionD, questionOptionE, questionAnswer); } public String judge(String questionType, @@ -584,43 +774,43 @@ public class ResourcesQuestionService extends CoreBaseService String questionOptionC, String questionOptionD, String questionOptionE, - String questionAnswer){ - String[] answer = {"A","B","C","D","E"}; - String[] questionOption = {questionOptionA,questionOptionB,questionOptionC,questionOptionD,questionOptionE}; + String questionAnswer) { + String[] answer = {"A", "B", "C", "D", "E"}; + String[] questionOption = {questionOptionA, questionOptionB, questionOptionC, questionOptionD, questionOptionE}; String[] questionAnswers = questionAnswer.split(","); - if("判断".equals(questionType)){ - if(questionAnswers.length != 1){ + if ("判断".equals(questionType)) { + if (questionAnswers.length != 1) { return "题型为判断,答案应该唯一"; } - }else { - if("单选".equals(questionType)){ - if(StringUtils.isBlank(questionOptionA) + } else { + if ("单选".equals(questionType)) { + if (StringUtils.isBlank(questionOptionA) && StringUtils.isBlank(questionOptionB) && StringUtils.isBlank(questionOptionC) && StringUtils.isBlank(questionOptionD) - && StringUtils.isBlank(questionOptionE)){ + && StringUtils.isBlank(questionOptionE)) { return "选项都为空"; } - if(questionAnswers.length != 1){ + if (questionAnswers.length != 1) { return "题型为单选,答案应该唯一"; } - }else if("多选".equals(questionType)){ - if(StringUtils.isBlank(questionOptionA) + } else if ("多选".equals(questionType)) { + if (StringUtils.isBlank(questionOptionA) && StringUtils.isBlank(questionOptionB) && StringUtils.isBlank(questionOptionC) && StringUtils.isBlank(questionOptionD) - && StringUtils.isBlank(questionOptionE)){ + && StringUtils.isBlank(questionOptionE)) { return "选项都为空"; } - if(questionAnswers.length < 2){ + if (questionAnswers.length < 2) { return "题型为多选,答案应该为多个"; } } - for(int i=0;i public String getCellFormatValue(Cell cell) { String value = null; - if (cell != null){ + if (cell != null) { switch (cell.getCellTypeEnum()) { case STRING: value = cell.getRichStringCellValue().getString(); @@ -664,6 +854,7 @@ public class ResourcesQuestionService extends CoreBaseService /** * 根据题目类型分类指定题目 + * * @param resourcesApplicationIds * @return */ @@ -675,6 +866,7 @@ public class ResourcesQuestionService extends CoreBaseService /** * 随机打乱题目中选项的顺序 + * * @param questionList */ public void orderOptions(List questionList) { @@ -682,7 +874,7 @@ public class ResourcesQuestionService extends CoreBaseService return; } questionList.forEach(resourcesQuestion -> { - shuffleOrderOptions(resourcesQuestion, "questionAnswer","questionOption", true); + shuffleOrderOptions(resourcesQuestion, "questionAnswer", "questionOption", true); }); } @@ -703,7 +895,7 @@ public class ResourcesQuestionService extends CoreBaseService * 通过无类别区分的题目ID,对题目进行分组。并构建需要的数据 * 只适用于手动出题这块。 * - * @param noDiffResourcesQuestionIdPlural 题目ID来自ResourcesQuestion表。 + * @param noDiffResourcesQuestionIdPlural 题目ID来自ResourcesQuestion表。 * @return */ public Map buildSettingDtoListByNoDiffQuestionIds( @@ -786,6 +978,7 @@ public class ResourcesQuestionService extends CoreBaseService /** * 根据开课ID获取下面的题目类型和类型下的总题数 + * * @param courseInfoQuery * @return */ @@ -797,6 +990,7 @@ public class ResourcesQuestionService extends CoreBaseService /** * 根据机构ids和课程分类查询题目类型对应的数量 + * * @param courseInfoQuery * @return */ @@ -812,8 +1006,8 @@ public class ResourcesQuestionService extends CoreBaseService * 功能描述:
* word方式导入题目 * - * @param fileEntityList 文件列表 - * @param coreUser 传入的用户,使用机构ID和用户ID + * @param fileEntityList 文件列表 + * @param coreUser 传入的用户,使用机构ID和用户ID * @return {@link JsonResult} * @Author: lx * @Date: 2023/1/8 22:49 @@ -826,12 +1020,12 @@ public class ResourcesQuestionService extends CoreBaseService ImportQuestionByWordTemplateResultVO resultVO = new ImportQuestionByWordTemplateResultVO(); /** 仅用于存放标题 */ - final String[] title = { Strings.EMPTY }; + final String[] title = {Strings.EMPTY}; /** 标题暂存,可能是多个 */ final StringBuilder titleStb = new StringBuilder(); /** 循环文件集合 */ - for (FileEntity fileEntity: fileEntityList) { + for (FileEntity fileEntity : fileEntityList) { /** 上传文件的临时路径 */ String importPath = fileEntity.getAbsoluteUrl(); /** 新建文件夹绝对路径 */ @@ -840,7 +1034,7 @@ public class ResourcesQuestionService extends CoreBaseService @Cleanup FileInputStream fileInputStream = new FileInputStream(importPath); xDocument.set(new XWPFDocument(fileInputStream)); /** 集合拷贝 */ - List myParagraphs = BeanCopyUtil.copyListProperties(xDocument.get().getParagraphs() , MyXWPFParagraph::new, (t, d) -> { + List myParagraphs = BeanCopyUtil.copyListProperties(xDocument.get().getParagraphs(), MyXWPFParagraph::new, (t, d) -> { d.setXwpfParagraph(t); }); @@ -959,10 +1153,14 @@ public class ResourcesQuestionService extends CoreBaseService resultVO.setQuestionCount(recordsCount.get()); resultVO.setQuestionList(questionList); - } catch (Exception ex) { ex.printStackTrace(); } - finally { - try {xDocument.get().close(); } - catch (Exception ioe) { ioe.printStackTrace(); } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + try { + xDocument.get().close(); + } catch (Exception ioe) { + ioe.printStackTrace(); + } } } return resultVO; @@ -970,10 +1168,11 @@ public class ResourcesQuestionService extends CoreBaseService /** * 根据传入的参数,模糊匹配课程ID,并放在返回值中 - * @param fileEntityList 文件列表 - * @param businessType 来源类型 - * @param matchType 匹配类型 - * @param coreUser 用户 + * + * @param fileEntityList 文件列表 + * @param businessType 来源类型 + * @param matchType 匹配类型 + * @param coreUser 用户 * @return */ public ImportQuestionByWordTemplateResultVO importQuestionByWordTemplateType(List fileEntityList, QuestionBusinessTypeEnum businessType, @@ -1001,13 +1200,14 @@ public class ResourcesQuestionService extends CoreBaseService /** * 给题目添加选项 - * @param text 单个选项的内容 - * @param question 题目实体 + * + * @param text 单个选项的内容 + * @param question 题目实体 */ - public void putQuestionOption(String text, ResourcesQuestion question){ + public void putQuestionOption(String text, ResourcesQuestion question) { //text为选项 - if (StringUtils.isNotBlank(text)){ - text = text.replace("<","<").replace(">",">").replaceFirst(OPTION_REGEX, ""); + if (StringUtils.isNotBlank(text)) { + text = text.replace("<", "<").replace(">", ">").replaceFirst(OPTION_REGEX, ""); } question.putQuestionOptionList(Collections.singletonList(text)); } @@ -1017,10 +1217,10 @@ public class ResourcesQuestionService extends CoreBaseService * 直接在引用的数据上进行修改数据 * 换行追加的方法 * - * @param typeConcatEnum 题型枚举 - * @param paragraphType 段落类型 - * @param v 当前段落文本 - * @param question 问题实体 + * @param typeConcatEnum 题型枚举 + * @param paragraphType 段落类型 + * @param v 当前段落文本 + * @param question 问题实体 */ private void insertCorrespondingParagraph(final AtomicReference typeConcatEnum, final StrategyContext.QuestionParagraphTypeEnum paragraphType, @@ -1028,18 +1228,19 @@ public class ResourcesQuestionService extends CoreBaseService final AtomicReference question, final AtomicReference questionStem, final AtomicReference questionAnswer) { - if(null == paragraphType) { + if (null == paragraphType) { return; } - switch(paragraphType) { + switch (paragraphType) { /** 题干 */ case STEM: { questionStem.set(questionStem.get().concat(v)); String replacedText = questionStem.get().replaceAll(LINE_8, SPLIT_); question.get().setQuestionOptionA(String.valueOf(StrUtil.count(replacedText, SPLIT_))); question.get().setQuestionStem(replacedText); - } break; + } + break; /** 选项 */ case OPTION: { @@ -1047,25 +1248,28 @@ public class ResourcesQuestionService extends CoreBaseService question.get().putQuestionOptionList(Collections.singletonList(v)); } // 分析题和填空题 - else if(ANALYSIS_QUESTION.equals(typeConcatEnum.get())) { + else if (ANALYSIS_QUESTION.equals(typeConcatEnum.get())) { question.get().setQuestionOptionB(question.get().getQuestionOptionB().concat(v).replaceAll(LINE_8, SPLIT_)); question.get().setQuestionOptionA(String.valueOf(StrUtil.count(question.get().getQuestionOptionB(), SPLIT_))); } // 填空题 - else if(FILL_QUESTION.equals(typeConcatEnum.get())) { + else if (FILL_QUESTION.equals(typeConcatEnum.get())) { question.get().setQuestionOptionA(String.valueOf(StrUtil.count(question.get().getQuestionOptionB(), SPLIT_))); } - } break; + } + break; /** 答案 */ case ANSWER: { questionAnswer.set(secondFormat(questionAnswer.get().concat(v), typeConcatEnum.get())); question.get().setQuestionAnswer(questionAnswer.get()); - } break; + } + break; } } /** * 查询是否存在,不存在则插入新数据 + * * @param typeConcatEnum */ public ResourcesQuestionTypeEnum selectQuestionType(StrategyContext.QuestionTypeConcatEnum typeConcatEnum) { @@ -1075,10 +1279,13 @@ public class ResourcesQuestionService extends CoreBaseService /** * 验证本地待上传的题库 是否存在重复, * 本次上传的题目判断唯一性 + * * @param questionList */ private void checkLocalQuestionsUnique(List questionList) { - if (ObjectUtil.isEmpty(questionList)) { return; } + if (ObjectUtil.isEmpty(questionList)) { + return; + } // 默认给50道题的容量 final Set hashSet = new LinkedHashSet<>(50); final List strings = new ArrayList<>(50); @@ -1087,9 +1294,10 @@ public class ResourcesQuestionService extends CoreBaseService // 如果添加失败,则代表题目已经存在 if (!hashSet.add(questionToString)) { // 告知前端 错误异常 - question.set("errMsg", String.format("可能与上面的第 【%s】 题重复",strings.indexOf(questionToString) + 1)); + question.set("errMsg", String.format("可能与上面的第 【%s】 题重复", strings.indexOf(questionToString) + 1)); + } else { + strings.add(questionToString); } - else { strings.add(questionToString); } } hashSet.clear(); @@ -1098,6 +1306,7 @@ public class ResourcesQuestionService extends CoreBaseService /** * 检测题目唯一 + * * @param question */ public void checkUnique(@NotNull ResourcesQuestion question) { @@ -1108,8 +1317,8 @@ public class ResourcesQuestionService extends CoreBaseService if (resourcesQuestionDao.checkUnique(question) > 0) { question.set("errMsg", ObjectUtil.defaultIfNull(question.get("errMsg"), "") + "该题目可能存在重复!"); } - }catch (Exception e){ - log.error("报错了:"+question.getQuestionStemRegexp()); + } catch (Exception e) { + log.error("报错了:" + question.getQuestionStemRegexp()); e.printStackTrace(); } } @@ -1127,12 +1336,14 @@ public class ResourcesQuestionService extends CoreBaseService *
  • 只取 对
  • *
  • 转大写
  • * - * @param questionAnswer 答案 - * @param typeConcatEnum 题目类型 + * @param questionAnswer 答案 + * @param typeConcatEnum 题目类型 * @return */ public String secondFormat(String questionAnswer, StrategyContext.QuestionTypeConcatEnum typeConcatEnum) { - if (StringUtils.isBlank(questionAnswer)) { return questionAnswer; } + if (StringUtils.isBlank(questionAnswer)) { + return questionAnswer; + } // 去除各种空格 questionAnswer = org.springframework.util.StringUtils.trimAllWhitespace(questionAnswer); //

    ABC

    只获取ABC 删除所有标签元素。 @@ -1141,14 +1352,14 @@ public class ResourcesQuestionService extends CoreBaseService // String res = ObjectUtil.defaultIfNull(ReUtil.getGroup0("[A-Za-z\\u4e00-\\u9fa5]+", replaced), replaced).toUpperCase(); String res = replaced.trim(); // 如果只有字母,则拆分规则: ABC => A,B,C - if (typeConcatEnum.equals(MULTIPLE) && ReUtil.isMatch("^[A-Za-z]+$",res)) { + if (typeConcatEnum.equals(MULTIPLE) && ReUtil.isMatch("^[A-Za-z]+$", res)) { // ABC => A,B,C String[] split = res.split(""); Arrays.sort(split); res = ArrayUtil.join(split, ","); } // 判断题逻辑 - if (typeConcatEnum.equals(DECIDE) && ReUtil.isMatch("(正确)|(错误)|A|B",res)) { + if (typeConcatEnum.equals(DECIDE) && ReUtil.isMatch("(正确)|(错误)|A|B", res)) { // ABC => A,B,C res = res.replaceAll("(正确)|A", "对").replaceAll("(错误)|B", "错"); } @@ -1158,8 +1369,8 @@ public class ResourcesQuestionService extends CoreBaseService /** * 根据开课ID获取下面的题目类型和类型下的总题数 * - * @param courseInfoId 课程ID - * @param questionSettingId 开课题目配置ID + * @param courseInfoId 课程ID + * @param questionSettingId 开课题目配置ID * @return */ public List getGroupQuestionTypeCountAndSelectInfo(@NotNull(message = "课程ID不能为空!") Long courseInfoId, diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScoreDashboardService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScoreDashboardService.java index 0d329b0a..8b338dff 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScoreDashboardService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseScoreDashboardService.java @@ -18,7 +18,6 @@ import com.ibeetl.jlw.enums.ChatLogSendTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.enums.SignInTypeEnum; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery; -import com.ibeetl.jlw.web.query.TeacherOpenCourseScheduleSessionQuery; import com.ibeetl.jlw.web.query.TeacherOpenCourseScoreDashboardQuery; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; import lombok.extern.slf4j.Slf4j; @@ -530,6 +529,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService collect = select3.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList()); @@ -610,7 +614,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService courseInfoArr = new ArrayList(); Map> map = new HashMap>(); - CourseInfoQuery courseInfoQuery = new CourseInfoQuery(); - courseInfoQuery.setCourseLabelStatus(1); -// courseInfoQuery.setCourseLabelTypes("应用课程类"); - courseInfoQuery.setCourseInfoType(1); - courseInfoQuery.setCourseInfoStatus(1); - - List courseInfoList = courseInfoService.getCourseInfoValues(courseInfoQuery); - - if(null != courseInfoList && courseInfoList.size()>0){ - for(int i=0;i()); - } - - } - }else { - throw new PlatformException("请先添加院校"); - } +// CourseInfoQuery courseInfoQuery = new CourseInfoQuery(); +// courseInfoQuery.setCourseLabelStatus(1); +//// courseInfoQuery.setCourseLabelTypes("应用课程类"); +// courseInfoQuery.setCourseInfoType(1); +// courseInfoQuery.setCourseInfoStatus(1); + + //List courseInfoList = courseInfoService.getCourseInfoValues(courseInfoQuery); + // + //if(null != courseInfoList && courseInfoList.size()>0){ + // for(int i=0;i()); + // } + // + // } + //}else { + // throw new PlatformException("请先添加院校"); + //} // 创建一个专门用来存放地区信息的隐藏sheet页 // 因此也不能在现实页之前创建,否则无法隐藏。 - Sheet hideSheet = workbook.createSheet("课程章节信息"); - // 将此sheet隐藏 - workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true); + //Sheet hideSheet = workbook.createSheet("课程章节信息"); + //// 将此sheet隐藏 + //workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true); - int rowId = 0; + //int rowId = 0; // 设置第一行,存省的信息 // Row provinceRow = hideSheet.createRow(rowId++); // provinceRow.createCell(0).setCellValue("省列表"); @@ -490,23 +483,23 @@ public class ResourcesQuestionController{ // provinceCell.setCellValue(provinceArr.get(i)); // } // 将具体的数据写入到每一行中,行开头为父级区域,后面是子区域。 - Iterator keyIterator = map.keySet().iterator(); - while (keyIterator.hasNext()) { - String key = keyIterator.next(); - List son = map.get(key); - Row row = hideSheet.createRow(rowId++); - row.createCell(0).setCellValue(key); - for (int i = 0; i < son.size(); i++) { - Cell cell = row.createCell(i+1); - cell.setCellValue(son.get(i)); - } - // 添加名称管理器 - String range = getRange(1, rowId, son.size()); - Name name = workbook.createName(); - name.setNameName(key); - String formula = "课程章节信息!" + range; - name.setRefersToFormula(formula); - } + //Iterator keyIterator = map.keySet().iterator(); + //while (keyIterator.hasNext()) { + // String key = keyIterator.next(); + // List son = map.get(key); + // Row row = hideSheet.createRow(rowId++); + // row.createCell(0).setCellValue(key); + // for (int i = 0; i < son.size(); i++) { + // Cell cell = row.createCell(i+1); + // cell.setCellValue(son.get(i)); + // } + // // 添加名称管理器 + // String range = getRange(1, rowId, son.size()); + // Name name = workbook.createName(); + // name.setNameName(key); + // String formula = "课程章节信息!" + range; + // name.setRefersToFormula(formula); + //} // 课程规则 // DVConstraint provConstraint = DVConstraint.createExplicitListConstraint(courseInfoArr.toArray(new String[] {})); @@ -515,26 +508,26 @@ public class ResourcesQuestionController{ // provinceDataValidation.createErrorBox("error", "请选择正确的课程"); // sheetPro.addValidationData(provinceDataValidation); - XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheetPro); - XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(courseInfoArr.toArray(new String[] {})); - CellRangeAddressList addressList = new CellRangeAddressList(1, 20, 0, 0); - XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList); - validation.createErrorBox("error", "请选择正确的课程"); - sheetPro.addValidationData(validation); - - - // 对前200行设置有效性 - for (int i = 2; i < 200; i++) { - setDataValidation("A", sheetPro, i, 2); - } - - try { - if(null != is){ - is.close(); - } - }catch (Exception e){ - e.printStackTrace(); - } + //XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheetPro); + //XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(courseInfoArr.toArray(new String[] {})); + //CellRangeAddressList addressList = new CellRangeAddressList(1, 20, 0, 0); + //XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList); + //validation.createErrorBox("error", "请选择正确的课程"); + //sheetPro.addValidationData(validation); + // + // + //// 对前200行设置有效性 + //for (int i = 2; i < 200; i++) { + // setDataValidation("A", sheetPro, i, 2); + //} + // + //try { + // if(null != is){ + // is.close(); + // } + //}catch (Exception e){ + // e.printStackTrace(); + //} //准备将Excel的输出流通过response输出到页面下载 //八进制输出流 @@ -558,7 +551,9 @@ public class ResourcesQuestionController{ if (null != response && null != response.getOutputStream()) { response.getOutputStream().close(); } - } catch (Exception e) { } + } catch (Exception e) { + e.printStackTrace(); + } } } @@ -632,8 +627,8 @@ public class ResourcesQuestionController{ //导入模板信息 @PostMapping(MODEL + "/importTemplate.json") @ResponseBody - public JsonResult importTemplate(@RFile FileEntity fileEntity) { - return resourcesQuestionService.importTemplate(fileEntity); + public JsonResult importTemplate(@RFile FileEntity fileEntity,@SCoreUser CoreUser coreUser) { + return resourcesQuestionService.importTemplate(fileEntity,coreUser); } //查询客观题树结构 diff --git a/web/src/main/java/com/ibeetl/jlw/web/query/CourseInfoQuery.java b/web/src/main/java/com/ibeetl/jlw/web/query/CourseInfoQuery.java index eedf0f4e..c041440a 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/query/CourseInfoQuery.java +++ b/web/src/main/java/com/ibeetl/jlw/web/query/CourseInfoQuery.java @@ -77,6 +77,8 @@ public class CourseInfoQuery extends PageParam { // 机构IDs private String orgIdPlural; + private String courseInfoStatusPlural; + public String getOrgIdPlural() { return orgIdPlural; } @@ -332,4 +334,12 @@ public class CourseInfoQuery extends PageParam { public void setCourseInfoFullId(String courseInfoFullId) { this.courseInfoFullId = courseInfoFullId; } + + public String getCourseInfoStatusPlural() { + return courseInfoStatusPlural; + } + + public void setCourseInfoStatusPlural(String courseInfoStatusPlural) { + this.courseInfoStatusPlural = courseInfoStatusPlural; + } } diff --git a/web/src/main/resources/sql/jlw/courseInfo.md b/web/src/main/resources/sql/jlw/courseInfo.md index 697da18f..a5afa4a1 100644 --- a/web/src/main/resources/sql/jlw/courseInfo.md +++ b/web/src/main/resources/sql/jlw/courseInfo.md @@ -381,7 +381,13 @@ getCourseInfoValues and t.org_id =#orgId# @} @if(!isEmpty(userId)){ - and t.user_id =#userId# + and t.user_id =#userId# + @} + @if(!isEmpty(orgIdPlural)){ + and t.org_id in (#text(orgIdPlural)#) + @} + @if(!isEmpty(courseInfoStatusPlural)){ + and t.course_info_status in (#text(courseInfoStatusPlural)#) @} diff --git a/web/src/main/resources/templates/jlw/resourcesQuestion/importPage.html b/web/src/main/resources/templates/jlw/resourcesQuestion/importPage.html index f57bc145..56875317 100644 --- a/web/src/main/resources/templates/jlw/resourcesQuestion/importPage.html +++ b/web/src/main/resources/templates/jlw/resourcesQuestion/importPage.html @@ -59,7 +59,7 @@ {{# layui.each(d.list, function(index, item){ }} {{index + 1}} - {{item.failMessage}} + {{item}} @@ -107,9 +107,10 @@ parent.window.dataReload(); layer.msg(res.msg, {icon: 1}); } else { + layer.msg(res.msg, {icon: 2}); var getTpl = demo.innerHTML ,view = document.getElementById('view'); - laytpl(getTpl).render({list:JSON.parse(res.msg)}, function(html){ + laytpl(getTpl).render({list:res.data}, function(html){ view.innerHTML = html; $(".del").click(deleteInfo); });