From f94062a262b22a26717e251f44cb906669acf4da Mon Sep 17 00:00:00 2001 From: aikai Date: Mon, 13 Jan 2025 11:19:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=B0=E5=9B=BE=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/codegen/inner/CodegenEngine.java | 2 +- .../src/main/resources/application-local.yaml | 10 +- .../system/enums/ErrorCodeConstants.java | 6 + .../yudao-module-system-biz/pom.xml | 6 + .../positionmap/PositionMapController.java | 105 +++++++ .../PositionMapItemController.java | 93 ++++++ .../PositionMapLineController.java | 93 ++++++ .../vo/PositionMapItemPageReqVO.java | 37 +++ .../positionmap/vo/PositionMapItemRespVO.java | 43 +++ .../vo/PositionMapItemSaveReqVO.java | 30 ++ .../vo/PositionMapLinePageReqVO.java | 31 ++ .../positionmap/vo/PositionMapLineRespVO.java | 35 +++ .../vo/PositionMapLineSaveReqVO.java | 24 ++ .../positionmap/vo/PositionMapPageReqVO.java | 39 +++ .../positionmap/vo/PositionMapRespVO.java | 43 +++ .../positionmap/vo/PositionMapSaveReqVO.java | 28 ++ .../dataobject/positionmap/PositionMapDO.java | 51 ++++ .../positionmap/PositionMapItemDO.java | 51 ++++ .../positionmap/PositionMapLineDO.java | 43 +++ .../positionmap/PositionMapItemMapper.java | 29 ++ .../positionmap/PositionMapLineMapper.java | 27 ++ .../mysql/positionmap/PositionMapMapper.java | 29 ++ .../positionmap/PositionMapItemService.java | 55 ++++ .../PositionMapItemServiceImpl.java | 58 ++++ .../positionmap/PositionMapLineService.java | 55 ++++ .../PositionMapLineServiceImpl.java | 58 ++++ .../positionmap/PositionMapService.java | 91 ++++++ .../positionmap/PositionMapServiceImpl.java | 287 ++++++++++++++++++ .../src/main/resources/application-local.yaml | 11 +- .../positionmap/PositionMapItemMapper.xml | 12 + .../positionmap/PositionMapLineMapper.xml | 12 + .../mapper/positionmap/PositionMapMapper.xml | 12 + 32 files changed, 1496 insertions(+), 10 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapLineController.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapPageReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapRespVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapSaveReqVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapLineMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapService.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapServiceImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapLineMapper.xml create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index 326a035d8..7d36e8ec7 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -152,7 +152,7 @@ public class CodegenEngine { /** * 是否使用 jakarta 包,用于解决 Spring Boot 2.X 和 3.X 的兼容性问题 * - * true - 使用 jakarta.validation.constraints.* + * true - 使用 javax.validation.constraints.* * false - 使用 javax.validation.constraints.* */ @Setter // 允许设置的原因,是因为单测需要手动改变 diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml index 67b550629..ec209fde2 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml @@ -61,23 +61,23 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://47.97.8.94:3306/zn_wcs?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 username: root - password: 123456 + password: yhtkj@2024! # username: sa # SQL Server 连接的示例 # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 # username: SYSDBA # DM 连接的示例 # password: SYSDBA # DM 连接的示例 slave: # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://47.97.8.94:3306/zn_wcs?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true username: root - password: 123456 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: @@ -156,4 +156,4 @@ yudao: security: mock-enable: true access-log: # 访问日志的配置项 - enable: false \ No newline at end of file + enable: false diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index 9dc4e9681..3cb76b0c4 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -167,4 +167,10 @@ public interface ErrorCodeConstants { ErrorCode INFORMATION_NOT_EXISTS = new ErrorCode(1_002_029_001, "设备信息不存在"); ErrorCode INFORMATION_MAC_EXIST = new ErrorCode(1_002_029_002, "此Mac地址已经存在"); ErrorCode INFORMATION_MAC_INPUT = new ErrorCode(1_002_029_003, "请输入Mac地址"); + + // ========== 地图信息 1-002-030-000 ========== + ErrorCode AGV_UPLOAD_INFORMATION_DOES_NOT_INCLUDE_FLOOR_OR_AREA_INFORMATION = new ErrorCode(1_002_030_001, "AGV上传信息未包含楼层或区域信息"); + ErrorCode AGV_FILE_UPLOAD_CONTENT_IS_EMPTY = new ErrorCode(1_002_030_002, "AGV文件上传内容为空"); + ErrorCode PLEASE_UPLOAD_PNG_AND_YAML_FILES = new ErrorCode(1_002_030_003, "请上传png和yaml两个文件并且文件内容不为空"); + ErrorCode AGV_MAP_NOT_FOUND = new ErrorCode(1_002_030_004, "找不到AGV地图信息"); } diff --git a/yudao-module-system/yudao-module-system-biz/pom.xml b/yudao-module-system/yudao-module-system-biz/pom.xml index c669df152..d1abfbd97 100644 --- a/yudao-module-system/yudao-module-system-biz/pom.xml +++ b/yudao-module-system/yudao-module-system-biz/pom.xml @@ -144,6 +144,12 @@ com.xingyuv spring-boot-starter-captcha-plus + + + org.yaml + snakeyaml + 2.0 + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java new file mode 100644 index 000000000..1ba4f2dee --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapController.java @@ -0,0 +1,105 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapRespVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 仓库点位地图") +@RestController +@RequestMapping("/system/position-map/") +@Validated +public class PositionMapController { + + @Resource + private PositionMapService positionMapService; + + private static final String UPLOAD_DIR = "/Users/aikai/project/"; + + + @PutMapping("/update") + @Operation(summary = "更新仓库点位地图") + @PreAuthorize("@ss.hasPermission('system:position-map:update')") + public CommonResult updatePositionMap(@Valid @RequestBody PositionMapSaveReqVO updateReqVO) { + positionMapService.updatePositionMap(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除仓库点位地图") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:position-map:delete')") + public CommonResult deletePositionMap(@RequestParam("id") Long id) { + positionMapService.deletePositionMap(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得仓库点位地图") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:position-map:query')") + public CommonResult getPositionMap(@RequestParam("id") Long id) { + PositionMapDO positionMap = positionMapService.getPositionMap(id); + return success(BeanUtils.toBean(positionMap, PositionMapRespVO.class)); + } + + @GetMapping("/getMap") + @Operation(summary = "获得仓库点位地图Map") + @PreAuthorize("@ss.hasPermission('system:position-map:query')") + public CommonResult>> getPositionMapList() { + List list = positionMapService.list(); + Map> map = list.stream().collect(Collectors.groupingBy(PositionMapDO::getFloor)); + return success(map); + } + + @PostMapping("/upload") + @Operation(summary = "文件上传") + @PermitAll + public CommonResult uploadFiles(@RequestParam("files") MultipartFile[] files) { + // todo aiKai - 这里需要和设备定义好 楼层和区域到底是通过文件名称给 - 还是通过yml内容中给 目前按照以yml给的来写 + positionMapService.uploadFiles(files); + return CommonResult.success(true); + } + + @GetMapping("/downloadPng") + @Operation(summary = "下载png文件") + @PermitAll + public void downloadPng(@RequestParam Integer floor, @RequestParam String area, HttpServletResponse response) throws IOException { + positionMapService.downloadPng(floor, area, response); + } + + + @GetMapping("/download") + @Operation(summary = "下载文件") + @PermitAll + public void download(@RequestParam Integer floor, @RequestParam String area, HttpServletResponse response) throws IOException { + positionMapService.downloadFile(floor, area, response); + } + + @GetMapping("/agvDownload") + @Operation(summary = "AGV下载文件") + @PermitAll + public void downloadFile(HttpServletResponse response) throws IOException { + positionMapService.downloadFile(response); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java new file mode 100644 index 000000000..6e9ee8190 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapItemController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemRespVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapItemService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 仓库点位地图子表") +@RestController +@RequestMapping("/system/position-map-item") +@Validated +public class PositionMapItemController { + + @Resource + private PositionMapItemService positionMapItemService; + + @PostMapping("/create") + @Operation(summary = "创建仓库点位地图子表") + @PreAuthorize("@ss.hasPermission('system:position-map-item:create')") + public CommonResult createPositionMapItem(@Valid @RequestBody PositionMapItemSaveReqVO createReqVO) { + return success(positionMapItemService.createPositionMapItem(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新仓库点位地图子表") + @PreAuthorize("@ss.hasPermission('system:position-map-item:update')") + public CommonResult updatePositionMapItem(@Valid @RequestBody PositionMapItemSaveReqVO updateReqVO) { + positionMapItemService.updatePositionMapItem(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除仓库点位地图子表") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:position-map-item:delete')") + public CommonResult deletePositionMapItem(@RequestParam("id") Long id) { + positionMapItemService.deletePositionMapItem(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得仓库点位地图子表") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:position-map-item:query')") + public CommonResult getPositionMapItem(@RequestParam("id") Long id) { + PositionMapItemDO positionMapItem = positionMapItemService.getPositionMapItem(id); + return success(BeanUtils.toBean(positionMapItem, PositionMapItemRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得仓库点位地图子表分页") + @PreAuthorize("@ss.hasPermission('system:position-map-item:query')") + public CommonResult> getPositionMapItemPage(@Valid PositionMapItemPageReqVO pageReqVO) { + PageResult pageResult = positionMapItemService.getPositionMapItemPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PositionMapItemRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出仓库点位地图子表 Excel") + @PreAuthorize("@ss.hasPermission('system:position-map-item:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPositionMapItemExcel(@Valid PositionMapItemPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = positionMapItemService.getPositionMapItemPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "仓库点位地图子表.xls", "数据", PositionMapItemRespVO.class, + BeanUtils.toBean(list, PositionMapItemRespVO.class)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapLineController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapLineController.java new file mode 100644 index 000000000..f165b4086 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/PositionMapLineController.java @@ -0,0 +1,93 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineRespVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; +import cn.iocoder.yudao.module.system.service.positionmap.PositionMapLineService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 仓库点位地图连线") +@RestController +@RequestMapping("/system/position-map-line") +@Validated +public class PositionMapLineController { + + @Resource + private PositionMapLineService positionMapLineService; + + @PostMapping("/create") + @Operation(summary = "创建仓库点位地图连线") + @PreAuthorize("@ss.hasPermission('system:position-map-line:create')") + public CommonResult createPositionMapLine(@Valid @RequestBody PositionMapLineSaveReqVO createReqVO) { + return success(positionMapLineService.createPositionMapLine(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新仓库点位地图连线") + @PreAuthorize("@ss.hasPermission('system:position-map-line:update')") + public CommonResult updatePositionMapLine(@Valid @RequestBody PositionMapLineSaveReqVO updateReqVO) { + positionMapLineService.updatePositionMapLine(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除仓库点位地图连线") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:position-map-line:delete')") + public CommonResult deletePositionMapLine(@RequestParam("id") Long id) { + positionMapLineService.deletePositionMapLine(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得仓库点位地图连线") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:position-map-line:query')") + public CommonResult getPositionMapLine(@RequestParam("id") Long id) { + PositionMapLineDO positionMapLine = positionMapLineService.getPositionMapLine(id); + return success(BeanUtils.toBean(positionMapLine, PositionMapLineRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得仓库点位地图连线分页") + @PreAuthorize("@ss.hasPermission('system:position-map-line:query')") + public CommonResult> getPositionMapLinePage(@Valid PositionMapLinePageReqVO pageReqVO) { + PageResult pageResult = positionMapLineService.getPositionMapLinePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PositionMapLineRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出仓库点位地图连线 Excel") + @PreAuthorize("@ss.hasPermission('system:position-map-line:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPositionMapLineExcel(@Valid PositionMapLinePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = positionMapLineService.getPositionMapLinePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "仓库点位地图连线.xls", "数据", PositionMapLineRespVO.class, + BeanUtils.toBean(list, PositionMapLineRespVO.class)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java new file mode 100644 index 000000000..3f97fb39e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 仓库点位地图子表分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PositionMapItemPageReqVO extends PageParam { + + @Schema(description = "仓库点位地图表id", example = "30963") + private Long positionMapId; + + @Schema(description = "坐标x轴") + private String locationX; + + @Schema(description = "坐标y轴") + private String locationY; + + @Schema(description = "类型 1.行走点位 2.库位 3.充电桩 --- 后续补充", example = "1") + private Integer type; + + @Schema(description = "类型所对应表id", example = "15418") + private Long objectId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java new file mode 100644 index 000000000..e54a3c537 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 仓库点位地图子表 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PositionMapItemRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31007") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "仓库点位地图表id", example = "30963") + @ExcelProperty("仓库点位地图表id") + private Long positionMapId; + + @Schema(description = "坐标x轴") + @ExcelProperty("坐标x轴") + private String locationX; + + @Schema(description = "坐标y轴") + @ExcelProperty("坐标y轴") + private String locationY; + + @Schema(description = "类型 1.行走点位 2.库位 3.充电桩 --- 后续补充", example = "1") + @ExcelProperty("类型 1.行走点位 2.库位 3.充电桩 --- 后续补充") + private Integer type; + + @Schema(description = "类型所对应表id", example = "15418") + @ExcelProperty("类型所对应表id") + private Long objectId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java new file mode 100644 index 000000000..9fbfcb635 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapItemSaveReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 仓库点位地图子表新增/修改 Request VO") +@Data +public class PositionMapItemSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31007") + private Long id; + + @Schema(description = "仓库点位地图表id", example = "30963") + private Long positionMapId; + + @Schema(description = "坐标x轴") + private String locationX; + + @Schema(description = "坐标y轴") + private String locationY; + + @Schema(description = "类型 1.行走点位 2.库位 3.充电桩 --- 后续补充", example = "1") + private Integer type; + + @Schema(description = "类型所对应表id", example = "15418") + private Long objectId; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java new file mode 100644 index 000000000..90734b34a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLinePageReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 仓库点位地图连线分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PositionMapLinePageReqVO extends PageParam { + + @Schema(description = "出发点id(点位子表id)", example = "20863") + private Long startingPointId; + + @Schema(description = "结束点id(点位子表id)", example = "15890") + private Long endPointId; + + @Schema(description = "行走方法 1.直线 2曲线") + private Integer method; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java new file mode 100644 index 000000000..15463c1ec --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineRespVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 仓库点位地图连线 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PositionMapLineRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28062") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "出发点id(点位子表id)", example = "20863") + @ExcelProperty("出发点id(点位子表id)") + private Long startingPointId; + + @Schema(description = "结束点id(点位子表id)", example = "15890") + @ExcelProperty("结束点id(点位子表id)") + private Long endPointId; + + @Schema(description = "行走方法 1.直线 2曲线") + @ExcelProperty("行走方法 1.直线 2曲线") + private Integer method; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java new file mode 100644 index 000000000..848b4f3a8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapLineSaveReqVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 仓库点位地图连线新增/修改 Request VO") +@Data +public class PositionMapLineSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28062") + private Long id; + + @Schema(description = "出发点id(点位子表id)", example = "20863") + private Long startingPointId; + + @Schema(description = "结束点id(点位子表id)", example = "15890") + private Long endPointId; + + @Schema(description = "行走方法 1.直线 2曲线") + private Integer method; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapPageReqVO.java new file mode 100644 index 000000000..3a02e71a1 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapPageReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 仓库点位地图分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PositionMapPageReqVO extends PageParam { + + @Schema(description = "楼层") + private Integer floor; + + @Schema(description = "区域") + private String area; + + @Schema(description = "AGV地图ymlJson信息") + private String yamlJson; + + @Schema(description = "AGV地图图片路径") + private String pngUrl; + + @Schema(description = "AGV地图yaml路径") + private String yamlUrl; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapRespVO.java new file mode 100644 index 000000000..1c40b6f54 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 仓库点位地图 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PositionMapRespVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2349") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "楼层") + @ExcelProperty("楼层") + private Integer floor; + + @Schema(description = "区域") + @ExcelProperty("区域") + private String area; + + @Schema(description = "AGV地图ymlJson信息") + @ExcelProperty("AGV地图ymlJson信息") + private String yamlJson; + + @Schema(description = "AGV地图图片路径") + @ExcelProperty("AGV地图图片路径") + private String pngUrl; + + @Schema(description = "AGV地图yaml路径") + @ExcelProperty("AGV地图yaml路径") + private String yamlUrl; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapSaveReqVO.java new file mode 100644 index 000000000..426999d27 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/positionmap/vo/PositionMapSaveReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.positionmap.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 仓库点位地图新增/修改 Request VO") +@Data +public class PositionMapSaveReqVO { + + @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2349") + private Long id; + + @Schema(description = "楼层") + private Integer floor; + + @Schema(description = "区域") + private String area; + + @Schema(description = "AGV地图ymlJson信息") + private String yamlJson; + + @Schema(description = "AGV地图图片路径") + private String pngUrl; + + @Schema(description = "AGV地图yaml路径") + private String yamlUrl; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java new file mode 100644 index 000000000..92fffce8e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapDO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 仓库点位地图 DO + * + * @author 芋道源码 + */ +@TableName("ware_position_map") +@KeySequence("ware_position_map_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PositionMapDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 楼层 + */ + private Integer floor; + /** + * 区域 + */ + private String area; + /** + * AGV地图ymlJson信息 + */ + private String yamlJson; + /** + * AGV地图图片路径 + */ + private String pngUrl; + /** + * AGV地图yaml路径 + */ + private String yamlUrl; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java new file mode 100644 index 000000000..ab5ff673a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapItemDO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 仓库点位地图子表 DO + * + * @author 芋道源码 + */ +@TableName("ware_position_map_item") +@KeySequence("ware_position_map_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PositionMapItemDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 仓库点位地图表id + */ + private Long positionMapId; + /** + * 坐标x轴 + */ + private String locationX; + /** + * 坐标y轴 + */ + private String locationY; + /** + * 类型 1.行走点位 2.库位 3.充电桩 --- 后续补充 + */ + private Integer type; + /** + * 类型所对应表id + */ + private Long objectId; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java new file mode 100644 index 000000000..2f25ca769 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/positionmap/PositionMapLineDO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.positionmap; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 仓库点位地图连线 DO + * + * @author 芋道源码 + */ +@TableName("ware_position_map_line") +@KeySequence("ware_position_map_line_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PositionMapLineDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 出发点id(点位子表id) + */ + private Long startingPointId; + /** + * 结束点id(点位子表id) + */ + private Long endPointId; + /** + * 行走方法 1.直线 2曲线 + */ + private Integer method; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java new file mode 100644 index 000000000..6ad0fe86e --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapItemMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.system.dal.mysql.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 仓库点位地图子表 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface PositionMapItemMapper extends BaseMapperX { + + default PageResult selectPage(PositionMapItemPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PositionMapItemDO::getPositionMapId, reqVO.getPositionMapId()) + .eqIfPresent(PositionMapItemDO::getLocationX, reqVO.getLocationX()) + .eqIfPresent(PositionMapItemDO::getLocationY, reqVO.getLocationY()) + .eqIfPresent(PositionMapItemDO::getType, reqVO.getType()) + .eqIfPresent(PositionMapItemDO::getObjectId, reqVO.getObjectId()) + .betweenIfPresent(PositionMapItemDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PositionMapItemDO::getId)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapLineMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapLineMapper.java new file mode 100644 index 000000000..fbbdfbf93 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapLineMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.system.dal.mysql.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 仓库点位地图连线 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface PositionMapLineMapper extends BaseMapperX { + + default PageResult selectPage(PositionMapLinePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PositionMapLineDO::getStartingPointId, reqVO.getStartingPointId()) + .eqIfPresent(PositionMapLineDO::getEndPointId, reqVO.getEndPointId()) + .eqIfPresent(PositionMapLineDO::getMethod, reqVO.getMethod()) + .betweenIfPresent(PositionMapLineDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PositionMapLineDO::getId)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java new file mode 100644 index 000000000..eb7199849 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/positionmap/PositionMapMapper.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.system.dal.mysql.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapPageReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 仓库点位地图 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface PositionMapMapper extends BaseMapperX { + + default PageResult selectPage(PositionMapPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PositionMapDO::getFloor, reqVO.getFloor()) + .eqIfPresent(PositionMapDO::getArea, reqVO.getArea()) + .eqIfPresent(PositionMapDO::getYamlJson, reqVO.getYamlJson()) + .eqIfPresent(PositionMapDO::getYamlUrl, reqVO.getYamlUrl()) + .eqIfPresent(PositionMapDO::getPngUrl, reqVO.getPngUrl()) + .betweenIfPresent(PositionMapDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PositionMapDO::getId)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java new file mode 100644 index 000000000..8b717f66d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; + +import javax.validation.Valid; + +/** + * 仓库点位地图子表 Service 接口 + * + * @author 芋道源码 + */ +public interface PositionMapItemService { + + /** + * 创建仓库点位地图子表 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPositionMapItem(@Valid PositionMapItemSaveReqVO createReqVO); + + /** + * 更新仓库点位地图子表 + * + * @param updateReqVO 更新信息 + */ + void updatePositionMapItem(@Valid PositionMapItemSaveReqVO updateReqVO); + + /** + * 删除仓库点位地图子表 + * + * @param id 编号 + */ + void deletePositionMapItem(Long id); + + /** + * 获得仓库点位地图子表 + * + * @param id 编号 + * @return 仓库点位地图子表 + */ + PositionMapItemDO getPositionMapItem(Long id); + + /** + * 获得仓库点位地图子表分页 + * + * @param pageReqVO 分页查询 + * @return 仓库点位地图子表分页 + */ + PageResult getPositionMapItemPage(PositionMapItemPageReqVO pageReqVO); + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java new file mode 100644 index 000000000..51a0552a6 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapItemServiceImpl.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapItemSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapItemDO; +import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapItemMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 仓库点位地图子表 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class PositionMapItemServiceImpl implements PositionMapItemService { + + @Resource + private PositionMapItemMapper positionMapItemMapper; + + @Override + public Long createPositionMapItem(PositionMapItemSaveReqVO createReqVO) { + // 插入 + PositionMapItemDO positionMapItem = BeanUtils.toBean(createReqVO, PositionMapItemDO.class); + positionMapItemMapper.insert(positionMapItem); + // 返回 + return positionMapItem.getId(); + } + + @Override + public void updatePositionMapItem(PositionMapItemSaveReqVO updateReqVO) { + // 更新 + PositionMapItemDO updateObj = BeanUtils.toBean(updateReqVO, PositionMapItemDO.class); + positionMapItemMapper.updateById(updateObj); + } + + @Override + public void deletePositionMapItem(Long id) { + // 删除 + positionMapItemMapper.deleteById(id); + } + + @Override + public PositionMapItemDO getPositionMapItem(Long id) { + return positionMapItemMapper.selectById(id); + } + + @Override + public PageResult getPositionMapItemPage(PositionMapItemPageReqVO pageReqVO) { + return positionMapItemMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineService.java new file mode 100644 index 000000000..d0fd34e9f --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; + +import javax.validation.Valid; + +/** + * 仓库点位地图连线 Service 接口 + * + * @author 芋道源码 + */ +public interface PositionMapLineService { + + /** + * 创建仓库点位地图连线 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPositionMapLine(@Valid PositionMapLineSaveReqVO createReqVO); + + /** + * 更新仓库点位地图连线 + * + * @param updateReqVO 更新信息 + */ + void updatePositionMapLine(@Valid PositionMapLineSaveReqVO updateReqVO); + + /** + * 删除仓库点位地图连线 + * + * @param id 编号 + */ + void deletePositionMapLine(Long id); + + /** + * 获得仓库点位地图连线 + * + * @param id 编号 + * @return 仓库点位地图连线 + */ + PositionMapLineDO getPositionMapLine(Long id); + + /** + * 获得仓库点位地图连线分页 + * + * @param pageReqVO 分页查询 + * @return 仓库点位地图连线分页 + */ + PageResult getPositionMapLinePage(PositionMapLinePageReqVO pageReqVO); + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java new file mode 100644 index 000000000..1dccf0651 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapLineServiceImpl.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLinePageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapLineSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapLineDO; +import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapLineMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +/** + * 仓库点位地图连线 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class PositionMapLineServiceImpl implements PositionMapLineService { + + @Resource + private PositionMapLineMapper positionMapLineMapper; + + @Override + public Long createPositionMapLine(PositionMapLineSaveReqVO createReqVO) { + // 插入 + PositionMapLineDO positionMapLine = BeanUtils.toBean(createReqVO, PositionMapLineDO.class); + positionMapLineMapper.insert(positionMapLine); + // 返回 + return positionMapLine.getId(); + } + + @Override + public void updatePositionMapLine(PositionMapLineSaveReqVO updateReqVO) { + // 更新 + PositionMapLineDO updateObj = BeanUtils.toBean(updateReqVO, PositionMapLineDO.class); + positionMapLineMapper.updateById(updateObj); + } + + @Override + public void deletePositionMapLine(Long id) { + // 删除 + positionMapLineMapper.deleteById(id); + } + + @Override + public PositionMapLineDO getPositionMapLine(Long id) { + return positionMapLineMapper.selectById(id); + } + + @Override + public PageResult getPositionMapLinePage(PositionMapLinePageReqVO pageReqVO) { + return positionMapLineMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapService.java new file mode 100644 index 000000000..afd58867d --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapService.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; + +/** + * 仓库点位地图 Service 接口 + * + * @author 芋道源码 + */ +public interface PositionMapService extends IService { + + /** + * 创建仓库点位地图 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createPositionMap(@Valid PositionMapSaveReqVO createReqVO); + + /** + * 更新仓库点位地图 + * + * @param updateReqVO 更新信息 + */ + void updatePositionMap(@Valid PositionMapSaveReqVO updateReqVO); + + /** + * 删除仓库点位地图 + * + * @param id 编号 + */ + void deletePositionMap(Long id); + + /** + * 获得仓库点位地图 + * + * @param id 编号 + * @return 仓库点位地图 + */ + PositionMapDO getPositionMap(Long id); + + /** + * 获得仓库点位地图分页 + * + * @param pageReqVO 分页查询 + * @return 仓库点位地图分页 + */ + PageResult getPositionMapPage(PositionMapPageReqVO pageReqVO); + + /** + * AGV文件上传 + * + * @param files + */ + void uploadFiles(MultipartFile[] files); + + /** + * 文件下载 - 指定地图文件 + * + * @param floor + * @param area + * @param response + */ + void downloadFile(Integer floor, String area, HttpServletResponse response) throws IOException; + + /** + * AGV文件下载 - 所有地图文件 + * + * @param response + * @throws IOException + */ + void downloadFile(HttpServletResponse response) throws IOException; + + /** + * 前端下载图片信息 + * + * @param floor + * @param area + * @param response + */ + void downloadPng(Integer floor, String area, HttpServletResponse response) throws IOException; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapServiceImpl.java new file mode 100644 index 000000000..8913fd8ce --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/positionmap/PositionMapServiceImpl.java @@ -0,0 +1,287 @@ +package cn.iocoder.yudao.module.system.service.positionmap; + +import cn.hutool.core.util.ObjUtil; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.positionmap.vo.PositionMapSaveReqVO; +import cn.iocoder.yudao.module.system.dal.dataobject.positionmap.PositionMapDO; +import cn.iocoder.yudao.module.system.dal.mysql.positionmap.PositionMapMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; +import org.yaml.snakeyaml.Yaml; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; + +/** + * 仓库点位地图 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class PositionMapServiceImpl extends ServiceImpl implements PositionMapService { + + @Autowired + private PositionMapMapper positionMapMapper; + @Value("${map.file.upload-path}") + private String UPLOAD_DIR; + + @Override + public Long createPositionMap(PositionMapSaveReqVO createReqVO) { + // 插入 + PositionMapDO positionMap = BeanUtils.toBean(createReqVO, PositionMapDO.class); + positionMapMapper.insert(positionMap); + // 返回 + return positionMap.getId(); + } + + @Override + public void updatePositionMap(PositionMapSaveReqVO updateReqVO) { + // 更新 + PositionMapDO updateObj = BeanUtils.toBean(updateReqVO, PositionMapDO.class); + positionMapMapper.updateById(updateObj); + } + + @Override + public void deletePositionMap(Long id) { + // 删除 + positionMapMapper.deleteById(id); + } + + + @Override + public PositionMapDO getPositionMap(Long id) { + return positionMapMapper.selectById(id); + } + + @Override + public PageResult getPositionMapPage(PositionMapPageReqVO pageReqVO) { + return positionMapMapper.selectPage(pageReqVO); + } + + @Override + public void uploadFiles(MultipartFile[] files) { + if (files == null || files.length < 2) { + throw exception(PLEASE_UPLOAD_PNG_AND_YAML_FILES); + } + MultipartFile yamlFile = null; + MultipartFile pngFile = null; + // 分类文件 + for (MultipartFile file : files) { + if (Objects.requireNonNull(file.getOriginalFilename()).toLowerCase().endsWith(".yaml")) { + yamlFile = file; + } else if (Objects.requireNonNull(file.getOriginalFilename()).toLowerCase().endsWith(".png")) { + pngFile = file; + } + } + if (yamlFile == null || pngFile == null || yamlFile.isEmpty() || pngFile.isEmpty()) { + throw exception(PLEASE_UPLOAD_PNG_AND_YAML_FILES); + } + // 处理 YAML 文件 - 返回yaml中存储的楼层信息 作为png文件存储的目录 + String url = null; + String yamlJson = null; + String yamlUrl = null; + String pngUrl = null; + Integer floorInt = null; + String areaStr = null; + try { + // Get the file and save it somewhere + byte[] bytes = yamlFile.getBytes(); + // Parse the YAML file + Yaml yaml = new Yaml(); + Map data = yaml.load(new String(bytes)); + Object floor = data.get("floor"); + Object area = data.get("area"); + // -- 根据楼和区域查询是否有存在地图信息 - 如果有存在则替换 - 并且通知所有该楼该区域的AGV + if (ObjUtil.isEmpty(floor) || ObjUtil.isEmpty(area)) { + throw exception(AGV_UPLOAD_INFORMATION_DOES_NOT_INCLUDE_FLOOR_OR_AREA_INFORMATION); + } + floorInt = Integer.parseInt(Objects.requireNonNull(floor).toString()); + areaStr = Objects.requireNonNull(area).toString(); + url = UPLOAD_DIR + floor + "/" + area + "/"; + // 判断目录是否存在 - 如果不存在则创建目录 + File directory = new File(url); + if (!directory.exists()) { + directory.mkdirs(); + } + yamlUrl = url + yamlFile.getOriginalFilename(); + Path path = Paths.get(yamlUrl); + Files.write(path, bytes); + // Convert the YAML data to JSON + ObjectMapper objectMapper = new ObjectMapper(); + yamlJson = objectMapper.writeValueAsString(data); + } catch (IOException e) { + e.printStackTrace(); + log.error("Failed to upload '{}'", e); + return; + } + + // 处理 PNG 文件 + try { + pngUrl = url + pngFile.getOriginalFilename(); + byte[] bytes = pngFile.getBytes(); + Path path = Paths.get(pngUrl); + Files.write(path, bytes); + } catch (IOException e) { + e.printStackTrace(); + return; + } + PositionMapDO positionMap = positionMapMapper.selectOne(new LambdaQueryWrapperX() + .eq(PositionMapDO::getFloor, floorInt) + .eq(PositionMapDO::getArea, areaStr)); + if (positionMap != null) { + positionMapMapper.updateById(positionMap.setYamlJson(yamlJson).setPngUrl(pngUrl).setYamlUrl(yamlUrl)); + + // todo 异步通知所有该楼层区域内所有AGV车地图有更改 - 这个时候AGV应当重新获取地图信息 + } else { + positionMap = new PositionMapDO().setFloor(floorInt).setArea(areaStr) + .setYamlJson(yamlJson).setPngUrl(pngUrl).setYamlUrl(yamlUrl); + positionMapMapper.insert(positionMap); + } + } + + @Override + public void downloadFile(Integer floor, String area, HttpServletResponse response) throws IOException { + PositionMapDO positionMapDO = positionMapMapper.selectOne(new LambdaQueryWrapperX() + .eq(PositionMapDO::getFloor, floor) + .eq(PositionMapDO::getArea, area)); + if (positionMapDO == null) { + throw exception(AGV_MAP_NOT_FOUND); + } + + // 假设文件存储路径,根据实际情况修改 + String basePath = UPLOAD_DIR + floor + "/" + area + "/"; + List filesToZip = findFilesByFloorAndArea(basePath); + + if (filesToZip.isEmpty()) { + response.sendError(HttpStatus.NOT_FOUND.value(), "No files found for the given floor and area."); + return; + } + + response.setContentType("application/zip"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"files.zip\""); + + try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { + for (File file : filesToZip) { + ZipEntry zipEntry = new ZipEntry(file.getName()); + zipOut.putNextEntry(zipEntry); + try (FileInputStream fileIn = new FileInputStream(file)) { + IOUtils.copy(fileIn, zipOut); + } + zipOut.closeEntry(); + } + } + } + + private List findFilesByFloorAndArea(String basePath) { + List foundFiles = new ArrayList<>(); + File directory = new File(basePath); + if (directory.exists() && directory.isDirectory()) { + File[] files = directory.listFiles(); + if (files != null) { + foundFiles.addAll(Arrays.asList(files)); + } + } + return foundFiles; + } + + + @Override + public void downloadFile(HttpServletResponse response) throws IOException { + // 指定要压缩的文件夹路径 + Path folderPath = Paths.get(UPLOAD_DIR); + + if (!Files.exists(folderPath) || !Files.isDirectory(folderPath)) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, "Folder not found"); + return; + } + + // 设置响应头 + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=project.zip"); + + // 压缩文件夹并写入响应体 + try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { + addFolderToZip(folderPath.toFile(), folderPath.toString(), zipOut); + } + } + + + private void addFolderToZip(File folder, String baseFolder, ZipOutputStream zipOut) throws IOException { + File[] files = folder.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + addFolderToZip(file, baseFolder, zipOut); + continue; + } + FileInputStream fis = new FileInputStream(file); + ZipEntry zipEntry = new ZipEntry(file.getAbsolutePath().substring(baseFolder.length() + 1)); + zipOut.putNextEntry(zipEntry); + + byte[] bytes = new byte[1024]; + int length; + while ((length = fis.read(bytes)) >= 0) { + zipOut.write(bytes, 0, length); + } + fis.close(); + } + } + } + + + @Override + public void downloadPng(Integer floor, String area, HttpServletResponse response) throws IOException { + // 根据楼层和区域查找对应的PNG文件路径 + String basePath = UPLOAD_DIR + floor + "/" + area + "/"; + File directory = new File(basePath); + if (!directory.exists() || !directory.isDirectory()) { + response.sendError(HttpStatus.NOT_FOUND.value(), "Directory not found for the given floor and area."); + return; + } + + // 查找PNG文件 + File pngFile = null; + File[] files = directory.listFiles((dir, name) -> name.toLowerCase().endsWith(".png")); + if (files != null && files.length > 0) { + pngFile = files[0]; // 假设每个目录下只有一个PNG文件 + } + + if (pngFile == null || !pngFile.exists()) { + response.sendError(HttpStatus.NOT_FOUND.value(), "PNG file not found for the given floor and area."); + return; + } + + // 设置响应头以指示浏览器下载文件 + response.setContentType("image/png"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + pngFile.getName() + "\""); + + // 将PNG文件写入HTTP响应输出流 + try (FileInputStream fis = new FileInputStream(pngFile)) { + IOUtils.copy(fis, response.getOutputStream()); + } + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index c3fce158b..94b39da70 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -57,23 +57,23 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://47.97.8.94:3306/zn_wcs?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 username: root - password: 123456 + password: yhtkj@2024! # username: sa # SQL Server 连接的示例 # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 # username: SYSDBA # DM 连接的示例 # password: SYSDBA # DM 连接的示例 slave: # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://47.97.8.94:3306/zn_wcs?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true username: root - password: 123456 + password: yhtkj@2024! # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: @@ -212,3 +212,6 @@ justauth: type: REDIS prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 +map: + file: + upload-path: /Users/aikai/Documents/map/ # 地图文件上传路径 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml new file mode 100644 index 000000000..69c35091b --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapItemMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapLineMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapLineMapper.xml new file mode 100644 index 000000000..3f42eda43 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapLineMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml new file mode 100644 index 000000000..f8b51f2c5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/positionmap/PositionMapMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file