Bläddra i källkod

fix(cloudpure): remove H3 customer ownership filtering

malk 2 dagar sedan
förälder
incheckning
a3c62da959

+ 6 - 15
mjava-cloudpure/src/main/java/com/malk/cloudpure/controller/H3yunController.java

@@ -183,9 +183,10 @@ public class H3yunController {
     }
 
     /**
-     * 按客户名称模糊查询氚云客户,并按负责人、售前、客户成功经理、交付校验客户归属。
+     * 按客户名称模糊查询氚云客户,不按调用人的客户归属过滤。
      *
-     * @param request 查询参数,仅包含客户名称和客户归属人的钉钉用户ID
+     * @param request 查询参数,客户名称必填,钉钉用户ID仅兼容旧调用方
+     * @return 匹配的客户名称列表
      */
     @PostMapping("customer/list")
     McR customerList(@RequestBody H3CustomerListRequest request) {
@@ -193,20 +194,10 @@ public class H3yunController {
         String userId = request == null ? null : request.getUserId();
         log.info("氚云客户列表, name: {}, userId: {}", name, userId);
         McException.assertParamException(name == null || name.trim().isEmpty(), "参数不能为空: name");
-        McException.assertParamException(userId == null || userId.trim().isEmpty(), "参数不能为空: userId");
 
-        String h3yunUserId = getH3yunUserId(userId);
-        if (h3yunUserId == null) {
-            log.warn("未找到钉钉用户对应的氚云用户, dingTalkUserId: {}", userId);
-            return McR.success(Collections.emptyList());
-        }
-
-        List<String> returnFields = new ArrayList<>();
-        returnFields.add(FIELD_CUSTOMER_NAME);
-        returnFields.addAll(CUSTOMER_USER_FIELDS);
-
-        Map customerUserMatcher = buildCustomerUserMatcher(h3yunUserId);
-        List<Map> customers = h3OpenApiClient.queryData(SCHEMA_CUSTOMER, customerUserMatcher, returnFields)
+        // prd: 客户名称查询取消人员归属限制,userId 仅保留请求兼容。
+        List<Map> customers = h3OpenApiClient.queryData(
+                        SCHEMA_CUSTOMER, null, Collections.singletonList(FIELD_CUSTOMER_NAME))
                 .stream()
                 .filter(customer -> containsIgnoreCase(customer.get(FIELD_CUSTOMER_NAME), name))
                 .map(customer -> UtilMap.map("name", String.valueOf(customer.get(FIELD_CUSTOMER_NAME))))

+ 1 - 1
mjava-cloudpure/src/main/java/com/malk/cloudpure/dto/H3CustomerListRequest.java

@@ -11,6 +11,6 @@ public class H3CustomerListRequest {
     /** 客户名称。 */
     private String name;
 
-    /** 客户归属人的钉钉用户ID。 */
+    /** 钉钉用户ID,可选,仅兼容旧调用方,不参与客户归属过滤。 */
     private String userId;
 }

+ 120 - 0
mjava-cloudpure/src/test/java/com/malk/cloudpure/controller/H3yunControllerTest.java

@@ -0,0 +1,120 @@
+package com.malk.cloudpure.controller;
+
+import com.malk.cloudpure.dto.H3CustomerListRequest;
+import com.malk.cloudpure.service.H3OpenApiClient;
+import com.malk.server.common.McException;
+import com.malk.server.common.McR;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/** 客户名称查询的权限取消及原有输入、响应契约回归。 */
+public class H3yunControllerTest {
+
+    private H3yunController controller;
+    private CustomerClientStub client;
+
+    @Before
+    public void setUp() throws ReflectiveOperationException {
+        controller = new H3yunController();
+        client = new CustomerClientStub();
+        Field field = H3yunController.class.getDeclaredField("h3OpenApiClient");
+        field.setAccessible(true);
+        field.set(controller, client);
+    }
+
+    @Test
+    public void queriesCustomersWithoutUserIdOrOwnershipFields() {
+        client.rows = Arrays.asList(customer("CloudPure甲"), customer("其他客户"), customer("cloudpure乙"));
+
+        McR response = controller.customerList(request("CLOUDPURE", null));
+
+        assertTrue(response.isSuccess());
+        assertEquals(Arrays.asList(name("CloudPure甲"), name("cloudpure乙")), response.getData());
+        assertEquals(1, client.calls);
+        assertEquals("D00086786d02a447942405d9e27821538a57834", client.schemaCode);
+        assertNull(client.matcher);
+        assertEquals(Collections.singletonList("F0000001"), client.returnFields);
+    }
+
+    @Test
+    public void legacyAndUnmappedUserIdsDoNotChangeResults() {
+        client.rows = Collections.singletonList(customer("云璞"));
+        Object expected = controller.customerList(request("云璞", null)).getData();
+
+        for (String userId : Arrays.asList("", "old-user", "unmapped-user")) {
+            assertEquals(expected, controller.customerList(request("云璞", userId)).getData());
+        }
+        assertEquals(4, client.calls);
+    }
+
+    @Test
+    public void returnsEmptyListWhenNameDoesNotMatch() {
+        client.rows = Arrays.asList(customer("其他客户"), customer(null));
+
+        assertEquals(Collections.emptyList(), controller.customerList(request("云璞", null)).getData());
+    }
+
+    @Test
+    public void rejectsMissingOrBlankNamesBeforeQuerying() {
+        for (String name : Arrays.asList(null, "", "  ")) {
+            assertInvalid(request(name, null));
+        }
+        assertInvalid(null);
+        assertEquals(0, client.calls);
+    }
+
+    private void assertInvalid(H3CustomerListRequest request) {
+        try {
+            controller.customerList(request);
+            fail("空客户名称必须被拒绝");
+        } catch (McException expected) {
+            assertTrue(expected.getMessage().contains("name"));
+        }
+    }
+
+    private H3CustomerListRequest request(String name, String userId) {
+        H3CustomerListRequest request = new H3CustomerListRequest();
+        request.setName(name);
+        request.setUserId(userId);
+        return request;
+    }
+
+    private Map<String, Object> customer(String name) {
+        Map<String, Object> row = new HashMap<>();
+        row.put("F0000001", name);
+        return row;
+    }
+
+    private Map<String, String> name(String name) {
+        return Collections.singletonMap("name", name);
+    }
+
+    private static class CustomerClientStub extends H3OpenApiClient {
+        private List<Map> rows = Collections.emptyList();
+        private int calls;
+        private String schemaCode;
+        private Map matcher;
+        private List<String> returnFields;
+
+        @Override
+        public List<Map> queryData(String schemaCode, Map matcher, List<String> returnFields) {
+            this.calls++;
+            this.schemaCode = schemaCode;
+            this.matcher = matcher;
+            this.returnFields = returnFields;
+            return rows;
+        }
+    }
+}