beetlsql3-dev
Mlxa0324 2 years ago
parent d458f1b90c
commit 71333935a8

@ -1,5 +1,7 @@
package com.ibeetl.jlw.entity;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.EnumUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.jlw.validate.ValidateConfig;
@ -7,18 +9,26 @@ import com.ibeetl.admin.core.annotation.Dict;
import com.ibeetl.admin.core.annotation.DictEnum;
import com.ibeetl.admin.core.entity.BaseEntity;
import com.ibeetl.jlw.enums.AddTypeEnum;
import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.beetl.sql.annotation.entity.AutoID;
import org.beetl.sql.annotation.entity.InsertIgnore;
import org.beetl.sql.annotation.entity.UpdateIgnore;
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
/*
* -
* gen by Spring Boot2 Admin 2021-06-25
*/
@Slf4j
public class ResourcesQuestion extends BaseEntity{
//ID
@ -314,4 +324,78 @@ public class ResourcesQuestion extends BaseEntity{
}
return result;
}
/**
* Null
* @return
*/
private Field findNullQuestionOptionField() {
Field[] fields = ReflectUtil.getFields(this.getClass(), f -> f.getName().startsWith("questionOption"));
for (Field field : fields) {
Object fieldValue = ReflectUtil.getFieldValue(this, field);
if (fieldValue == null) {
return field;
}
}
return null;
}
/**
*
*/
@UpdateIgnore
@InsertIgnore
private List<String> questionOptionList;
public List<String> getQuestionOptionList() {
List<String> result = takeQuestionOptionConcatList();
result.addAll(defaultIfNull(questionOptionList, Collections.emptyList()));
return result;
}
public void setQuestionOptionList(List<String> questionOptionList) {
this.questionOptionList = questionOptionList;
}
/**
*
* @param questionOptionList
*/
public void putQuestionOptionList(List<String> questionOptionList) {
if (CollectionUtil.isEmpty(questionOptionList)) {
return;
}
ResourcesQuestionTypeEnum questionTypeEnum = EnumUtil.likeValueOf(ResourcesQuestionTypeEnum.class, this.getQuestionType());
if (questionTypeEnum != null) {
switch (questionTypeEnum) {
case SINGLE_QUESTION:
case MULTIPLE_QUESTION: {
questionOptionList.forEach(item -> {
Field optionField = findNullQuestionOptionField();
if (optionField != null) {
ReflectUtil.setFieldValue(this, optionField, item);
}
});
} break;
case FILL_QUESTION: {
// 填空题 questionOptionA 存放的是[---] 空的长度
final String optionName = "questionOptionA";
} break;
case ANALYSIS_QUESTION: {
// 分析题 questionOptionA 存放的是[---] 空的长度
// 分析题 questionOptionB 存放的是带填空的题干
final String optionName = "questionOptionA";
final String questionSubStem = "questionOptionB";
} break;
default:
log.error("ResourcesQuestion.putQuestionOptionList 方法,未知的题目类型!");
break;
}
}
}
}

