From 47ebc48edbf9b0a5a42b951a26da3224cebec7e4 Mon Sep 17 00:00:00 2001 From: ayan Date: Wed, 26 Oct 2022 17:20:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E6=B7=BB=E5=8A=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jetlinks/community/io/file/FileInfo.java | 10 +++++ .../device/web/ProtocolSupportController.java | 41 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java index 8680728b..b012d68a 100644 --- a/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java +++ b/jetlinks-components/io-component/src/main/java/org/jetlinks/community/io/file/FileInfo.java @@ -36,6 +36,16 @@ public class FileInfo { private Map others; + private String accessUrl; + + public void withBasePath(String apiBashPath) { + if (!apiBashPath.endsWith("/")) { + apiBashPath = apiBashPath + "/"; + } + accessUrl = apiBashPath + "file/" + id + "?accessKey=" + accessKey().orElse(""); + } + + public MediaType mediaType() { if (!StringUtils.hasText(extension)) { return MediaType.APPLICATION_OCTET_STREAM; diff --git a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/ProtocolSupportController.java b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/ProtocolSupportController.java index 170d1038..67d42e9e 100644 --- a/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/ProtocolSupportController.java +++ b/jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/web/ProtocolSupportController.java @@ -1,11 +1,13 @@ package org.jetlinks.community.device.web; import com.alibaba.fastjson.JSON; +import io.netty.buffer.ByteBufAllocator; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.Getter; +import org.apache.commons.codec.digest.DigestUtils; import org.hswebframework.utils.StringUtils; import org.hswebframework.web.api.crud.entity.QueryParamEntity; import org.hswebframework.web.authorization.annotation.Authorize; @@ -21,6 +23,7 @@ import org.jetlinks.community.device.web.protocol.ProtocolInfo; import org.jetlinks.community.device.web.protocol.TransportInfo; import org.jetlinks.community.device.web.request.ProtocolDecodeRequest; import org.jetlinks.community.device.web.request.ProtocolEncodeRequest; +import org.jetlinks.community.io.file.FileManager; import org.jetlinks.community.protocol.TransportDetail; import org.jetlinks.core.ProtocolSupport; import org.jetlinks.core.ProtocolSupports; @@ -32,6 +35,9 @@ import org.jetlinks.supports.protocol.management.ProtocolSupportDefinition; import org.jetlinks.supports.protocol.management.ProtocolSupportLoader; import org.jetlinks.supports.protocol.management.ProtocolSupportLoaderProvider; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.core.io.buffer.NettyDataBufferFactory; import org.springframework.web.bind.annotation.*; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -39,7 +45,9 @@ import reactor.util.function.Tuple2; import reactor.util.function.Tuples; import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; @RestController @RequestMapping("/protocol") @@ -62,6 +70,9 @@ public class ProtocolSupportController @Autowired private ProtocolSupportLoader supportLoader; + @Autowired + private FileManager fileManager; + @PostMapping("/{id}/_deploy") @SaveAction @Operation(summary = "发布协议") @@ -233,4 +244,34 @@ public class ProtocolSupportController .flatMap(ProtocolDetail::of); } + + @PostMapping("/default-protocol/_save") + @SaveAction + @Operation(summary = "保存默认协议") + public Mono saveDefaultProtocol() { + + String defaultProtocolName = "JetLinks官方协议"; + String fileNeme = "jetlinks-official-protocol-3.0-SNAPSHOT.zip"; + return fileManager + .saveFile(fileNeme, + DataBufferUtils.read(new ClassPathResource(fileNeme), + new NettyDataBufferFactory(ByteBufAllocator.DEFAULT), + 1024)) + .flatMap(fileInfo -> { + Map conf = new HashMap<>(); + conf.put("fileId", fileInfo.getId()); + conf.put("provider", "org.jetlinks.protocol.official.JetLinksProtocolSupportProvider"); + conf.put("location", fileInfo.getAccessUrl()); + ProtocolSupportEntity entity = new ProtocolSupportEntity(); + entity.setId(DigestUtils.md5Hex(defaultProtocolName)); + entity.setType("jar"); + entity.setName(defaultProtocolName); + entity.setState((byte) 1); + entity.setDescription("JetLinks官方协议包"); + entity.setConfiguration(conf); + return getService().save(entity); + }) + .then(); + } + }