lideyin 5 жил өмнө
parent
commit
65d9cd13be

+ 80 - 0
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/SyncExamDataCloudServiceProvider.java

@@ -0,0 +1,80 @@
+package cn.com.qmth.examcloud.core.oe.admin.api.provider;
+
+import cn.com.qmth.examcloud.core.oe.admin.api.SyncExamDataCloudService;
+import cn.com.qmth.examcloud.core.oe.admin.api.bean.ExamStudentBeanConvert;
+import cn.com.qmth.examcloud.core.oe.admin.api.request.SyncExamDataReq;
+import cn.com.qmth.examcloud.core.oe.admin.api.response.SyncExamDataResp;
+import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
+import cn.com.qmth.examcloud.core.oe.admin.dao.ExamStudentRepo;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamStudentEntity;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordForMarkingService;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExamScoreObtainQueueService;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExamScorePushQueueService;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExamStudentService;
+import cn.com.qmth.examcloud.core.oe.admin.service.bean.examstudent.ExamStudentInfo;
+import cn.com.qmth.examcloud.core.oe.admin.service.cache.ExamStudentCache;
+import cn.com.qmth.examcloud.global.api.HandleSyncCloudService;
+import cn.com.qmth.examcloud.global.api.request.*;
+import cn.com.qmth.examcloud.global.api.response.*;
+import cn.com.qmth.examcloud.web.support.ControllerSupport;
+import com.google.common.collect.Lists;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @Description 同步考试相关数据接口
+ * @Author lideyin
+ * @Date 2019/12/20 10:32
+ * @Version 1.0
+ */
+@Api(tags = "同步考试相关数据接口")
+@RestController
+@RequestMapping("${$rmp.cloud.oe}/exam/sync")
+public class SyncExamDataCloudServiceProvider extends ControllerSupport implements SyncExamDataCloudService {
+
+	private static final long serialVersionUID = -25466948667789119L;
+
+	@Autowired
+	private ExamRecordForMarkingService examRecordForMarkingService;
+	@Autowired
+	private ExamScorePushQueueService examScorePushQueueService;
+	@Autowired
+	private ExamScoreObtainQueueService examScoreObtainQueueService;
+
+	/**
+	 * 同步考试记录数据
+	 *
+	 * @param req
+	 * @return
+	 */
+	@ApiOperation(value = "同步考试记录相关数据")
+	@PostMapping("/syncExamData")
+	@Override
+	public SyncExamDataResp syncExamData(@RequestBody SyncExamDataReq req) {
+
+
+
+		Long examRecordDataId=0L;//todo 取admin服务中的考试记录id
+		processAfterSyncExamData(examRecordDataId);
+		return null;
+	}
+
+	private void processAfterSyncExamData(Long examRecordDataId) {
+		// 保存阅卷相关数据
+		examRecordForMarkingService.saveExamRecordForMarking(examRecordDataId);
+
+		// 保存考试分数数据到推分队列
+		examScorePushQueueService.saveScoreDataInfoToQueue(examRecordDataId);
+
+		// 保存考试分数数据到分数获取队列
+		examScoreObtainQueueService.saveExamScoreObtainQueue(examRecordDataId);
+	}
+}

+ 8 - 2
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/ExamRecordForMarkingService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.examcloud.core.oe.admin.service;
 
 import java.util.List;
 
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordForMarkingEntity;
 import cn.com.qmth.examcloud.core.oe.admin.service.bean.examrecord.ExamRecordDataBean;
 
@@ -38,6 +39,11 @@ public interface ExamRecordForMarkingService {
      * @param fileName
      * @param fileUrl
      */
-    public void saveOffLineExamRecordForMarking(ExamRecordDataBean examRecordData,String fileName,String fileUrl);
-	
+	void saveOffLineExamRecordForMarking(ExamRecordDataBean examRecordData, String fileName, String fileUrl);
+
+	/**
+	 * 在线考试-保存阅卷相关数据-对内
+	 * @param examRecordDataId
+	 */
+	void saveExamRecordForMarking(Long examRecordDataId);
 }

+ 4 - 6
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/ExamScoreObtainQueueService.java

@@ -16,22 +16,20 @@ public interface ExamScoreObtainQueueService {
 
 	/**
 	 * 保存获取成绩队列,并发送通知
-	 * @param examRecordData
-	 * @param isExamEnd	是否是交卷环节
+	 * @param examRecordDataId
 	 */
-	public void saveExamScoreObtainQueue(ExamRecordDataEntity examRecordData);
+	void saveExamScoreObtainQueue(Long examRecordDataId);
 	
 	/**
 	 * 发送获取分数通知
 	 */
-	public void sendObtainScoreNotify(Long rootOrgId);
+	void sendObtainScoreNotify(Long rootOrgId);
 
 	/**
 	 * 根据组织机构id获取通知路径相关信息
 	 * @param rootOrgId 组织机构id
 	 * @return
 	 */
-	@NotNull
-	public NotifyUrlInfo getNotifyUrlInfo(Long rootOrgId);
+	@NotNull NotifyUrlInfo getNotifyUrlInfo(Long rootOrgId);
 	
 }

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