@ -22,7 +22,6 @@ import com.ibeetl.jlw.service.strategy.StrategyContext;
import com.ibeetl.jlw.validator.QuestionValidator;
import com.ibeetl.jlw.web.query.CourseInfoQuery;
import com.ibeetl.jlw.web.query.ResourcesQuestionQuery;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
@ -789,8 +788,17 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
return g;
}
@SneakyThrows
public JsonResult importQBankWordTemplate(@NotEmpty List<FileEntity> fileEntityList, CoreUser coreUser, String referer) {
/**
* : <br>
* word
*
* @param fileEntityList
* @param coreUser 使IDID
* @return {@link JsonResult}
* @Author: lx
* @Date: 2023/1/8 22:49
*/
public JsonResult importQuestionByWordTemplate(@NotEmpty List<FileEntity> fileEntityList, CoreUser coreUser) {
/** 找出段落, 逐段落处理 */
AtomicReference<FileInputStream> inputStream = new AtomicReference<>();
AtomicReference<XWPFDocument> xDocument = new AtomicReference<>();
@ -873,25 +881,22 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
questionAnswer.set(Strings.EMPTY);
/** 带有编号的段落,是主题干。需要创建新的题目对象 */
ResourcesQuestion qs = new ResourcesQuestion();
ResourcesQuestion resourcesQuestion = new ResourcesQuestion();
/** 题目类型,查询插入操作 */
QuestionType questionType = selectOrInsert(typeConcatEnum.get(), coreUser);
qs.setQuestionTypeId(questionType.getQuestionTypeId());
qs.putQuestionTypeConcat(questionType.getQuestionTypeConcat());
qs.putQuestionTypeName(questionType.getQuestionTypeName());
qs.setQuestionScore(questionScore.get());
ResourcesQuestionTypeEnum questionType = selectQuestionType(typeConcatEnum.get());
resourcesQuestion.setQuestionType(questionType.getCode());
resourcesQuestion.setQuestionScore(questionScore.get());
resourcesQuestion.setQuestionStatus(1);
resourcesQuestion.setUserId(coreUser.getId());
resourcesQuestion.setOrgId(coreUser.getOrgId());
if (StringUtils.isNotBlank(questionStem.get())){
qs.setQuestionStem(questionStem.get().replace("<","&lt;").replace(">","&gt;"));
resourcesQuestion.setQuestionStem(questionStem.get().replace("<","&lt;").replace(">","&gt;"));
}else {
qs.setQuestionStem(questionStem.get());
resourcesQuestion.setQuestionStem(questionStem.get());
}
qs.setQuestionStatus(1);
qs.setUserId(coreUser.getId());
qs.setOrgId(coreUser.getOrgId());
question.set(qs);
question.set(resourcesQuestion);
questionList.add(question.get());
}
} break;
@ -915,14 +920,10 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
titleStb.append(recordsCount.get());
titleStb.append(" 道题目</font>");
Object ids[] = getCourseIdsNew(title[0], groupByCourseId.get(), groupByCourseName.get());
final Long courseId = (Long)ids[0];
final Long chapterId = (Long)ids[1];
String finalTitle = !referer.contains(publicReferer)? titleStb.toString(): titleStb.append(ids[2] + Strings.EMPTY).toString();
String finalTitle = titleStb.toString();
/** 最后检测属性, 并行处理,没有向外部非线程安全的变量写入东西,无需担心丢数据 */
questionList.parallelStream().forEach(item -> {
item.set("chapterId", ObjectUtil.defaultIfNull(chapterId, courseId));
questionValidator.checkQuestion(item);
checkUnique(item);
});
@ -931,11 +932,11 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
checkLocalQuestionsUnique(questionList);
/** 拼成前端需要的数据 */
resultMap.put(url2HttpUrl(fileEntity.getUrl()),new Object[]{finalTitle,questionList});
resultMap.put(fileEntity.getUrl(), new Object[]{ finalTitle, questionList });
} catch (Exception ex) { ex.printStackTrace(); }
finally {
try {inputStream.get().close();xDocument.get().close();}
catch (Exception ioe) {ioe.printStackTrace();}
try {inputStream.get().close(); xDocument.get().close(); }
catch (Exception ioe) { ioe.printStackTrace(); }
}
});
@ -957,29 +958,77 @@ public class ResourcesQuestionService extends CoreBaseService<ResourcesQuestion>
}
Matcher matcher = optionPattern.matcher(text);
if(matcher.find()){
QuestionOption questionOption = new QuestionOption();
questionOption.setQuestionOptionContent(text.substring(2));
if(null != question.takeQuestionOptionList()){
List<QuestionOption> questionOptionList = question.takeQuestionOptionList();
questionOptionList.add(questionOption);
question.putQuestionOptionList(questionOptionList);
}else {
List<QuestionOption> questionOptionList = new ArrayList<>();
String questionOption = text.substring(2);
// 在现有的列表中添加
if(null != question.getQuestionOptionList()){
List<String> questionOptionList = question.getQuestionOptionList();
questionOptionList.add(questionOption);
question.putQuestionOptionList(questionOptionList);
}
if(null != question.takeQuestionOptionConcatList()){
List<String> questionOptionConcatList = question.takeQuestionOptionConcatList();
questionOptionConcatList.add(text.substring(2));
question.putQuestionOptionConcatList(questionOptionConcatList);
}else {
List<String> questionOptionConcatList = new ArrayList<>();
questionOptionConcatList.add(text.substring(2));
question.putQuestionOptionConcatList(questionOptionConcatList);
// 新建
else {
question.putQuestionOptionList(Collections.singletonList(questionOption));
}
}
}
/**
* .
*
*
*
* @param typeConcatEnum
* @param paragraphType
* @param v
* @param question
*/
private void insertCorrespondingParagraph(final AtomicReference<StrategyContext.QuestionTypeConcatEnum> typeConcatEnum,
final StrategyContext.QuestionParagraphTypeEnum paragraphType,
final String v,
final AtomicReference<ResourcesQuestion> question,
final AtomicReference<String> questionStem,
final AtomicReference<String> questionAnswer) {
if(null == paragraphType) {
return;
}
switch(paragraphType) {
/** 题干 */
case STEM: {
questionStem.set(questionStem.get().concat(v));
question.get().setQuestionStem(questionStem.get());
} break;
/** 选项 */
case OPTION: {
List<String> optionList = question.get().takeQuestionOptionConcatList();
if (ObjectUtil.isNotEmpty(optionList)) {
final int[] index = { 0 };
optionList.forEach(str-> {
if(index[0] == optionList.size() -1) {
str = str.concat(v);
}
});
}
// if (ObjectUtil.isNotEmpty(questionOptions)) {
// QuestionOption questionOption = questionOptions.get(questionOptions.size() - 1);
// questionOption.setQuestionOptionContent(questionOption.getQuestionOptionContent().concat(v));
// }
} break;
/** 答案 */
case ANSWER: {
questionAnswer.set(secondFormat(questionAnswer.get().concat(v), typeConcatEnum.get()));
question.get().setQuestionAnswer(questionAnswer.get());
} break;
}
}
/**
*
* @param typeConcatEnum
*/
public ResourcesQuestionTypeEnum selectQuestionType(StrategyContext.QuestionTypeConcatEnum typeConcatEnum) {
return EnumUtil.likeValueOf(ResourcesQuestionTypeEnum.class, typeConcatEnum.getTypeConcat());
}
/**

@ -632,12 +632,20 @@ public class ResourcesQuestionController{
return JsonResult.success(resourcesQuestionService.getGroupQuestionTypeCount(courseInfoId));
}
//导入模板信息word
// @PostMapping(MODEL + "/importQBankWordTemplate.json")
// @Function("question.query")
// @ResponseBody
// public JsonResult importQBankWordTemplate(Integer isPublic,@RFile List<FileEntity> fileEntityList,@SCoreUser CoreUser coreUser, @RequestReferer String referer) {
// JsonResult jsonResult = resourcesQuestionService.importQBankWordTemplate(isPublic,fileEntityList,coreUser,referer);
// return jsonResult;
// }
/**
* : <br>
* word
*
* @param fileEntityList
* @param coreUser 使IDID
* @return {@link JsonResult}
* @Author: lx
* @Date: 2023/1/8 22:49
*/
@PostMapping(MODEL + "/importQuestionByWordTemplate.json")
@ResponseBody
public JsonResult importQuestionByWordTemplate(@RFile List<FileEntity> fileEntityList, @SCoreUser CoreUser coreUser) {
JsonResult jsonResult = resourcesQuestionService.importQuestionByWordTemplate(fileEntityList, coreUser);
return jsonResult;
}
}

Loading…
Cancel
Save