Bladeren bron

更新看板operateData自动重试

wzy 2 weken geleden
bovenliggende
commit
2972c8b6e6
1 gewijzigde bestanden met toevoegingen van 56 en 10 verwijderingen
  1. 56 10
      mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdHuaGaoServiceImpl.java

+ 56 - 10
mjava-huagao/src/main/java/com/malk/huagao/service/impl/KdHuaGaoServiceImpl.java

@@ -13,6 +13,7 @@ import com.malk.huagao.service.KdHuaGaoService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.aliwork.YDSearch;
+import com.malk.server.common.McException;
 import com.malk.server.common.McR;
 import com.malk.server.dingtalk.DDConf;
 import com.malk.server.dingtalk.DDR_New;
@@ -75,11 +76,16 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
             userId = "yida_pub_account";
         }
 
-        String formInstId = ydClient.operateData(YDParam.builder()
+        String formInstId = retryOperateData(YDParam.builder()
                 .formUuid("FORM-0BEA655A36724D509A2CF21C4BA38D367YF7")
                 .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mfmhvkey, selectField_mhsjnn2r, dateField_mhsjnn2s, employeeField_mhswy0xy", "成品库存天数看板", "更新中", System.currentTimeMillis(),Arrays.asList(userId))))
                 .build(), YDConf.FORM_OPERATION.create).toString();
 
+        /*String formInstId = ydClient.operateData(YDParam.builder()
+                .formUuid("FORM-0BEA655A36724D509A2CF21C4BA38D367YF7")
+                .formDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mfmhvkey, selectField_mhsjnn2r, dateField_mhsjnn2s, employeeField_mhswy0xy", "成品库存天数看板", "更新中", System.currentTimeMillis(),Arrays.asList(userId))))
+                .build(), YDConf.FORM_OPERATION.create).toString();*/
+
         // 获取当前日期
         LocalDate today = LocalDate.now();
 
@@ -117,12 +123,16 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
             for (List<String> formInstanceIdList : formInstanceIdListList) {
                 if (!formInstanceIdList.isEmpty()){
-                    ydClient.operateData(YDParam.builder()
+                    retryOperateData(YDParam.builder()
                             .formUuid("FORM-3B2E5C93D7E6494B9AD920B48A90159F7DZ4")
                             .formInstanceIdList(formInstanceIdList)
                             .build(), YDConf.FORM_OPERATION.delete_batch);
+                    /*ydClient.operateData(YDParam.builder()
+                            .formUuid("FORM-3B2E5C93D7E6494B9AD920B48A90159F7DZ4")
+                            .formInstanceIdList(formInstanceIdList)
+                            .build(), YDConf.FORM_OPERATION.delete_batch);*/
                 }
-                Thread.sleep(1000);
+//                Thread.sleep(1000);
             }
             log.info("删除序列号主档数据完成:{}年,{}月,{}周",year,month,weekOfMonth);
 
@@ -207,7 +217,7 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
                 formData.put("numberField_mfat6egj",1);//统计数值,默认1
 
-                ydClient.operateData(YDParam.builder()
+                retryOperateData(YDParam.builder()
                         .formUuid("FORM-3B2E5C93D7E6494B9AD920B48A90159F7DZ4")
                         .formDataJson(JSONObject.toJSONString(formData))
                         .build(), YDConf.FORM_OPERATION.create);
@@ -234,7 +244,7 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
             }
 
             if (!formInstanceIdList.isEmpty()){
-                ydClient.operateData(YDParam.builder()
+                retryOperateData(YDParam.builder()
                         .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
                         .formInstanceIdList(formInstanceIdList)
                         .build(), YDConf.FORM_OPERATION.delete_batch);
@@ -252,7 +262,7 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
             }
 
             if (!formInstanceIdList2.isEmpty()){
-                ydClient.operateData(YDParam.builder()
+                retryOperateData(YDParam.builder()
                         .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
                         .formInstanceIdList(formInstanceIdList2)
                         .build(), YDConf.FORM_OPERATION.delete_batch);
@@ -283,26 +293,26 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
                     }).collect(Collectors.toList());
 
             for (Map groupMap : grouprList) {
-                ydClient.operateData(YDParam.builder()
+                retryOperateData(YDParam.builder()
                         .formUuid("FORM-4CB51E04B8344622BE880C9D573F68CANKWU")
                         .formDataJson(JSONObject.toJSONString(groupMap))
                         .build(), YDConf.FORM_OPERATION.create);
 
-                ydClient.operateData(YDParam.builder()
+                retryOperateData(YDParam.builder()
                         .formUuid("FORM-5764CC3F6D964FD3A165BD7D4D75999FO8NQ")
                         .formDataJson(JSONObject.toJSONString(groupMap))
                         .build(), YDConf.FORM_OPERATION.create);
             }
 
             //更新看板更新记录
-            ydClient.operateData(YDParam.builder()
+            retryOperateData(YDParam.builder()
                     .formInstId(formInstId)
                     .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mhsjnn2r, dateField_mhsjnn2t", "已完成", System.currentTimeMillis())))
                     .build(), YDConf.FORM_OPERATION.update);
 
         }catch (Exception e){
             //更新看板更新记录
-            ydClient.operateData(YDParam.builder()
+            retryOperateData(YDParam.builder()
                     .formInstId(formInstId)
                     .updateFormDataJson(JSONObject.toJSONString(UtilMap.map("selectField_mhsjnn2r, dateField_mhsjnn2t, textareaField_mir0zmpo", "异常", System.currentTimeMillis(),e.getMessage())))
                     .build(), YDConf.FORM_OPERATION.update);
@@ -1212,4 +1222,40 @@ public class KdHuaGaoServiceImpl implements KdHuaGaoService {
 
         return epochMilli;
     }
+
+    //自带重试的operateData方法
+    private Object retryOperateData(YDParam param, YDConf.FORM_OPERATION formOperation) {
+        int maxAttempts = 3; // 尝试的最大次数
+        int attempt = 0;
+
+        Object result = null;
+
+        while (attempt < maxAttempts) {
+            try {
+                result = ydClient.operateData(param, formOperation);
+
+                return result;
+            } catch (McException e) {
+                if (e.getMessage().equals("The request has failed due to a temporary failure of the server.")) {
+                    attempt++;
+                    // 线程睡眠3秒
+                    try {
+                        Thread.sleep(3000);
+                        log.info("尝试第{}次,param:{},FORM_OPERATION:{},异常信息:{}", attempt, JSONObject.toJSONString(param), formOperation,e.getMessage());
+                    } catch (InterruptedException ie) {
+                        Thread.currentThread().interrupt(); // 重新设置中断状态
+                        System.err.println("Sleep interrupted: " + ie.getMessage());
+                    }
+                }
+            } catch (Exception e) {
+                log.error("操作失败,param:{},FORM_OPERATION:{},异常信息:{}", JSONObject.toJSONString(param), formOperation,e.getMessage());
+
+                throw new RuntimeException(e);
+            }
+
+        }
+
+        throw new RuntimeException("超出最大重试次数,param:"+JSONObject.toJSONString(param)+",FORM_OPERATION:{}"+formOperation);
+    }
+
 }