@@ -13,12 +13,11 @@ import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
  * @description 分数推送队列服务接口 
  */
 public interface ExamScorePushQueueService {
-	
+
 	/**
 	 * 保存分数推送数据
-	 * @param examRecordData
-	 * @param scoreId
+	 * @param examRecordDataId
 	 */
-	public void saveScoreDataInfoToQueue(ExamRecordDataEntity examRecordData,Long scoreId);
+	void saveScoreDataInfoToQueue(Long examRecordDataId);
 	
 }

+ 61 - 7
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamRecordForMarkingServiceImpl.java

@@ -11,6 +11,10 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
+import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
+import cn.com.qmth.examcloud.core.oe.admin.service.ExamRecordQuestionsService;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -46,19 +50,26 @@ public class ExamRecordForMarkingServiceImpl implements ExamRecordForMarkingServ
     @Autowired
     private ExamCloudService examCloudService;
 
+    @Autowired
+    private ExamRecordDataRepo examRecordDataRepo;
+
+    @Autowired
+    private ExamRecordQuestionsService examRecordQuestionsService;
+
     @Autowired
     private JdbcTemplate jdbcTemplate;
     @Value("${$upyun.site.1.bucketName}")
     private String bucketName;
-    
+
     @Value("${$upyun.site.1.userName}")
     private String userName;
-    
+
     @Value("${$upyun.site.1.password}")
     private String password;
 
     @Value("${$upyun.site.1.domain}")
     private String upyunFileUrl;
+
     @Override
     public List<ExamRecordForMarkingEntity> queryValidExamRecordInfoByStuIds(
             Long examId, Long courseId, List<Long> examStudentIds, String batchNum) {
@@ -160,6 +171,7 @@ public class ExamRecordForMarkingServiceImpl implements ExamRecordForMarkingServ
 
     /**
      * 客观分最高
+     *
      * @param examRecordForMarkingAllList
      * @return
      */
@@ -251,16 +263,16 @@ public class ExamRecordForMarkingServiceImpl implements ExamRecordForMarkingServ
     }
 
     @Override
