From 81403ccb31dbec8402f7a7e70dc5b179c0deb7c7 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期二, 18 八月 2026 16:28:53 +0800
Subject: [PATCH] feat0806: 编辑诊所页面调整

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/utils/VzanHttpUtil.java |   66 +++++++++++++++++++++++++++++++++
 1 files changed, 66 insertions(+), 0 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/utils/VzanHttpUtil.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/utils/VzanHttpUtil.java
index e688506..0d8da1f 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/utils/VzanHttpUtil.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/utils/VzanHttpUtil.java
@@ -11,6 +11,7 @@
 import org.springframework.http.client.SimpleClientHttpRequestFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
+import org.springframework.web.client.RestClientException;
 import org.springframework.web.client.RestOperations;
 import org.springframework.web.client.RestTemplate;
 
@@ -164,6 +165,71 @@
         }
     }
 
+    /**
+     * 创建微赞代理。接口返回顶层code或data.result非成功时抛出运行时异常。
+     *
+     * @return 微赞返回的代理业务数据
+     */
+    public JsonNode createAgent(String agentMobile, String agentName, Integer levelCode,
+                                String parentMobile, String storeName) {
+        String token = getToken();
+        Map<String, Object> body = new LinkedHashMap<String, Object>();
+        body.put("agent_mobile", requireText(agentMobile, "代理手机号不能为空"));
+        body.put("agent_name", requireText(agentName, "代理名称不能为空"));
+        if (levelCode == null) {
+            throw new IllegalArgumentException("代理等级不能为空");
+        }
+        body.put("level_code", levelCode);
+        putIfHasText(body, "parent_mobile", parentMobile);
+        putIfHasText(body, "store_name", storeName);
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        headers.setBearerAuth(token);
+        try {
+            ResponseEntity<String> response = restOperations.postForEntity(
+                    "https://openapi.njyqkj0ksyz.com/api/v2/agent/createAgent",
+                    new HttpEntity<Map<String, Object>>(body, headers), String.class);
+            return parseCreateAgentResponse(response.getBody());
+        } catch (RestClientException ex) {
+            throw new IllegalStateException("调用微赞创建代理接口失败", ex);
+        }
+    }
+
+    private JsonNode parseCreateAgentResponse(String responseBody) {
+        if (!StringUtils.hasText(responseBody)) {
+            throw new IllegalStateException("微赞创建代理接口返回为空");
+        }
+        try {
+            JsonNode root = objectMapper.readTree(responseBody);
+            if (!"0".equals(root.path("code").asText())) {
+                throw new IllegalStateException("微赞创建代理失败: " + root.path("msg").asText("未知错误"));
+            }
+            JsonNode data = root.path("data");
+            if (!data.isObject() || data.path("result").asInt(-1) != 0) {
+                throw new IllegalStateException("微赞创建代理失败: 业务处理未成功");
+            }
+            return data;
+        } catch (IllegalStateException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new IllegalStateException("解析微赞创建代理响应失败", ex);
+        }
+    }
+
+    private static String requireText(String value, String message) {
+        if (!StringUtils.hasText(value)) {
+            throw new IllegalArgumentException(message);
+        }
+        return value.trim();
+    }
+
+    private static void putIfHasText(Map<String, Object> body, String key, String value) {
+        if (StringUtils.hasText(value)) {
+            body.put(key, value.trim());
+        }
+    }
+
     private static String md5Lowercase(String text) {
         try {
             MessageDigest digest = MessageDigest.getInstance("MD5");

--
Gitblit v1.7.1