|
|
@@ -485,5 +485,80 @@ public class MainExamEvaluationController extends BaseController {
|
|
|
return R.fail("获取结果失败");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取学员在某测评下的详细考试结果(对接考试星 action_id=10000)
|
|
|
+ * 返回每个能力维度的多次作答记录详情
|
|
|
+ */
|
|
|
+ @GetMapping("/detail-result/{evaluationId}")
|
|
|
+ public R<Map<String, Object>> getDetailResult(@PathVariable Long evaluationId, @RequestParam Long studentId) {
|
|
|
+ try {
|
|
|
+ // 1. 获取测评信息及能力配置
|
|
|
+ MainExamEvaluationVo evaluationVo = examEvaluationService.queryById(evaluationId);
|
|
|
+ if (evaluationVo == null) {
|
|
|
+ return R.fail("测评不存在");
|
|
|
+ }
|
|
|
+ List<MainAbilityConfig> configs = evaluationVo.getAbilityConfigs();
|
|
|
+ if (configs == null || configs.isEmpty()) {
|
|
|
+ return R.fail("测评未配置能力项");
|
|
|
+ }
|
|
|
+
|
|
|
+ String userId = String.valueOf(studentId);
|
|
|
+ com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
|
|
|
+
|
|
|
+ // 2. 遍历每个能力配置,调用考试星10000接口获取详细结果
|
|
|
+ List<Map<String, Object>> abilityDetails = new java.util.ArrayList<>();
|
|
|
+
|
|
|
+ for (MainAbilityConfig config : configs) {
|
|
|
+ Map<String, Object> abilityMap = new java.util.HashMap<>();
|
|
|
+ abilityMap.put("abilityName", config.getAbilityName());
|
|
|
+ abilityMap.put("examInfoId", config.getThirdExamInfoId());
|
|
|
+ abilityMap.put("examName", config.getThirdExamName());
|
|
|
+ abilityMap.put("passMark", config.getThirdExamPassMark());
|
|
|
+ abilityMap.put("totalScore", config.getThirdExamTotalScore());
|
|
|
+
|
|
|
+ // 调用考试星10000接口获取该学员在此考试中的作答记录
|
|
|
+ String resultJson = kaoshixingService.fetchExamResult(userId, config.getThirdExamInfoId(), 1);
|
|
|
+
|
|
|
+ com.fasterxml.jackson.databind.JsonNode rootNode = mapper.readTree(resultJson);
|
|
|
+ com.fasterxml.jackson.databind.JsonNode bizContent = rootNode.path("bizContent");
|
|
|
+
|
|
|
+ List<Map<String, Object>> records = new java.util.ArrayList<>();
|
|
|
+ com.fasterxml.jackson.databind.JsonNode rowsNode = bizContent.path("rows");
|
|
|
+ if (rowsNode != null && rowsNode.isArray()) {
|
|
|
+ for (com.fasterxml.jackson.databind.JsonNode row : rowsNode) {
|
|
|
+ Map<String, Object> record = new java.util.HashMap<>();
|
|
|
+ record.put("userId", row.path("userId").asText(""));
|
|
|
+ record.put("examId", row.path("examId").asInt(0));
|
|
|
+ record.put("examName", row.path("examName").asText(""));
|
|
|
+ record.put("examStartTime", row.path("examStartTime").asText(""));
|
|
|
+ record.put("examEndTime", row.path("examEndTime").asText(""));
|
|
|
+ record.put("examTime", row.path("examTime").asInt(0)); // 分钟
|
|
|
+ record.put("startTime", row.path("startTime").asText(""));
|
|
|
+ record.put("commitTime", row.path("commitTime").asText(null));
|
|
|
+ record.put("score", row.path("score").asText("0"));
|
|
|
+ record.put("isPass", row.path("isPass").asInt(-1)); // 1=及格, 0=不及格
|
|
|
+ record.put("times", row.path("times").asInt(0)); // 作答次数
|
|
|
+ record.put("examResultsId", row.path("examResultsId").asInt(0));
|
|
|
+ record.put("examStyleName", row.path("examStyleName").asText(""));
|
|
|
+ records.add(record);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ abilityMap.put("records", records);
|
|
|
+ abilityMap.put("total", bizContent.path("total").asInt(0));
|
|
|
+ abilityDetails.add(abilityMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> resultMap = new java.util.HashMap<>();
|
|
|
+ resultMap.put("evaluationName", evaluationVo.getEvaluationName());
|
|
|
+ resultMap.put("abilityDetails", abilityDetails);
|
|
|
+
|
|
|
+ return R.ok(resultMap);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("获取考试详情结果失败", e);
|
|
|
+ return R.fail("获取详情失败:" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|