package com.huixinpn.dionysus.domain.psychtest;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;
import com.huixinpn.dionysus.domain.AbstractDionysusPersistable;
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Entity
@Table(name = "psychtests")
public class PsychTest extends AbstractDionysusPersistable {
private static final long serialVersionUID = -4860066336073876229L;
public enum PsychTestRenderFormat {
// 所有的题目显示在一个表格中,例如:SCL——90量表
TABLE,
// 一次显示一道题,点击下一题直到结束
ONE_BY_ONE,
// 所有的题目显示在一个页面
LIST,
// 依据上一题的选择方式显示下一题
DEPS
}
public enum PsychTestApproach {
MANUAL, // 纸笔测试
MACHINE // 机检
}
public enum PsychTestType {
PF16 {
@Override
public String toString() {
return "16PF";
}
},
// 艾森克人格问卷( Eysenck Personality Questionnaire,EPQ)
EPQ {
@Override
public String toString() {
return "EPQ";
}
},
// 明尼苏达多项人格问卷(MMPI: Minnesota Multiphasic Personality Inventory)
MMPI {
@Override
public String toString() {
return "MMPI";
}
},
// 爱德华个人偏好测验(Edwards Personal Preference Schedule)
EPPS {
@Override
public String toString() {
// TODO Auto-generated method stub
return "EPPS";
}
},
// 主题统觉测验Thematic ApperceptionTest
TAT {
@Override
public String toString() {
return "TAT";
}
},
// Zung氏焦虑自评量表系统(SAS)
SAS {
@Override
public String toString() {
return "SAS";
}
},
// 抑郁自评量表(SDS)
SDS {
@Override
public String toString() {
return "SDS";
}
},
// 康奈尔医学指数量表(CMI)
CMI {
@Override
public String toString() {
return "CMI";
}
},
// 压力量表
STS {
@Override
public String toString() {
return "STS";
}
},
// SCL-90
SCL90 {
@Override
public String toString() {
return "SCL90";
}
},
// OLSON
OLSON {
@Override
public String toString() {
return "OLSON";
}
},
// DCCC
DCCC {
@Override
public String toString() {
return "DCCC";
}
},
// PLOC
PLOC {
@Override
public String toString() {
return "PLOC";
}
}
}
// 有些心理测试是不需要全部做完的
// 0 表示所有题目都需要填写
// n 表示至少n道题需要完成
@Column(name = "min")
private Integer min = 0;
@NotBlank
@Column(name = "title")
private String title;
@Lob
@Column(name = "description")
private String description;
@Enumerated(EnumType.STRING)
private PsychTestType type;
// 测试针对对象
@Column(name = "object")
private String object;
// 测试时长
@Column(name = "duration")
private String duration;
// 封面图片url
@Column(name = "cover")
private String cover;
// 测试收费
@Column(name = "cost")
private String cost;
// 测试方式 纸笔还是机检
@Enumerated(EnumType.STRING)
private PsychTestApproach approach;
// 备注
@Column(name = "comment")
private String comment;
@OneToMany(mappedBy = "test")
private Collection<PsychTestQuestion> questions = new ArrayList<>();
@ManyToMany
@JoinTable(name = "suite_test",
joinColumns = @JoinColumn(name = "test_id"),
inverseJoinColumns = @JoinColumn(name = "suite_id"))
private Collection<PsychTestSuite> suite = new ArrayList<>();
@Enumerated(EnumType.STRING)
private PsychTestRenderFormat format;
public double evaluate(/*args*/) {
// TODO: 在这里进行分数的计算,传入参数为用户输入的答案
double score = 0;
return score;
}
}