提交代码
This commit is contained in:
parent
ee23da58dd
commit
2d3036ca6c
|
@ -6,7 +6,7 @@
|
|||
<GradleProjectSettings>
|
||||
<option name="distributionType" value="LOCAL" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleHome" value="C:/develop/gradle-8.8" />
|
||||
<option name="gradleHome" value="$PROJECT_DIR$/../../develop/gradle-8.5-bin/gradle-8.5" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
|
|
|
@ -1,13 +1,128 @@
|
|||
package org.echo.questionnaire
|
||||
|
||||
import kotlin.math.abs
|
||||
|
||||
class Questionnaire(
|
||||
val title: String, // 问卷的标题
|
||||
val description: String, // 问卷的描述或说明
|
||||
|
||||
val questions: List<SurveyQuestion>, // 问卷中的所有问题
|
||||
val surveySample: SurveySample //调查样本的背景信息
|
||||
val questions: List<SurveyQuestion>,
|
||||
val sample: SurveyBackgroundSample// 问卷中的所有问题
|
||||
)
|
||||
|
||||
open class Question(
|
||||
val questionId: String,
|
||||
val title: String,
|
||||
val content: String,
|
||||
val optionList: List<QuestionOption>,
|
||||
val questionType: QuestionType, // 表示问题类型:单选、多选、开放式等
|
||||
val order: Int, // 表示问题顺序
|
||||
val isRequired: Boolean = true // 是否必答,默认为必答
|
||||
) {
|
||||
fun getOptionList(): List<QuestionOption> {
|
||||
return optionList
|
||||
}
|
||||
}
|
||||
|
||||
class QuestionGroup(
|
||||
val groupName: String,
|
||||
val surveyQuestionList: List<SurveyQuestion>,
|
||||
var answeredQuestions: MutableMap<SurveyQuestion, QuestionOption> = mutableMapOf() // 已回答的问题及其分数
|
||||
) {
|
||||
// 当组内的问题被回答时,更新其他问题的依赖关系
|
||||
fun updateDependenciesOnAnswer(answeredQuestion: SurveyQuestion, selectedOption: QuestionOption) {
|
||||
// 将已回答的问题和选项添加到记录中
|
||||
answeredQuestions[answeredQuestion] = selectedOption
|
||||
|
||||
// 遍历组内未回答的问题,并为每个未回答问题的选项更新依赖关系
|
||||
surveyQuestionList
|
||||
.filter { it != answeredQuestion && !answeredQuestions.containsKey(it) } // 过滤未回答的问题
|
||||
.flatMap { it.getQuestion().getOptionList() } // 将每个问题的选项展开成一个列表
|
||||
.forEach { option ->
|
||||
// 创建一个新的 OptionDependency,根据已回答的选项影响当前选项
|
||||
val dependency = OptionDependency(
|
||||
sourceOption = selectedOption,
|
||||
targetOption = option,
|
||||
condition = { _ ->
|
||||
// 定义条件,sourceOption 和 targetOption 必须同一问题组,且影响关系基于 markOrder 差值
|
||||
true
|
||||
},
|
||||
effect = { targetOpt ->
|
||||
val orderDifference = abs(selectedOption.markOrder - targetOpt.markOrder)
|
||||
when (orderDifference) {
|
||||
0 -> 1.0 // 相同 markOrder,权重最大
|
||||
1 -> 0.7 // 相邻 markOrder,权重较高
|
||||
2 -> 0.4 // 相差2,权重中等
|
||||
else -> 0.1 // 更远的,权重最低
|
||||
}
|
||||
}
|
||||
)
|
||||
// 将新的依赖关系添加到选项的 dependencies 列表中
|
||||
option.dependencies += dependency
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class QuestionOption(
|
||||
val label: String,
|
||||
val content: String,
|
||||
val mark: String,
|
||||
val markOrder: Int,
|
||||
val score: Int? = null, // 可选的分数字段
|
||||
var dependencies: MutableList<OptionDependency> = mutableListOf() // 与其他选项的依赖关系
|
||||
) {
|
||||
// 计算依赖关系对权重的影响
|
||||
fun calculateWeightWithDependencies(): Double {
|
||||
var baseWeight = 1.0 // 基础权重
|
||||
dependencies.forEach { dependency ->
|
||||
if (dependency.condition(dependency.sourceOption)) {
|
||||
baseWeight += dependency.effect(dependency.sourceOption)
|
||||
}
|
||||
}
|
||||
return baseWeight.coerceAtLeast(0.0) // 确保权重不小于0
|
||||
}
|
||||
}
|
||||
|
||||
class OptionDependency(
|
||||
val sourceOption: QuestionOption, // 依赖的来源选项
|
||||
val targetOption: QuestionOption, // 目标选项,受影响的选项
|
||||
val condition: (QuestionOption) -> Boolean, // 判断条件,当 sourceOption 满足某个条件时影响 targetOption
|
||||
val effect: (QuestionOption) -> Double // 定义当条件满足时对目标选项的权重影响
|
||||
)
|
||||
|
||||
|
||||
enum class QuestionType {
|
||||
SINGLE_CHOICE, // 单选
|
||||
MULTIPLE_CHOICE, // 多选
|
||||
OPEN_ENDED // 开放式问题
|
||||
}
|
||||
|
||||
enum class Gender {
|
||||
MALE, FEMALE
|
||||
}
|
||||
|
||||
class SurveyQuestion(
|
||||
val title: String,
|
||||
val content: String,
|
||||
val question: Question,
|
||||
) {
|
||||
fun getQuestion(): Question {
|
||||
return this.question
|
||||
}
|
||||
}
|
||||
|
||||
class SurveyBackgroundSample(
|
||||
val surveyRespondent: SurveyRespondent,
|
||||
val surveyBackgroundList: List<SurveyBackground>
|
||||
)
|
||||
|
||||
class SurveyRespondent(
|
||||
val name: String,
|
||||
val age: Int,
|
||||
val gender: Gender
|
||||
)
|
||||
|
||||
class SurveyBackground(
|
||||
val title: String,
|
||||
val backgroundQuestion: Question
|
||||
)
|
||||
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
package org.echo.questionnaire
|
||||
|
||||
class SurveySample(val surveyBackgroundSet: Set<SurveyBackgroundOption>) {
|
||||
|
||||
}
|
||||
|
||||
class SurveySampleBackground(
|
||||
//关联的背景选题
|
||||
val surveyBackground: SurveyBackground,
|
||||
//选项
|
||||
val chooseOption: SurveyBackgroundOption
|
||||
)
|
||||
|
||||
class SurveyBackground(
|
||||
val backgroundFactor: String,
|
||||
val option: Set<SurveyBackgroundOption> = mutableSetOf()
|
||||
) {
|
||||
|
||||
}
|
||||
|
||||
class SurveyBackgroundOption(
|
||||
val optionName: String,
|
||||
val optionMark: String,
|
||||
val optionDes: String
|
||||
)
|
Loading…
Reference in New Issue