소스 검색

增加了氚云保存、更新数据时候数据长度的限制

verguenza 5 년 전
부모
커밋
596fca3b94

+ 29 - 0
src/main/java/com/galaxis/manatee/exception/BigSizeException.java

@@ -0,0 +1,29 @@
+package com.galaxis.manatee.exception;
+
+/**
+ * 用于检测氚云接受数据过大的异常
+ * @author zcj
+ * @version 0.1
+ * @date 2020/6/5 7:42 上午
+ */
+public class BigSizeException extends Exception{
+
+    public BigSizeException() {
+    }
+
+    public BigSizeException(String message) {
+        super(message);
+    }
+
+    public BigSizeException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public BigSizeException(Throwable cause) {
+        super(cause);
+    }
+
+    public BigSizeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}

+ 4 - 3
src/main/java/com/galaxis/manatee/manager/ChuanYunManager.java

@@ -2,6 +2,7 @@ package com.galaxis.manatee.manager;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.exception.BigSizeException;
 
 import java.util.List;
 
@@ -63,7 +64,7 @@ public interface ChuanYunManager {
      * @param bizObject  数据字符串
      * @return 保存结果
      */
-    ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit);
+    ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit) throws BigSizeException;
 
     /**
      * 批量保存
@@ -72,7 +73,7 @@ public interface ChuanYunManager {
      * @param bizObjectArray 数据字符串
      * @return 保存结果
      */
-    ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit);
+    ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit) throws JsonProcessingException, BigSizeException;
 
     /**
      * 保存
@@ -82,5 +83,5 @@ public interface ChuanYunManager {
      * @param bizObject  数据字符串
      * @return 保存结果
      */
-    ChuanyunSaveDTO update(String schemaCode,String bizObjectId, String bizObject);
+    ChuanyunSaveDTO update(String schemaCode,String bizObjectId, String bizObject) throws BigSizeException;
 }

