lfx 1 week ago
parent
commit
47ec268368

+ 12 - 3
mjava-benteler/src/main/java/com/malk/benteler/service/BentelerDingTalkSyncTaskService.java

@@ -136,8 +136,7 @@ public class BentelerDingTalkSyncTaskService {
         formData.put(conf.getDingTalkSyncCompletedAtFieldId(), "");
         Map<String, Object> bodyExt = updateBodyExt(true);
         ydClientForm.upsertForm(auth(), conf.getDingTalkSyncTaskFormUuid(),
-                JSON.toJSONString(Collections.singletonMap(
-                        conf.getDingTalkSyncTaskKeyFieldId(), taskKey)),
+                taskSearchCondition(taskKey),
                 JSON.toJSONString(formData), bodyExt);
         reconcileDuplicates(taskKey);
     }
@@ -173,11 +172,21 @@ public class BentelerDingTalkSyncTaskService {
         formData.put(conf.getDingTalkSyncLastErrorFieldId(), "");
         formData.put(conf.getDingTalkSyncCompletedAtFieldId(), "");
         ydClientForm.upsertForm(auth(), conf.getDingTalkSyncTaskFormUuid(),
-                JSON.toJSONString(Collections.singletonMap(conf.getDingTalkSyncTaskKeyFieldId(), taskKey)),
+                taskSearchCondition(taskKey),
                 JSON.toJSONString(formData), updateBodyExt(true));
         reconcileDuplicates(taskKey);
     }
 
+    private String taskSearchCondition(String taskKey) {
+        Map<String, Object> condition = new HashMap<>();
+        condition.put("key", conf.getDingTalkSyncTaskKeyFieldId());
+        condition.put("value", taskKey);
+        condition.put("type", "TEXT");
+        condition.put("operator", "eq");
+        condition.put("componentName", "TextField");
+        return JSON.toJSONString(Collections.singletonList(condition));
+    }
+
     /**
      * Executes every currently due roster task. Failure is isolated per record.
      */

+ 26 - 4
mjava-benteler/src/test/java/com/malk/benteler/service/BentelerDingTalkSyncTaskServiceTest.java

@@ -80,6 +80,23 @@ public class BentelerDingTalkSyncTaskServiceTest {
                 ((Number) saved.get("next_execute_at")).longValue());
     }
 
+    @Test
+    public void enqueueRosterUpdate_usesStructuredSearchCondition() {
+        service.enqueueRosterUpdate("source_1", 0, "user_1", "众川");
+
+        ArgumentCaptor<String> search = ArgumentCaptor.forClass(String.class);
+        verify(ydClientForm).upsertForm(any(YDAuth.class), eq("FORM_TASK"),
+                search.capture(), anyString(), anyMap());
+        List<Map> conditions = JSON.parseArray(search.getValue(), Map.class);
+        assertEquals(1, conditions.size());
+        assertEquals("task_key", conditions.get(0).get("key"));
+        assertEquals("source_1:0:ROSTER_FIELD_UPDATE:outsourcing_code",
+                conditions.get(0).get("value"));
+        assertEquals("TEXT", conditions.get(0).get("type"));
+        assertEquals("eq", conditions.get(0).get("operator"));
+        assertEquals("TextField", conditions.get(0).get("componentName"));
+    }
+
     @Test
     public void enqueueRosterUpdate_blankValueDoesNotCreateTask() {
         service.enqueueRosterUpdate("source_1", 0, "user_1", "  ");
@@ -148,10 +165,15 @@ public class BentelerDingTalkSyncTaskServiceTest {
         ArgumentCaptor<String> search = ArgumentCaptor.forClass(String.class);
         verify(ydClientForm, times(2)).upsertForm(any(YDAuth.class), eq("FORM_TASK"),
                 search.capture(), anyString(), anyMap());
-        Map<String, Object> expected = Collections.singletonMap("task_key",
-                "source_1:0:ROSTER_FIELD_UPDATE:outsourcing_code");
-        assertEquals(expected, JSON.parseObject(search.getAllValues().get(0), Map.class));
-        assertEquals(expected, JSON.parseObject(search.getAllValues().get(1), Map.class));
+        List<Map> expected = Collections.singletonList(new HashMap<String, Object>() {{
+            put("key", "task_key");
+            put("value", "source_1:0:ROSTER_FIELD_UPDATE:outsourcing_code");
+            put("type", "TEXT");
+            put("operator", "eq");
+            put("componentName", "TextField");
+        }});
+        assertEquals(expected, JSON.parseArray(search.getAllValues().get(0), Map.class));
+        assertEquals(expected, JSON.parseArray(search.getAllValues().get(1), Map.class));
         verify(ydClientForm, never()).saveForm(any(), anyString(), anyString(), any());
     }