Parcourir la source

新加入云阅卷推送数据

wangliang il y a 2 ans
Parent
commit
7fa78002f0

+ 6 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/cloudmark/BaseParams.java

@@ -35,6 +35,12 @@ public class BaseParams implements Serializable {
         this.accessSecret = accessSecret;
     }
 
+    public void resetDefaultData() {
+        this.orgId = null;
+        this.accessKey = null;
+        this.accessSecret = null;
+    }
+
     public Long getOrgId() {
         return orgId;
     }

+ 10 - 4
themis-business/src/main/java/com/qmth/themis/business/bean/cloudmark/FileUploadParams.java

@@ -38,7 +38,7 @@ public class FileUploadParams extends BaseParams implements Serializable {
     private String md5;
 
     @ApiModelProperty(value = "文件类型")
-    private CloudMarkFileUploadTypeEnum format;
+    private String format;
 
     @ApiModelProperty(value = "科目代码")
     private String subjectCode;
@@ -59,11 +59,17 @@ public class FileUploadParams extends BaseParams implements Serializable {
         super(orgId, null, null);
         this.examId = examId;
         this.subjectCode = subjectCode;
-        this.format = format;
+        this.format = format.getCode();
         this.file = file;
         this.md5 = DigestUtils.md5Hex(new FileInputStream(file));
     }
 
+    public void vaildParamsType() {
+        if (Objects.isNull(this.format)) {
+            throw new BusinessException("文件类型不能为空");
+        }
+    }
+
     public void vaildParams(CloudMarkFileUploadTypeEnum format) {
         switch (format) {
             case JSON:
@@ -109,11 +115,11 @@ public class FileUploadParams extends BaseParams implements Serializable {
         this.md5 = md5;
     }
 
-    public CloudMarkFileUploadTypeEnum getFormat() {
+    public String getFormat() {
         return format;
     }
 
-    public void setFormat(CloudMarkFileUploadTypeEnum format) {
+    public void setFormat(String format) {
         this.format = format;
     }
 

+ 48 - 0
themis-business/src/main/java/com/qmth/themis/business/bean/cloudmark/SaveExamParams.java

@@ -2,6 +2,7 @@ package com.qmth.themis.business.bean.cloudmark;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.common.exception.BusinessException;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -24,10 +25,27 @@ public class SaveExamParams extends BaseParams implements Serializable {
     @ApiModelProperty(value = "考试批次编码")
     String code;
 
+    @ApiModelProperty(value = "考试名称")
+    private String name;
+
+    @ApiModelProperty(value = "考试时间(开始时间)")
+    private String examTime;
+
+    @ApiModelProperty(value = "考试类型(SCAN_IMAGE或MULTI_MEDIA)")
+    private String type = SystemConstant.MULTI_MEDIA;
+
     public SaveExamParams() {
 
     }
 
+    public SaveExamParams(Long orgId, Long id, String name, String examTime) {
+        super(orgId, null, null);
+        this.id = id;
+        this.name = name;
+        this.examTime = examTime;
+    }
+
+
     public SaveExamParams(Long orgId, Long id, String code) {
         super(orgId, null, null);
         this.id = id;
@@ -47,6 +65,36 @@ public class SaveExamParams extends BaseParams implements Serializable {
         if (Objects.isNull(id) && Objects.isNull(code)) {
             throw new BusinessException("id或code必填一个");
         }
+        if (Objects.isNull(name)) {
+            throw new BusinessException("考试名称不能为空");
+        }
+        if (Objects.isNull(examTime)) {
+            throw new BusinessException("考试时间不能为空");
+        }
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getExamTime() {
+        return examTime;
+    }
+
+    public void setExamTime(String examTime) {
+        this.examTime = examTime;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
     }
 
     public Long getId() {

+ 10 - 0
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamStudentCacheBean.java

@@ -52,6 +52,16 @@ public class ExamStudentCacheBean implements Serializable {
 
     private Integer enable;
 
+    private String classNo;
+
+    public String getClassNo() {
+        return classNo;
+    }
+
+    public void setClassNo(String classNo) {
+        this.classNo = classNo;
+    }
+
     public Integer getEnable() {
         return enable;
     }

+ 1 - 0
themis-business/src/main/java/com/qmth/themis/business/constant/SystemConstant.java

@@ -95,6 +95,7 @@ public class SystemConstant {
     /**
      * 系统相关
      */
+    public static final String MULTI_MEDIA = "MULTI_MEDIA";
     public static final String FILE_UPLOAD_VARIABLE_URL = "\\{type\\}";
     public static final String CLOUD_MARK_EXAM_ID = "cloudMarkExamId";
     public static final String CONTENT = "content";

+ 11 - 0
themis-business/src/main/java/com/qmth/themis/business/enums/CloudMarkFileUploadTypeEnum.java

@@ -1,5 +1,7 @@
 package com.qmth.themis.business.enums;
 
+import java.util.Objects;
+
 /**
  * @Description: 云阅卷文件上传类型
  * @Param:
@@ -24,4 +26,13 @@ public enum CloudMarkFileUploadTypeEnum {
     public String getCode() {
         return code;
     }
+
+    public static CloudMarkFileUploadTypeEnum convertToEnum(String code) {
+        for (CloudMarkFileUploadTypeEnum e : CloudMarkFileUploadTypeEnum.values()) {
+            if (Objects.equals(code, e.getCode())) {
+                return e;
+            }
+        }
+        return null;
+    }
 }

+ 1 - 0
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamStudentServiceImpl.java

@@ -128,6 +128,7 @@ public class TEExamStudentServiceImpl extends ServiceImpl<TEExamStudentMapper, T
         ret.setIdentity(es.getIdentity());
         ret.setName(es.getName());
         ret.setEnable(es.getEnable());
+        ret.setClassNo(es.getClassNo());
         return ret;
     }
 

+ 24 - 21
themis-business/src/main/java/com/qmth/themis/business/util/CloudMarkUtil.java

@@ -6,6 +6,7 @@ import com.qmth.themis.business.bean.cloudmark.*;
 import com.qmth.themis.business.constant.SystemConstant;
 import com.qmth.themis.business.domain.CloudMarkDomain;
 import com.qmth.themis.business.entity.TBOrg;
+import com.qmth.themis.business.enums.CloudMarkFileUploadTypeEnum;
 import com.qmth.themis.business.service.CacheService;
 import com.qmth.themis.common.enums.ExceptionResultEnum;
 import com.qmth.themis.common.exception.BusinessException;
@@ -121,11 +122,12 @@ public class CloudMarkUtil {
     public Long callExamSaveApi(SaveExamParams saveExamParams) throws IOException {
         saveExamParams.vaildParams();
         this.getAccessKeyAndAccessSecret(saveExamParams);
-        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveExamParams), Map.class);
 
         String url = cloudMarkDomain.getUrl() + cloudMarkDomain.getExamSaveApi();
         long timestamp = System.currentTimeMillis();
         String accessToken = SignatureInfo.build(SignatureType.SECRET, SystemConstant.METHOD, cloudMarkDomain.getExamSaveApi(), timestamp, saveExamParams.getAccessKey(), saveExamParams.getAccessSecret());
+        saveExamParams.resetDefaultData();
+        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveExamParams), Map.class);
         String result = HttpUtil.post(url, params, accessToken, timestamp);
         result = StringEscapeUtils.unescapeHtml4(result);
         if (result.contains("HTTP")) {
@@ -133,7 +135,8 @@ public class CloudMarkUtil {
             throw new BusinessException("云阅卷推送考试信息失败");
         }
         Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(result);
-        return Long.parseLong(String.valueOf(resultMap.get("id")));
+//        return Long.parseLong(String.valueOf(resultMap.get("id")));
+        return null;
     }
 
     /**
@@ -146,11 +149,12 @@ public class CloudMarkUtil {
     public String callSubjectSaveApi(SaveSubjectParams saveSubjectParams) throws IOException {
         saveSubjectParams.vaildParams();
         this.getAccessKeyAndAccessSecret(saveSubjectParams);
-        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveSubjectParams), Map.class);
 
         String url = cloudMarkDomain.getUrl() + cloudMarkDomain.getSubjectSaveApi();
         long timestamp = System.currentTimeMillis();
         String accessToken = SignatureInfo.build(SignatureType.SECRET, SystemConstant.METHOD, cloudMarkDomain.getSubjectSaveApi(), timestamp, saveSubjectParams.getAccessKey(), saveSubjectParams.getAccessSecret());
+        saveSubjectParams.resetDefaultData();
+        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveSubjectParams), Map.class);
         String result = HttpUtil.post(url, params, accessToken, timestamp);
         result = StringEscapeUtils.unescapeHtml4(result);
         if (result.contains("HTTP")) {
@@ -158,7 +162,8 @@ public class CloudMarkUtil {
             throw new BusinessException("云阅卷推送考试科目信息失败");
         }
         Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(result);
-        return String.valueOf(resultMap.get("updateTime"));
+//        return String.valueOf(resultMap.get("updateTime"));
+        return null;
     }
 
     /**
@@ -171,11 +176,12 @@ public class CloudMarkUtil {
     public String callStudentSaveApi(SaveStudentParams saveStudentParams) throws IOException {
         saveStudentParams.vaildParams();
         this.getAccessKeyAndAccessSecret(saveStudentParams);
-        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveStudentParams), Map.class);
 
         String url = cloudMarkDomain.getUrl() + cloudMarkDomain.getStudentSaveApi();
         long timestamp = System.currentTimeMillis();
         String accessToken = SignatureInfo.build(SignatureType.SECRET, SystemConstant.METHOD, cloudMarkDomain.getStudentSaveApi(), timestamp, saveStudentParams.getAccessKey(), saveStudentParams.getAccessSecret());
+        saveStudentParams.resetDefaultData();
+        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(saveStudentParams), Map.class);
         String result = HttpUtil.post(url, params, accessToken, timestamp);
         result = StringEscapeUtils.unescapeHtml4(result);
         if (result.contains("HTTP")) {
@@ -183,7 +189,8 @@ public class CloudMarkUtil {
             throw new BusinessException("云阅卷推送考生信息失败");
         }
         Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(result);
-        return String.valueOf(resultMap.get("updateTime"));
+//        return String.valueOf(resultMap.get("updateTime"));
+        return null;
     }
 
     /**
@@ -194,27 +201,22 @@ public class CloudMarkUtil {
      * @throws IOException
      */
     public Boolean callFileUploadApi(FileUploadParams fileUploadParams) throws IOException {
-//        // 参数
-//        Map paramMap = JSON.parseObject(JSON.toJSONString(obj), Map.class);
-//        File file = new File(String.valueOf(paramMap.get("file")));
-//        Map<String, String> files = new HashMap<>();
-//        if (file.exists()) {
-//            files.put(file.getName(), file.getPath());
-//        }
-//
-//        paramMap.put(SystemConstant.MD5, DigestUtils.md5Hex(new FileInputStream(file)));
-//        paramMap.remove("file");
-        fileUploadParams.vaildParams(fileUploadParams.getFormat());
+        fileUploadParams.vaildParamsType();
+        CloudMarkFileUploadTypeEnum cloudMarkFileUploadTypeEnum = CloudMarkFileUploadTypeEnum.convertToEnum(fileUploadParams.getFormat());
+        fileUploadParams.vaildParams(cloudMarkFileUploadTypeEnum);
         this.getAccessKeyAndAccessSecret(fileUploadParams);
-        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(fileUploadParams), Map.class);
 
-        // api
         String host = cloudMarkDomain.getUrl();
         String api = cloudMarkDomain.getFileUploadApi();
-//        api = api.replaceAll(SystemConstant.FILE_UPLOAD_VARIABLE_URL, type);
+        api = api.replaceAll(SystemConstant.FILE_UPLOAD_VARIABLE_URL, fileUploadParams.getFormat());
         String url = host + api;
         long timestamp = System.currentTimeMillis();
         String accessToken = SignatureInfo.build(SignatureType.SECRET, SystemConstant.METHOD, cloudMarkDomain.getStudentSaveApi(), timestamp, fileUploadParams.getAccessKey(), fileUploadParams.getAccessSecret());
+        fileUploadParams.resetDefaultData();
+        if (cloudMarkFileUploadTypeEnum == CloudMarkFileUploadTypeEnum.JSON) {
+            fileUploadParams.setFormat(null);
+        }
+        Map<String, Object> params = JSON.parseObject(JSON.toJSONString(fileUploadParams), Map.class);
         String result = HttpUtil.postFile(url, params, accessToken, timestamp);
         result = StringEscapeUtils.unescapeHtml4(result);
         if (result.contains("HTTP")) {
@@ -222,6 +224,7 @@ public class CloudMarkUtil {
             throw new BusinessException("云阅卷推送文件信息失败");
         }
         Map<String, Object> resultMap = (Map<String, Object>) JSON.parse(result);
-        return (Boolean) resultMap.get("success");
+//        return (Boolean) resultMap.get("success");
+        return null;
     }
 }

+ 4 - 3
themis-business/src/main/java/com/qmth/themis/business/util/HttpUtil.java

@@ -24,6 +24,7 @@ import org.apache.http.util.EntityUtils;
 import org.apache.tomcat.util.http.fileupload.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.util.CollectionUtils;
 
 import java.io.*;
 import java.net.URLEncoder;
@@ -92,7 +93,7 @@ public class HttpUtil {
         post.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-urlencoded;charset=utf-8");
         // 构建请求参数
         List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
-        if (params != null) {
+        if (!CollectionUtils.isEmpty(params)) {
             for (String key : params.keySet()) {
                 pairs.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
             }
@@ -120,7 +121,7 @@ public class HttpUtil {
     public static String get(String url, Map<String, Object> params, String secret, Long timestamp) throws IOException {
         // 构建请求参数
         List<BasicNameValuePair> pairs = new ArrayList<BasicNameValuePair>();
-        if (params != null) {
+        if (!CollectionUtils.isEmpty(params)) {
             for (String key : params.keySet()) {
                 pairs.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
             }
@@ -256,7 +257,7 @@ public class HttpUtil {
         ContentType contentType = ContentType.create(ContentType.TEXT_PLAIN.getMimeType(), Consts.UTF_8);
 
         // 构建请求参数
-        if (params != null) {
+        if (!CollectionUtils.isEmpty(params)) {
             for (String key : params.keySet()) {
                 if (key.contains("file")) {
                     File file = new File((String) params.get(key));