Explorar el Código

mc更新实例版本优化

wzy hace 2 semanas
padre
commit
18b00c435a

+ 85 - 66
mjava-mc/src/main/java/com/malk/mc/service/impl/McYdServiceImpl.java

@@ -58,79 +58,98 @@ public class McYdServiceImpl implements McYdService {
     @Override
     @Async
     public void updateFormDataVersion(Map map) {
-        String pid = Objects.nonNull(map.get("pid")) ? map.get("pid").toString() : "";
-        String formInstId = Objects.nonNull(map.get("formInstId")) ? map.get("formInstId").toString() : "";
-        String formUuid = Objects.nonNull(map.get("formUuid")) ? map.get("formUuid").toString() : "";
-        if (Strings.isNotBlank(pid)){
-            MDC.put("MDC_KEY_PID",pid);
-            if (Strings.isNotBlank(formInstId) && Strings.isBlank(formUuid)){
-                ydClient.operateData(YDParam.builder()
-                        .formInstId(formInstId)
-                        .useLatestVersion(true)
-                        .updateFormDataJson("{}").build(), YDConf.FORM_OPERATION.update);
-            }else if (Strings.isBlank(formInstId) && Strings.isNotBlank(formUuid)){
-                int i = 1;
-                int pageSize = 10;
-                DDR_New ddrNew = null;
-                do {
-                    int i1 =1 ;
-                    boolean flag1 = false;
-                    while (i1<=5 && !flag1) {
-                        try {
-                            ddrNew = ydClient.queryData(YDParam.builder()
-                                    .formUuid(formUuid)
-                                    .pageNumber(i)
-                                    .pageSize(pageSize)
-                                    .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
-
-                            List<String> formInstIdList = (List<String>) ddrNew.getData();
-
-                            //noExecuteExpression字段不传或传false  传true会导致实例版本不更新或滞后更新
-                            ydClient.operateData(YDParam.builder()
-                                    .formInstanceIdList(formInstIdList)
-                                    .formUuid(formUuid)
-                                    .useLatestFormSchemaVersion(true)
-                                    .updateFormDataJson("{}")
-                                    .noExecuteExpression(false)
-                                    .asynchronousExecution(false)
-                                    .build(),YDConf.FORM_OPERATION.multi_update);
-
-                            i++;
-                            flag1 = true;
-                        }catch (Exception e){
-                            log.error("更新表单实例版本失败:{}, 重试次数:{}",e.getMessage(),i1);
+        try {
+            String pid = Objects.nonNull(map.get("pid")) ? map.get("pid").toString() : "";
+            String formInstId = Objects.nonNull(map.get("formInstId")) ? map.get("formInstId").toString() : "";
+            String formUuid = Objects.nonNull(map.get("formUuid")) ? map.get("formUuid").toString() : "";
+
+            if (Strings.isNotBlank(pid)){
+                MDC.put("MDC_KEY_PID",pid);
+                if (Strings.isNotBlank(formInstId) && Strings.isBlank(formUuid)){
+                    ydClient.operateData(YDParam.builder()
+                            .formInstId(formInstId)
+                            .useLatestVersion(true)
+                            .updateFormDataJson("{}").build(), YDConf.FORM_OPERATION.update);
+                }else if (Strings.isBlank(formInstId) && Strings.isNotBlank(formUuid)){
+                    int i = 1;
+                    int pageSize = 10;
+                    DDR_New ddrNew = null;
+                    do {
+                        int i1 =1 ;
+                        boolean flag1 = false;
+                        while (i1<=5 && !flag1) {
                             try {
-                                Thread.sleep(3000);
-                            } catch (InterruptedException ex) {
-                                throw new RuntimeException(ex);
+                                ddrNew = ydClient.queryData(YDParam.builder()
+                                        .formUuid(formUuid)
+                                        .pageNumber(i)
+                                        .pageSize(pageSize)
+                                        .build(), YDConf.FORM_QUERY.retrieve_search_form_id);
+
+                                List<String> formInstIdList = (List<String>) ddrNew.getData();
+
+                                //noExecuteExpression字段不传或传false  传true会导致实例版本不更新或滞后更新
+                                ydClient.operateData(YDParam.builder()
+                                        .formInstanceIdList(formInstIdList)
+                                        .formUuid(formUuid)
+                                        .useLatestFormSchemaVersion(true)
+                                        .updateFormDataJson("{}")
+                                        .noExecuteExpression(false)
+                                        .asynchronousExecution(false)
+                                        .build(),YDConf.FORM_OPERATION.multi_update);
+
+                                i++;
+                                flag1 = true;
+                            }catch (Exception e){
+                                log.error("更新表单实例版本失败:{}, 重试次数:{}",e.getMessage(),i1);
+                                try {
+                                    Thread.sleep(3000);
+                                } catch (InterruptedException ex) {
+                                    throw new RuntimeException(ex);
+                                }
+                                i1++;
                             }
-                            i1++;
                         }
-                    }
-                    if (i1 > 5){
-                        log.error("更新表单实例版本失败:{}");
-                        break;
-                    }
+                        if (i1 > 5){
+                            throw new RuntimeException("更新表单实例版本失败,超过最大重试次数!");
+                        }
 
-                }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
-            }
+                    }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+                }
 
-            //发送工作通知给当前登陆人
+                //发送工作通知给当前登陆人
+                if (Objects.nonNull(map.get("userId"))){
+                    //获取当前时间 精确到秒
+                    String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
+                    sendDdMsg(ddClient.getAccessToken(),ddConf.getAgentId(),map.get("userId").toString(),"表单实例版本已更新  时间:" + time);
+                }
+            }
+        }catch (Exception e){
+            //发送工作通知
             if (Objects.nonNull(map.get("userId"))){
-                String userId = map.get("userId").toString();
-                Map param2 = new HashMap();
-                param2.put("access_token",ddClient.getAccessToken());
-                Map body3 = new HashMap();
-                body3.put("agent_id",ddConf.getAgentId());
-                body3.put("userid_list",userId);
-                Map msg = new HashMap();
-                msg.put("msgtype","text");
-                //获取当前时间 精确到秒
-                String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
-                msg.put("text", UtilMap.map("content","表单实例版本已更新  时间:" + time));
-                body3.put("msg",msg);
-                UtilHttp.doPost("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2",null,param2,body3);
+                String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");//获取当前时间 精确到秒
+                sendDdMsg(ddClient.getAccessToken(),ddConf.getAgentId(),map.get("userId").toString(),"更新表单实例版本异常:" + e.getMessage() + "  时间:" + time);
             }
+
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    //发送工作通知
+    public void sendDdMsg(String access_token,Number agent_id, String userid_list, String content){
+        if (Objects.nonNull(userid_list)){
+            Map param2 = new HashMap();
+            param2.put("access_token",access_token);
+            Map body3 = new HashMap();
+            body3.put("agent_id",agent_id);
+            body3.put("userid_list",userid_list);
+            Map msg = new HashMap();
+            msg.put("msgtype","text");
+            //获取当前时间 精确到秒
+            String time = DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
+            msg.put("text", UtilMap.map("content",content));
+            body3.put("msg",msg);
+            UtilHttp.doPost("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2",null,param2,body3);
         }
     }