Моя проблема в том, что в моем методе все равно что я всегда получаю зависимость, исходящую только от 1 переменнойIsntances, что означает, что я вывожу только комбинацию из 1 комбинации доступных ответов, первый или последний доступный ответ переменнойInstance запускает зависимость комбинации. не получаю все возможные комбинации. Может кто-нибудь мне помочь?
Код: Выделить всё
private Questionnaire selectById(SlimFilter filter, boolean showHiddenVars, Set ignoreFields) throws Exception {
Questionnaire questionnaire = super.selectById(filter);
if (ObjectUtils.isNotVoid(questionnaire)) {
questionnaire = questionnaireExtender.extendObject(questionnaire, ignoreFields);
if (ListUtils.isNotVoid(questionnaire.getVariableInstancesEntity())) {
questionnaire.getVariableInstancesEntity().sort(Comparator.comparing(VariableInstanceBase::getPosition));
// Nascondo le VariableInstance con hidden=true
if (!showHiddenVars) {
hiddenVarInstance(questionnaire.getVariableInstancesEntity());
}
Map questAnswersMap = new HashMap();
Map variableAnswerMap = new HashMap();
for (VariableInstance var : questionnaire.getVariableInstancesEntity()) {
if (ObjectUtils.isNotVoid(var.getFixedValue())) {
AnswerValue v = new AnswerValue();
v.setVariableInstanceId(var.getId());
v.setAvailableAnswerId(var.getFixedValue());
questAnswersMap.put(var.getId(), v);
}
}
for (VariableInstance var : questionnaire.getVariableInstancesEntity()) {
try {
System.out.println("Processing VariableInstance: " + var.getDescription() + "--------------------");
List listAnswersId = questAnswerNextAnswerService.evaluateRestriction(var.getLogicMapData(), var.getRestrictions(), questAnswersMap);
System.out.println("listAnswersId: " + listAnswersId);
if (listAnswersId != null && !listAnswersId.isEmpty()) {
variableAnswerMap.put(var.getId(), listAnswersId);
System.out.println("variableAnswerMap: " + variableAnswerMap);
SlimPaginatorFilter restQuestFilter = new SlimPaginatorFilter();
FilterUtils.addSlimMatch(restQuestFilter, AvailableAnswer.COLUMNS.ID, SlimMatchOperator.IN, listAnswersId.toArray());
FilterUtils.addSlimOrder(restQuestFilter, AvailableAnswer.COLUMNS.CODE, SlimOrderDirection.ASC);
List restrictionAnswers = availableAnswerService.list(restQuestFilter);
System.out.println("restrictionAnswers: " + restrictionAnswers);
List correctOrderAnswers = new ArrayList();
for (Object answerId : listAnswersId) {
for (AvailableAnswer answer : restrictionAnswers) {
if (answer.getId().equals(answerId)) {
correctOrderAnswers.add(answer);
}
}
}
var.setAvailableAnswers(correctOrderAnswers);
System.out.println("correctOrderAnswers: " + correctOrderAnswers);
for (Object answerId : listAnswersId) {
AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(var.getId());
answerValue.setAvailableAnswerId(answerId.toString());
questAnswersMap.put(var.getId(), answerValue);
}
System.out.println("questAnswersMap: " + questAnswersMap);
} else {
List paramsVarList = new ArrayList();
for (VariableInstanceRestriction restriction : var.getRestrictions()) {
for (VariableInstanceRestrictionParam param : restriction.getRestrictionParamsEntity()) {
String varInstanceId = param.getVariableInstanceId();
if (!questAnswersMap.containsKey(varInstanceId)) {
if (variableAnswerMap.containsKey(varInstanceId)) {
paramsVarList.add(varInstanceId);
}
}
}
}
System.out.println("paramsVarList: " + paramsVarList);
List paramValuesList = new ArrayList();
if (!paramsVarList.isEmpty()) {
for (String variableParam : paramsVarList) {
List values = variableAnswerMap.get(variableParam);
if (values != null && !values.isEmpty()) {
paramValuesList.add(values);
}
}
}
System.out.println("paramValuesList: " + paramValuesList);
List paramValuesListCombinations = getCartesianProductUsingStreams(paramValuesList);
System.out.println("paramValuesListCombinations: " + paramValuesListCombinations);
Set listAnswersIdSet = new HashSet();
for (List valueCombination : paramValuesListCombinations) {
for (int i = 0; i < valueCombination.size(); i++) {
AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(paramsVarList.get(i));
answerValue.setAvailableAnswerId(valueCombination.get(i).toString());
questAnswersMap.put(paramsVarList.get(i), answerValue);
}
System.out.println("questAnswersMap (combination): " + questAnswersMap);
List listAnswersIdTMP = questAnswerNextAnswerService.evaluateRestriction(var.getLogicMapData(), var.getRestrictions(), questAnswersMap);
if (listAnswersIdTMP != null) {
listAnswersIdSet.addAll(listAnswersIdTMP);
}
}
System.out.println("listAnswersIdSet: " + listAnswersIdSet);
listAnswersId = new ArrayList(listAnswersIdSet);
System.out.println("listAnswersId (final): " + listAnswersId);
if (!listAnswersId.isEmpty()) {
variableAnswerMap.put(var.getId(), listAnswersId);
SlimPaginatorFilter restQuestFilter = new SlimPaginatorFilter();
FilterUtils.addSlimMatch(restQuestFilter, AvailableAnswer.COLUMNS.ID, SlimMatchOperator.IN, listAnswersId.toArray());
FilterUtils.addSlimOrder(restQuestFilter, AvailableAnswer.COLUMNS.CODE, SlimOrderDirection.ASC);
List restrictionAnswers = availableAnswerService.list(restQuestFilter);
System.out.println("restrictionAnswers (final): " + restrictionAnswers);
List correctOrderAnswers = new ArrayList();
for (Object answerId : listAnswersId) {
for (AvailableAnswer answer : restrictionAnswers) {
if (answer.getId().equals(answerId)) {
correctOrderAnswers.add(answer);
}
}
}
var.setAvailableAnswers(correctOrderAnswers);
System.out.println("correctOrderAnswers (final): " + correctOrderAnswers);
AnswerValue answerValue = new AnswerValue();
answerValue.setVariableInstanceId(var.getId());
answerValue.setAnswerValue(listAnswersId.get(0).toString());
questAnswersMap.put(var.getId(), answerValue);
System.out.println("questAnswersMap (final): " + questAnswersMap);
}
for (String variableParam : paramsVarList) {
questAnswersMap.remove(variableParam);
}
}
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
return questionnaire;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... nswer-to-i
Мобильная версия