|
|
@@ -5,6 +5,7 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
|
import jakarta.validation.constraints.NotEmpty;
|
|
|
import jakarta.validation.constraints.NotNull;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.dromara.common.core.domain.R;
|
|
|
import org.dromara.common.core.validate.AddGroup;
|
|
|
import org.dromara.common.core.validate.EditGroup;
|
|
|
@@ -15,8 +16,10 @@ import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.common.web.core.BaseController;
|
|
|
import org.dromara.demo.domain.dto.KaoshixingAnswerListRequest;
|
|
|
+import org.dromara.demo.domain.dto.KaoshixingAutoLoginRequest;
|
|
|
import org.dromara.demo.domain.dto.KaoshixingExamListRequest;
|
|
|
import org.dromara.demo.domain.dto.KaoshixingRequest;
|
|
|
+import org.dromara.demo.domain.dto.KaoshixingScoreListRequest;
|
|
|
import org.dromara.demo.service.impl.KaoshixingService;
|
|
|
import org.dromara.main.domain.bo.MainExamEvaluationBo;
|
|
|
import org.dromara.main.domain.bo.MainExamEvaluationSyncBo;
|
|
|
@@ -32,6 +35,7 @@ import java.util.Collection;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Validated
|
|
|
@RequiredArgsConstructor
|
|
|
@RestController
|
|
|
@@ -206,6 +210,21 @@ public class MainExamEvaluationController extends BaseController {
|
|
|
return R.ok(result);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+// @SaCheckPermission("main:evaluation:list")
|
|
|
+ @PostMapping("/score-list")
|
|
|
+ @Log(title = "获取考生分数列表", businessType = BusinessType.OTHER)
|
|
|
+ public R<String> getScoreList(@RequestBody Map<String, Object> params) {
|
|
|
+ KaoshixingScoreListRequest request = new KaoshixingScoreListRequest();
|
|
|
+ Object examInfoIdObj = params.get("examInfoId");
|
|
|
+ if (examInfoIdObj == null) {
|
|
|
+ return R.fail("examInfoId不能为空");
|
|
|
+ }
|
|
|
+ request.setExamInfoId(Long.valueOf(examInfoIdObj.toString()));
|
|
|
+ request.setPage((Integer) params.getOrDefault("page", 1));
|
|
|
+ return R.ok(kaoshixingService.fetchScoreList(request));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取试卷试题列表 (603)
|
|
|
*/
|
|
|
@@ -238,4 +257,59 @@ public class MainExamEvaluationController extends BaseController {
|
|
|
request.setPage((Integer) params.getOrDefault("page", 1));
|
|
|
return R.ok(kaoshixingService.fetchLearningContents(request));
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 小程序专用:考生静默登录(action_id=203)
|
|
|
+ * 流程:先尝试203静默登录;若用户不存在,自动以201注册并登录。
|
|
|
+ * 成功后返回考试星跳转url,前端用web-view打开即可完成登录进入考试。
|
|
|
+ *
|
|
|
+ * @param params user_id 考生唯一标识(必填,通常用 studentId)
|
|
|
+ * user_name 考生姓名(首次注册时必填)
|
|
|
+ * department 部门(首次注册时必填,缺省传 "学员")
|
|
|
+ * custom_url 登录后跳转地址(可选,*.kaoshixing.com 域名)
|
|
|
+ */
|
|
|
+ @PostMapping("/silent-login")
|
|
|
+ @Log(title = "考试星静默登录", businessType = BusinessType.OTHER)
|
|
|
+ public R<Map<String, Object>> silentLogin(@RequestBody Map<String, Object> params) {
|
|
|
+ String userId = (String) params.get("user_id");
|
|
|
+ if (userId == null || userId.isBlank()) {
|
|
|
+ return R.fail("user_id不能为空");
|
|
|
+ }
|
|
|
+ String userName = (String) params.getOrDefault("user_name", "学员");
|
|
|
+ String department = (String) params.getOrDefault("department", "学员");
|
|
|
+ String customUrl = (String) params.get("custom_url");
|
|
|
+
|
|
|
+ KaoshixingAutoLoginRequest req = new KaoshixingAutoLoginRequest();
|
|
|
+ req.setUserId(userId);
|
|
|
+ req.setUserName(userName);
|
|
|
+ req.setDepartment(department);
|
|
|
+ req.setCustomUrl(customUrl);
|
|
|
+
|
|
|
+ try {
|
|
|
+ String resp = kaoshixingService.fetchAutoLogin(req);
|
|
|
+ // 解析考试星返回的url字段
|
|
|
+ com.fasterxml.jackson.databind.ObjectMapper mapper =
|
|
|
+ new com.fasterxml.jackson.databind.ObjectMapper();
|
|
|
+ com.fasterxml.jackson.databind.JsonNode root = mapper.readTree(resp);
|
|
|
+
|
|
|
+ int code = root.path("code").asInt(0);
|
|
|
+ if (code != 10000) {
|
|
|
+ String msg = root.path("msg").asText("登录失败");
|
|
|
+ return R.fail(msg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String url = root.path("url").asText(null);
|
|
|
+ if (url == null || url.isBlank()) {
|
|
|
+ return R.fail("考试星未返回跳转链接");
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> data = new java.util.HashMap<>();
|
|
|
+ data.put("url", url);
|
|
|
+ return R.ok(data);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("考试星静默登录失败", e);
|
|
|
+ return R.fail("登录失败:" + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|