Browse Source

update 通知学校获取成绩逻辑

deason 2 years ago
parent
commit
0b7427a4ba

+ 30 - 36
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/ExamScoreNoticeQueueCloudServiceProvider.java

@@ -12,6 +12,7 @@ import cn.com.qmth.examcloud.core.oe.admin.service.bean.NotifyUrlInfo;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -27,12 +28,8 @@ import java.util.List;
 @Api(tags = "定时发送获取分数通知接口")
 @RestController
 @RequestMapping("${$rmp.cloud.oe}/examScoreNoticeQueue")
-public class ExamScoreNoticeQueueCloudServiceProvider extends ControllerSupport
-        implements ExamScoreNoticeQueueCloudService {
+public class ExamScoreNoticeQueueCloudServiceProvider extends ControllerSupport implements ExamScoreNoticeQueueCloudService {
 
-    /**
-     *
-     */
     private static final long serialVersionUID = -2622841462905285211L;
 
     @Autowired
@@ -51,58 +48,55 @@ public class ExamScoreNoticeQueueCloudServiceProvider extends ControllerSupport
     @PostMapping("/sendObtainScoreNotice")
     @Override
     public void sendObtainScoreNotice() {
-        LOGGER.info("开始执行sendObtainScoreNotice");
         // 获取所有的通知队列
         List<ExamScoreNoticeQueueEntity> examScoreNoticeQueueList = examScoreNoticeQueueRepo.findAll();
-        if (examScoreNoticeQueueList == null || examScoreNoticeQueueList.size() == 0) {
+        if (CollectionUtils.isEmpty(examScoreNoticeQueueList)) {
             return;
         }
+
         for (ExamScoreNoticeQueueEntity noticeEntity : examScoreNoticeQueueList) {
             // 获取当前组织机构的通知对象
             NotifyUrlInfo notifyUrlInfo = examScoreObtainQueueService.getNotifyUrlInfo(noticeEntity.getRootOrgId());
+
             // 只有配置了通知接口的才发送通知
-            if (StringUtils.isNotBlank(notifyUrlInfo.getNotifyUrl())) {
-                try {
-                    OKHttpUtil.call(notifyUrlInfo.getHttpMethod(), notifyUrlInfo.getNotifyUrl());
-                    // 发送通知没有问题,则清除通知队列中数据
-                    examScoreNoticeQueueRepo.deleteById(noticeEntity.getRootOrgId());
-                } catch (Exception e) {
-                    if (e instanceof UnknownHostException || e instanceof SocketException) {
-                        try {
-                            // 如果是由于连接超时,或者读取数据超时导致异常,需要对发送通知失败次数进行累加
-                            long failTimes = noticeEntity.getFailTimes() == null ? 0
-                                    : noticeEntity.getFailTimes().longValue();
-                            noticeEntity.setFailTimes(failTimes + 1);
-                            noticeEntity.setUpdateTime(new Date());
-                            examScoreNoticeQueueRepo.save(noticeEntity);
-                        } catch (Exception e1) {
-                            LOGGER.error("examScoreNoticeQueueRepo.save exception:" + e1.getMessage(), e1);
-                        }
-                    }
-                    LOGGER.error("OeExamScoreNoticeQueueCloudServiceProvider-sendObtainScoreNotice:" + e.getMessage(), e);
+            if (StringUtils.isBlank(notifyUrlInfo.getNotifyUrl())) {
+                // 未配置推送地址的则清理掉
+                examScoreNoticeQueueRepo.deleteById(noticeEntity.getRootOrgId());
+                LOGGER.warn("通知学校获取成绩,尚未配置学校的推送地址!rootOrgId:{}", noticeEntity.getRootOrgId());
+                continue;
+            }
+
+            try {
+                OKHttpUtil.call(notifyUrlInfo.getHttpMethod(), notifyUrlInfo.getNotifyUrl());
+
+                noticeEntity.setFailTimes(0L);
+                noticeEntity.setUpdateTime(new Date());
+                examScoreNoticeQueueRepo.save(noticeEntity);
+
+                LOGGER.warn("通知学校获取成绩成功!rootOrgId:{} notifyUrl:{}", noticeEntity.getRootOrgId(), notifyUrlInfo.getNotifyUrl());
+            } catch (Exception e) {
+                if (e instanceof UnknownHostException || e instanceof SocketException) {
+                    // 如果是由于连接超时,或者读取数据超时导致异常,需要对发送通知失败次数进行累加
+                    long failTimes = noticeEntity.getFailTimes() == null ? 0 : noticeEntity.getFailTimes();
+                    noticeEntity.setFailTimes(failTimes + 1);
+                    noticeEntity.setUpdateTime(new Date());
+                    examScoreNoticeQueueRepo.save(noticeEntity);
                 }
+                LOGGER.error("通知学校获取成绩失败!rootOrgId:{} notifyUrl:{} err:{}",
+                        noticeEntity.getRootOrgId(), notifyUrlInfo.getNotifyUrl(), e.getMessage());
             }
         }
-        LOGGER.info("结束执行sendObtainScoreNotice");
     }
 
     /**
      * 添加成绩通知队列
-     *
-     * @param req
-     * @return
      */
     @ApiOperation(value = "添加成绩通知队列")
     @PostMapping("/addExamScoreNoticeQueue")
     @Override
     public AddExamScoreNoticeQueueResp addExamScoreNoticeQueue(@RequestBody AddExamScoreNoticeQueueReq req) {
-
-
         //如果不存在则添加通知队列,否则不做任何处理
-        if (!examScoreNoticeQueueService.isExistExamScoreNoticeQueue(req.getRootOrgId())) {
-            examScoreNoticeQueueService.addExamScoreNoticeQueue(req.getRootOrgId());
-        }
-
+        examScoreNoticeQueueService.addExamScoreNoticeQueue(req.getRootOrgId());
         return new AddExamScoreNoticeQueueResp();
     }
 

+ 4 - 7
examcloud-core-oe-admin-api-provider/src/main/java/cn/com/qmth/examcloud/core/oe/admin/api/provider/ExamScoreObtainQueueCloudServiceProvider.java

@@ -5,10 +5,8 @@ import cn.com.qmth.examcloud.core.oe.admin.api.request.DeleteExamScoreQueueReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.request.GetTopExamScoreQueueReq;
 import cn.com.qmth.examcloud.core.oe.admin.api.response.GetTopExamScoreQueueResp;
 import cn.com.qmth.examcloud.core.oe.admin.base.utils.Check;
-import cn.com.qmth.examcloud.core.oe.admin.base.utils.DateUtils;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamScoreNoticeQueueRepo;
 import cn.com.qmth.examcloud.core.oe.admin.dao.ExamScoreObtainQueueRepo;
-import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreNoticeQueueEntity;
 import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreObtainQueueEntity;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 import cn.com.qmth.examcloud.web.support.ControllerSupport;
@@ -20,11 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
 @Api(tags = "考试分数队列接口")
 @RestController
 @RequestMapping("${$rmp.cloud.oe}/examScoreObtainQueue")
@@ -77,10 +70,12 @@ public class ExamScoreObtainQueueCloudServiceProvider extends ControllerSupport
     /**
      * 定时更新获取分数通知队列
      */
+    @Deprecated
     @ApiOperation(value = "定时更新获取分数通知队列")
     @PostMapping("/updateObtainScoreNodifyQueue")
     @Override
     public void updateObtainScoreNodifyQueue() {
+        /*
         Date now = new Date();
         Date twoHoursBefore = DateUtils.addHours(now, -2);
         // 1.查找超过创建超过2小时,且通知队列中不存在的待获取的数据
@@ -90,6 +85,7 @@ public class ExamScoreObtainQueueCloudServiceProvider extends ControllerSupport
         if (toObtainQueueList == null || toObtainQueueList.isEmpty()) {
             return;
         }
+
         // 1.2如果存在,则创建相应组织机构的通知队列
         List<Long> rootOrgList = toObtainQueueList.stream().map(ExamScoreObtainQueueEntity::getRootOrgId).distinct()
                 .collect(Collectors.<Long>toList());
@@ -102,6 +98,7 @@ public class ExamScoreObtainQueueCloudServiceProvider extends ControllerSupport
         });
         // 批量插入通知队列
         examScoreNoticeQueueRepo.saveAll(noticeQueueEntityList);
+        */
     }
 
 }

+ 24 - 27
examcloud-core-oe-admin-dao/src/main/java/cn/com/qmth/examcloud/core/oe/admin/dao/ExamScoreObtainQueueRepo.java

@@ -1,36 +1,33 @@
 package cn.com.qmth.examcloud.core.oe.admin.dao;
 
-import java.util.Date;
-import java.util.List;
-
+import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreObtainQueueEntity;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
-import cn.com.qmth.examcloud.core.oe.admin.dao.entity.ExamScoreObtainQueueEntity;
-import feign.Param;
-
 @Repository
-public interface ExamScoreObtainQueueRepo extends JpaRepository<ExamScoreObtainQueueEntity, Long>, JpaSpecificationExecutor<ExamScoreObtainQueueEntity>{
+public interface ExamScoreObtainQueueRepo extends JpaRepository<ExamScoreObtainQueueEntity, Long>, JpaSpecificationExecutor<ExamScoreObtainQueueEntity> {
+
+    /**
+     * 取队列最顶层记录
+     *
+     * @param rootOrgId 顶级机构id
+     * @param isValid   是否有效
+     * @return
+     */
+    public ExamScoreObtainQueueEntity findTopByRootOrgIdAndIsValidOrderByIdAsc(Long rootOrgId, Boolean isValid);
+
+    public ExamScoreObtainQueueEntity findByExamRecordDataId(Long examRecordDataId);
+
+    /**
+     * 获取创建时间小于某个时间的获取分数队列数据
+     *
+     * @param creationTime 日期阈值
+     * @return
+     */
+    // @Query(nativeQuery = true, value = "select soq.* from ec_oe_exam_score_obtain_queue soq "
+    //         + "left join ec_oe_exam_score_notice_queue snq on soq.root_org_id=snq.root_org_id "
+    //         + "where soq.is_valid=1 and soq.creation_time<=?1 and snq.root_org_id is null")
+    // public List<ExamScoreObtainQueueEntity> findByCreationTimeLessThanEquals(@Param("creationTime") Date creationTime);
 
-	/**
-	 * 取队列最顶层记录
-	 * @param rootOrgId	顶级机构id
-	 * @param isValid	是否有效
-	 * @return
-	 */
-	public ExamScoreObtainQueueEntity findTopByRootOrgIdAndIsValidOrderByIdAsc(Long rootOrgId,Boolean isValid);
-	
-	public ExamScoreObtainQueueEntity findByExamRecordDataId(Long examRecordDataId);
-	/**
-	 * 获取创建时间小于某个时间的获取分数队列数据
-	 * @param creationTime 日期阈值
-	 * @return
-	 */
-	@Query(nativeQuery = true, value="select soq.* from ec_oe_exam_score_obtain_queue soq "
-			+ "left join ec_oe_exam_score_notice_queue snq on soq.root_org_id=snq.root_org_id "
-			+ "where soq.is_valid=1 and soq.creation_time<=?1 and snq.root_org_id is null")
-	public List<ExamScoreObtainQueueEntity> findByCreationTimeLessThanEquals(@Param("creationTime") Date creationTime);
-	
 }

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

@@ -27,16 +27,18 @@ public class ExamScoreNoticeQueueServiceImpl implements ExamScoreNoticeQueueServ
 
     @Override
     public void addExamScoreNoticeQueue(Long rootOrgId) {
-        log.debug("addExamScoreNoticeQueue.rootOrgId=" + rootOrgId);
-        ExamScoreNoticeQueueEntity originalNoticeQueueEntity = GlobalHelper.getEntity(examScoreNoticeQueueRepo, rootOrgId, ExamScoreNoticeQueueEntity.class);
-        if (originalNoticeQueueEntity == null || originalNoticeQueueEntity.getRootOrgId() == null) {
-            originalNoticeQueueEntity = new ExamScoreNoticeQueueEntity();
-            originalNoticeQueueEntity.setRootOrgId(rootOrgId);
-            originalNoticeQueueEntity.setCreationTime(new Date());
-        } else {
+        ExamScoreNoticeQueueEntity entity = GlobalHelper.getEntity(examScoreNoticeQueueRepo, rootOrgId, ExamScoreNoticeQueueEntity.class);
+        if (entity != null) {
             return;
         }
-        examScoreNoticeQueueRepo.save(originalNoticeQueueEntity);
+
+        entity = new ExamScoreNoticeQueueEntity();
+        entity.setRootOrgId(rootOrgId);
+        entity.setFailTimes(0L);
+        entity.setCreationTime(new Date());
+        examScoreNoticeQueueRepo.save(entity);
+
+        log.warn("添加学校到获取成绩通知队列!rootOrgId:{}", rootOrgId);
     }
 
     @Override

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

@@ -42,12 +42,13 @@ public class ExamScoreObtainQueueServiceImpl implements ExamScoreObtainQueueServ
 
     @Override
     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();
+
         if (Constants.isTrue.equals(isPushScore)) {
             NotifyUrlInfo notifyUrlInfo = getNotifyUrlInfo(examRecordData.getRootOrgId());
             if (StringUtils.isNotBlank(notifyUrlInfo.getNotifyUrl())) {
@@ -75,11 +76,12 @@ public class ExamScoreObtainQueueServiceImpl implements ExamScoreObtainQueueServ
         NotifyUrlInfo notifyUrlInfo = getNotifyUrlInfo(rootOrgId);
 
         if (StringUtils.isNotBlank(notifyUrlInfo.getNotifyUrl())) {
-            log.info("ExamScoreObtainQueueServiceImpl-notifyUrl:" + notifyUrlInfo.getNotifyUrl());
             try {
                 OKHttpUtil.call(notifyUrlInfo.getHttpMethod(), notifyUrlInfo.getNotifyUrl());
+                log.warn("通知学校获取成绩成功!rootOrgId:{} notifyUrl:{}", rootOrgId, notifyUrlInfo.getNotifyUrl());
             } catch (Exception e) {
-                log.error("ExamScoreObtainQueueServiceImpl-sendNotifyError3," + e.getMessage(), e);
+                log.error("通知学校获取成绩失败!rootOrgId:{} notifyUrl:{} err:{}",
+                        rootOrgId, notifyUrlInfo.getNotifyUrl(), e.getMessage());
 
             }
         }