feat(elevator): 对齐 V1 lib 的 Davinci/扫描/事件与部署配置

- davinci-manager-storage:FilePart 路径与基址按 V1 JAR(/portal/file、/part/*、GET /download)
- 启动类:扫描 cn.cloudwalk.serial 与 cn.cloudwalk.cwos.client.resource,补 UUIDSerial 与 ApplicationService
- deploy:v1/v2 application 中 cloudwalk.serial.enabled、Kafka 指向 192.168.3.12:9092;deploy/.gitignore 忽略日志
- cloudwalk-common-serial:补充 META-INF/spring.factories(Boot 自动配置)
- 电梯:Session 配置、Davinci Bean、Feign 包、MQTT/Visitor/Zone Feign;部署脚本与 API parity 工具更新
- 文档与根脚本若干;未纳入大体积 jar/zip 与 v1 CFR 对比目录

Made-with: Cursor

Former-commit-id: b76d142d13ebb5c0898de2d9d11bc583876829c2
This commit is contained in:
反编译工作区
2026-04-28 01:02:31 +08:00
parent be7a8e9d89
commit 418c7db202
61 changed files with 2967 additions and 461 deletions
@@ -4,6 +4,7 @@ import cn.cloudwalk.intelligent.davinci.common.result.DavinciResult;
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartFinishDTO;
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitDTO;
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitResultDTO;
import feign.Response;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -13,14 +14,17 @@ import org.springframework.web.multipart.MultipartFile;
public interface FilePartFeign {
@RequestMapping(value = { "/init" }, method = { RequestMethod.POST })
@RequestMapping(value = { "/part/init" }, method = { RequestMethod.POST })
DavinciResult<PartInitResultDTO> init(@RequestBody PartInitDTO paramPartInitDTO);
@RequestMapping(value = { "/append" }, method = { RequestMethod.POST }, consumes = { "multipart/form-data" })
@RequestMapping(value = { "/part/append" }, method = { RequestMethod.POST }, consumes = { "multipart/form-data" })
DavinciResult<PartInitResultDTO> append(@RequestParam("filePath") String paramString1,
@RequestParam("partNumber") Integer paramInteger, @RequestParam("uploadId") String paramString2,
@RequestPart("file") MultipartFile paramMultipartFile);
@RequestMapping(value = { "/finish" }, method = { RequestMethod.POST })
@RequestMapping(value = { "/part/finish" }, method = { RequestMethod.POST })
DavinciResult<String> finish(@RequestBody PartFinishDTO paramPartFinishDTO);
@RequestMapping(value = { "/download" }, method = { RequestMethod.GET })
Response bigFileDownload(@RequestParam("path") String path);
}
@@ -4,6 +4,7 @@ import cn.cloudwalk.intelligent.davinci.common.exception.DavinciServiceException
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartFinishDTO;
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitDTO;
import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitResultDTO;
import java.io.InputStream;
import org.springframework.web.multipart.MultipartFile;
public interface FilePartManager {
@@ -14,4 +15,6 @@ public interface FilePartManager {
MultipartFile paramMultipartFile) throws DavinciServiceException;
String finish(PartFinishDTO paramPartFinishDTO) throws DavinciServiceException;
InputStream bigFileDownload(String paramString) throws DavinciServiceException;
}
@@ -9,28 +9,22 @@ import cn.cloudwalk.intelligent.davinci.storage.feign.FilePartFeign;
import cn.cloudwalk.intelligent.davinci.storage.manager.FilePartManager;
import feign.Client;
import feign.Feign;
import feign.Response;
import feign.codec.Decoder;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.FeignClientsConfiguration;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.cloud.openfeign.support.SpringMvcContract;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@Component
@Import({ FeignClientsConfiguration.class })
public class FilePartManagerImpl implements FilePartManager {
private FilePartFeign filePartFeign;
private FilePartFeign filePartRestFeign;
@Autowired
public FilePartManagerImpl(@Value("${feign.davinci-portal.name:davinci-portal}") String serviceName,
Decoder decoder, Encoder encoder, Client client) {
String url = "http://" + serviceName + "/portal/file/part";
public FilePartManagerImpl(String serviceName, Decoder decoder, Encoder encoder, Client client) {
String url = "http://" + serviceName + "/portal/file";
this.filePartFeign = Feign.builder().client(client).decode404().encoder(new SpringFormEncoder())
.decoder(decoder).contract(new SpringMvcContract()).target(FilePartFeign.class, url);
@@ -66,4 +60,17 @@ public class FilePartManagerImpl implements FilePartManager {
}
throw new DavinciServiceException(result.getCode(), result.getMessage());
}
@Override
public InputStream bigFileDownload(String path) throws DavinciServiceException {
try {
Response response = this.filePartFeign.bigFileDownload(path);
if (response.body() == null) {
return null;
}
return response.body().asInputStream();
} catch (IOException e) {
throw new DavinciServiceException("", "调用Davinci-portal服务,获取大文件流接口异常");
}
}
}
@@ -25,15 +25,12 @@ import java.util.Locale;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.FeignClientsConfiguration;
import org.springframework.cloud.openfeign.support.SpringMvcContract;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
@Component
@Import({ FeignClientsConfiguration.class })
public class FileStorageManagerImpl implements FileStorageManager {
private FileManagerFeign fileManagerFeign;