|
@@ -1,920 +0,0 @@
|
|
|
-package com.qmth.teachcloud.common.sync;
|
|
|
-
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.qmth.boot.tools.signature.SignatureType;
|
|
|
-import com.qmth.teachcloud.common.SignatureEntityTest;
|
|
|
-import com.qmth.teachcloud.common.bean.dto.stmms.*;
|
|
|
-import com.qmth.teachcloud.common.bean.result.PushResult;
|
|
|
-import com.qmth.teachcloud.common.config.DictionaryConfig;
|
|
|
-import com.qmth.teachcloud.common.contant.SystemConstant;
|
|
|
-import com.qmth.teachcloud.common.entity.BasicSchool;
|
|
|
-import com.qmth.teachcloud.common.entity.SysConfig;
|
|
|
-import com.qmth.teachcloud.common.entity.SysUser;
|
|
|
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
|
|
|
-import com.qmth.teachcloud.common.enums.SyncFileTypeEnum;
|
|
|
-import com.qmth.teachcloud.common.enums.SyncModeEnum;
|
|
|
-import com.qmth.teachcloud.common.enums.userPush.SpecialPrivilegeEnum;
|
|
|
-import com.qmth.teachcloud.common.service.CommonCacheService;
|
|
|
-import com.qmth.teachcloud.common.util.Base64Util;
|
|
|
-import com.qmth.teachcloud.common.util.HttpKit;
|
|
|
-import org.apache.commons.codec.digest.DigestUtils;
|
|
|
-import org.apache.commons.collections4.CollectionUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.stereotype.Component;
|
|
|
-
|
|
|
-import javax.annotation.Resource;
|
|
|
-import java.io.File;
|
|
|
-import java.io.FileInputStream;
|
|
|
-import java.math.BigDecimal;
|
|
|
-import java.util.*;
|
|
|
-
|
|
|
-/**
|
|
|
- * 同步云阅卷接口工具类
|
|
|
- * <p>
|
|
|
- * Date: 2021/10/29.
|
|
|
- */
|
|
|
-@Component
|
|
|
-public class CloudMarkingTaskUtils {
|
|
|
- private final static Logger log = LoggerFactory.getLogger(CloudMarkingTaskUtils.class);
|
|
|
-
|
|
|
- // 考试类型(逸教云默认是纸笔"SCAN_IMAGE")
|
|
|
- private static final String SAVE_EXAM_TYPE = "SCAN_IMAGE";
|
|
|
- // 所有请求方法默认为"POST"
|
|
|
- private static final String POST_METHOD = "POST";
|
|
|
-
|
|
|
- // 默认分页数量
|
|
|
- private static final int defaultPageSize = 100;
|
|
|
-
|
|
|
- // 时间格式化
|
|
|
- public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
|
|
-
|
|
|
- @Resource
|
|
|
- private CommonCacheService commonCacheService;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private DictionaryConfig dictionaryConfig;
|
|
|
-
|
|
|
- /**
|
|
|
- * 同步规则是否为按学院同步
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- */
|
|
|
- public boolean isCollegeMode(Long schoolId) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_SYNC_MODE);
|
|
|
- if (sysConfig == null || StringUtils.isBlank(sysConfig.getConfigValue())) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- return SyncModeEnum.BY_COLLEGE.name().equals(sysConfig.getConfigValue());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 学院创建/更新接口
|
|
|
- *
|
|
|
- * @param code 学院代码
|
|
|
- * @param name 学院名称
|
|
|
- * @return 机构ID
|
|
|
- */
|
|
|
- public Integer syncSchool(Long schoolId, String code, String name) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String schoolSaveUrl = SystemConstant.CLOUD_MARK_SCHOOL_SAVE_API;
|
|
|
- validUrl(hostUrl, schoolSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(schoolSaveUrl);
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("code", validParam(code, null, true, "唯一标识"));
|
|
|
- map.put("name", validParam(name, null, true, "显示名称"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, schoolSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("id")) {
|
|
|
- return Integer.valueOf(jsonObject.get("id").toString());
|
|
|
- } else {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("学院(机构)同步失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 考试创建/更新接口
|
|
|
- *
|
|
|
- * @param code 唯一标识
|
|
|
- * @param name 考试名称
|
|
|
- * @param examTime 考试时间
|
|
|
- * @return 考试ID
|
|
|
- */
|
|
|
- public Long syncExam(Long schoolId, String code, String name, String examTime, String orgCode) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String examSaveUrl = SystemConstant.CLOUD_MARK_EXAM_SAVE_API;
|
|
|
- validUrl(hostUrl, examSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(examSaveUrl);
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("code", validParam(code, null, true, "唯一标识"));
|
|
|
- map.put("name", validParam(name, null, true, "考试名称"));
|
|
|
- map.put("examTime", validParam(examTime, null, true, "考试时间"));
|
|
|
- map.put("type", SAVE_EXAM_TYPE);
|
|
|
- if (StringUtils.isNotBlank(orgCode)) {
|
|
|
- map.put("schoolCode", orgCode);
|
|
|
- }
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("id")) {
|
|
|
- return Long.valueOf(jsonObject.get("id").toString());
|
|
|
- } else {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("考试同步失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 科目创建/更新接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 云阅卷考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param subjectName 科目名称
|
|
|
- */
|
|
|
- public Boolean syncSubject(Long schoolId, String examId, String subjectCode, String subjectName) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String examSubjectSaveUrl = SystemConstant.CLOUD_MARK_SUBJECT_SAVE_API;
|
|
|
- validUrl(hostUrl, examSubjectSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(examSubjectSaveUrl);
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "云阅卷考试ID"));
|
|
|
- map.put("code", validParam(subjectCode, null, true, "科目代码"));
|
|
|
- map.put("name", validParam(subjectName, null, true, "科目名称"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, examSubjectSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("updateTime")) {
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("科目同步失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 考试成绩考生查询接口
|
|
|
- *
|
|
|
- * @param pageNo 分页参数
|
|
|
- * @param pageSize 分页参数
|
|
|
- */
|
|
|
- public List<JSONObject> getExam(Long schoolId, String orgCode, int pageNo, int pageSize) {
|
|
|
- Map<String, String> paramMap = new HashMap<>();
|
|
|
- if (StringUtils.isNotBlank(orgCode)) {
|
|
|
- paramMap.put("schoolCode", orgCode);
|
|
|
- }
|
|
|
- paramMap.put("pageNumber", String.valueOf(pageNo));
|
|
|
- paramMap.put("pageSize", String.valueOf(pageSize));
|
|
|
-
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String yyjRootUrl = sysConfig.getConfigValue();
|
|
|
- String examUrl = SystemConstant.CLOUD_MARK_EXAM_LIST_API;
|
|
|
-
|
|
|
- if (StringUtils.isAnyBlank(yyjRootUrl, examUrl)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("考试查询接口url未设置");
|
|
|
- }
|
|
|
-
|
|
|
- Map<String, String> header = getHeaders(schoolId, examUrl);
|
|
|
- //请求
|
|
|
- String examObject = HttpKit.sendPost(yyjRootUrl + examUrl, paramMap, header);
|
|
|
- return JSONObject.parseArray(JSONObject.toJSON(examObject).toString(), JSONObject.class);
|
|
|
- }
|
|
|
-
|
|
|
- public PushResult syncUser(String account, String name, int roleValue, Boolean enable, Long schoolId, String orgCode) throws IllegalAccessException {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String userSaveUrl = SystemConstant.CLOUD_MARK_USER_EXTERNAL_SAVE_API;
|
|
|
- String postUrl = hostUrl.concat(userSaveUrl);
|
|
|
-
|
|
|
- BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
|
|
|
- String password = basicSchool != null && StringUtils.isNotBlank(basicSchool.getInitPassword()) ? new String(Base64Util.decode(basicSchool.getInitPassword())) : "123456";
|
|
|
- // 参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("account", validParam(account, null, true, "关联名称(唯一标识)"));
|
|
|
- map.put("name", validParam(name, null, false, "名称"));
|
|
|
- map.put("password", validParam(password, null, false, "密码"));
|
|
|
- map.put("role", validParam(String.valueOf(roleValue), null, true, "类型:MARKER、SUBJECT_HEADER"));
|
|
|
- map.put("enable", validParam(enable, true, false, "是否启用"));
|
|
|
- if (StringUtils.isNotBlank(orgCode)) {
|
|
|
- map.put("schoolCode", validParam(orgCode, null, false, "子机构编号"));
|
|
|
- }
|
|
|
-
|
|
|
- PushResult pushResult = new PushResult();
|
|
|
- boolean pushStatus = false;
|
|
|
- String errorMessage = "";
|
|
|
- try {
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, userSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("updateTime")) {
|
|
|
- pushStatus = true;
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- errorMessage = e.getMessage();
|
|
|
- } finally {
|
|
|
- pushResult.setSuccess(pushStatus);
|
|
|
- pushResult.setMessage(errorMessage);
|
|
|
- }
|
|
|
- return pushResult;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 考生创建/更新接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param examNumber 准考证号
|
|
|
- * @param studentCode 学号
|
|
|
- * @param name 姓名
|
|
|
- * @param college 学院
|
|
|
- * @param className 班级名称
|
|
|
- * @param teacher 教师姓名
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param subjectName 科目名称
|
|
|
- * @param packageCode 签到表编号
|
|
|
- * @param paperType 试卷类型
|
|
|
- * @param examSite 考点
|
|
|
- * @param examRoom 考场
|
|
|
- */
|
|
|
- public boolean syncStudent(Long schoolId, String examId, String examNumber, String studentCode, String name, String college,
|
|
|
- String className, String teacher, String subjectCode, String subjectName,
|
|
|
- String packageCode, String paperType, String examSite, String examRoom) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String studentSaveUrl = SystemConstant.CLOUD_MARK_EXAM_STUDENT_SAVE_API;
|
|
|
- validUrl(hostUrl, studentSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(studentSaveUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("examNumber", validParam(examNumber, null, true, "准考证号"));
|
|
|
- map.put("studentCode", validParam(studentCode, null, true, "学号"));
|
|
|
- map.put("name", validParam(name, null, true, "姓名"));
|
|
|
- map.put("college", validParam(college, "无", true, "学院"));
|
|
|
- map.put("className", validParam(className, null, true, "班级名称"));
|
|
|
- map.put("teacher", validParam(teacher, "无", true, "教师姓名"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码")); // 取试卷编号
|
|
|
- map.put("subjectName", validParam(subjectName, null, true, "科目名称"));
|
|
|
- map.put("packageCode", validParam(packageCode, "", false, "签到表编号"));
|
|
|
- map.put("paperType", validParam(paperType, "", false, "试卷类型"));
|
|
|
- map.put("examSite", validParam(examSite, "", false, "考点"));
|
|
|
- map.put("examRoom", validParam(examRoom, "", false, "考场"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("updateTime")) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 文件公共上传接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param type 文件类型 SyncFileTypeEnum枚举
|
|
|
- * @param file 文件
|
|
|
- */
|
|
|
- public String syncFile(Long schoolId, String examId, String subjectCode, SyncFileTypeEnum type, File file) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String fileUploadUrl = SystemConstant.CLOUD_MARK_FILE_UPLOAD_API;
|
|
|
- validUrl(hostUrl, fileUploadUrl);
|
|
|
- fileUploadUrl = fileUploadUrl.replace("{type}", type.name().toLowerCase());
|
|
|
- String postUrl = hostUrl.concat(fileUploadUrl);
|
|
|
- try {
|
|
|
- Map<String, String> files = new HashMap<>();
|
|
|
- if (file.exists()) {
|
|
|
- files.put(file.getName(), file.getPath());
|
|
|
- }
|
|
|
- //表单数据
|
|
|
- Map<String, Object> formText = new HashMap<>();
|
|
|
- formText.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- formText.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
- String fileName = file.getName();
|
|
|
- String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
|
|
|
- if (type.equals(SyncFileTypeEnum.CARD)) {
|
|
|
- if (!"zip".equals(suffix) && !"json".equals(suffix)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("文件类型有误");
|
|
|
- }
|
|
|
- } else if (type.equals(SyncFileTypeEnum.PAPER) || type.equals(SyncFileTypeEnum.ANSWER)) {
|
|
|
- if (!"pdf".equals(suffix) && !"json".equals(suffix)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("文件类型有误");
|
|
|
- }
|
|
|
- } else {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("请传入文件上传类型");
|
|
|
- }
|
|
|
- formText.put("format", suffix);
|
|
|
- formText.put("md5", DigestUtils.md5Hex(new FileInputStream(file)));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, fileUploadUrl), formText, files, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("success")) {
|
|
|
- String success = jsonObject.get("success").toString();
|
|
|
- if (Boolean.parseBoolean(success)) {
|
|
|
- if (jsonObject.containsKey("url")) {
|
|
|
- return jsonObject.get("url").toString();
|
|
|
- } else {
|
|
|
- return success;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- } finally {
|
|
|
- if (Objects.nonNull(dictionaryConfig.sysDomain()) && dictionaryConfig.sysDomain().isOss()) {
|
|
|
- if (file != null && file.exists()) {
|
|
|
- file.delete();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return "";
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 试卷结构创建/更新接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param objective 是否客观题
|
|
|
- * @param paperType 试卷类型
|
|
|
- * @param questions 试卷结构JSON
|
|
|
- */
|
|
|
- public boolean syncPaperStructure(Long schoolId, String examId, String subjectCode, Boolean objective,
|
|
|
- String paperType, List<QuestionDTO> questions) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String structureUrl = SystemConstant.CLOUD_MARK_EXAM_PAPER_SAVE_API;
|
|
|
- validUrl(hostUrl, structureUrl);
|
|
|
- String postUrl = hostUrl.concat(structureUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- PaperDTO paperDTO = new PaperDTO();
|
|
|
- paperDTO.setExamId(Integer.valueOf(validParam(examId, null, true, "考试ID")));
|
|
|
- paperDTO.setSubjectCode(validParam(subjectCode, null, true, "科目代码"));
|
|
|
- paperDTO.setObjective(validParam(objective, true, true, "是否客观题"));
|
|
|
- paperDTO.setPaperType(validParam(paperType, "#", false, "试卷类型"));
|
|
|
- paperDTO.setQuestions(validStructureParam(objective, questions));
|
|
|
-
|
|
|
- String jsonData = JSONObject.toJSONString(paperDTO);
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(schoolId, structureUrl));
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 试卷结构查询接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param paperType 试卷编号
|
|
|
- */
|
|
|
- public String queryPaperStructure(Long schoolId, String examId, String subjectCode, String paperType) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String queryPaperStructure = SystemConstant.CLOUD_MARK_EXAM_PAPER_QUERY_API;
|
|
|
- validUrl(hostUrl, queryPaperStructure);
|
|
|
- String postUrl = hostUrl.concat(queryPaperStructure);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, String> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码")); // 取试卷编号
|
|
|
- map.put("paperType", validParam(paperType, "", false, "试卷类型"));
|
|
|
-
|
|
|
- return HttpKit.sendPost(postUrl, map, getHeaders(schoolId, queryPaperStructure));
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 创建评卷分组接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param groups 试卷结构JSON
|
|
|
- */
|
|
|
- public boolean saveMarkerGroup(Long schoolId, String examId, String subjectCode, Integer trialCount, List<GroupDetailDTO> groups) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String groupSaveUrl = SystemConstant.CLOUD_MARK_EXAM_MARK_GROUP_SAVE_API;
|
|
|
- validUrl(hostUrl, groupSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(groupSaveUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- GroupDTO groupDTO = new GroupDTO();
|
|
|
- groupDTO.setExamId(Integer.valueOf(validParam(examId, null, true, "考试ID")));
|
|
|
- groupDTO.setSubjectCode(validParam(subjectCode, null, true, "科目代码"));
|
|
|
- groupDTO.setTrialCount(Integer.valueOf(validParam(String.valueOf(trialCount), "0", true, "试评数量")));
|
|
|
- groupDTO.setGroups(validGroupParam(groups));
|
|
|
-
|
|
|
- String jsonData = JSONObject.toJSONString(groupDTO);
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(schoolId, groupSaveUrl));
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 分组数量查询接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- */
|
|
|
- public int countGroup(Long schoolId, String examId, String subjectCode) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String groupCountUrl = SystemConstant.CLOUD_MARK_EXAM_MARK_GROUP_COUNT_API;
|
|
|
- validUrl(hostUrl, groupCountUrl);
|
|
|
- String postUrl = hostUrl.concat(groupCountUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, groupCountUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- if (jsonObject.containsKey("totalCount")) {
|
|
|
- return jsonObject.getIntValue("totalCount");
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 分组数量查询接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- */
|
|
|
- public boolean deleteGroup(Long schoolId, String examId, String subjectCode) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String groupDeleteUrl = SystemConstant.CLOUD_MARK_EXAM_MARK_GROUP_DELETE_API;
|
|
|
- validUrl(hostUrl, groupDeleteUrl);
|
|
|
- String postUrl = hostUrl.concat(groupDeleteUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, groupDeleteUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 绑定评卷员接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param groupNumber 分组序号
|
|
|
- * @param loginName 用户名
|
|
|
- */
|
|
|
- public boolean saveMarker(Long schoolId, String examId, String subjectCode, Integer groupNumber, String loginName) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String markerSaveUrl = SystemConstant.CLOUD_MARK_EXAM_MARKER_SAVE_API;
|
|
|
- validUrl(hostUrl, markerSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(markerSaveUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
- map.put("groupNumber", validParam(String.valueOf(groupNumber), null, true, "分组序号"));
|
|
|
- map.put("account", SpecialPrivilegeEnum.MARKER.getPrefix() + validParam(loginName, null, true, "用户名"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, markerSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 绑定科组长接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- * @param loginName 用户名
|
|
|
- */
|
|
|
- public boolean saveMarkLeader(Long schoolId, String subjectCode, String loginName, String orgCode) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String markLeaderSaveUrl = SystemConstant.CLOUD_MARK_EXAM_SUBJECT_HEADER_SAVE_API;
|
|
|
- validUrl(hostUrl, markLeaderSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(markLeaderSaveUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
- map.put("account", SpecialPrivilegeEnum.SUBJECT_HEADER.getPrefix() + validParam(loginName, null, true, "用户名"));
|
|
|
- if (StringUtils.isNotBlank(orgCode)) {
|
|
|
- map.put("schoolCode", validParam(orgCode, null, false, "子机构编号"));
|
|
|
- }
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, markLeaderSaveUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 用户班级绑定接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param loginName 用户名
|
|
|
- * @param className 分组序号
|
|
|
- */
|
|
|
- public boolean saveUserClass(Long schoolId, String examId, String loginName, List<String> className) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String userClassSaveUrl = SystemConstant.CLOUD_MARK_USER_CLASS_SAVE_API;
|
|
|
- validUrl(hostUrl, userClassSaveUrl);
|
|
|
- String postUrl = hostUrl.concat(userClassSaveUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- ClassMarkerDTO classMarkerDTO = new ClassMarkerDTO();
|
|
|
- classMarkerDTO.setExamId(Integer.valueOf(validParam(examId, null, true, "考试ID")));
|
|
|
- classMarkerDTO.setAccount(SpecialPrivilegeEnum.MARKER.getPrefix() + validParam(loginName, null, true, "用户名"));
|
|
|
- classMarkerDTO.setClassName(validParam(className, new ArrayList<>(), false, "班级名称"));
|
|
|
-
|
|
|
- String jsonData = JSONObject.toJSONString(classMarkerDTO);
|
|
|
- String result = HttpKit.sendPost(postUrl, jsonData, getHeaders(schoolId, userClassSaveUrl));
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 科目客观题统分接口
|
|
|
- *
|
|
|
- * @param schoolId 学校ID
|
|
|
- * @param examId 考试ID
|
|
|
- * @param subjectCode 科目代码
|
|
|
- */
|
|
|
- public boolean subjectCalculate(Long schoolId, String examId, String subjectCode) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String subjectCalculateUrl = SystemConstant.CLOUD_MARK_EXAM_SUBJECT_CALCULATE_API;
|
|
|
- validUrl(hostUrl, subjectCalculateUrl);
|
|
|
- String postUrl = hostUrl.concat(subjectCalculateUrl);
|
|
|
- try {
|
|
|
- //参数
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(examId, null, true, "考试ID"));
|
|
|
- map.put("subjectCode", validParam(subjectCode, null, true, "科目代码"));
|
|
|
-
|
|
|
- String result = HttpKit.sendPost(postUrl, getHeaders(schoolId, subjectCalculateUrl), map, null, null, null);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
- return jsonObject.containsKey("updateTime");
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 评卷员登录
|
|
|
- */
|
|
|
- public Map<String, Object> markLogin(SysUser sysUser, String orgCode) {
|
|
|
- if (this.isCollegeMode(sysUser.getSchoolId()) && StringUtils.isBlank(orgCode)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(String.format("用户账号[%s]所属学院代码为空,请联系管理员", sysUser.getLoginName()));
|
|
|
- }
|
|
|
- String markLoginUrl = SystemConstant.CLOUD_MARK_OPEN_MARK_LOGIN_API;
|
|
|
- try {
|
|
|
- //参数
|
|
|
- return openLogin(sysUser, orgCode, markLoginUrl, SpecialPrivilegeEnum.MARKER.getPrefix());
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 科组长登录
|
|
|
- */
|
|
|
- public Map<String, Object> markLeaderLogin(SysUser sysUser, String orgCode) {
|
|
|
- if (this.isCollegeMode(sysUser.getSchoolId()) && StringUtils.isBlank(orgCode)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(String.format("用户账号[%s]所属学院代码为空,请联系管理员", sysUser.getLoginName()));
|
|
|
- }
|
|
|
- String markLeaderLoginUrl = SystemConstant.CLOUD_MARK_OPEN_SUBJECT_HEADER_LOGIN_API;
|
|
|
- try {
|
|
|
- //参数
|
|
|
- return openLogin(sysUser, orgCode, markLeaderLoginUrl, SpecialPrivilegeEnum.SUBJECT_HEADER.getPrefix());
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 组装登录参数
|
|
|
- *
|
|
|
- * @param loginUrl 登录url
|
|
|
- * @param prefix 账号前缀
|
|
|
- */
|
|
|
- private Map<String, Object> openLogin(SysUser sysUser, String orgCode, String loginUrl, String prefix) {
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(sysUser.getSchoolId(), SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- validUrl(hostUrl, loginUrl);
|
|
|
- String postUrl = hostUrl.concat(loginUrl);
|
|
|
-
|
|
|
- try {
|
|
|
- long time = System.currentTimeMillis();
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("redirectUrl", postUrl);
|
|
|
- map.put("account", prefix + sysUser.getLoginName());
|
|
|
- map.put("name", sysUser.getRealName());
|
|
|
- map.put("time", time);
|
|
|
- if (this.isCollegeMode(sysUser.getSchoolId())) {
|
|
|
- map.put("schoolCode", orgCode);
|
|
|
- }
|
|
|
- map.put("authorization", createSign(sysUser.getSchoolId(), time, loginUrl));
|
|
|
- return map;
|
|
|
- } catch (Exception e) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("登录信息获取失败");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * http请求头
|
|
|
- *
|
|
|
- * @param url 请求URL
|
|
|
- */
|
|
|
- private Map<String, String> getHeaders(Long schoolId, String url) {
|
|
|
- long time = System.currentTimeMillis();
|
|
|
- Map<String, String> header = new HashMap<>();
|
|
|
- header.put(SystemConstant.HEADER_AUTHORIZATION, createSign(schoolId, time, url));
|
|
|
- header.put(SystemConstant.HEADER_TIME, String.valueOf(time));
|
|
|
- return header;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 签名
|
|
|
- *
|
|
|
- * @param time 时间戳
|
|
|
- * @param url 请求URL
|
|
|
- */
|
|
|
- private String createSign(Long schoolId, long time, String url) {
|
|
|
- BasicSchool basicSchool = commonCacheService.schoolCache(schoolId);
|
|
|
- if (basicSchool == null) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("学校不存在");
|
|
|
- }
|
|
|
- if (!basicSchool.getEnable()) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("学校已禁用");
|
|
|
- }
|
|
|
-
|
|
|
- return SignatureEntityTest.build(SignatureType.SECRET, POST_METHOD, url, time, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验参数值并返回(字符型)
|
|
|
- *
|
|
|
- * @param value 参数值
|
|
|
- * @param defaultValue 默认值
|
|
|
- * @param require 是否必填(true:是,false:否)
|
|
|
- * @param name 参数名称
|
|
|
- */
|
|
|
- private String validParam(String value, String defaultValue, boolean require, String name) {
|
|
|
- if (require && StringUtils.isAllBlank(value, defaultValue)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception((StringUtils.isBlank(name) ? "" : name) + "值必填");
|
|
|
- }
|
|
|
- return StringUtils.isBlank(value) ? defaultValue : value;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验参数值并返回 (布尔型)
|
|
|
- *
|
|
|
- * @param value 参数值
|
|
|
- * @param defaultValue 默认值
|
|
|
- * @param require 是否必填
|
|
|
- * @param name 描述
|
|
|
- */
|
|
|
- private Boolean validParam(Boolean value, Boolean defaultValue, Boolean require, String name) {
|
|
|
- if (require && value == null && defaultValue == null) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception((StringUtils.isBlank(name) ? "" : name) + "值必填");
|
|
|
- }
|
|
|
- return value == null ? defaultValue : value;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验参数值并返回(集合型)
|
|
|
- *
|
|
|
- * @param value 参数值
|
|
|
- * @param defaultValue 默认值
|
|
|
- * @param require 是否必填(true:是,false:否)
|
|
|
- * @param name 参数名称
|
|
|
- */
|
|
|
- private List<String> validParam(List<String> value, List<String> defaultValue, boolean require, String name) {
|
|
|
- if (require && CollectionUtils.isEmpty(value) && CollectionUtils.isEmpty(defaultValue)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception((StringUtils.isBlank(name) ? "" : name) + "值必填");
|
|
|
- }
|
|
|
- return CollectionUtils.isEmpty(value) ? defaultValue : value;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验试卷结构值
|
|
|
- *
|
|
|
- * @param objective 是否客观题
|
|
|
- * @param questions 试卷结构JSON
|
|
|
- */
|
|
|
- private List<QuestionDTO> validStructureParam(Boolean objective, List<QuestionDTO> questions) {
|
|
|
- for (QuestionDTO question : questions) {
|
|
|
- validParam(String.valueOf(question.getMainNumber()), null, true, "大题号");
|
|
|
- validParam(question.getSubNumber(), null, true, "小题号");
|
|
|
- validParam(question.getMainTitle(), null, true, "大题名称");
|
|
|
- validParam(String.valueOf(question.getTotalScore()), null, true, "满分");
|
|
|
- if (objective) {
|
|
|
- validParam(question.getAnswer(), null, true, "标答");
|
|
|
- validParam(question.getType(), null, true, "客观题类型");
|
|
|
- validParam(question.getObjectivePolicy(), "NONE", true, "客观题判分规则");
|
|
|
- }
|
|
|
- }
|
|
|
- return questions;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验分组参数
|
|
|
- *
|
|
|
- * @param groups 分组
|
|
|
- */
|
|
|
- private List<GroupDetailDTO> validGroupParam(List<GroupDetailDTO> groups) {
|
|
|
- for (GroupDetailDTO group : groups) {
|
|
|
- validParam(String.valueOf(group.getNumber()), null, true, "分组序号");
|
|
|
-// validParam(group.getPicList(), null, true, "小题号");
|
|
|
- validParam(String.valueOf(group.getDoubleRate()), "0", true, "双评比例");
|
|
|
- if (new BigDecimal(1).compareTo(BigDecimal.valueOf(group.getDoubleRate())) == 0) {
|
|
|
- validParam(String.valueOf(group.getArbitrateThreshold()), "0", true, "仲裁阈值");
|
|
|
- validParam(String.valueOf(group.getScorePolicy()), "AVG", true, "合分策略");
|
|
|
- }
|
|
|
- // 允许全零分、评卷模式非必填
|
|
|
- /*validParam(group.getEnableAllZero(), false, false, "允许全零分");
|
|
|
- validParam(group.getMarkMode(), "", false, "评卷模式");*/
|
|
|
- for (QuestionBaseDTO question : group.getQuestions()) {
|
|
|
- validParam(String.valueOf(question.getMainNumber()), null, true, "大题号");
|
|
|
- validParam(question.getSubNumber(), null, true, "小题号");
|
|
|
- }
|
|
|
- }
|
|
|
- return groups;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 校验url是否配置
|
|
|
- *
|
|
|
- * @param urls URL数组
|
|
|
- */
|
|
|
- private void validUrl(String... urls) {
|
|
|
- if (StringUtils.isAnyBlank(urls)) {
|
|
|
- throw ExceptionResultEnum.ERROR.exception("云阅卷同步接口未正确配置");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 考试成绩考生数量查询接口
|
|
|
- *
|
|
|
- * @param schoolId
|
|
|
- * @param examId
|
|
|
- * @param examCode
|
|
|
- * @param examNumber
|
|
|
- * @param studentCode
|
|
|
- * @param subjectCode
|
|
|
- * @param college
|
|
|
- * @param className
|
|
|
- * @param teacher
|
|
|
- * @return
|
|
|
- */
|
|
|
- public int getStudentCount(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
|
|
|
-
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String studentCountUrl = SystemConstant.CLOUD_MARK_EXAM_STUDENT_COUNT_API;
|
|
|
- validUrl(hostUrl, studentCountUrl);
|
|
|
- String postUrl = hostUrl.concat(studentCountUrl);
|
|
|
-
|
|
|
- //请求
|
|
|
- String res;
|
|
|
- try {
|
|
|
- res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentCountUrl), map, null, null, null);
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("云阅卷:调用考试成绩考生数量查询接口请求异常,{}", e.getMessage());
|
|
|
- throw new RuntimeException("云阅卷:调用考试成绩考生数量查询接口请求异常," + e.getMessage());
|
|
|
- }
|
|
|
- if (Objects.isNull(res)) {
|
|
|
- log.info("云阅卷:调用考试成绩考生数量查询接口返回值为null");
|
|
|
- throw new RuntimeException("云阅卷:调用考试成绩考生数量查询接口返回值为null");
|
|
|
- }
|
|
|
- JSONObject object = JSONObject.parseObject(res);
|
|
|
- return Integer.parseInt(object.get("totalCount").toString());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 考试成绩考生查询接口
|
|
|
- *
|
|
|
- * @param schoolId
|
|
|
- * @param examId
|
|
|
- * @param examCode
|
|
|
- * @param examNumber
|
|
|
- * @param studentCode
|
|
|
- * @param subjectCode
|
|
|
- * @param college
|
|
|
- * @param className
|
|
|
- * @param teacher
|
|
|
- * @param withMarkTrack
|
|
|
- * @param pageNo
|
|
|
- * @param pageSize
|
|
|
- * @return
|
|
|
- */
|
|
|
- public List<Map> getStudentScore(Long schoolId, Integer examId, String examCode, String examNumber, String studentCode, String subjectCode, String college, String className, String teacher, boolean withMarkTrack, int pageNo, int pageSize) {
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("examId", validParam(String.valueOf(examId), null, true, "考试ID"));
|
|
|
- map.put("withMarkTrack", validParam(withMarkTrack, true, false, "评分标记"));
|
|
|
- map.put("pageNumber", validParam(String.valueOf(pageNo), null, true, "页码"));
|
|
|
- map.put("pageSize", validParam(String.valueOf(pageSize), null, true, "数量"));
|
|
|
-
|
|
|
- SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.CLOUDMARK_HOST_URL);
|
|
|
- Optional.ofNullable(sysConfig).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("未配置云阅卷地址"));
|
|
|
- String hostUrl = sysConfig.getConfigValue();
|
|
|
- String studentScoreUrl = SystemConstant.CLOUD_MARK_EXAM_STUDENT_SCORE_API;
|
|
|
- validUrl(hostUrl, studentScoreUrl);
|
|
|
- String postUrl = hostUrl.concat(studentScoreUrl);
|
|
|
- //请求
|
|
|
- String res;
|
|
|
- try {
|
|
|
- res = HttpKit.sendPost(postUrl, getHeaders(schoolId, studentScoreUrl), map, null, null, null);
|
|
|
- } catch (Exception e) {
|
|
|
- log.info("云阅卷:调用考试成绩考生查询接口请求异常,{}", e.getMessage());
|
|
|
- throw new RuntimeException("云阅卷:调用考试成绩考生查询接口请求异常," + e.getMessage());
|
|
|
- }
|
|
|
- if (Objects.isNull(res)) {
|
|
|
- log.info("云阅卷:调用考试成绩考生查询接口返回值为null");
|
|
|
- throw new RuntimeException("云阅卷:调用考试成绩考生查询接口返回值为null");
|
|
|
- }
|
|
|
- log.info("云阅卷返回考生数据:{}", JSONObject.toJSON(res).toString());
|
|
|
- return JSONObject.parseArray(JSONObject.toJSON(res).toString(), Map.class);
|
|
|
- }
|
|
|
-
|
|
|
- public int getDefaultPageSize() {
|
|
|
- return defaultPageSize;
|
|
|
- }
|
|
|
-}
|