You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

451 lines
11 KiB
Java

3 years ago
package com.ibeetl.jlw.entity;
2 years ago
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;
import com.ibeetl.admin.core.annotation.Dict;
import com.ibeetl.admin.core.annotation.DictEnum;
3 years ago
import com.ibeetl.admin.core.entity.BaseEntity;
import com.ibeetl.jlw.enums.AddTypeEnum;
2 years ago
import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum;
import lombok.extern.slf4j.Slf4j;
3 years ago
import org.beetl.sql.annotation.entity.AutoID;
2 years ago
import org.beetl.sql.annotation.entity.InsertIgnore;
import org.beetl.sql.annotation.entity.UpdateIgnore;
3 years ago
import javax.validation.constraints.NotNull;
import java.lang.reflect.Field;
3 years ago
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
2 years ago
import java.util.concurrent.CopyOnWriteArrayList;
2 years ago
import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
3 years ago
/*
* -
* gen by Spring Boot2 Admin 2021-06-25
*/
2 years ago
@Slf4j
3 years ago
public class ResourcesQuestion extends BaseEntity{
//ID
@NotNull(message = "ID不能为空", groups =ValidateConfig.UPDATE.class)
// @SeqID(name = ORACLE_CORE_SEQ_NAME)
3 years ago
@AutoID
private Long resourcesQuestionId ;
//课程ID
private Long courseInfoId ;
//题型(1单选 2多选 3判断 4填空 5分析)
3 years ago
private Integer questionType ;
//分值
private BigDecimal questionScore ;
//题干
private String questionStem ;
//选项A
private String questionOptionA ;
//选项B
private String questionOptionB ;
//选项C
private String questionOptionC ;
//选项D
private String questionOptionD ;
//选项E
private String questionOptionE ;
//答案(单选是一个 多选是多个 判断是对错)
private String questionAnswer ;
//解析
private String questionAnalysis ;
// 上下架状态
private Integer questionStatus;
3 years ago
//组织机构ID
@Dict(type = "core_org.name.del_flag=0")
3 years ago
private Long orgId ;
3 years ago
//后台用户ID
private Long userId ;
// 来源类型
@DictEnum
private AddTypeEnum addType ;
2 years ago
//题库来源
private String addTypeText;
/**
* 1 2
*/
private String sourceType;
/**
*
*/
@InsertIgnore
private Date addTime;
3 years ago
public ResourcesQuestion(){
}
/**ID
*@return
*/
public Long getResourcesQuestionId(){
return resourcesQuestionId;
}
/**ID
*@param resourcesQuestionId
*/
public void setResourcesQuestionId(Long resourcesQuestionId){
this.resourcesQuestionId = resourcesQuestionId;
}
/**ID
*@return
*/
public Long getCourseInfoId(){
return courseInfoId;
}
/**ID
*@param courseInfoId
*/
public void setCourseInfoId(Long courseInfoId){
this.courseInfoId = courseInfoId;
}
/**(1 2 3 4 5)
3 years ago
*@return
*/
public Integer getQuestionType(){
return questionType;
}
/**(1 2 3 4)
3 years ago
*@param questionType
*/
public void setQuestionType(Integer questionType){
this.questionType = questionType;
}
/**
*@return
*/
public BigDecimal getQuestionScore(){
return questionScore;
}
/**
*@param questionScore
*/
public void setQuestionScore(BigDecimal questionScore){
this.questionScore = questionScore;
}
/**
*@return
*/
public String getQuestionStem(){
return questionStem;
}
/**
*@param questionStem
*/
public void setQuestionStem(String questionStem){
this.questionStem = questionStem;
}
/**A
*@return
*/
public String getQuestionOptionA(){
return questionOptionA;
}
/**A
*@param questionOptionA
*/
public void setQuestionOptionA(String questionOptionA){
this.questionOptionA = questionOptionA;
}
/**B
*@return
*/
public String getQuestionOptionB(){
return questionOptionB;
}
/**B
*@param questionOptionB
*/
public void setQuestionOptionB(String questionOptionB){
this.questionOptionB = questionOptionB;
}
/**C
*@return
*/
public String getQuestionOptionC(){
return questionOptionC;
}
/**C
*@param questionOptionC
*/
public void setQuestionOptionC(String questionOptionC){
this.questionOptionC = questionOptionC;
}
/**D
*@return
*/
public String getQuestionOptionD(){
return questionOptionD;
}
/**D
*@param questionOptionD
*/
public void setQuestionOptionD(String questionOptionD){
this.questionOptionD = questionOptionD;
}
/**E
*@return
*/
public String getQuestionOptionE(){
return questionOptionE;
}
/**E
*@param questionOptionE
*/
public void setQuestionOptionE(String questionOptionE){
this.questionOptionE = questionOptionE;
}
/**
*@return
*/
public String getQuestionAnswer(){
return questionAnswer;
}
/**
*@param questionAnswer
*/
public void setQuestionAnswer(String questionAnswer){
this.questionAnswer = questionAnswer;
}
/**
*@return
*/
public String getQuestionAnalysis(){
return questionAnalysis;
}
/**
*@param questionAnalysis
*/
public void setQuestionAnalysis(String questionAnalysis){
this.questionAnalysis = questionAnalysis;
}
/**ID
*@return
*/
public Long getOrgId(){
return orgId;
}
/**ID
*@param orgId
*/
public void setOrgId(Long orgId){
this.orgId = orgId;
}
/**ID
*@return
*/
public Long getUserId(){
return userId;
}
/**ID
*@param userId
*/
public void setUserId(Long userId){
this.userId = userId;
}
public Integer getQuestionStatus() {
return questionStatus;
}
3 years ago
public void setQuestionStatus(Integer questionStatus) {
this.questionStatus = questionStatus;
}
public AddTypeEnum getAddType() {
return addType;
}
public void setAddType(AddTypeEnum addType) {
this.addType = addType;
}
2 years ago
public String getAddTypeText() {
return addTypeText;
}
public void setAddTypeText(String addTypeText) {
this.addTypeText = addTypeText;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
public String getSourceType() {
return sourceType;
}
public void setSourceType(String sourceType) {
this.sourceType = sourceType;
}
/**,
*@return
*/
public String getQuestionStemRegexp(){
return ReUtil.escape(questionStem)
.replaceAll("<img.*?[^<]/>", "<img.*?[^<]/>")
.replace("(","").replace(")","");
}
public List<String> takeQuestionOptionConcatList() {
List<String> result = new ArrayList<>();
for (Field field : optionFields) {
Object fieldValue = ReflectUtil.getFieldValue(this, field);
if (fieldValue != null) {
result.add(fieldValue.toString());
}
}
return result;
}
2 years ago
/**
*
*/
private final static Field[] optionFields = ReflectUtil.getFields(ResourcesQuestion.class, f -> f.getName().startsWith("questionOption"));
2 years ago
/**
* Null
* @return
*/
private Field findNullQuestionOptionField() {
for (Field field : optionFields) {
2 years ago
Object fieldValue = ReflectUtil.getFieldValue(this, field);
if (fieldValue == null) {
return field;
}
}
return null;
}
/**
*
*/
@UpdateIgnore
@InsertIgnore
private List<String> resourcesQuestionOptionList;
2 years ago
public List<String> getResourcesQuestionOptionList() {
2 years ago
return resourcesQuestionOptionList;
2 years ago
}
2 years ago
public void setResourcesQuestionOptionList(CopyOnWriteArrayList<String> questionOptionList) {
this.resourcesQuestionOptionList = questionOptionList;
2 years ago
}
2 years ago
public static final String LINE_8 = "_{8,}";
public static final String SPLIT_ = "[---]";
2 years ago
/**
*
* @param questionOptionList
*/
public void putQuestionOptionList(List<String> questionOptionList) {
if (CollectionUtil.isEmpty(questionOptionList)) {
return;
}
2 years ago
if (getResourcesQuestionOptionList() == null) {
setResourcesQuestionOptionList(new CopyOnWriteArrayList<>());
}
2 years ago
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();
2 years ago
getResourcesQuestionOptionList().add(item);
2 years ago
if (optionField != null) {
ReflectUtil.setFieldValue(this, optionField, item);
}
});
} break;
case FILL_QUESTION: {
2 years ago
2 years ago
} break;
case ANALYSIS_QUESTION: {
// 分析题 questionOptionA 存放的是[---] 空的长度
// 分析题 questionOptionB 存放的是带填空的题干
2 years ago
questionOptionList.forEach(text -> {
Integer count = Integer.valueOf(defaultIfNull(getQuestionOptionA(), "0"));
setQuestionOptionA((++count).toString());
2 years ago
2 years ago
String replacedText = text.replaceAll(LINE_8, SPLIT_);
setQuestionOptionB(defaultIfNull(getQuestionOptionB(), "").concat(replacedText));
});
2 years ago
} break;
default:
log.error("ResourcesQuestion.putQuestionOptionList 方法,未知的题目类型!");
break;
}
}
}
3 years ago
}