题目导入优化修复,完成不存在课程时自动添加课程

beetlsql3-dev
yaodan
parent a1f1ffe5ae
commit 11c706f87b

@ -231,7 +231,7 @@ public class CourseInfoService extends CoreBaseService<CourseInfo>{
model.setCourseInfoId(courseInfo.getCourseInfoId()); model.setCourseInfoId(courseInfo.getCourseInfoId());
model.setCourseInfoFullId(StrUtil.prependIfMissing(StrUtil.appendIfMissing(courseInfoFullId, "_"), "_")); model.setCourseInfoFullId(StrUtil.prependIfMissing(StrUtil.appendIfMissing(courseInfoFullId, "_"), "_"));
updateTemplate(model); updateTemplate(model);
courseInfo.setCourseInfoFullId(model.getCourseInfoFullId());
return courseInfo; return courseInfo;
} }

@ -9,7 +9,6 @@ import com.ibeetl.jlw.web.query.CourseLabelQuery;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.beetl.sql.core.SqlId; import org.beetl.sql.core.SqlId;
import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.core.page.PageResult;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -64,7 +63,7 @@ public class CourseLabelService extends CoreBaseService<CourseLabel> {
} }
public CourseLabel getOnce(CourseLabel courseLabel) { public CourseLabel getOnce(CourseLabel courseLabel) {
PageResult<CourseLabel> page = courseLabelDao.createLambdaQuery().addParam(courseLabel).page(1, 1); List<CourseLabel> list = courseLabelDao.template(courseLabel);
return CollectionUtils.isEmpty(page.getList()) ? null : page.getList().get(0); return CollectionUtils.isEmpty(list) ? null : list.get(0);
} }
} }

