diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/client/NifiClient.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/client/NifiClient.java
index 5b307b48..b6a55388 100644
--- a/fw-nifi/src/main/java/com/hzya/frame/nifi/client/NifiClient.java
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/client/NifiClient.java
@@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
@@ -56,6 +57,16 @@ public class NifiClient {
         });
     }
 
+    /**
+     * 执行GET请求并返回文件流,供调用者处理(如保存到文件或浏览器下载)
+     */
+    public InputStream getAsStream(String path) throws IOException {
+        return executeRequestWithRetry(() -> {
+            Request request = new Request.Builder().url(config.getApiUrl() + path).get().header("Authorization", "Bearer " + accessToken.get()).build();
+            return executeStreamRequest(request);
+        });
+    }
+
     public <T> T post(String path, Object requestBody, Class<T> responseType) throws IOException {
         String jsonBody = objectMapper.writeValueAsString(requestBody);
         RequestBody body = RequestBody.create(jsonBody, MediaType.get("application/json; charset=utf-8"));
@@ -188,6 +199,16 @@ public class NifiClient {
 //        };
 //    }
 
+    private InputStream executeStreamRequest(Request request) throws IOException {
+        Response response = httpClient.newCall(request).execute();
+        if (!response.isSuccessful()) {
+            String responseBody = response.body().string();
+            response.close();
+            throw new IOException("意外的响应码: " + responseBody);
+        }
+        return response.body().byteStream();
+    }
+
     // 功能接口,用于重试逻辑
     @FunctionalInterface
     private interface IOExceptionRunnable<T> {
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joincreatetemp/CreateTemplateJoin.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joincreatetemp/CreateTemplateJoin.java
new file mode 100644
index 00000000..cc0efa94
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joincreatetemp/CreateTemplateJoin.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.nifi.model.joincreatetemp;
+
+import lombok.Data;
+
+/**
+ * @Author:liuyang
+ * @Package:com.hzya.frame.nifi.model.joincreatetemp
+ * @Project:fw-nifi
+ * @name:CreateTemplateJoin
+ * @Date:2025/5/17 10:52
+ * @Filename:CreateTemplateJoin
+ */
+@Data
+public class CreateTemplateJoin {
+    private String name;
+    private String description;
+    private String snippetId;
+    private String disconnectedNodeAcknowledged;
+}
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/Snippet.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/Snippet.java
new file mode 100644
index 00000000..66729397
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/Snippet.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.nifi.model.joinsnippets;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @Author:liuyang
+ * @Package:com.hzya.frame.nifi.model.joinsnippets
+ * @Project:fw-nifi
+ * @name:Snippet
+ * @Date:2025/5/17 11:01
+ * @Filename:Snippet
+ */
+@Data
+public class Snippet {
+    private String parentGroupId;
+    private Map<String, Map<String, String>> processGroups;
+}
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/SnippetsJoin.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/SnippetsJoin.java
new file mode 100644
index 00000000..bbdefc9e
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/joinsnippets/SnippetsJoin.java
@@ -0,0 +1,16 @@
+package com.hzya.frame.nifi.model.joinsnippets;
+
+import lombok.Data;
+
+/**
+ * @Author:liuyang
+ * @Package:com.hzya.frame.nifi.model.joinsnippets
+ * @Project:fw-nifi
+ * @name:SnippetsJoin
+ * @Date:2025/5/17 11:00
+ * @Filename:SnippetsJoin
+ */
+@Data
+public class SnippetsJoin {
+    private Snippet snippet;
+}
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/NifiTemplates.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/NifiTemplates.java
new file mode 100644
index 00000000..2ea1633c
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/NifiTemplates.java
@@ -0,0 +1,11 @@
+package com.hzya.frame.nifi.model.nifitemplates;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class NifiTemplates {
+    private List<Templates> templates;
+    private String generated;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Permissions.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Permissions.java
new file mode 100644
index 00000000..8f683127
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Permissions.java
@@ -0,0 +1,9 @@
+package com.hzya.frame.nifi.model.nifitemplates;
+
+import lombok.Data;
+
+@Data
+public class Permissions {
+    private String canRead;
+    private String canWrite;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Template.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Template.java
new file mode 100644
index 00000000..4d8d2ebb
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Template.java
@@ -0,0 +1,16 @@
+package com.hzya.frame.nifi.model.nifitemplates;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class Template {
+    private String uri;
+    private String id;
+    private String groupId;
+    private String name;
+    private String description;
+    private String timestamp;
+    @JsonProperty("encoding-version")
+    private String encodingVersion;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Templates.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Templates.java
new file mode 100644
index 00000000..c0c1c232
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/nifitemplates/Templates.java
@@ -0,0 +1,10 @@
+package com.hzya.frame.nifi.model.nifitemplates;
+
+import lombok.Data;
+
+@Data
+public class Templates {
+    private String id;
+    private Permissions permissions;
+    private Template template;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/Snippet13.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/Snippet13.java
new file mode 100644
index 00000000..0cced2c2
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/Snippet13.java
@@ -0,0 +1,19 @@
+package com.hzya.frame.nifi.model.resultsnippets;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * Auto-generated: 2025-05-17 11:22:8
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+@Data
+public class Snippet13 {
+    private String id;
+    private String uri;
+    private String parentGroupId;
+    private Map<String, Map<String, String>> processGroups;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/SnippetResult13.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/SnippetResult13.java
new file mode 100644
index 00000000..b04906c9
--- /dev/null
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/model/resultsnippets/SnippetResult13.java
@@ -0,0 +1,14 @@
+package com.hzya.frame.nifi.model.resultsnippets;
+
+import lombok.Data;
+
+/**
+ * Auto-generated: 2025-05-17 11:22:8
+ *
+ * @author bejson.com (i@bejson.com)
+ * @website http://www.bejson.com/java2pojo/
+ */
+@Data
+public class SnippetResult13 {
+    private Snippet13 snippet;
+}
\ No newline at end of file
diff --git a/fw-nifi/src/main/java/com/hzya/frame/nifi/service/NifiApiService.java b/fw-nifi/src/main/java/com/hzya/frame/nifi/service/NifiApiService.java
index 50001fd0..861e7c6a 100644
--- a/fw-nifi/src/main/java/com/hzya/frame/nifi/service/NifiApiService.java
+++ b/fw-nifi/src/main/java/com/hzya/frame/nifi/service/NifiApiService.java
@@ -4,18 +4,24 @@ import cn.hutool.core.util.StrUtil;
 import com.hzya.frame.nifi.client.NifiClient;
 import com.hzya.frame.nifi.model.joinbindparametercontexts.BindParameterContextsJoin11;
 import com.hzya.frame.nifi.model.joincontrollerenabled.EnOrDiControllerServices12;
+import com.hzya.frame.nifi.model.joincreatetemp.CreateTemplateJoin;
 import com.hzya.frame.nifi.model.joingetcontroller.ControllerService12;
 import com.hzya.frame.nifi.model.joinparametercontexts.ParameterContextsJoin;
 import com.hzya.frame.nifi.model.joinprocessgroups.ProcessGroupsJoin;
+import com.hzya.frame.nifi.model.joinsnippets.Snippet;
+import com.hzya.frame.nifi.model.joinsnippets.SnippetsJoin;
 import com.hzya.frame.nifi.model.joinstartorstopprocessgroup.StartOrStopProcessGroupsInfoJoin10;
+import com.hzya.frame.nifi.model.nifitemplates.NifiTemplates;
 import com.hzya.frame.nifi.model.processgroupid.ProcessGroupsId;
 import com.hzya.frame.nifi.model.processgrouproot.ProcessGroupsRoot;
 import com.hzya.frame.nifi.model.resultparametercontexts.ParameterContextsResult;
 import com.hzya.frame.nifi.model.resultprocessgroups.ProcessgroupsResult;
 import com.hzya.frame.nifi.model.resultprocessgroupsinfo.ProcessGroupsInfoResult9;
+import com.hzya.frame.nifi.model.resultsnippets.SnippetResult13;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.InputStream;
 import java.util.Map;
 
 /**
@@ -160,4 +166,32 @@ public class NifiApiService {
     public ControllerService12 deleteControllerServices(String id, Map<String, String> queryParam) throws Exception {
         return client.delete(StrUtil.format("/controller-services/{}", id), queryParam, ControllerService12.class);
     }
+
+    /**
+     * 获取所有xml模板
+     */
+    public NifiTemplates getAllXmlTemplates() throws Exception {
+        return client.get("/flow/templates", NifiTemplates.class);
+    }
+
+    /**
+     * 根据模板id,获取xml模板内容
+     */
+    public InputStream getXmlTemplatesContent(String templatesId) throws Exception {
+        return client.getAsStream(StrUtil.format("/templates/{}/download", templatesId));
+    }
+
+    /**
+     * 把指定的流程组生成模板
+     */
+    public void createNifiTemplatete(String id, CreateTemplateJoin createTemplateJoin) throws Exception {
+        client.post(StrUtil.format("/process-groups/{}/templates", id), createTemplateJoin, null);
+    }
+
+    /**
+     * 将某个流程组复制为代码片段
+     */
+    public SnippetResult13 createSnippets(SnippetsJoin snippetsJoin) throws Exception {
+        return client.post("/snippets", snippetsJoin, SnippetResult13.class);
+    }
 }
\ No newline at end of file
diff --git a/fw-nifi/target/classes/com/hzya/frame/nifi/client/NifiClient.class b/fw-nifi/target/classes/com/hzya/frame/nifi/client/NifiClient.class
index a9679050..61e1ebf0 100644
Binary files a/fw-nifi/target/classes/com/hzya/frame/nifi/client/NifiClient.class and b/fw-nifi/target/classes/com/hzya/frame/nifi/client/NifiClient.class differ
diff --git a/fw-nifi/target/classes/com/hzya/frame/nifi/service/NifiApiService.class b/fw-nifi/target/classes/com/hzya/frame/nifi/service/NifiApiService.class
index 0c41a52d..dca855a5 100644
Binary files a/fw-nifi/target/classes/com/hzya/frame/nifi/service/NifiApiService.class and b/fw-nifi/target/classes/com/hzya/frame/nifi/service/NifiApiService.class differ