Explorar o código

update offline submitPaper api

deason %!s(int64=3) %!d(string=hai) anos
pai
achega
5ec8f55e83

+ 16 - 9
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/controller/OfflineExamController.java

@@ -10,6 +10,7 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.ExamStudentService;
 import cn.com.qmth.examcloud.core.oe.admin.service.OfflineExamService;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.OfflineExamCourseInfo;
+import cn.com.qmth.examcloud.core.oe.admin.service.bean.uploadfile.FileInfo;
 import cn.com.qmth.examcloud.reports.commons.bean.AdminOperateReport;
 import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
 import cn.com.qmth.examcloud.support.enums.ExamProperties;
@@ -95,8 +96,8 @@ public class OfflineExamController extends ControllerSupport {
      */
     @ApiOperation(value = "离线考试:交卷")
     @PostMapping("/submitPaper")
-    public void submitPaper(@RequestParam(value = "file") MultipartFile file,
-                            @RequestParam long examRecordDataId) throws Exception {
+    public void submitPaper(@RequestParam long examRecordDataId,
+                            @RequestPart(value = "file") MultipartFile file) throws Exception {
         Check.isNull(file, "file不能为空");
         Check.isNull(examRecordDataId, "examRecordDataId不能为空");
 
@@ -112,7 +113,7 @@ public class OfflineExamController extends ControllerSupport {
 
         String fileName = file.getOriginalFilename();
         int index = fileName.lastIndexOf(".");
-        String fileSuffix = fileName.substring(index + 1, fileName.length()).toUpperCase();
+        String fileSuffix = fileName.substring(index + 1).toUpperCase();
 
         if (!"PDF".equals(fileSuffix) && !"ZIP".equals(fileSuffix)
                 && !"JPG".equals(fileSuffix) && !"JPEG".equals(fileSuffix) && !"PNG".equals(fileSuffix)) {
@@ -125,22 +126,27 @@ public class OfflineExamController extends ControllerSupport {
         if (StringUtils.isBlank(offlineUploadFileType) || "[]".equals(offlineUploadFileType)) {
             throw new StatusException("OfflineExamController-submitPaper-003", "当前考试设置不允许上传附件");
         }
+
         if (offlineUploadFileType.indexOf(fileSuffix) < 0) {
             throw new StatusException("OfflineExamController-submitPaper-004", "当前考试允许上传文件格式为:" + offlineUploadFileType);
         }
+
         //判断文件大小
         long fileSize = file.getSize();
-
         if (fileSize > answerMaxsize * 1048576) {
             throw new StatusException("OfflineExamController-submitPaper-005", "文件大小不能超过" + answerMaxsize + "M");
         }
 
-        File f = getUploadFile(file);
-
-        offlineExamService.submitPaper(examRecordDataId, f, fileSuffix);
+        FileInfo fileInfo = new FileInfo();
+        fileInfo.setOriginalFileName(file.getOriginalFilename());
+        fileInfo.setFileBytes(file.getBytes());
+        fileInfo.setFileSuffix(fileSuffix);
+        fileInfo.setFileType(fileSuffix);
+        offlineExamService.submitPaper(examRecordDataId, fileInfo);
 
         User user = getAccessUser();
-        ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), "考试进度详情-上传作答", "考试记录ID:" + examRecordDataId + " 考生ID:" + examRecordData.getExamStudentId()));
+        ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), "考试进度详情-上传作答",
+                "考试记录ID:" + examRecordDataId + " 考生ID:" + examRecordData.getExamStudentId()));
     }
 
     /**
@@ -246,7 +252,8 @@ public class OfflineExamController extends ControllerSupport {
             tempFile.delete();
         }
         User user = getAccessUser();
-        ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), "考试进度详情-上传作答", "考试记录ID:" + examRecordDataId + " 考生ID:" + examRecordData.getExamStudentId()));
+        ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), "考试进度详情-上传作答",
+                "考试记录ID:" + examRecordDataId + " 考生ID:" + examRecordData.getExamStudentId()));
     }
 
     private File getUploadFile(MultipartFile file) {

+ 14 - 2
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/controller/client/ExamProcessController.java

@@ -16,6 +16,7 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordQuestionsEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.*;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.*;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examscore.ObjectiveScoreInfo;
+import cn.com.qmth.examcloud.core.oe.admin.service.bean.uploadfile.FileInfo;
 import cn.com.qmth.examcloud.reports.commons.bean.AdminOperateReport;
 import cn.com.qmth.examcloud.reports.commons.util.ReportsUtil;
 import cn.com.qmth.examcloud.support.cache.bean.ExamPropertyCacheBean;
@@ -215,8 +216,19 @@ public class ExamProcessController extends ControllerSupport {
             throw new StatusException("400403", "当前考试允许上传文件格式为:" + examProperty.getValue());
         }
 
-        // todo
-        // offlineExamService.submitPaper(examRecordDataId, file.getBytes(), fileSuffix);
+        String fileType = "IMAGE";
+        if (".zip".equals(fileSuffix)) {
+            fileType = "ZIP";
+        } else if (".pdf".equals(fileSuffix)) {
+            fileType = "PDF";
+        }
+
+        FileInfo fileInfo = new FileInfo();
+        fileInfo.setOriginalFileName(file.getOriginalFilename());
+        fileInfo.setFileBytes(file.getBytes());
+        fileInfo.setFileSuffix(fileSuffix);
+        fileInfo.setFileType(fileType);
+        offlineExamService.submitPaper(examRecordDataId, fileInfo);
 
         User user = getAccessUser();
         ReportsUtil.report(new AdminOperateReport(user.getRootOrgId(), user.getUserId(), "考试进度详情-上传作答",

+ 3 - 5
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/OfflineExamService.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.oe.admin.service;
 
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.OfflineExamCourseInfo;
+import cn.com.qmth.examcloud.core.oe.admin.service.bean.uploadfile.FileInfo;
 
 import java.io.File;
 import java.util.List;
@@ -25,9 +26,7 @@ public interface OfflineExamService {
     /**
      * 开始离线考试
      *
-     * @param token
      * @param examStudentId
-     * @param studentId
      * @return
      */
     void startOfflineExam(Long examStudentId);
