From 4a2e0c37f3c166850298af750f1ef05a212b64d6 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Tue, 14 Oct 2025 16:59:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(ems):=20=E6=B7=BB=E5=8A=A0=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E5=9D=90=E6=A0=87=E5=AD=97=E6=AE=B5=E5=8F=8A=E5=8C=BA?= =?UTF-8?q?=E5=9F=9F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -树设备挂载 在 EmsLocation 实体及其相关 BO、VO 中新增 x、y 坐标字段 - 更新 Mapper XML 配置以支持新字段映射 - 新增 LocationTreeNodeVo 类用于表示区域树节点结构 - 在 EmsLocationController 中增加 /treeWithDevices 接口 - 在 EmsLocationServiceImpl 中实现 treeWithDevices 方法, 构建带路径的区域树并在叶子节点挂载设备信息 - 注入 IEmsAlarmDeviceService 服务以查询设备数据 - 修改生产环境数据库端口号与密码配置 --- .../src/main/resources/application-prod.yml | 4 +- .../ems/controller/EmsLocationController.java | 10 +++ .../java/com/klp/ems/domain/EmsLocation.java | 3 + .../com/klp/ems/domain/bo/EmsLocationBo.java | 3 + .../com/klp/ems/domain/vo/EmsLocationVo.java | 11 ++++ .../klp/ems/domain/vo/LocationTreeNodeVo.java | 17 +++++ .../klp/ems/service/IEmsLocationService.java | 6 ++ .../service/impl/EmsLocationServiceImpl.java | 65 +++++++++++++++++++ .../resources/mapper/EmsLocationMapper.xml | 2 + 9 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 klp-ems/src/main/java/com/klp/ems/domain/vo/LocationTreeNodeVo.java diff --git a/klp-admin/src/main/resources/application-prod.yml b/klp-admin/src/main/resources/application-prod.yml index 4f75fe79..5252a979 100644 --- a/klp-admin/src/main/resources/application-prod.yml +++ b/klp-admin/src/main/resources/application-prod.yml @@ -58,9 +58,9 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://140.143.206.120:3306/klp-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + url: jdbc:mysql://140.143.206.120:13306/klp-oa?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: klp - password: KeLunPu123@ + password: KeLunPu@123 # 从库数据源 slave: lazy: true diff --git a/klp-ems/src/main/java/com/klp/ems/controller/EmsLocationController.java b/klp-ems/src/main/java/com/klp/ems/controller/EmsLocationController.java index 22e053f3..7abfba43 100644 --- a/klp-ems/src/main/java/com/klp/ems/controller/EmsLocationController.java +++ b/klp-ems/src/main/java/com/klp/ems/controller/EmsLocationController.java @@ -3,6 +3,7 @@ package com.klp.ems.controller; import java.util.List; import java.util.Arrays; + import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -20,6 +21,7 @@ import com.klp.common.utils.poi.ExcelUtil; import com.klp.ems.domain.vo.EmsLocationVo; import com.klp.ems.domain.bo.EmsLocationBo; import com.klp.ems.service.IEmsLocationService; +import com.klp.ems.domain.vo.LocationTreeNodeVo; /** * 位置 @@ -96,4 +98,12 @@ public class EmsLocationController extends BaseController { @PathVariable Long[] locationIds) { return toAjax(iEmsLocationService.deleteWithValidByIds(Arrays.asList(locationIds), true)); } + + /** + * 查询全量区域树,并在叶子节点挂载设备 + */ + @GetMapping("/treeWithDevices") + public R> treeWithDevices() { + return R.ok(iEmsLocationService.treeWithDevices()); + } } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/EmsLocation.java b/klp-ems/src/main/java/com/klp/ems/domain/EmsLocation.java index f5269362..04d2f04a 100644 --- a/klp-ems/src/main/java/com/klp/ems/domain/EmsLocation.java +++ b/klp-ems/src/main/java/com/klp/ems/domain/EmsLocation.java @@ -50,4 +50,7 @@ public class EmsLocation extends BaseEntity { */ private String remark; + private Integer x; + private Integer y; + } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsLocationBo.java b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsLocationBo.java index 9d682c51..69098c3a 100644 --- a/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsLocationBo.java +++ b/klp-ems/src/main/java/com/klp/ems/domain/bo/EmsLocationBo.java @@ -47,5 +47,8 @@ public class EmsLocationBo extends BaseEntity { */ private String remark; + private Integer x; + private Integer y; + } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsLocationVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsLocationVo.java index de1a490d..1ef2bfdd 100644 --- a/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsLocationVo.java +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/EmsLocationVo.java @@ -55,5 +55,16 @@ public class EmsLocationVo { @ExcelProperty(value = "备注") private String remark; + /** + * 坐标X + */ + @ExcelProperty(value = "坐标X") + private Integer x; + /** + * 坐标Y + */ + @ExcelProperty(value = "坐标Y") + private Integer y; + } diff --git a/klp-ems/src/main/java/com/klp/ems/domain/vo/LocationTreeNodeVo.java b/klp-ems/src/main/java/com/klp/ems/domain/vo/LocationTreeNodeVo.java new file mode 100644 index 00000000..8dbea09a --- /dev/null +++ b/klp-ems/src/main/java/com/klp/ems/domain/vo/LocationTreeNodeVo.java @@ -0,0 +1,17 @@ +package com.klp.ems.domain.vo; + +import lombok.Data; +import java.util.List; + +/** + * 区域树节点(包含路径与叶子设备) + */ +@Data +public class LocationTreeNodeVo { + private Long locationId; + private String name; + private Long parentId; + private String path; + private List children; + private List devices; +} \ No newline at end of file diff --git a/klp-ems/src/main/java/com/klp/ems/service/IEmsLocationService.java b/klp-ems/src/main/java/com/klp/ems/service/IEmsLocationService.java index b86cb9ba..8ee4f745 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/IEmsLocationService.java +++ b/klp-ems/src/main/java/com/klp/ems/service/IEmsLocationService.java @@ -3,6 +3,7 @@ package com.klp.ems.service; import com.klp.ems.domain.EmsLocation; import com.klp.ems.domain.vo.EmsLocationVo; import com.klp.ems.domain.bo.EmsLocationBo; +import com.klp.ems.domain.vo.LocationTreeNodeVo; import java.util.Collection; import java.util.List; @@ -40,4 +41,9 @@ public interface IEmsLocationService { * 校验并批量删除位置信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 查询全量区域树(包含路径),仅在叶子节点挂载设备列表 + */ + List treeWithDevices(); } diff --git a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsLocationServiceImpl.java b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsLocationServiceImpl.java index ca0bbd66..81098d64 100644 --- a/klp-ems/src/main/java/com/klp/ems/service/impl/EmsLocationServiceImpl.java +++ b/klp-ems/src/main/java/com/klp/ems/service/impl/EmsLocationServiceImpl.java @@ -11,10 +11,17 @@ import com.klp.ems.domain.vo.EmsLocationVo; import com.klp.ems.domain.EmsLocation; import com.klp.ems.mapper.EmsLocationMapper; import com.klp.ems.service.IEmsLocationService; +import com.klp.ems.service.IEmsAlarmDeviceService; +import com.klp.ems.domain.vo.EmsAlarmDeviceVo; +import com.klp.ems.domain.bo.EmsAlarmDeviceBo; +import com.klp.ems.domain.vo.LocationTreeNodeVo; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.stream.Collectors; /** * 位置Service业务层处理 @@ -27,6 +34,7 @@ import java.util.Collection; public class EmsLocationServiceImpl implements IEmsLocationService { private final EmsLocationMapper baseMapper; + private final IEmsAlarmDeviceService alarmDeviceService; /** * 查询位置 @@ -53,6 +61,8 @@ public class EmsLocationServiceImpl implements IEmsLocationService { lqw.eq(bo.getParentId() != null, EmsLocation::getParentId, bo.getParentId()); lqw.eq(StringUtils.isNotBlank(bo.getDescription()), EmsLocation::getDescription, bo.getDescription()); lqw.eq(StringUtils.isNotBlank(bo.getAddress()), EmsLocation::getAddress, bo.getAddress()); + lqw.eq(bo.getX() != null, EmsLocation::getX, bo.getX()); + lqw.eq(bo.getY() != null, EmsLocation::getY, bo.getY()); return lqw; } @@ -97,4 +107,59 @@ public class EmsLocationServiceImpl implements IEmsLocationService { } return baseMapper.deleteBatchIds(ids) > 0; } + + /** + * 查询全量区域树(包含路径),仅在叶子节点挂载设备列表 + */ + @Override + public List treeWithDevices() { + // 查询全部位置 + List all = baseMapper.selectVoList(Wrappers.lambdaQuery()); + if (all == null || all.isEmpty()) { + return new ArrayList<>(); + } + // 映射与根节点 + Map> parent2children = new HashMap<>(); + List roots = new ArrayList<>(); + for (EmsLocationVo vo : all) { + Long pid = vo.getParentId(); + if (pid == null) { + roots.add(vo); + } else { + parent2children.computeIfAbsent(pid, k -> new ArrayList<>()).add(vo); + } + } + // 递归构建 + return roots.stream() + .map(root -> buildNode(root, parent2children, root.getName())) + .collect(Collectors.toList()); + } + + private LocationTreeNodeVo buildNode(EmsLocationVo vo, + Map> parent2children, + String path) { + LocationTreeNodeVo node = new LocationTreeNodeVo(); + node.setLocationId(vo.getLocationId()); + node.setName(vo.getName()); + node.setParentId(vo.getParentId()); + node.setPath(path); + + List children = parent2children.get(vo.getLocationId()); + if (children == null || children.isEmpty()) { + // 叶子节点:查询设备 + EmsAlarmDeviceBo bo = new EmsAlarmDeviceBo(); + bo.setLocationId(vo.getLocationId()); + List devices = alarmDeviceService.queryList(bo); + node.setDevices(devices != null ? devices : new ArrayList<>()); + node.setChildren(new ArrayList<>()); + } else { + // 非叶子:递归子节点,不挂设备 + List childNodes = children.stream() + .map(c -> buildNode(c, parent2children, path + "/" + c.getName())) + .collect(Collectors.toList()); + node.setChildren(childNodes); + node.setDevices(new ArrayList<>()); + } + return node; + } } diff --git a/klp-ems/src/main/resources/mapper/EmsLocationMapper.xml b/klp-ems/src/main/resources/mapper/EmsLocationMapper.xml index 809d475b..422ced68 100644 --- a/klp-ems/src/main/resources/mapper/EmsLocationMapper.xml +++ b/klp-ems/src/main/resources/mapper/EmsLocationMapper.xml @@ -8,6 +8,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + +