From 5fc609145a7072fb8c7bce501ece0daca0d46467 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: 星期四, 24 十月 2024 17:03:28 +0800
Subject: [PATCH] 新增限制推送数据量

---
 exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java |  310 +++++++++++++++++++--------------------------------
 1 files changed, 115 insertions(+), 195 deletions(-)

diff --git a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java
index 9bb6b63..55b849e 100644
--- a/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/institutionalaccess/service/serviceImpl/TripartiteInterfaceServiceImpl.java
@@ -71,34 +71,14 @@
     @Override
     public boolean receiveQuestionBank(JSONObject jsonObject) throws Exception {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
-
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
+        ThQuestionBankReqDTO questionBankReqDTO =   decryptData(jsonObject, new TypeReference<ThQuestionBankReqDTO>() {},"题库数据");
+        if(questionBankReqDTO==null){
+            throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"题库数据不可为空");
         }
-        //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //反序列化
-        ThQuestionBankReqDTO questionBankReqDTO = null;
-        try {
-            questionBankReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThQuestionBankReqDTO>() {});
-
-        }catch (Exception e){
-            logger.error("组卷反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-
-        }
-
         String valdateMessage=ValidatorUtils.validateFast(questionBankReqDTO);
         if(!StringUtils.isEmpty(valdateMessage)){
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,valdateMessage);
         }
-
         //根据uuid查询数据
         ThQuestionBank qb = questionBankService.getQuestionInfoByUuid(questionBankReqDTO.getUuid());
         boolean i = true;
@@ -125,33 +105,27 @@
     @Override
     public AjaxResult receiveCourse(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
-
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        List<ThCourseReqDTO> courseReqDTOList = new ArrayList<>();
+        List<ThCourseReqDTO> courseReqDTOList =
+                decryptData(jsonObject, new TypeReference<List<ThCourseReqDTO>>() {},"课程");
+//        List<ThCourseReqDTO> courseReqDTOList = new ArrayList<>();
         //反序列化
-        try {
-            courseReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThCourseReqDTO>>() {});
-
-        }catch (Exception e){
-            logger.error("课程反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-
-        }
+//        try {
+//            courseReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThCourseReqDTO>>() {});
+//
+//        }catch (Exception e){
+//            logger.error("课程反序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//
+//        }
 
         if(CollectionUtils.isEmpty(courseReqDTOList)){
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送不可以为空");
         }
-        //暂时不限制不能超过1000条
+        //暂时限制不能超过1000条
+        if (courseReqDTOList.size() > 1000){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送数据量过大");
+        }
         List<String> reqAllCourseIds = new ArrayList<>();
         List<String> reqAllChapterIds = new ArrayList<>();
         List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>();
@@ -478,28 +452,25 @@
     public AjaxResult receiveStudent(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        List<ThStudentReqDTO> studentReqDTOs =
+                decryptData(jsonObject, new TypeReference<List<ThStudentReqDTO>>() {},"学员");
+
         //反序列化
-        List<ThStudentReqDTO> studentReqDTOs = new ArrayList<>();
-        try {
-            studentReqDTOs = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudentReqDTO>>() {});
-        }catch (Exception e){
-            logger.error("学员序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+//        List<ThStudentReqDTO> studentReqDTOs = new ArrayList<>();
+//        try {
+//            studentReqDTOs = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudentReqDTO>>() {});
+//        }catch (Exception e){
+//            logger.error("学员序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//        }
         //参数校验
         if(CollectionUtils.isEmpty(studentReqDTOs)){
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学生信息不可为空");
+        }
+        //限制数据量不超过1000条
+        if (studentReqDTOs.size() > 1000){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送数据量过大");
         }
 
         List<String> idcardList = new ArrayList<>();
@@ -668,29 +639,24 @@
     public AjaxResult receiveBatch(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        List<ThBatchReqDTO> batchReqDTOList = decryptData(jsonObject, new TypeReference<List<ThBatchReqDTO>>() {},"班级");
         //反序列化
-        List<ThBatchReqDTO> batchReqDTOList = new ArrayList<>();
-        try {
-            batchReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThBatchReqDTO>>() {});
-
-        }catch (Exception e){
-            logger.error("班级序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-
-        }
+//        List<ThBatchReqDTO> batchReqDTOList = new ArrayList<>();
+//        try {
+//            batchReqDTOList = JSONObject.parseObject(decrypt, new TypeReference<List<ThBatchReqDTO>>() {});
+//
+//        }catch (Exception e){
+//            logger.error("班级序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//
+//        }
         if(CollectionUtils.isEmpty(batchReqDTOList)){
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)集合不可为空");
+        }
+        //限制数据量不超过1000条
+        if (batchReqDTOList.size() > 1000){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送数据量过大");
         }
         //过滤出本次请求所有班级课程章节
         List<String> reqAllBatchUuids = new ArrayList<>();
@@ -1281,28 +1247,23 @@
     public AjaxResult receiveStudyDetail(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        List<ThStudyDetailReqDTO> thStudyDetailReqDTOS = decryptData(jsonObject, new TypeReference<List<ThStudyDetailReqDTO>>() {},"学习记录");
         //反序列化
-        List<ThStudyDetailReqDTO> thStudyDetailReqDTOS = new ArrayList<>();
-        try {
-           thStudyDetailReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudyDetailReqDTO>>() {});
-        }catch (Exception e){
-            logger.error("学习记录序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+//        List<ThStudyDetailReqDTO> thStudyDetailReqDTOS = new ArrayList<>();
+//        try {
+//           thStudyDetailReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThStudyDetailReqDTO>>() {});
+//        }catch (Exception e){
+//            logger.error("学习记录序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//        }
         //参数校验
         if(CollectionUtils.isEmpty(thStudyDetailReqDTOS)){
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"学习记录清单不可为空");
+        }
+        //限制数据量不超过1000条
+        if (thStudyDetailReqDTOS.size() > 1000){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送数据量过大");
         }
         //获取班级学生以及章节
         List<String> chapterUuids = new ArrayList<>();
@@ -1590,27 +1551,22 @@
     public AjaxResult receiveExamRecord(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        List<ThExamRecordReqDTO> examRecordReqDTOS = decryptData(jsonObject, new TypeReference<List<ThExamRecordReqDTO>>() {},"考试记录");
         //反序列化
-        List<ThExamRecordReqDTO> examRecordReqDTOS = new ArrayList<>();
-        try {
-            examRecordReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThExamRecordReqDTO>>() {});
-        }catch (Exception e){
-            logger.error("考试记录序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+//        List<ThExamRecordReqDTO> examRecordReqDTOS = new ArrayList<>();
+//        try {
+//            examRecordReqDTOS = JSONObject.parseObject(decrypt, new TypeReference<List<ThExamRecordReqDTO>>() {});
+//        }catch (Exception e){
+//            logger.error("考试记录序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//        }
         if (CollectionUtils.isEmpty(examRecordReqDTOS)) {
             throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"考试记录不可为空");
+        }
+        //限制数据量不超过1000条
+        if (examRecordReqDTOS.size() > 1000){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_ERROR,"数据推送数据量过大");
         }
         List<String> idcards = new ArrayList<>();
         //List<String> batchUuids = new ArrayList<>();
@@ -1712,28 +1668,19 @@
     public AjaxResult receiveCourseDelete(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
         //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        ThCourseDeleteReqDTO thCourseDeleteReqDTO = decryptData(jsonObject, new TypeReference<ThCourseDeleteReqDTO>() {},"课程删除");
         //反序列化
 
-        ThCourseDeleteReqDTO thCourseDeleteReqDTO = null;
-        try {
-            thCourseDeleteReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseDeleteReqDTO>() {});
-
-        }catch (Exception e){
-            logger.error("课程删除反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-
-        }
+//        ThCourseDeleteReqDTO thCourseDeleteReqDTO = null;
+//        try {
+//            thCourseDeleteReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThCourseDeleteReqDTO>() {});
+//
+//        }catch (Exception e){
+//            logger.error("课程删除反序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//
+//        }
         if(thCourseDeleteReqDTO == null){
             throw new BusinessException(ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
         }
@@ -1772,25 +1719,15 @@
     public AjaxResult receiveBatchOpen(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
 
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
+        ThBatchOpenReqDTO thBatchOpenReqDTO = decryptData(jsonObject, new TypeReference<ThBatchOpenReqDTO>() {},"班级开始");
         //反序列化
-        ThBatchOpenReqDTO thBatchOpenReqDTO = null;
-        try {
-            thBatchOpenReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchOpenReqDTO>() {});
-        }catch (Exception e){
-            logger.error("班级开始反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+//        ThBatchOpenReqDTO thBatchOpenReqDTO = null;
+//        try {
+//            thBatchOpenReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchOpenReqDTO>() {});
+//        }catch (Exception e){
+//            logger.error("班级开始反序列化失败!");
+//            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+//        }
         if(thBatchOpenReqDTO == null){
             throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空");
         }
@@ -1815,26 +1752,7 @@
     @Override
     public AjaxResult receiveBatchEnd(JSONObject jsonObject) {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
-
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //反序列化
-        ThBatchEndReqDTO thBatchEndReqDTO = null;
-        try {
-            thBatchEndReqDTO = JSONObject.parseObject(decrypt, new TypeReference<ThBatchEndReqDTO>() {});
-        }catch (Exception e){
-            logger.error("班级结束反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+        ThBatchEndReqDTO thBatchEndReqDTO = decryptData(jsonObject, new TypeReference<ThBatchEndReqDTO>() {},"批次(班级)");
         if(thBatchEndReqDTO == null){
             throw new BusinessException(this.getClass(),ResultConstants.THREE_INSTITUTION_PARAMM_NULL,"批次(班级)不可为空");
         }
@@ -1857,36 +1775,16 @@
     @Override
     public AjaxResult receiveCerts(JSONObject jsonObject) throws Exception {
         InstitutionUser institutionUser = ThreeInContextHolder.getContext();
-        String data = jsonObject.getString("data");
-        if(StringUtils.isEmpty(data)){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //解密
-        String decrypt = "";
-        try {
-            decrypt = AESUtils.decrypt(data);
-        }catch (Exception e){
-            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
-        }
-        //反序列化
-        List<ThCertReqDTO> thCertReqDTOs = null;
-        try {
-            thCertReqDTOs = JSONObject.parseObject(decrypt, new TypeReference<List<ThCertReqDTO>>() {});
-        }catch (Exception e){
-            logger.error("学时证书反序列化失败!");
-            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
-        }
+        List<ThCertReqDTO> thCertReqDTOs = decryptData(jsonObject, new TypeReference<List<ThCertReqDTO>>() {},"学时证书");
         if(thCertReqDTOs.isEmpty() ||thCertReqDTOs.size()>50){
             throw new BusinessException(this.getClass(), ResultConstants.RECORD_OVER_MAX);
         }
-
         //错误
         List<ThErrorDataRespDTO> errorDataRespDTOS = new ArrayList<>();
         List<ThCertReqDTO> saveCertReqDTOList = new ArrayList<>();
         List<String> batchUuidList=thCertReqDTOs.stream().map(ThCertReqDTO::getBatchUuid).filter(batchUuid -> !StringUtils.isEmpty(batchUuid)).distinct().collect(Collectors.toList());
         //获取批次
         List<ThBatch> batchList = batchService.getByUuids(batchUuidList);
-
         for(ThCertReqDTO thCertReqDTO : thCertReqDTOs){
             String validateMessage=ValidatorUtils.validateFast(thCertReqDTO);
             if(!StringUtils.isEmpty(validateMessage)){
@@ -1900,7 +1798,6 @@
             }
             saveCertReqDTOList.add(thCertReqDTO);
         }
-
         List<ThCert> saveCertList = new ArrayList<>();
         List<ThCert> updateCertList = new ArrayList<>();
         for (ThCertReqDTO thCertReqDTO : saveCertReqDTOList) {
@@ -1939,8 +1836,31 @@
         return AjaxResult.success(errorDataRespDTOS);
     }
 
-    private void validate(){
-
+    /**
+     * 解密数据
+     * @param jsonObject
+     * @param typeReference
+     * @return
+     * @param <T>
+     */
+    private <T> T decryptData(JSONObject jsonObject,TypeReference<T> typeReference,String type){
+        String data = jsonObject.getString("data");
+        if(StringUtils.isEmpty(data)){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
+        }
+        //解密
+        String decrypt = "";
+        try {
+            decrypt = AESUtils.decrypt(data);
+        }catch (Exception e){
+            throw new BusinessException(this.getClass(), ResultConstants.THREE_INSTITUTION_PARAMM_NULL);
+        }
+        try {
+            return JSONObject.parseObject(decrypt,typeReference);
+        }catch (Exception e){
+            logger.error("{}反序列化失败!",type);
+            throw new BusinessException(this.getClass(), ResultConstants.SERIALIZE_ERROR);
+        }
     }
 
 

--
Gitblit v1.9.2