@@ -36,10 +35,9 @@ public interface OfflineExamService {
      * 上传作答
      *
      * @param examRecordDataId
-     * @param tempFile
-     * @param fileType
+     * @param fileInfo
      */
-    void submitPaper(Long examRecordDataId, File tempFile, String fileType) throws Exception;
+    void submitPaper(Long examRecordDataId, FileInfo fileInfo) throws Exception;
 
     /**
      * 上传作答

+ 15 - 19
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/OfflineExamServiceImpl.java

@@ -16,6 +16,7 @@ import cn.com.qmth.examcloud.core.oe.admin.service.bean.OfflineExamCourseInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordDataBean;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordFileAnswerInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examstudent.ExamStudentBean;
+import cn.com.qmth.examcloud.core.oe.admin.service.bean.uploadfile.FileInfo;
 import cn.com.qmth.examcloud.core.questions.api.ExtractConfigCloudService;
 import cn.com.qmth.examcloud.core.questions.api.request.GetPaperReq;
 import cn.com.qmth.examcloud.core.questions.api.response.GetPaperResp;
@@ -27,7 +28,6 @@ import cn.com.qmth.examcloud.support.helper.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.web.filestorage.FileStoragePathEnvInfo;
 import cn.com.qmth.examcloud.web.filestorage.YunPathInfo;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
-import com.mysql.cj.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -263,7 +263,9 @@ public class OfflineExamServiceImpl implements OfflineExamService {
 
     @Override
     @Transactional
-    public void submitPaper(Long examRecordDataId, File tempFile, String fileType) throws Exception {
+    public void submitPaper(Long examRecordDataId, FileInfo fileInfo) throws Exception {
+        Check.isNull(examRecordDataId, "examRecordDataId不能为空");
+
         SysPropertyCacheBean stuClientLoginLimit = CacheHelper.getSysProperty("STU_CLIENT_LOGIN_LIMIT");
         Boolean stuClientLoginLimitBoolean = false;
         if (stuClientLoginLimit.getHasValue()) {
@@ -272,36 +274,30 @@ public class OfflineExamServiceImpl implements OfflineExamService {
         if (stuClientLoginLimitBoolean) {
             throw new StatusException("4001", "系统维护中... ...");
         }
-        ExamRecordDataEntity examRecordDataEntity = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
-        if (examRecordDataEntity == null) {
+
+        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
+        if (examRecordData == null) {
             return;
         }
-        ExamRecordDataBean bean = of(examRecordDataEntity);
-        String fileName = tempFile.getName();
-        String fileSuffix = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase();
 
         //上传文件至又拍云
-        ExamRecordDataEntity examRecordData = GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
-        String fileNewName = createOfflineFileName(bean) + "." + fileSuffix;
+        ExamRecordDataBean bean = of(examRecordData);
+        String fileNewName = createOfflineFileName(bean) + fileInfo.getFileSuffix();
         String relativePath = upyunUploadUrl + examRecordData.getExamId() + "/" + fileNewName;
 
         //通用存储
         FileStoragePathEnvInfo env = new FileStoragePathEnvInfo();
         env.setRootOrgId(String.valueOf(bean.getRootOrgId()));
         env.setRelativePath(relativePath);
-        YunPathInfo pi = FileStorageUtil.saveFile("offlineFile", env, tempFile, null);
-        tempFile.delete();
+        YunPathInfo pi = FileStorageUtil.saveFile("offlineFile", env, fileInfo.getFileBytes(), false);
 
         examRecordForMarkingService.saveOffLineExamRecordForMarking(bean, fileNewName, pi.getRelativePath());
-        if (!StringUtils.isNullOrEmpty(fileType)) {
-            fileType = fileType.toLowerCase();
-        }
-        saveExamRecordFileAnswer(examRecordDataId, fileName, fileNewName, pi.getRelativePath(), fileType, fileSuffix);
 
-        //更新考试记录状态
-        examRecordDataEntity.setExamRecordStatus(ExamRecordStatus.EXAM_END);
-        examRecordDataEntity.setEndTime(new Date());//交卷(上传)时间
-        examRecordDataRepo.save(examRecordDataEntity);
+        saveExamRecordFileAnswer(examRecordDataId, fileInfo.getOriginalFileName(), fileNewName, pi.getRelativePath(),
+                fileInfo.getFileType().toLowerCase(), fileInfo.getFileSuffix().toLowerCase());
+
+        //更新考试记录状态,交卷(上传)时间
+        examRecordDataRepo.updateExamRecordStatusById(examRecordDataId, ExamRecordStatus.EXAM_END, new Date());
     }
 
     /**