@ -18,6 +18,7 @@ import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.entity.dto.QuestionSettingDTO; import com.ibeetl.jlw.entity.dto.QuestionSettingDTO;
import com.ibeetl.jlw.entity.vo.ImportQuestionByWordTemplateResultVO; import com.ibeetl.jlw.entity.vo.ImportQuestionByWordTemplateResultVO;
import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO; 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.MatchTypeEnum;
import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum;
import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum; 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 com.ibeetl.jlw.web.query.ResourcesQuestionQuery;
import lombok.Cleanup; import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 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.concurrent.atomic.AtomicReference;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors;
import static cn.hutool.core.util.ArrayUtil.join; 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.LINE_8;
import static com.ibeetl.jlw.entity.ResourcesQuestion.SPLIT_; import static com.ibeetl.jlw.entity.ResourcesQuestion.SPLIT_;
import static com.ibeetl.jlw.entity.ResourcesQuestionOptionEntity.shuffleOrderOptions; import static com.ibeetl.jlw.entity.ResourcesQuestionOptionEntity.shuffleOrderOptions;
import static com.ibeetl.jlw.enums.AddTypeEnum.ADMIN_ADD; import static com.ibeetl.jlw.enums.AddTypeEnum.ADMIN_ADD;
import static com.ibeetl.jlw.enums.AddTypeEnum.FACULTY_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.QuestionParagraphTypeEnum.OTHER;
import static com.ibeetl.jlw.service.strategy.StrategyContext.QuestionTypeConcatEnum.*; import static com.ibeetl.jlw.service.strategy.StrategyContext.QuestionTypeConcatEnum.*;
import static com.ibeetl.jlw.service.strategy.WordQuestionOption.OPTION_REGEX; import static com.ibeetl.jlw.service.strategy.WordQuestionOption.OPTION_REGEX;
@ -81,17 +86,34 @@ import static java.util.stream.Collectors.joining;
@Transactional @Transactional
public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion> { public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion> {
@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
@Autowired private ResourcesQuestionService resourcesQuestionService; private CorePlatformService platformService;
@Autowired
private ResourcesQuestionService resourcesQuestionService;
@Autowired
private StrategyContext strategyContext;
@Autowired
private QuestionValidator questionValidator;
@Autowired
private CourseLabelService courseLabelService;
@Autowired
private CorePlatformService corePlatformService;
@Autowired
private UniversitiesCollegesJurisdictionCurriculumResourcesService universitiesCollegesJurisdictionCurriculumResourcesService;
@Autowired private StrategyContext strategyContext;
@Autowired private QuestionValidator questionValidator;
public PageQuery<ResourcesQuestion> queryByCondition(PageQuery query) { public PageQuery<ResourcesQuestion> queryByCondition(PageQuery query) {
PageQuery ret = resourcesQuestionDao.queryByCondition(query); PageQuery ret = resourcesQuestionDao.queryByCondition(query);
@ -175,6 +197,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
public List<ResourcesQuestion> getValuesByQuery(ResourcesQuestionQuery resourcesQuestionQuery) { public List<ResourcesQuestion> getValuesByQuery(ResourcesQuestionQuery resourcesQuestionQuery) {
return resourcesQuestionDao.getValuesByQuery(resourcesQuestionQuery); return resourcesQuestionDao.getValuesByQuery(resourcesQuestionQuery);
} }
public List<ResourcesQuestion> getValuesByQueryNotWithPermission(ResourcesQuestionQuery resourcesQuestionQuery) { public List<ResourcesQuestion> getValuesByQueryNotWithPermission(ResourcesQuestionQuery resourcesQuestionQuery) {
return resourcesQuestionDao.getValuesByQueryNotWithPermission(resourcesQuestionQuery); return resourcesQuestionDao.getValuesByQueryNotWithPermission(resourcesQuestionQuery);
} }
@ -311,11 +334,12 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
} }
public JsonResult importTemplate(FileEntity fileEntity){ public JsonResult importTemplate(FileEntity fileEntity, CoreUser coreUser) {
if (null != fileEntity) { if (null != fileEntity) {
Map<String, CourseInfo> courseInfoCache = new HashMap<>();
Map<String, Map<String, List<CourseInfo>>> chapterCache = new HashMap<>();
File file = new File(fileEntity.getAbsoluteUrl()); 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; Workbook wb = null;
InputStream is = null; InputStream is = null;
try { try {
@ -325,8 +349,6 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
} else if ("xlsx".equals(fileEntity.getFormat())) { } else if ("xlsx".equals(fileEntity.getFormat())) {
wb = new XSSFWorkbook(is); wb = new XSSFWorkbook(is);
} }
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -340,7 +362,6 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
if (wb != null) { if (wb != null) {
List<String[]> errMsg = new ArrayList<>(); List<String[]> errMsg = new ArrayList<>();
String msg ="";
//获取Sheet1 //获取Sheet1
Sheet sheet = wb.getSheet("Sheet1"); Sheet sheet = wb.getSheet("Sheet1");
@ -351,7 +372,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
//获取最大列数 //获取最大列数
int colNum = firstRow.getPhysicalNumberOfCells(); int colNum = firstRow.getPhysicalNumberOfCells();
String[] columns = {"归属课程","归属章节","题型","分值","题干","选项A","选项B","选项C","选项D","选项E","答案","解析"}; String[] columns = {"归属课程", "理论课程分类", "归属章节", "题型", "分值", "题干", "选项A", "选项B", "选项C", "选项D", "选项E", "答案", "解析"};
Map<String, Integer> map = new HashMap<>();//获取需要的表头的列 Map<String, Integer> map = new HashMap<>();//获取需要的表头的列
@ -373,12 +394,23 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
} }
} }
if (flag != columns.length) { if (flag != columns.length) {
return JsonResult.failMessage("导入失败,表格表头应包含 \"归属课程\",\"归属章节\",\"题型\",\"分值\",\"题干\",\"选项A\",\"选项B\",\"选项C\",\"选项D\",\"选项E\",\"答案\",\"解析\""); return JsonResult.failMessage("导入失败,表格表头应包含 \"归属课程\",\"理论课程分类\",\"归属章节\",\"题型\",\"分值\",\"题干\",\"选项A\",\"选项B\",\"选项C\",\"选项D\",\"选项E\",\"答案\",\"解析\"");
} }
int count = 0; int count = 0;
Date date = new Date(); CourseInfoQuery baseCourseInfo = new CourseInfoQuery();
Date now = new Date();
if (coreUser.isUniAdmin()) {
baseCourseInfo.setOrgIdPlural(join(Arrays.asList(coreUser.getOrgId(), 1L).toArray(), ","));
ResourcesCourseInfoAuthDetailsVO resourcesCourseInfoAuthDetails =
universitiesCollegesJurisdictionCurriculumResourcesService.getResourcesCourseInfoAuthDetails(coreUser.getOrgId());
Serializable ifNullCourseInfoIds = listJoin(resourcesCourseInfoAuthDetails.getTheoryCourseList(), CourseInfo::getCourseInfoId);
String ids = Arrays.stream(ifNullCourseInfoIds.toString().split(",")).map(item -> "_" + item + "_").collect(Collectors.joining("|"));
// 如果为空字符串,那么代表这个学校,还没有授权的课程,所以是不会显示任何东西的。
baseCourseInfo.setCourseInfoIdPlural(StrUtil.blankToDefault(ids, "未授权应用"));
}
for (int i = 1; i < rowNum; i++) { for (int i = 1; i < rowNum; i++) {
Row row = sheet.getRow(i); Row row = sheet.getRow(i);
@ -387,75 +419,223 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
errMsg.add(new String[]{"第" + (i + 1) + "数据为空"}); errMsg.add(new String[]{"第" + (i + 1) + "数据为空"});
continue; 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 questionScore = getCellFormatValue(row.getCell(map.get(columns[4])));
String questionType = getCellFormatValue(row.getCell(map.get(columns[2]))); String questionStem = getCellFormatValue(row.getCell(map.get(columns[5])));
String questionScore = getCellFormatValue(row.getCell(map.get(columns[3])));
String questionStem = getCellFormatValue(row.getCell(map.get(columns[4])));
String questionOptionA = getCellFormatValue(row.getCell(map.get(columns[5]))); String questionOptionA = getCellFormatValue(row.getCell(map.get(columns[6])));
String questionOptionB = getCellFormatValue(row.getCell(map.get(columns[6]))); String questionOptionB = getCellFormatValue(row.getCell(map.get(columns[7])));
String questionOptionC = getCellFormatValue(row.getCell(map.get(columns[7]))); String questionOptionC = getCellFormatValue(row.getCell(map.get(columns[8])));
String questionOptionD = getCellFormatValue(row.getCell(map.get(columns[8]))); String questionOptionD = getCellFormatValue(row.getCell(map.get(columns[9])));
String questionOptionE = 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]))); String questionAnswer = getCellFormatValue(row.getCell(map.get(columns[11])));
questionAnswer = answerFormat(questionType, questionAnswer);//格式化 questionAnswer = answerFormat(questionType, questionAnswer);//格式化
String questionAnalysis = getCellFormatValue(row.getCell(map.get(columns[11]))); String questionAnalysis = getCellFormatValue(row.getCell(map.get(columns[12])));
if (StringUtils.isBlank(questionScore)) { if (StringUtils.isBlank(questionScore)) {
questionScore = "1";//默认一分 questionScore = "1";//默认一分
} }
if(StringUtils.isNotBlank(questionType)){
questionType = questionType.replace("题","");
}
String m = ""; String m = "";
if (StringUtils.isNotBlank(questionAnswer)) { if (StringUtils.isNotBlank(questionAnswer)) {
m = judge(questionType, questionOptionA, questionOptionB, questionOptionC, questionOptionD, questionOptionE, questionAnswer); m = judge(questionType, questionOptionA, questionOptionB, questionOptionC, questionOptionD, questionOptionE, questionAnswer);
} }
if (StringUtils.isBlank(courseInfoName)) { if (StringUtils.isBlank(courseInfoName)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[1])+1)+"列,第"+(i+1)+"行归属章节为空"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[0]) + 1) + "列,第" + (i + 1) + "行课程为空"});
continue; continue;
}else if(courseInfoName.split("__ID").length != 2){ } else if (StringUtils.isBlank(chapterName)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[1])+1)+"列,第"+(i+1)+"行章节ID丢失"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[2]) + 1) + "列,第" + (i + 1) + "行归属章节为空"});
continue; 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; continue;
}else if(ToolUtils.findInSet("单选,多选,判断",questionType)){ } else if (!ToolUtils.findInSet("单选,多选,判断", questionType)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[2])+1)+"列,第"+(i+1)+"行题型异常"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[3]) + 1) + "列,第" + (i + 1) + "行题型异常"});
continue; continue;
} else if (StringUtils.isBlank(questionScore)) { } else if (StringUtils.isBlank(questionScore)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[3])+1)+"列,第"+(i+1)+"行分值为空"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[4]) + 1) + "列,第" + (i + 1) + "行分值为空"});
continue; continue;
} else if (StringUtils.isBlank(questionStem)) { } else if (StringUtils.isBlank(questionStem)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[4])+1)+"列,第"+(i+1)+"行题干为空"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[5]) + 1) + "列,第" + (i + 1) + "行题干为空"});
continue; continue;
} else if (StringUtils.isBlank(questionAnswer)) { } else if (StringUtils.isBlank(questionAnswer)) {
errMsg.add(new String[]{"第"+ToolUtils.numberToLetter(map.get(columns[10])+1)+"列,第"+(i+1)+"行答案为空"}); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[11]) + 1) + "列,第" + (i + 1) + "行答案为空"});
continue; continue;
} else if (StringUtils.isNotBlank(m)) { } else if (StringUtils.isNotBlank(m)) {
errMsg.add(new String[]{"第" + (i + 1) + "行" + m}); errMsg.add(new String[]{"第" + (i + 1) + "行" + m});
continue; continue;
}else { } else if (!NumberUtil.isNumber(questionScore)) {
ResourcesQuestion rq = new ResourcesQuestion(); errMsg.add(new String[]{"第" + ToolUtils.numberToLetter(map.get(columns[4]) + 1) + "列,第" + (i + 1) + "行分值数值格式错误"});
rq.setQuestionStem(questionStem);
if(resourcesQuestionDao.template(rq).size()>0){
errMsg.add(new String[]{"第"+(i+1)+"行题目重复"});
continue; 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 (StringUtils.isNotBlank(questionAnswer)) {
if (questionAnswer.lastIndexOf(",") == questionAnswer.length() - 1) { if (questionAnswer.lastIndexOf(",") == questionAnswer.length() - 1) {
questionAnswer = questionAnswer.substring(0, 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<CourseInfo> 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<CourseInfo> 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<String, List<CourseInfo>> 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<String, List<CourseInfo>> chapterMap = chapterCache.get(courseInfoName);
if (chapterMap == null) {
chapterMap = new HashMap<>();
chapterCache.put(courseInfoName, chapterMap);
}
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<CourseInfo>() {{
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(); ResourcesQuestion pojo = new ResourcesQuestion();
pojo.setCourseInfoId(Long.parseLong(courseInfoName.split("__ID")[1])); pojo.setCourseInfoId(chapterCourseInfo.getCourseInfoId());
pojo.setQuestionType("单选".equals(questionType) ? 1 : "多选".equals(questionType) ? 2 : 3); pojo.setQuestionType("单选".equals(questionType) ? 1 : "多选".equals(questionType) ? 2 : 3);
pojo.setQuestionScore(StringUtils.isNotBlank(questionScore) ? new BigDecimal(questionScore) : BigDecimal.ONE); pojo.setQuestionScore(StringUtils.isNotBlank(questionScore) ? new BigDecimal(questionScore) : BigDecimal.ONE);
pojo.setQuestionStem(questionStem); pojo.setQuestionStem(questionStem);
@ -472,18 +652,23 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
pojo.setQuestionAnalysis(questionAnalysis); pojo.setQuestionAnalysis(questionAnalysis);
// 默认导入上架状态 // 默认导入上架状态
pojo.setQuestionStatus(1); pojo.setQuestionStatus(1);
if (coreUser.isUniAdmin()) {
pojo.setAddType(FACULTY_ADD);
}else {
pojo.setAddType(ADMIN_ADD); pojo.setAddType(ADMIN_ADD);
}
insert(pojo);
CourseInfo courseInfo = courseInfoDao.single(pojo.getCourseInfoId()); insert(pojo);
if(null != courseInfo){ //更新章节
CourseInfo c = new CourseInfo(); CourseInfo c = new CourseInfo();
c.setCourseInfoId(courseInfo.getCourseInfoId()); c.setCourseInfoId(chapterCourseInfo.getCourseInfoId());
c.setResourcesQuestionIds(StringUtils.isNotBlank(courseInfo.getResourcesQuestionIds())?(courseInfo.getResourcesQuestionIds()+","+pojo.getResourcesQuestionId()):pojo.getResourcesQuestionId().toString()); c.setResourcesQuestionIds(StringUtils.isNotBlank(chapterCourseInfo.getResourcesQuestionIds()) ? (chapterCourseInfo.getResourcesQuestionIds() + "," + pojo.getResourcesQuestionId()) : pojo.getResourcesQuestionId().toString());
courseInfoDao.updateTemplateById(c); courseInfoDao.updateTemplateById(c);
}
//更新本地缓存中章节中的题目ids
chapterCourseInfo.setResourcesQuestionIds(c.getResourcesQuestionIds());
count++; count++;
} }
@ -493,10 +678,14 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
JsonResult jsonResult = new JsonResult(); JsonResult jsonResult = new JsonResult();
jsonResult.setCode(JsonReturnCode.SUCCESS.getCode()); jsonResult.setCode(JsonReturnCode.SUCCESS.getCode());
jsonResult.setData(errMsg); jsonResult.setData(errMsg);
jsonResult.setMsg("导入成功,共导入"+count+"条"+(StringUtils.isNotBlank(msg)?"<br>"+msg:"")); jsonResult.setMsg("导入成功,共导入" + count + "条");
return jsonResult; return jsonResult;
} else { } else {
return JsonResult.failMessage("导入失败"+(StringUtils.isNotBlank(msg)?"<br>"+msg:"")); JsonResult jsonResult = new JsonResult();
jsonResult.setCode(JsonReturnCode.FAIL.getCode());
jsonResult.setData(errMsg);
jsonResult.setMsg("导入全部失败,请查看下面的失败列表");
return jsonResult;
} }
} }
return JsonResult.failMessage("导入失败"); return JsonResult.failMessage("导入失败");
@ -513,6 +702,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
public String answerFormat(Integer questionType, String questionAnswer) { public String answerFormat(Integer questionType, String questionAnswer) {
return answerFormat(((Integer) 1).equals(questionType) ? "单选" : ((Integer) 2).equals(questionType) ? "多选" : "判断", questionAnswer); return answerFormat(((Integer) 1).equals(questionType) ? "单选" : ((Integer) 2).equals(questionType) ? "多选" : "判断", questionAnswer);
} }
//答案格式化 //答案格式化
public String answerFormat(String questionType, String questionAnswer) { public String answerFormat(String questionType, String questionAnswer) {
if (StringUtils.isNotBlank(questionType)) { if (StringUtils.isNotBlank(questionType)) {
@ -664,6 +854,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* *
*
* @param resourcesApplicationIds * @param resourcesApplicationIds
* @return * @return
*/ */
@ -675,6 +866,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* *
*
* @param questionList * @param questionList
*/ */
public void orderOptions(List<ResourcesQuestion> questionList) { public void orderOptions(List<ResourcesQuestion> questionList) {
@ -786,6 +978,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* ID * ID
*
* @param courseInfoQuery * @param courseInfoQuery
* @return * @return
*/ */
@ -797,6 +990,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* ids * ids
*
* @param courseInfoQuery * @param courseInfoQuery
* @return * @return
*/ */
@ -959,10 +1153,14 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
resultVO.setQuestionCount(recordsCount.get()); resultVO.setQuestionCount(recordsCount.get());
resultVO.setQuestionList(questionList); resultVO.setQuestionList(questionList);
} catch (Exception ex) { ex.printStackTrace(); } } catch (Exception ex) {
finally { ex.printStackTrace();
try {xDocument.get().close(); } } finally {
catch (Exception ioe) { ioe.printStackTrace(); } try {
xDocument.get().close();
} catch (Exception ioe) {
ioe.printStackTrace();
}
} }
} }
return resultVO; return resultVO;
@ -970,6 +1168,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* ID * ID
*
* @param fileEntityList * @param fileEntityList
* @param businessType * @param businessType
* @param matchType * @param matchType
@ -1001,6 +1200,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* *
*
* @param text * @param text
* @param question * @param question
*/ */
@ -1039,7 +1239,8 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
String replacedText = questionStem.get().replaceAll(LINE_8, SPLIT_); String replacedText = questionStem.get().replaceAll(LINE_8, SPLIT_);
question.get().setQuestionOptionA(String.valueOf(StrUtil.count(replacedText, SPLIT_))); question.get().setQuestionOptionA(String.valueOf(StrUtil.count(replacedText, SPLIT_)));
question.get().setQuestionStem(replacedText); question.get().setQuestionStem(replacedText);
} break; }
break;
/** 选项 */ /** 选项 */
case OPTION: { case OPTION: {
@ -1055,17 +1256,20 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
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_))); question.get().setQuestionOptionA(String.valueOf(StrUtil.count(question.get().getQuestionOptionB(), SPLIT_)));
} }
} break; }
break;
/** 答案 */ /** 答案 */
case ANSWER: { case ANSWER: {
questionAnswer.set(secondFormat(questionAnswer.get().concat(v), typeConcatEnum.get())); questionAnswer.set(secondFormat(questionAnswer.get().concat(v), typeConcatEnum.get()));
question.get().setQuestionAnswer(questionAnswer.get()); question.get().setQuestionAnswer(questionAnswer.get());
} break; }
break;
} }
} }
/** /**
* *
*
* @param typeConcatEnum * @param typeConcatEnum
*/ */
public ResourcesQuestionTypeEnum selectQuestionType(StrategyContext.QuestionTypeConcatEnum typeConcatEnum) { public ResourcesQuestionTypeEnum selectQuestionType(StrategyContext.QuestionTypeConcatEnum typeConcatEnum) {
@ -1075,10 +1279,13 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* , * ,
* *
*
* @param questionList * @param questionList
*/ */
private void checkLocalQuestionsUnique(List<ResourcesQuestion> questionList) { private void checkLocalQuestionsUnique(List<ResourcesQuestion> questionList) {
if (ObjectUtil.isEmpty(questionList)) { return; } if (ObjectUtil.isEmpty(questionList)) {
return;
}
// 默认给50道题的容量 // 默认给50道题的容量
final Set<String> hashSet = new LinkedHashSet<>(50); final Set<String> hashSet = new LinkedHashSet<>(50);
final List<String> strings = new ArrayList<>(50); final List<String> strings = new ArrayList<>(50);
@ -1088,8 +1295,9 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
if (!hashSet.add(questionToString)) { 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(); hashSet.clear();
@ -1098,6 +1306,7 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
/** /**
* *
*
* @param question * @param question
*/ */
public void checkUnique(@NotNull ResourcesQuestion question) { public void checkUnique(@NotNull ResourcesQuestion question) {
@ -1132,7 +1341,9 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
* @return * @return
*/ */
public String secondFormat(String questionAnswer, StrategyContext.QuestionTypeConcatEnum typeConcatEnum) { 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); questionAnswer = org.springframework.util.StringUtils.trimAllWhitespace(questionAnswer);
// <p>ABC</p> 只获取ABC 删除所有</>标签元素。 // <p>ABC</p> 只获取ABC 删除所有</>标签元素。

@ -18,7 +18,6 @@ import com.ibeetl.jlw.enums.ChatLogSendTypeEnum;
import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum;
import com.ibeetl.jlw.enums.SignInTypeEnum; import com.ibeetl.jlw.enums.SignInTypeEnum;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery; 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.TeacherOpenCourseScoreDashboardQuery;
import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery; import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -530,6 +529,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
realOperationScore = NumberUtil.add(realOperationScore, realOperationScore = NumberUtil.add(realOperationScore,
NumberUtil.toBigDecimal(studentHandsOnTaskVideo.getVideoScore())); NumberUtil.toBigDecimal(studentHandsOnTaskVideo.getVideoScore()));
} catch (Exception ee) { } catch (Exception ee) {
ee.printStackTrace();
} }
} }
@ -540,6 +540,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
realOperationScore = NumberUtil.add(realOperationScore, realOperationScore = NumberUtil.add(realOperationScore,
NumberUtil.toBigDecimal(studentHandsOnTaskPpt.getPptScore())); NumberUtil.toBigDecimal(studentHandsOnTaskPpt.getPptScore()));
} catch (Exception ee) { } catch (Exception ee) {
ee.printStackTrace();
} }
} }
@ -550,6 +551,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
realOperationScore = NumberUtil.add(realOperationScore, realOperationScore = NumberUtil.add(realOperationScore,
NumberUtil.toBigDecimal(studentHandsOnTaskStep.getTheoryScore())); NumberUtil.toBigDecimal(studentHandsOnTaskStep.getTheoryScore()));
} catch (Exception ee) { } catch (Exception ee) {
ee.printStackTrace();
} }
} }
@ -560,6 +562,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
realOperationScore = NumberUtil.add(realOperationScore, realOperationScore = NumberUtil.add(realOperationScore,
NumberUtil.toBigDecimal(studentHandsOnTaskReport.getReportScore())); NumberUtil.toBigDecimal(studentHandsOnTaskReport.getReportScore()));
} catch (Exception ee) { } catch (Exception ee) {
ee.printStackTrace();
} }
} }
@ -570,6 +573,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
realOperationScore = NumberUtil.add(realOperationScore, realOperationScore = NumberUtil.add(realOperationScore,
NumberUtil.toBigDecimal(studentHandsOnTaskTheory.getTheoryScore())); NumberUtil.toBigDecimal(studentHandsOnTaskTheory.getTheoryScore()));
} catch (Exception ee) { } catch (Exception ee) {
ee.printStackTrace();
} }
} }
@ -588,7 +592,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
.andEq(QuestionLogSummary::getPersonId, studentId) .andEq(QuestionLogSummary::getPersonId, studentId)
.andIn(QuestionLogSummary::getQuestionSettingId, collect).select(); .andIn(QuestionLogSummary::getQuestionSettingId, collect).select();
if (CollectionUtil.isEmpty(select1)) { if (CollectionUtil.isEmpty(select1)) {
scoreDashboard.setCourseScore(BigDecimal.ZERO); scoreDashboard.setQuestionHomeworkScore(BigDecimal.ZERO);
} else { } else {
BigDecimal b = BigDecimal.ZERO; BigDecimal b = BigDecimal.ZERO;
for (QuestionLogSummary questionLogSummary : select1) { for (QuestionLogSummary questionLogSummary : select1) {
@ -602,7 +606,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId) .andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseId, teacherOpenCourseId)
.andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.EXAM).select(); .andEq(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingType, ResourcesQuestionSnapshotFromTypeEnum.EXAM).select();
if (CollectionUtil.isEmpty(select3)) { if (CollectionUtil.isEmpty(select3)) {
scoreDashboard.setCourseScore(BigDecimal.ZERO); scoreDashboard.setExamScore(BigDecimal.ZERO);
} else { } else {
if (weight == null || "1".equals(weight.getCoursePracticeResultSetting())) { if (weight == null || "1".equals(weight.getCoursePracticeResultSetting())) {
List<Long> collect = select3.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList()); List<Long> collect = select3.stream().map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).collect(Collectors.toList());
@ -610,7 +614,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
.andEq(QuestionLogSummary::getPersonId, studentId) .andEq(QuestionLogSummary::getPersonId, studentId)
.andIn(QuestionLogSummary::getQuestionSettingId, collect).select(); .andIn(QuestionLogSummary::getQuestionSettingId, collect).select();
if (CollectionUtil.isEmpty(select1)) { if (CollectionUtil.isEmpty(select1)) {
scoreDashboard.setCourseScore(BigDecimal.ZERO); scoreDashboard.setExamScore(BigDecimal.ZERO);
} else { } else {
BigDecimal b = BigDecimal.ZERO; BigDecimal b = BigDecimal.ZERO;
for (QuestionLogSummary questionLogSummary : select1) { for (QuestionLogSummary questionLogSummary : select1) {
@ -656,8 +660,7 @@ public class TeacherOpenCourseScoreDashboardService extends CoreBaseService<Teac
.add(scoreDashboard.getRealOperationScore()) .add(scoreDashboard.getRealOperationScore())
.add(scoreDashboard.getQuestionHomeworkScore()) .add(scoreDashboard.getQuestionHomeworkScore())
.add(scoreDashboard.getExamScore()) .add(scoreDashboard.getExamScore())
.add(scoreDashboard.getChatScore()) .add(scoreDashboard.getChatScore());
;
scoreDashboard.setTotalScore(totalScore); scoreDashboard.setTotalScore(totalScore);
if (weight != null) { if (weight != null) {
lastStatus(weight, totalScore, scoreDashboard); lastStatus(weight, totalScore, scoreDashboard);

@ -9,7 +9,6 @@ import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function; import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.TimeTool; import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.CourseInfo; import com.ibeetl.jlw.entity.CourseInfo;
@ -29,9 +28,6 @@ import com.ibeetl.jlw.web.query.ResourcesQuestionQuery;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.*; import org.apache.poi.xssf.usermodel.*;
@ -57,10 +53,7 @@ import java.util.stream.Collectors;
import static cn.hutool.core.util.ArrayUtil.join; import static cn.hutool.core.util.ArrayUtil.join;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull; import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
import static cn.jlw.util.excel.ExcelUtil.standardName;
import static com.ibeetl.admin.core.util.StreamUtils.listJoin; import static com.ibeetl.admin.core.util.StreamUtils.listJoin;
import static com.ibeetl.admin.core.util.excelGroupValidation.ExcelUtil.replaceNameName;
import static java.util.stream.Collectors.toList;
/** /**
* ResourcesQuestion * ResourcesQuestion
@ -439,49 +432,49 @@ public class ResourcesQuestionController{
workbook = new XSSFWorkbook(is); workbook = new XSSFWorkbook(is);
// 获取模板中的Sheet1 //// 获取模板中的Sheet1
Sheet sheetPro = workbook.getSheet("Sheet1"); //Sheet sheetPro = workbook.getSheet("Sheet1");
// 查询特定的课程名称及其章的名称 // 查询特定的课程名称及其章的名称
List<String> courseInfoArr = new ArrayList<String>(); List<String> courseInfoArr = new ArrayList<String>();
Map<String, List<String>> map = new HashMap<String, List<String>>(); Map<String, List<String>> map = new HashMap<String, List<String>>();
CourseInfoQuery courseInfoQuery = new CourseInfoQuery(); // CourseInfoQuery courseInfoQuery = new CourseInfoQuery();
courseInfoQuery.setCourseLabelStatus(1); // courseInfoQuery.setCourseLabelStatus(1);
// courseInfoQuery.setCourseLabelTypes("应用课程类"); //// courseInfoQuery.setCourseLabelTypes("应用课程类");
courseInfoQuery.setCourseInfoType(1); // courseInfoQuery.setCourseInfoType(1);
courseInfoQuery.setCourseInfoStatus(1); // courseInfoQuery.setCourseInfoStatus(1);
List<CourseInfo> courseInfoList = courseInfoService.getCourseInfoValues(courseInfoQuery); //List<CourseInfo> courseInfoList = courseInfoService.getCourseInfoValues(courseInfoQuery);
//
if(null != courseInfoList && courseInfoList.size()>0){ //if(null != courseInfoList && courseInfoList.size()>0){
for(int i=0;i<courseInfoList.size();i++){ // for(int i=0;i<courseInfoList.size();i++){
String mergeCourseNameId = courseInfoList.get(i).getCourseInfoName() + "__ID" + courseInfoList.get(i).getCourseInfoId(); // String mergeCourseNameId = courseInfoList.get(i).getCourseInfoName() + "__ID" + courseInfoList.get(i).getCourseInfoId();
mergeCourseNameId = standardName(mergeCourseNameId); // mergeCourseNameId = standardName(mergeCourseNameId);
// key不可重复 // // key不可重复
mergeCourseNameId = replaceNameName(mergeCourseNameId); // mergeCourseNameId = replaceNameName(mergeCourseNameId);
courseInfoArr.add(mergeCourseNameId); // courseInfoArr.add(mergeCourseNameId);
//
// 整理数据放入一个Map中mapkey存放父地点value 存放院校下的班级 // // 整理数据放入一个Map中mapkey存放父地点value 存放院校下的班级
Object chapter = courseInfoList.get(i).get("chapter"); // Object chapter = courseInfoList.get(i).get("chapter");
if(null != chapter && StringUtils.isNotBlank(chapter.toString())){ // if(null != chapter && StringUtils.isNotBlank(chapter.toString())){
map.put(mergeCourseNameId, Arrays.stream(chapter.toString().split(",")).map(String::trim).collect(toList())); // map.put(mergeCourseNameId, Arrays.stream(chapter.toString().split(",")).map(String::trim).collect(toList()));
}else { // }else {
map.put(mergeCourseNameId,new ArrayList<>()); // map.put(mergeCourseNameId,new ArrayList<>());
} // }
//
} // }
}else { //}else {
throw new PlatformException("请先添加院校"); // throw new PlatformException("请先添加院校");
} //}
// 创建一个专门用来存放地区信息的隐藏sheet页 // 创建一个专门用来存放地区信息的隐藏sheet页
// 因此也不能在现实页之前创建,否则无法隐藏。 // 因此也不能在现实页之前创建,否则无法隐藏。
Sheet hideSheet = workbook.createSheet("课程章节信息"); //Sheet hideSheet = workbook.createSheet("课程章节信息");
// 将此sheet隐藏 //// 将此sheet隐藏
workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true); //workbook.setSheetHidden(workbook.getSheetIndex(hideSheet), true);
int rowId = 0; //int rowId = 0;
// 设置第一行,存省的信息 // 设置第一行,存省的信息
// Row provinceRow = hideSheet.createRow(rowId++); // Row provinceRow = hideSheet.createRow(rowId++);
// provinceRow.createCell(0).setCellValue("省列表"); // provinceRow.createCell(0).setCellValue("省列表");
@ -490,23 +483,23 @@ public class ResourcesQuestionController{
// provinceCell.setCellValue(provinceArr.get(i)); // provinceCell.setCellValue(provinceArr.get(i));
// } // }
// 将具体的数据写入到每一行中,行开头为父级区域,后面是子区域。 // 将具体的数据写入到每一行中,行开头为父级区域,后面是子区域。
Iterator<String> keyIterator = map.keySet().iterator(); //Iterator<String> keyIterator = map.keySet().iterator();
while (keyIterator.hasNext()) { //while (keyIterator.hasNext()) {
String key = keyIterator.next(); // String key = keyIterator.next();
List<String> son = map.get(key); // List<String> son = map.get(key);
Row row = hideSheet.createRow(rowId++); // Row row = hideSheet.createRow(rowId++);
row.createCell(0).setCellValue(key); // row.createCell(0).setCellValue(key);
for (int i = 0; i < son.size(); i++) { // for (int i = 0; i < son.size(); i++) {
Cell cell = row.createCell(i+1); // Cell cell = row.createCell(i+1);
cell.setCellValue(son.get(i)); // cell.setCellValue(son.get(i));
} // }
// 添加名称管理器 // // 添加名称管理器
String range = getRange(1, rowId, son.size()); // String range = getRange(1, rowId, son.size());
Name name = workbook.createName(); // Name name = workbook.createName();
name.setNameName(key); // name.setNameName(key);
String formula = "课程章节信息!" + range; // String formula = "课程章节信息!" + range;
name.setRefersToFormula(formula); // name.setRefersToFormula(formula);
} //}
// 课程规则 // 课程规则
// DVConstraint provConstraint = DVConstraint.createExplicitListConstraint(courseInfoArr.toArray(new String[] {})); // DVConstraint provConstraint = DVConstraint.createExplicitListConstraint(courseInfoArr.toArray(new String[] {}));
@ -515,26 +508,26 @@ public class ResourcesQuestionController{
// provinceDataValidation.createErrorBox("error", "请选择正确的课程"); // provinceDataValidation.createErrorBox("error", "请选择正确的课程");
// sheetPro.addValidationData(provinceDataValidation); // sheetPro.addValidationData(provinceDataValidation);
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheetPro); //XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheetPro);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(courseInfoArr.toArray(new String[] {})); //XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(courseInfoArr.toArray(new String[] {}));
CellRangeAddressList addressList = new CellRangeAddressList(1, 20, 0, 0); //CellRangeAddressList addressList = new CellRangeAddressList(1, 20, 0, 0);
XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList); //XSSFDataValidation validation = (XSSFDataValidation) dvHelper.createValidation(dvConstraint, addressList);
validation.createErrorBox("error", "请选择正确的课程"); //validation.createErrorBox("error", "请选择正确的课程");
sheetPro.addValidationData(validation); //sheetPro.addValidationData(validation);
//
//
// 对前200行设置有效性 //// 对前200行设置有效性
for (int i = 2; i < 200; i++) { //for (int i = 2; i < 200; i++) {
setDataValidation("A", sheetPro, i, 2); // setDataValidation("A", sheetPro, i, 2);
} //}
//
try { //try {
if(null != is){ // if(null != is){
is.close(); // is.close();
} // }
}catch (Exception e){ //}catch (Exception e){
e.printStackTrace(); // e.printStackTrace();
} //}
//准备将Excel的输出流通过response输出到页面下载 //准备将Excel的输出流通过response输出到页面下载
//八进制输出流 //八进制输出流
@ -558,7 +551,9 @@ public class ResourcesQuestionController{
if (null != response && null != response.getOutputStream()) { if (null != response && null != response.getOutputStream()) {
response.getOutputStream().close(); response.getOutputStream().close();
} }
} catch (Exception e) { } } catch (Exception e) {
e.printStackTrace();
}
} }
} }
@ -632,8 +627,8 @@ public class ResourcesQuestionController{
//导入模板信息 //导入模板信息
@PostMapping(MODEL + "/importTemplate.json") @PostMapping(MODEL + "/importTemplate.json")
@ResponseBody @ResponseBody
public JsonResult importTemplate(@RFile FileEntity fileEntity) { public JsonResult importTemplate(@RFile FileEntity fileEntity,@SCoreUser CoreUser coreUser) {
return resourcesQuestionService.importTemplate(fileEntity); return resourcesQuestionService.importTemplate(fileEntity,coreUser);
} }
//查询客观题树结构 //查询客观题树结构

@ -77,6 +77,8 @@ public class CourseInfoQuery extends PageParam {
// 机构IDs // 机构IDs
private String orgIdPlural; private String orgIdPlural;
private String courseInfoStatusPlural;
public String getOrgIdPlural() { public String getOrgIdPlural() {
return orgIdPlural; return orgIdPlural;
} }
@ -332,4 +334,12 @@ public class CourseInfoQuery extends PageParam {
public void setCourseInfoFullId(String courseInfoFullId) { public void setCourseInfoFullId(String courseInfoFullId) {
this.courseInfoFullId = courseInfoFullId; this.courseInfoFullId = courseInfoFullId;
} }
public String getCourseInfoStatusPlural() {
return courseInfoStatusPlural;
}
public void setCourseInfoStatusPlural(String courseInfoStatusPlural) {
this.courseInfoStatusPlural = courseInfoStatusPlural;
}
} }

@ -383,6 +383,12 @@ getCourseInfoValues
@if(!isEmpty(userId)){ @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)#)
@}
getByCourseLabelTypes getByCourseLabelTypes

@ -59,7 +59,7 @@
{{# layui.each(d.list, function(index, item){ }} {{# layui.each(d.list, function(index, item){ }}
<tr> <tr>
<td style="text-align: center;">{{index + 1}}</td> <td style="text-align: center;">{{index + 1}}</td>
<td>{{item.failMessage}}</td> <td>{{item}}</td>
<!-- <td style="text-align: center;">--> <!-- <td style="text-align: center;">-->
<!-- {{#if(item.length ==2){}}--> <!-- {{#if(item.length ==2){}}-->
<!-- <a resourcesQuestionId="{{item[1]}}" class="layui-btn layui-btn-sm bg_button del">删除</a>--> <!-- <a resourcesQuestionId="{{item[1]}}" class="layui-btn layui-btn-sm bg_button del">删除</a>-->
@ -107,9 +107,10 @@
parent.window.dataReload(); parent.window.dataReload();
layer.msg(res.msg, {icon: 1}); layer.msg(res.msg, {icon: 1});
} else { } else {
layer.msg(res.msg, {icon: 2});
var getTpl = demo.innerHTML var getTpl = demo.innerHTML
,view = document.getElementById('view'); ,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; view.innerHTML = html;
$(".del").click(deleteInfo); $(".del").click(deleteInfo);
}); });

Loading…
Cancel
Save