From 2cbf0e063c05409a452e9bc66ad7c3cfee10c6d9 Mon Sep 17 00:00:00 2001 From: zhangzq Date: Tue, 24 Feb 2026 19:23:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nl-agv/pom.xml | 5 ++ .../module/layout/service/dto/MapLayout.java | 2 +- .../service/impl/AgvLayoutServiceImpl.java | 8 ++- .../controller/BaseDataDeviceController.java | 3 + .../module/device/entity/BaseDataDevice.java | 4 +- .../main/java/org/nl/dev/api/DevFileApi.java | 3 +- .../java/org/nl/dev/dto/DevFileApiDto.java | 56 +++++++++++++++ .../nl/dev/modular/file/entity/DevFile.java | 6 +- .../modular/file/mapper/DevFileMapper.java | 5 ++ .../file/provider/DevFileApiProvider.java | 11 +-- .../file/service/impl/DevFileServiceImpl.java | 6 +- .../views/nl_agv/layout/map-editor-main.js | 7 +- nl-vue/src/views/nl_base_data/device/form.vue | 4 +- .../src/views/nl_base_data/device/index.vue | 14 ++-- .../org/nl/core/config/GlobalConfigure.java | 70 ++++++++++--------- 15 files changed, 143 insertions(+), 61 deletions(-) create mode 100644 nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/dto/DevFileApiDto.java diff --git a/nl-agv/pom.xml b/nl-agv/pom.xml index f847576..70d5064 100644 --- a/nl-agv/pom.xml +++ b/nl-agv/pom.xml @@ -18,6 +18,11 @@ org.nl nl-common + + + org.nl + nl-plugin-dev-api + diff --git a/nl-agv/src/main/java/org/nl/module/layout/service/dto/MapLayout.java b/nl-agv/src/main/java/org/nl/module/layout/service/dto/MapLayout.java index c9ad8e1..02848ab 100644 --- a/nl-agv/src/main/java/org/nl/module/layout/service/dto/MapLayout.java +++ b/nl-agv/src/main/java/org/nl/module/layout/service/dto/MapLayout.java @@ -6,7 +6,7 @@ import java.util.List; @Data public class MapLayout { - private Long mapId; + private String mapId; private Integer width; private Integer height; private MapOrigin origin; diff --git a/nl-agv/src/main/java/org/nl/module/layout/service/impl/AgvLayoutServiceImpl.java b/nl-agv/src/main/java/org/nl/module/layout/service/impl/AgvLayoutServiceImpl.java index 02997d4..52dd457 100644 --- a/nl-agv/src/main/java/org/nl/module/layout/service/impl/AgvLayoutServiceImpl.java +++ b/nl-agv/src/main/java/org/nl/module/layout/service/impl/AgvLayoutServiceImpl.java @@ -3,6 +3,8 @@ package org.nl.module.layout.service.impl; import jakarta.annotation.Resource; import org.nl.common.localStorage.service.LocalStorageService; import org.nl.common.localStorage.service.entity.LocalStorage; +import org.nl.dev.api.DevFileApi; +import org.nl.dev.dto.DevFileApiDto; import org.nl.module.layout.service.AgvLayoutService; import org.nl.module.layout.service.dto.DeviceLayout; import org.nl.module.layout.service.dto.MapLayout; @@ -22,18 +24,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @Service public class AgvLayoutServiceImpl extends ServiceImpl implements AgvLayoutService { @Autowired - private LocalStorageService localStorageService; + private DevFileApi devFileApi; @Resource private AgvLayoutDeviceMapper agvLayoutDeviceMapper; @Override @Transactional public void saveLayout(MapLayout layout) { - LocalStorage storage = localStorageService.getById(layout.getMapId()); + DevFileApiDto storage = devFileApi.getFileInfoById(layout.getMapId()); AgvLayoutMap layoutMap = AgvLayoutMap.builder() .mapId(layout.getMapId()) .mapName(storage.getName()) - .url(storage.getPath()) + .url(storage.getStoragePath()) .width(layout.getWidth()) .height(layout.getHeight()) .x(layout.getOrigin().getX()) diff --git a/nl-base-data/src/main/java/org/nl/module/device/controller/BaseDataDeviceController.java b/nl-base-data/src/main/java/org/nl/module/device/controller/BaseDataDeviceController.java index 22c9e02..f182a97 100644 --- a/nl-base-data/src/main/java/org/nl/module/device/controller/BaseDataDeviceController.java +++ b/nl-base-data/src/main/java/org/nl/module/device/controller/BaseDataDeviceController.java @@ -12,6 +12,7 @@ */ package org.nl.module.device.controller; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -47,6 +48,7 @@ public class BaseDataDeviceController { */ @Operation(summary = "获取设备列表") @GetMapping("/list") + @SaIgnore public CommonResult list(BaseDeviceQuery query,PageQuery page) { Page result = baseDataDeviceService.page(page.build(), query.build()); return CommonResult.data(result); @@ -83,6 +85,7 @@ public class BaseDataDeviceController { } @Operation(summary = "设备组件列表") @GetMapping("compentList") + @SaIgnore public CommonResult compentList() { return CommonResult.data(baseDataDeviceService.list()); } diff --git a/nl-base-data/src/main/java/org/nl/module/device/entity/BaseDataDevice.java b/nl-base-data/src/main/java/org/nl/module/device/entity/BaseDataDevice.java index 86e70b7..ac88701 100644 --- a/nl-base-data/src/main/java/org/nl/module/device/entity/BaseDataDevice.java +++ b/nl-base-data/src/main/java/org/nl/module/device/entity/BaseDataDevice.java @@ -59,8 +59,8 @@ public class BaseDataDevice implements Serializable { @Schema(description = "图标地址") private String icon; - @Schema(description = "图标路径地址") - private String path; + @Schema(description = "图标文件ID") + private String fileId; @Schema(description = "创建时间") private Date createTime; diff --git a/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java index 8dae2f5..47ca606 100644 --- a/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java +++ b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/api/DevFileApi.java @@ -13,6 +13,7 @@ package org.nl.dev.api; import cn.hutool.json.JSONObject; +import org.nl.dev.dto.DevFileApiDto; import org.springframework.web.multipart.MultipartFile; /** @@ -109,7 +110,7 @@ public interface DevFileApi { * @author chengchuanyao * @date 2024/7/26 16:10 */ - JSONObject getFileInfoById(String id); + DevFileApiDto getFileInfoById(Long id); /** * 通过文件地址获取文件信息 diff --git a/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/dto/DevFileApiDto.java b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/dto/DevFileApiDto.java new file mode 100644 index 0000000..cab830f --- /dev/null +++ b/nl-plugin-api/nl-plugin-dev-api/src/main/java/org/nl/dev/dto/DevFileApiDto.java @@ -0,0 +1,56 @@ +package org.nl.dev.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class DevFileApiDto { + + /** id */ + @Schema(description = "id") + private String id; + + /** 存储引擎 */ + @Schema(description = "存储引擎") + private String engine; + + /** 存储桶 */ + @Schema(description = "存储桶") + private String bucket; + + /** 文件名称 */ + @Schema(description = "文件名称") + private String name; + + /** 文件后缀 */ + @Schema(description = "文件后缀") + private String suffix; + + /** 文件大小kb */ + @Schema(description = "文件大小kb") + private String sizeKb; + + /** 文件大小(格式化后) */ + @Schema(description = "文件大小(格式化后)") + private String sizeInfo; + + /** 文件的对象名(唯一名称) */ + @Schema(description = "文件的对象名(唯一名称)") + private String objName; + + /** 文件存储路径 */ + @Schema(description = "文件存储路径") + private String storagePath; + + /** 文件下载路径 */ + @Schema(description = "文件下载路径") + private String downloadPath; + + /** 图片缩略图 */ + @Schema(description = "图片缩略图") + private String thumbnail; + + /** 扩展信息 */ + @Schema(description = "扩展信息") + private String extJson; +} diff --git a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/entity/DevFile.java b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/entity/DevFile.java index 107d085..561bf86 100644 --- a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/entity/DevFile.java +++ b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/entity/DevFile.java @@ -12,6 +12,8 @@ */ package org.nl.dev.modular.file.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; @@ -30,8 +32,8 @@ import org.nl.common.pojo.CommonEntity; public class DevFile extends CommonEntity { /** id */ - @Schema(description = "id") - private String id; + @TableId(type = IdType.AUTO) + private Long id; /** 存储引擎 */ @Schema(description = "存储引擎") diff --git a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/mapper/DevFileMapper.java b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/mapper/DevFileMapper.java index aa13000..53163e4 100644 --- a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/mapper/DevFileMapper.java +++ b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/mapper/DevFileMapper.java @@ -22,4 +22,9 @@ import org.nl.dev.modular.file.entity.DevFile; * @date 2022/2/23 18:40 **/ public interface DevFileMapper extends BaseMapper { + + + @Insert("INSERT INTO local_storage (engine,bucket,name, suffix,sizeKb,sizeInfo,objName, storagePath, downloadPath, thumbnail, extJson) VALUES (#{name}, #{suffix}, #{path}, #{type}, #{size}, #{orderCode}, #{createTime}, #{createName}, #{updateTime})") + @Options(useGeneratedKeys = true, keyProperty = "id") + void insertUseGeneratedKeys(LocalStorage user); } diff --git a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java index ec5f3a2..b13016c 100644 --- a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java +++ b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/provider/DevFileApiProvider.java @@ -16,8 +16,10 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; +import org.nl.dev.dto.DevFileApiDto; import org.nl.dev.modular.file.entity.DevFile; import org.nl.dev.modular.file.enums.DevFileEngineTypeEnum; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import org.nl.dev.api.DevFileApi; @@ -78,10 +80,11 @@ public class DevFileApiProvider implements DevFileApi { } @Override - public JSONObject getFileInfoById(String id) { - return Optional.ofNullable(devFileService.getById(id)) - .map(JSONUtil::parseObj) - .orElse(new JSONObject()); + public DevFileApiDto getFileInfoById(Long id) { + DevFile byId = devFileService.getById(id); + DevFileApiDto dto = new DevFileApiDto(); + BeanUtils.copyProperties(dto,byId); + return dto; } @Override diff --git a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/service/impl/DevFileServiceImpl.java b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/service/impl/DevFileServiceImpl.java index e4f75cd..3074e0b 100644 --- a/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/service/impl/DevFileServiceImpl.java +++ b/nl-plugin/nl-plugin-dev/src/main/java/org/nl/dev/modular/file/service/impl/DevFileServiceImpl.java @@ -141,7 +141,7 @@ public class DevFileServiceImpl extends ServiceImpl impl } // 生成id - String fileId = IdWorker.getIdStr(); + Long fileId = IdWorker.getId(); // 存储桶名称 String bucketName = null; @@ -210,7 +210,7 @@ public class DevFileServiceImpl extends ServiceImpl impl if(ObjectUtil.isEmpty(apiUrl)) { throw new CommonException("后端域名地址未正确配置:snowy.config.common.backend-url为空"); } - downloadUrl= apiUrl + "/dev/file/download?id=" + fileId; + downloadUrl= apiUrl + "/api/localStorage/download?storageId=" + fileId; devFile.setDownloadPath(downloadUrl); } else { // 阿里云、腾讯云、MINIO可以直接使用存储地址(公网)作为下载地址 @@ -233,7 +233,7 @@ public class DevFileServiceImpl extends ServiceImpl impl * @author xuyuxiang * @date 2022/4/22 15:58 **/ - public String genFileKey(String fileId, MultipartFile file) { + public String genFileKey(Long fileId, MultipartFile file) { // 获取文件原始名称 String originalFileName = file.getOriginalFilename(); diff --git a/nl-vue/src/views/nl_agv/layout/map-editor-main.js b/nl-vue/src/views/nl_agv/layout/map-editor-main.js index dedc8d7..0dbf1f1 100644 --- a/nl-vue/src/views/nl_agv/layout/map-editor-main.js +++ b/nl-vue/src/views/nl_agv/layout/map-editor-main.js @@ -325,6 +325,7 @@ function addDeviceFromTemplate(template, x, y) { name: `${template.name}`, type: template.type, icon: template.icon, + path: template.path, x: x, y: y, angle: 0, @@ -364,10 +365,10 @@ function renderDevice(device) { let iconHtml; if (isImageUrl(template.icon)) { - iconHtml = `${device.name}`; } else { iconHtml = `${template.icon || '📍'}`; diff --git a/nl-vue/src/views/nl_base_data/device/form.vue b/nl-vue/src/views/nl_base_data/device/form.vue index 63e83cb..a94c354 100644 --- a/nl-vue/src/views/nl_base_data/device/form.vue +++ b/nl-vue/src/views/nl_base_data/device/form.vue @@ -190,8 +190,8 @@ if (res) { // 保存文件ID到表单数据 const fileId = res.id || res - formData.value.icon = fileId - formData.value.path = res.storagePath + formData.value.fileId = fileId + formData.value.icon = res.storagePath message.success('上传成功') // 加载新上传的图片预览 diff --git a/nl-vue/src/views/nl_base_data/device/index.vue b/nl-vue/src/views/nl_base_data/device/index.vue index a81e80e..fe81bbb 100644 --- a/nl-vue/src/views/nl_base_data/device/index.vue +++ b/nl-vue/src/views/nl_base_data/device/index.vue @@ -48,9 +48,9 @@ -