From 24de7433b8ece155881afd2894be8a90bd4826f3 Mon Sep 17 00:00:00 2001 From: LiJianZhao Date: Tue, 27 May 2025 16:20:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ApiOperation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/syjiaer/clinic/server/BulidApi.java | 67 +++++++++++++++++-- .../controller/item/ItemController.java | 2 +- .../statistics/StatisticsController.java | 2 +- 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/syjiaer/clinic/server/BulidApi.java b/src/main/java/com/syjiaer/clinic/server/BulidApi.java index db98cd0..481821a 100644 --- a/src/main/java/com/syjiaer/clinic/server/BulidApi.java +++ b/src/main/java/com/syjiaer/clinic/server/BulidApi.java @@ -16,19 +16,75 @@ import java.lang.reflect.Method; import java.util.*; + public class BulidApi { public static void main(String[] args) { List apiPaths = scanControllersWithDocs("com.syjiaer.clinic.server"); Map nestedJson = convertToNestedJson(apiPaths); - String jsonContent = JSON.toJSONString(nestedJson); - try (FileWriter fileWriter = new FileWriter("D:\\api.json")) { - fileWriter.write(jsonContent); - System.out.println("成功写入 D:\\api.json"); + generateAPITsFile(apiPaths, "D:\\API.ts"); + } + + private static String cleanPath(String originalPath) { + // 1. 移除路径参数 + String pathWithoutParams = originalPath.replaceAll("/\\{[^/]+}", ""); + + // 2. 分割路径并只保留前三级 + String[] parts = pathWithoutParams.replaceAll("^/|/$", "").split("/"); + if (parts.length > 3) { + return String.join("/", Arrays.copyOfRange(parts, 0, 3)); + } + + return pathWithoutParams; + } + + private static void generateNamespace(StringBuilder builder, Map map, int indentLevel) { + String indent = " ".repeat(indentLevel); + + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); + + if (value instanceof Map) { + // 处理嵌套命名空间 + builder.append(indent).append("export namespace ").append(capitalize(key)).append(" {\n"); + generateNamespace(builder, (Map) value, indentLevel + 1); + builder.append(indent).append("}\n\n"); + } else if (value instanceof ApiInfo) { + // 处理API端点 + ApiInfo apiInfo = (ApiInfo) value; + String path = apiInfo.getPath().replaceAll("^/|/$", ""); + String comment = apiInfo.getComment().isEmpty() ? "" : "//" + apiInfo.getComment(); + + builder.append(indent).append("export const ") + .append(capitalize(key)).append(" = '") + .append(path).append("'") + .append(comment).append(";\n"); + } + } + } + + private static String capitalize(String str) { + if (str == null || str.isEmpty()) { + return str; + } + return str.substring(0, 1).toUpperCase() + str.substring(1); + } + public static void generateAPITsFile(List apiPaths, String outputPath) { + Map nestedJson = convertToNestedJson(apiPaths); + StringBuilder tsBuilder = new StringBuilder(); + tsBuilder.append("export namespace API {\n"); + + generateNamespace(tsBuilder, nestedJson, 1); + + tsBuilder.append("}\n"); + + try (FileWriter fileWriter = new FileWriter(outputPath)) { + fileWriter.write(tsBuilder.toString()); + System.out.println("成功写入 " + outputPath); } catch (IOException e) { throw new RuntimeException("文件写入失败", e); } } - public static Map convertToNestedJson(List apiPaths) { Map root = new LinkedHashMap<>(); @@ -94,6 +150,7 @@ public class BulidApi { String methodPath = methodMapping.value().length > 0 ? methodMapping.value()[0] : ""; String fullPath = (classPath + "/" + methodPath).replaceAll("/+", "/"); + fullPath = cleanPath(fullPath); // 获取方法注释 String comment = getMethodComment(method); diff --git a/src/main/java/com/syjiaer/clinic/server/controller/item/ItemController.java b/src/main/java/com/syjiaer/clinic/server/controller/item/ItemController.java index d59fc41..74bbddb 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/item/ItemController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/item/ItemController.java @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController -@RequestMapping("/item") +@RequestMapping("/item/base") public class ItemController extends BaseController { @Autowired diff --git a/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java b/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java index c863ab0..2f94414 100644 --- a/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java +++ b/src/main/java/com/syjiaer/clinic/server/controller/statistics/StatisticsController.java @@ -18,7 +18,7 @@ import java.time.LocalDateTime; import java.util.List; import java.util.Map; -@RequestMapping("/statistics") +@RequestMapping("/statistics/base") @RestController public class StatisticsController extends BaseController {