修复:调查问卷查看题目后,新增的题目看不到了
This commit is contained in:
+8
@@ -13,6 +13,8 @@ import com.budwk.app.zhgh.dayofficework.qsv.param.QsvAnswerParam;
|
||||
import com.budwk.app.zhgh.dayofficework.qsv.service.QsvUserAnswerRecordService;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.aop.interceptor.ioc.TransAop;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
@@ -45,7 +47,12 @@ public class H5QsvSurveyController {
|
||||
public void index() {
|
||||
}
|
||||
|
||||
/**
|
||||
* activityId 为当前调查活动ID;返回 Result,data 包含 activity、subjects、answerRecordId。
|
||||
* 未提交答卷由 service 同步当前题目及新增答案结构,再加载题目供手机端显示。
|
||||
*/
|
||||
@At
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public Result subjects(String activityId) {
|
||||
QsvActivity activity = dao.fetch(QsvActivity.class, activityId);
|
||||
|
||||
@@ -68,6 +75,7 @@ public class H5QsvSurveyController {
|
||||
Cnd.where("activityId", "=", activityId)
|
||||
.and("userId", "=", SecurityUtil.getUserId()));
|
||||
|
||||
answerRecord2 = qsvUserAnswerRecordService.syncSurveySubjects(answerRecord2.getId());
|
||||
answerRecordId = answerRecord2.getId();
|
||||
|
||||
List<QsvSubject> subjects = dao.query(QsvSubject.class, Cnd.where("id", "in", answerRecord2.getSubjectIds()).asc("sortNum"));
|
||||
|
||||
+7
@@ -12,6 +12,13 @@ public interface QsvUserAnswerRecordService extends BaseService<QsvUserAnswerRec
|
||||
|
||||
QsvUserAnswerRecord insertRecord(String activityId, List<String> subjectIds);
|
||||
|
||||
/**
|
||||
* 同步未提交调查问卷的当前题目,保留已有答案并补齐新增题目的答案结构。
|
||||
* @param answerRecordId 已通过参与范围校验的当前用户答题记录ID
|
||||
* @return 答题记录,subjectIds 为同步后的题目ID列表,extJson 按题目ID保存答案;已提交或非调查记录原样返回
|
||||
*/
|
||||
QsvUserAnswerRecord syncSurveySubjects(String answerRecordId);
|
||||
|
||||
/**
|
||||
* 计算得分
|
||||
*/
|
||||
|
||||
+47
@@ -17,6 +17,7 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.ioc.aop.Aop;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -27,6 +28,7 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
}
|
||||
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public QsvUserAnswerRecord insertRecord(String activityId, List<String> subjectIds) {
|
||||
QsvActivity activity = dao().fetch(QsvActivity.class, activityId);
|
||||
String category = activity.getCategory();
|
||||
@@ -85,6 +87,51 @@ public class QsvUserAnswerRecordServiceImpl extends BaseServiceImpl<QsvUserAnswe
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 按记录ID同步未提交的调查问卷,返回包含当前题目列表及答案结构的记录。
|
||||
* 仅补齐缺失答案,不清除已有答案;已提交记录及考试抽题记录不参与同步。
|
||||
*/
|
||||
@Override
|
||||
@Aop(TransAop.READ_COMMITTED)
|
||||
public QsvUserAnswerRecord syncSurveySubjects(String answerRecordId) {
|
||||
QsvUserAnswerRecord record = dao().fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
if (record == null) {
|
||||
throw new IllegalArgumentException("答题记录不存在");
|
||||
}
|
||||
if (Boolean.TRUE.equals(record.getIsFinish())) {
|
||||
return record;
|
||||
}
|
||||
QsvActivity activity = dao().fetch(QsvActivity.class, record.getActivityId());
|
||||
if (activity == null || !"SURVEY".equals(activity.getCategory())) {
|
||||
return record;
|
||||
}
|
||||
List<QsvSubject> subjects = dao().query(QsvSubject.class,
|
||||
Cnd.where("activityId", "=", record.getActivityId()).asc("sortNum"));
|
||||
List<String> subjectIds = subjects.stream().map(QsvSubject::getId).toList();
|
||||
JSONObject extJson = record.getExtJson() == null ? new JSONObject() : record.getExtJson();
|
||||
boolean changed = !Objects.equals(subjectIds, record.getSubjectIds());
|
||||
for (String subjectId : subjectIds) {
|
||||
// 提交接口只更新已存在的答案对象,新增题目必须同时补齐结构才能保存答案。
|
||||
JSONObject answer = extJson.get(subjectId, JSONObject.class);
|
||||
if (answer == null || answer.isEmpty()) {
|
||||
extJson.set(subjectId, Dict.create()
|
||||
.set("optionIds", new ArrayList<>())
|
||||
.set("text", null)
|
||||
.set("isCorrect", null));
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
// 只更新题目和答案字段,并再次限制未提交状态,避免并发提交后覆盖已完成的答卷。
|
||||
dao().update(QsvUserAnswerRecord.class,
|
||||
Chain.make("subjectIds", Json.toJson(subjectIds)).add("extJson", extJson.toString()),
|
||||
Cnd.where("id", "=", answerRecordId)
|
||||
.and(Cnd.exps("isFinish", "=", false).or("isFinish", "is", null)));
|
||||
return dao().fetch(QsvUserAnswerRecord.class, answerRecordId);
|
||||
}
|
||||
return record;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float calcScore(QsvAnswerParam qsvAnswerParam) {
|
||||
List<String> subjectIds = qsvAnswerParam.getSubjects().stream().map(QsvAnswerParam.Subject::getId).toList();
|
||||
|
||||
Reference in New Issue
Block a user