-    public void saveOffLineExamRecordForMarking(ExamRecordDataBean examRecordData,String offlineFileName,String fileUrl) {
+    public void saveOffLineExamRecordForMarking(ExamRecordDataBean examRecordData, String offlineFileName, String fileUrl) {
         ExamRecordForMarkingEntity examRecordForMarking = examRecordForMarkingRepo.findByExamRecordDataId(examRecordData.getId());
-        if(examRecordForMarking == null){
+        if (examRecordForMarking == null) {
             examRecordForMarking = new ExamRecordForMarkingEntity();
             examRecordForMarking.setCreationTime(new Date());
-        }else{
+        } else {
             //将原文件删掉
-            UpYun upyun = new UpYun(bucketName,userName,password);
+            UpYun upyun = new UpYun(bucketName, userName, password);
             String offlineFileUrl = examRecordForMarking.getOfflineFileUrl();
-            offlineFileUrl = offlineFileUrl.replace(upyunFileUrl,"");
+            offlineFileUrl = offlineFileUrl.replace(upyunFileUrl, "");
             upyun.deleteFile(offlineFileUrl);
         }
 
@@ -277,4 +289,46 @@ public class ExamRecordForMarkingServiceImpl implements ExamRecordForMarkingServ
         examRecordForMarking.setUpdateTime(new Date());
         examRecordForMarkingRepo.save(examRecordForMarking);
     }
+
+    /**
+     * 在线考试-保存阅卷相关数据-对内
+     *
+     * @param examRecordDataId
+     */
+    @Override
+    public void saveExamRecordForMarking(Long examRecordDataId) {
+        ExamRecordDataEntity examRecordData =
+                GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
+        //全客观题卷
+        if (examRecordData.getIsAllObjectivePaper()) {
+            return;
+        }
+        //违纪
+        if (examRecordData.getIsIllegality()) {
+            return;
+        }
+        //有警告未审核
+        if (examRecordData.getIsWarn() && !examRecordData.getIsAudit()) {
+            return;
+        }
+        //已经存在
+        ExamRecordForMarkingEntity examRecordForMarkingExists = examRecordForMarkingRepo.findByExamRecordDataId(examRecordData.getId());
+        if (examRecordForMarkingExists != null) {
+            return;
+        }
+
+        ExamRecordForMarkingEntity examRecordForMarking = new ExamRecordForMarkingEntity();
+        examRecordForMarking.setExamId(examRecordData.getExamId());
+        examRecordForMarking.setExamRecordDataId(examRecordData.getId());
+        examRecordForMarking.setExamStudentId(examRecordData.getExamStudentId());
+        examRecordForMarking.setBasePaperId(examRecordData.getBasePaperId());
+        examRecordForMarking.setPaperType(examRecordData.getPaperType());
+        examRecordForMarking.setCourseId(examRecordData.getCourseId());
+        examRecordForMarking.setObjectiveScore(examRecordData.getObjectiveScore());
+
+        int subjectiveAnswerLength = examRecordQuestionsService.calculationSubjectiveAnswerLength(examRecordData.getId());
+        examRecordForMarking.setSubjectiveAnswerLength(subjectiveAnswerLength);
+
+        examRecordForMarkingRepo.save(examRecordForMarking);
+    }
 }

+ 8 - 1
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamScoreObtainQueueServiceImpl.java

@@ -3,6 +3,7 @@ package cn.com.qmth.examcloud.core.oe.admin.service.impl;
 import cn.com.qmth.examcloud.commons.util.HttpMethod;
 import cn.com.qmth.examcloud.commons.util.OKHttpUtil;
 import cn.com.qmth.examcloud.core.oe.admin.base.Constants;
+import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamScoreObtainQueueRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamRecordDataEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreObtainQueueEntity;
@@ -12,6 +13,7 @@ import cn.com.qmth.examcloud.core.oe.admin.service.bean.NotifyUrlInfo;
 import cn.com.qmth.examcloud.core.oe.admin.service.others.ExamCacheTransferHelper;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
 import cn.com.qmth.examcloud.support.cache.bean.SysPropertyCacheBean;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,9 +37,14 @@ public class ExamScoreObtainQueueServiceImpl implements ExamScoreObtainQueueServ
     @Autowired
     private ExamScoreObtainQueueRepo examScoreObtainQueueRepo;
 
+    @Autowired
+    private ExamRecordDataRepo examRecordDataRepo;
+
     @Override
-    public void saveExamScoreObtainQueue(ExamRecordDataEntity examRecordData) {
+    public void saveExamScoreObtainQueue(Long examRecordDataId) {
 
+        ExamRecordDataEntity examRecordData =
+                GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
         //得到是否推送分数属性值
         String isPushScore = ExamCacheTransferHelper.getCachedExamProperty(examRecordData.getExamId(),
                 examRecordData.getStudentId(), ExamProperties.PUSH_SCORE.name()).getValue();

+ 9 - 2
examcloud-core-oe-admin-service/src/main/java/cn/com/qmth/examcloud/core/oe/admin/service/impl/ExamScorePushQueueServiceImpl.java

@@ -2,6 +2,8 @@ package cn.com.qmth.examcloud.core.oe.admin.service.impl;
 
 import java.util.Date;
 
+import cn.com.qmth.examcloud.core.oe.admin.dao.ExamRecordDataRepo;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -36,8 +38,14 @@ public class ExamScorePushQueueServiceImpl implements ExamScorePushQueueService
     @Autowired
     private OrgScoreHandleRepo orgScoreHandleRepo;
 
+    @Autowired
+    private ExamRecordDataRepo examRecordDataRepo;
+
     @Override
-    public void saveScoreDataInfoToQueue(ExamRecordDataEntity examRecordData, Long scoreId) {
+    public void saveScoreDataInfoToQueue(Long examRecordDataId) {
+        ExamRecordDataEntity examRecordData =
+                GlobalHelper.getEntity(examRecordDataRepo, examRecordDataId, ExamRecordDataEntity.class);
+
         //得到是否推送分数属性值
         String isPushScore = ExamCacheTransferHelper.getCachedExamProperty(examRecordData.getExamId(),
                 examRecordData.getStudentId(), ExamProperties.PUSH_SCORE.name()).getValue();
@@ -59,7 +67,6 @@ public class ExamScorePushQueueServiceImpl implements ExamScorePushQueueService
                     }
                     examScorePushQueue.setExamId(examRecordData.getExamId());
                     examScorePushQueue.setExamRecordDataId(examRecordData.getId());
-                    examScorePushQueue.setExamScoreId(scoreId);
                     examScorePushQueue.setRootOrgId(examRecordData.getRootOrgId());
                     examScorePushQueue.setServiceName(orgScoreHandle.getPushScoreServiceName());
                     examScorePushQueue.setStatus(ExamScoreQueueStatus.PENDING);