+ 24 - 6
src/main/java/com/galaxis/manatee/manager/impl/DefaultChuanyunManagerImpl.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -24,6 +25,10 @@ import java.util.List;
 @Slf4j
 @Service
 public class DefaultChuanyunManagerImpl implements ChuanYunManager {
+    /**
+     * 字符串最大长度
+     */
+    private final Integer maxLength=1048576;
 
     @Override
     public ChuanyunFindDTO find(String appCode, String actionName, String controller) {
@@ -128,7 +133,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
     }
 
     @Override
-    public ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit) {
+    public ChuanyunSaveDTO save(String schemaCode, String bizObject, Boolean isSubmit) throws BigSizeException {
         @Data
         class Save{
             @JsonProperty(value = "ActionName")
@@ -146,6 +151,10 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
                 this.isSubmit = isSubmit;
             }
         }
+        //如果数据量太大就抛出异常
+        if(bizObject.length()>maxLength){
+            throw new BigSizeException(bizObject);
+        }
         Save save=new Save(schemaCode,bizObject,isSubmit);
         //请求客户端
         RestTemplate restTemplate=new RestTemplate();
@@ -155,7 +164,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         HttpEntity<Save> httpEntity=new HttpEntity<>(save,httpHeaders);
         ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
         chuanyunSaveResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
-        if (chuanyunSaveResponse.getSuccessful()) {
+        if (chuanyunSaveResponse!=null&&chuanyunSaveResponse.getSuccessful()) {
             log.info("新增成功!");
         }else {
             log.info("新增失败!");
@@ -164,7 +173,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
     }
 
     @Override
-    public ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit) {
+    public ChuanyunSaveAllDTO saveAll(String schemaCode, List<String> bizObjectArray, Boolean isSubmit) throws JsonProcessingException, BigSizeException {
         @Data
         class SaveAll{
             @JsonProperty(value = "ActionName")
@@ -182,6 +191,11 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
                 this.isSubmit = isSubmit;
             }
         }
+        var objectMapper=new ObjectMapper();
+        //如果数据量太大就抛出异常
+        if(objectMapper.writeValueAsString(bizObjectArray).length()>maxLength){
+            throw new BigSizeException(bizObjectArray+"");
+        }
         SaveAll saveAll=new SaveAll(schemaCode,bizObjectArray,isSubmit);
         //请求客户端
         RestTemplate restTemplate=new RestTemplate();
@@ -191,7 +205,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         HttpEntity<SaveAll> httpEntity=new HttpEntity<>(saveAll,httpHeaders);
         ChuanyunSaveAllDTO chuanyunSaveAllResponse =new ChuanyunSaveAllDTO();
         chuanyunSaveAllResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveAllResponse.getClass());
-        if (chuanyunSaveAllResponse.getSuccessful()) {
+        if (chuanyunSaveAllResponse!=null&&chuanyunSaveAllResponse.getSuccessful()) {
             log.info("批量新增成功!");
         }else {
             log.info("批量新增失败!");
@@ -200,7 +214,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
     }
 
     @Override
-    public ChuanyunSaveDTO update(String schemaCode, String bizObjectId, String bizObject) {
+    public ChuanyunSaveDTO update(String schemaCode, String bizObjectId, String bizObject) throws BigSizeException {
         @Data
         class Update{
             @JsonProperty(value = "ActionName")
@@ -218,6 +232,10 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
                 this.bizObjectId=bizObjectId;
             }
         }
+        //如果数据量太大就抛出异常
+        if(bizObject.length()>maxLength){
+            throw new BigSizeException(bizObject);
+        }
         Update update=new Update(schemaCode,bizObject,bizObjectId);
         //请求客户端
         RestTemplate restTemplate=new RestTemplate();
@@ -227,7 +245,7 @@ public class DefaultChuanyunManagerImpl implements ChuanYunManager {
         HttpEntity<Update> httpEntity=new HttpEntity<>(update,httpHeaders);
         ChuanyunSaveDTO chuanyunSaveResponse =new ChuanyunSaveDTO();
         chuanyunSaveResponse = restTemplate.postForObject(ChuanYunConstant.CHUAN_YUN_INVOKE_URL,httpEntity, chuanyunSaveResponse.getClass());
-        if (chuanyunSaveResponse.getSuccessful()) {
+        if (chuanyunSaveResponse!=null&&chuanyunSaveResponse.getSuccessful()) {
             log.info("更新成功!");
         }else {
             log.info("更新失败!");

+ 5 - 6
src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java

@@ -162,12 +162,12 @@ public class ChuanyunBasicDataScheduledTask {
                     if (chuanyunGroupProjectDO.getProjectMemberlist()!= null) {
 
                         for (ChuanyunObject chuanyunObject: chuanyunGroupProjectDO.getProjectMemberObject()) {
-                            builder.append(chuanyunObject.getObjectId()+";");
+                            builder.append(chuanyunObject.getObjectId()).append(";");
                             memberlist.add(chuanyunObject.getObjectId());
                         }
                         chuanyunGroupProjectDO.setProjectMember(builder.toString());
                         //替换为主键后更新氚云数据表来增加权限
-                        chuanyunGroupProjectDO.setProjectMemberlist(memberlist.toArray(new String[memberlist.size()]));
+                        chuanyunGroupProjectDO.setProjectMemberlist(memberlist.toArray(new String[0]));
                     }
                     //如果项目组成员为空,则自动为项目添加所有EBG成员作为项目组成员
 //                    if ("EBG".equals(chuanyunGroupProjectDO.getBusinessGroup())&&chuanyunGroupProjectDO.getProjectMemberlist().length==0&&
@@ -187,16 +187,15 @@ public class ChuanyunBasicDataScheduledTask {
 
                     //如果项目为pmo建设、电气组建设、项目实施组建设则更新成员为空
                     if (Arrays.asList(projectCode).contains(chuanyunGroupProjectDO.getObjectId())) {
-                        List<String> list = new ArrayList<>();
-                        chuanyunGroupProjectDO.setProjectMemberlist(list.toArray(new String[list.size()]));
+                        String[] emptyArray=new String[0];
+                        chuanyunGroupProjectDO.setProjectMemberlist(emptyArray);
                         chuanyunGroupProjectDO.setProjectMember("");
                     }
                     //通过更新集团项目中的EBG项目经理、IBG项目经理
-                    //TODO 测试结束后需要扩大范围到所有项目
                     GroupProjectUpdateDTO groupProjectUpdateDTO=new GroupProjectUpdateDTO();
                     try {
                         chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),objectMapper.writeValueAsString(groupProjectUpdateDTO));
-                    } catch (JsonProcessingException e) {
+                    } catch (Exception e) {
                         e.printStackTrace();
                     }
                     groupProjectUpdateDTO=new GroupProjectUpdateDTO(chuanyunGroupProjectDO);

+ 18 - 10
src/main/java/com/galaxis/manatee/task/ChuanyunScheduledTask.java

@@ -54,7 +54,7 @@ public class ChuanyunScheduledTask {
     /**
      * 定时将氚云中的数据保存到manatee
      */
-    @Scheduled(fixedDelay = 43200000L)
+//    @Scheduled(fixedDelay = 43200000L)
     private void getDataFromChuanyun(){
         //获取项目数据
         getProjectInformationFromChuanyun();
@@ -63,7 +63,7 @@ public class ChuanyunScheduledTask {
     /**
      * 定时将物料信息从氚云中同步
      */
-    @Scheduled(fixedDelay = 27600000L,initialDelay = 3600000L)
+//    @Scheduled(fixedDelay = 27600000L,initialDelay = 3600000L)
     public void materialInformationSync(){
         var pageSize=100;
         var start=0;
@@ -155,7 +155,11 @@ public class ChuanyunScheduledTask {
             }
         });
         //将新增加的数据更新到氚云
-        chuanYunManager.saveAll(ChuanyunMaterialDO.SCHEMA_CODE,toSaveString,true);
+        try{
+            chuanYunManager.saveAll(ChuanyunMaterialDO.SCHEMA_CODE,toSaveString,true);
+        }catch (Exception e){
+            e.printStackTrace();
+        }
         log.info("物料信息更新到氚云"+toSave.size());
     }
 
@@ -250,13 +254,17 @@ public class ChuanyunScheduledTask {
                     }
                 }
             });
-            ChuanyunSaveAllDTO chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
-            log.info("氚云保存物料补发数据结果的错误信息为 "+chuanyunSaveAllResponse.getErrorMessage());
-            log.info(chuanyunSaveAllResponse+"");
-            pageList.getContent().forEach(content->content.setUpdatedInChuanyun(true));
-            log.info("开始更新钉钉审批数据上传状态");
-            log.info(dingTalkProcessInstanceDao.saveAll(pageList.getContent())+"");
-            log.info("已更新上传状态的钉钉审批数据");
+            try{
+                ChuanyunSaveAllDTO chuanyunSaveAllResponse= chuanYunManager.saveAll(MaterialResendBO.SCHEMA_CODE,strings,true);
+                log.info("氚云保存物料补发数据结果的错误信息为 "+chuanyunSaveAllResponse.getErrorMessage());
+                log.info(chuanyunSaveAllResponse+"");
+                pageList.getContent().forEach(content->content.setUpdatedInChuanyun(true));
+                log.info("开始更新钉钉审批数据上传状态");
+                log.info(dingTalkProcessInstanceDao.saveAll(pageList.getContent())+"");
+                log.info("已更新上传状态的钉钉审批数据");
+            }catch (Exception e){
+                e.printStackTrace();
+            }
             currentPage++;
         }
     }