From 11c706f87b0a7baadd1c0728d0300ef3e9c4e0de Mon Sep 17 00:00:00 2001 From: yaodan <1421553879@qq.com> Date: Fri, 21 Apr 2023 00:14:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=98=E7=9B=AE=E5=AF=BC=E5=85=A5=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BF=AE=E5=A4=8D=EF=BC=8C=E5=AE=8C=E6=88=90=E4=B8=8D?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E8=AF=BE=E7=A8=8B=E6=97=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=BE=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../template/题库导入模板.xlsx | Bin 10267 -> 10705 bytes .../ibeetl/jlw/service/CourseInfoService.java | 2 +- .../jlw/service/CourseLabelService.java | 5 +- .../jlw/service/ResourcesQuestionService.java | 701 ++++++++++++------ ...eacherOpenCourseScoreDashboardService.java | 15 +- .../jlw/web/ResourcesQuestionController.java | 157 ++-- .../ibeetl/jlw/web/query/CourseInfoQuery.java | 10 + web/src/main/resources/sql/jlw/courseInfo.md | 8 +- .../jlw/resourcesQuestion/importPage.html | 5 +- 9 files changed, 564 insertions(+), 339 deletions(-) diff --git a/web/filesystem/template/题库导入模板.xlsx b/web/filesystem/template/题库导入模板.xlsx index 5dde424da1c48d28bc067e52437573b9f771da93..ddea7517f3d68efc2e2268399a6dddbd361a5c09 100644 GIT binary patch delta 6194 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 mCvhd=UnB%A@aK}{ 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); });