From e97414608d00e3ed56a07e576e167765f4b585bd Mon Sep 17 00:00:00 2001 From: mh Date: Wed, 12 Mar 2025 18:06:30 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=A9=BA=E9=97=B4=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86=EF=BC=9B=202=E3=80=81?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8F=B0=E8=B4=A6=E6=B7=BB=E5=8A=A0=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/domain/entity/DeviceLedger.java | 14 +++ .../common/core/domain/entity/SysParams.java | 50 ++++++++++ .../com/mh/system/mapper/SysParamsMapper.java | 17 ++++ .../mh/system/service/ISysParamsService.java | 18 ++++ .../device/impl/DeviceLedgerServiceImpl.java | 1 + .../service/impl/SysParamsServiceImpl.java | 28 ++++++ .../space/impl/FloorInfoServiceImpl.java | 49 ++++++++-- .../space/impl/HouseInfoServiceImpl.java | 98 +++++++++++++------ .../mapper/system/SysParamsMapper.xml | 20 ++++ 9 files changed, 257 insertions(+), 38 deletions(-) create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/entity/SysParams.java create mode 100644 mh-system/src/main/java/com/mh/system/mapper/SysParamsMapper.java create mode 100644 mh-system/src/main/java/com/mh/system/service/ISysParamsService.java create mode 100644 mh-system/src/main/java/com/mh/system/service/impl/SysParamsServiceImpl.java create mode 100644 mh-system/src/main/resources/mapper/system/SysParamsMapper.xml diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java index c73b2db..e88d45b 100644 --- a/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/DeviceLedger.java @@ -105,6 +105,19 @@ public class DeviceLedger extends BaseEntity { */ private String systemType; + /** + * 排序 + */ + private Integer orderNum; + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + public String getSystemType() { return systemType; } @@ -267,6 +280,7 @@ public class DeviceLedger extends BaseEntity { .append("remark", remark) .append("params", params) .append("systemType", systemType) + .append("orderNum", orderNum) .toString(); } } diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/SysParams.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/SysParams.java new file mode 100644 index 0000000..b825057 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/SysParams.java @@ -0,0 +1,50 @@ +package com.mh.common.core.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.mh.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 系统信息表 + * @date 2025-03-12 11:09:44 + */ +@Setter +@Getter +@TableName("sys_params") +public class SysParams extends BaseEntity { + + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + /** + * 项目名称 + */ + private String proName; + + /** + * logo + */ + private String logo; + + /** + * 行政区域id(方便获取当前温湿度天气) + */ + private String proArea; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("proName", proName) + .append("logo", logo) + .append("proArea", proArea) + .toString(); + } +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/SysParamsMapper.java b/mh-system/src/main/java/com/mh/system/mapper/SysParamsMapper.java new file mode 100644 index 0000000..62cfa9b --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/mapper/SysParamsMapper.java @@ -0,0 +1,17 @@ +package com.mh.system.mapper; + +import com.mh.common.core.domain.entity.SysParams; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 系统参数mapper + * @date 2025-03-12 11:12:29 + */ +public interface SysParamsMapper { + + List selectSysParamsList(); +} diff --git a/mh-system/src/main/java/com/mh/system/service/ISysParamsService.java b/mh-system/src/main/java/com/mh/system/service/ISysParamsService.java new file mode 100644 index 0000000..36016d8 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/ISysParamsService.java @@ -0,0 +1,18 @@ +package com.mh.system.service; + +import com.mh.common.core.domain.entity.SysParams; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 系统参数服务类 + * @date 2025-03-12 11:13:24 + */ +public interface ISysParamsService { + + List queryList(); + +} diff --git a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java index 27d2454..00077bb 100644 --- a/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/device/impl/DeviceLedgerServiceImpl.java @@ -56,6 +56,7 @@ public class DeviceLedgerServiceImpl implements IDeviceLedgerService { queryWrapper.between("create_time", java.sql.Date.valueOf(beginTime), java.sql.Date.valueOf(endTime)); } } + queryWrapper.orderByAsc("order_num"); return deviceLedgerMapper.selectList(queryWrapper); } diff --git a/mh-system/src/main/java/com/mh/system/service/impl/SysParamsServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/impl/SysParamsServiceImpl.java new file mode 100644 index 0000000..ba553c1 --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/impl/SysParamsServiceImpl.java @@ -0,0 +1,28 @@ +package com.mh.system.service.impl; + +import com.mh.common.core.domain.entity.SysParams; +import com.mh.system.mapper.SysParamsMapper; +import com.mh.system.service.ISysParamsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 系统参数服务实现类 + * @date 2025-03-12 11:14:05 + */ +@Service +public class SysParamsServiceImpl implements ISysParamsService { + + @Autowired + private SysParamsMapper sysParamsMapper; + + @Override + public List queryList() { + return sysParamsMapper.selectSysParamsList(); + } +} diff --git a/mh-system/src/main/java/com/mh/system/service/space/impl/FloorInfoServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/space/impl/FloorInfoServiceImpl.java index cc2bb08..ca447ac 100644 --- a/mh-system/src/main/java/com/mh/system/service/space/impl/FloorInfoServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/space/impl/FloorInfoServiceImpl.java @@ -1,11 +1,14 @@ package com.mh.system.service.space.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mh.common.core.domain.SpaceTreeSelect; import com.mh.common.core.domain.entity.FloorInfo; import com.mh.common.utils.StringUtils; import com.mh.system.mapper.space.FloorInfoMapper; import com.mh.system.service.space.IFloorInfoService; +import com.mh.system.service.space.IHouseInfoService; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; @@ -24,6 +27,9 @@ public class FloorInfoServiceImpl implements IFloorInfoService { @Resource private FloorInfoMapper floorInfoMapper; + @Autowired + private IHouseInfoService houseInfoService; + @Override public List selectFloorInfoList(FloorInfo floorInfo) { if (floorInfo == null) { @@ -57,25 +63,50 @@ public class FloorInfoServiceImpl implements IFloorInfoService { @Override public int insertFloorInfo(FloorInfo floorInfo) { - if(StringUtils.isEmpty(floorInfo.getAreaId())) { - throw new RuntimeException("没有对应的区域id"); - } - if(StringUtils.isEmpty(floorInfo.getBuildingId())) { - throw new RuntimeException("没有对应的楼栋id"); - } + getAreaId(floorInfo); return floorInfoMapper.insert(floorInfo); } @Override public int updateFloorInfo(FloorInfo floorInfo) { + getAreaId(floorInfo); + floorInfo.setUpdateTime(new Date()); + return floorInfoMapper.updateById(floorInfo); + } + + private void getAreaId(FloorInfo floorInfo) { if(StringUtils.isEmpty(floorInfo.getAreaId())) { - throw new RuntimeException("没有对应的区域id"); + // 获取完整的空间树结构 + List spaceTree = houseInfoService.buildTree(); + + // 递归查找目标楼栋节点 + SpaceTreeSelect buildingNode = findBuildingNode(spaceTree, floorInfo.getBuildingId()); + + if(buildingNode != null && buildingNode.getParentId() != null) { + floorInfo.setAreaId(buildingNode.getParentId()); + } else { + throw new RuntimeException("未找到楼栋ID对应的区域信息"); + } } if(StringUtils.isEmpty(floorInfo.getBuildingId())) { throw new RuntimeException("没有对应的楼栋id"); } - floorInfo.setUpdateTime(new Date()); - return floorInfoMapper.updateById(floorInfo); + } + + // 递归查找楼栋节点方法 + private SpaceTreeSelect findBuildingNode(List nodes, String targetBuildingId) { + for (SpaceTreeSelect node : nodes) { + if (node.getNodeType() == 2 && targetBuildingId.equals(node.getId())) { + return node; + } + if (node.getChildren() != null && !node.getChildren().isEmpty()) { + SpaceTreeSelect found = findBuildingNode(node.getChildren(), targetBuildingId); + if (found != null) { + return found; + } + } + } + return null; } @Override diff --git a/mh-system/src/main/java/com/mh/system/service/space/impl/HouseInfoServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/space/impl/HouseInfoServiceImpl.java index 7a1296d..e61a1d6 100644 --- a/mh-system/src/main/java/com/mh/system/service/space/impl/HouseInfoServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/space/impl/HouseInfoServiceImpl.java @@ -3,17 +3,16 @@ package com.mh.system.service.space.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mh.common.core.domain.SpaceTreeSelect; import com.mh.common.core.domain.TreeSelect; -import com.mh.common.core.domain.entity.AreaInfo; -import com.mh.common.core.domain.entity.BuildingInfo; -import com.mh.common.core.domain.entity.FloorInfo; -import com.mh.common.core.domain.entity.HouseInfo; +import com.mh.common.core.domain.entity.*; import com.mh.common.utils.StringUtils; +import com.mh.system.mapper.SysParamsMapper; import com.mh.system.mapper.space.AreaInfoMapper; import com.mh.system.mapper.space.BuildingInfoMapper; import com.mh.system.mapper.space.FloorInfoMapper; import com.mh.system.mapper.space.HouseInfoMapper; import com.mh.system.service.space.IHouseInfoService; import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Collections; @@ -43,6 +42,9 @@ public class HouseInfoServiceImpl implements IHouseInfoService { @Resource private HouseInfoMapper houseInfoMapper; + @Resource + private SysParamsMapper sysParamsMapper; + @Override public List selectHouseInfoList(HouseInfo houseInfo) { if (houseInfo == null) { @@ -80,30 +82,62 @@ public class HouseInfoServiceImpl implements IHouseInfoService { @Override public int insertHouseInfo(HouseInfo houseInfo) { - if (StringUtils.isEmpty(houseInfo.getAreaId())) { - throw new RuntimeException("没有对应的区域id"); - } - if (StringUtils.isEmpty(houseInfo.getBuildingId())) { - throw new RuntimeException("没有对应的楼栋id"); - } - if (StringUtils.isEmpty(houseInfo.getFloorId())) { - throw new RuntimeException("没有对应的楼层id"); - } + getAreaIdAndBuildingId(houseInfo); return houseInfoMapper.insert(houseInfo); } + // 递归查找楼栋节点方法 + private SpaceTreeSelect findNode(List nodes, String targetId, int nodeType) { + for (SpaceTreeSelect node : nodes) { + if (node.getNodeType() == nodeType && targetId.equals(node.getId())) { + return node; + } + if (node.getChildren() != null && !node.getChildren().isEmpty()) { + SpaceTreeSelect found = findNode(node.getChildren(), targetId, nodeType); + if (found != null) { + return found; + } + } + } + return null; + } + @Override public int updateHouseInfo(HouseInfo houseInfo) { - if (StringUtils.isEmpty(houseInfo.getAreaId())) { - throw new RuntimeException("没有对应的区域id"); + getAreaIdAndBuildingId(houseInfo); + return houseInfoMapper.updateById(houseInfo); + } + + private void getAreaIdAndBuildingId(HouseInfo houseInfo) { + if(StringUtils.isEmpty(houseInfo.getBuildingId())) { + // 获取完整的空间树结构 + List spaceTree = buildTree(); + + // 递归查找目标楼栋节点 + SpaceTreeSelect buildNode = findNode(spaceTree, houseInfo.getFloorId(), 3); + + if(buildNode != null && buildNode.getParentId() != null) { + houseInfo.setBuildingId(buildNode.getParentId()); + } else { + throw new RuntimeException("未找到对应的楼栋id"); + } } - if (StringUtils.isEmpty(houseInfo.getBuildingId())) { - throw new RuntimeException("没有对应的楼栋id"); + if(StringUtils.isEmpty(houseInfo.getAreaId())) { + // 获取完整的空间树结构 + List spaceTree = buildTree(); + + // 递归查找目标楼栋节点 + SpaceTreeSelect areaNode = findNode(spaceTree, houseInfo.getBuildingId(), 2); + + if(areaNode != null && areaNode.getParentId() != null) { + houseInfo.setAreaId(areaNode.getParentId()); + } else { + throw new RuntimeException("未找到对应的区域id"); + } } if (StringUtils.isEmpty(houseInfo.getFloorId())) { throw new RuntimeException("没有对应的楼层id"); } - return houseInfoMapper.updateById(houseInfo); } @Override @@ -119,11 +153,11 @@ public class HouseInfoServiceImpl implements IHouseInfoService { @Override public List buildTree() { - List areaInfos = areaInfoMapper.selectList(null); + List areaInfos = areaInfoMapper.selectList(new QueryWrapper().orderByAsc("order_num")); if (areaInfos != null && !areaInfos.isEmpty()) { - List buildingInfos = buildingInfoMapper.selectList(null); - List floorInfos = floorInfoMapper.selectList(null); - List houseInfos = houseInfoMapper.selectList(null); + List buildingInfos = buildingInfoMapper.selectList(new QueryWrapper().orderByAsc("order_num")); + List floorInfos = floorInfoMapper.selectList(new QueryWrapper().orderByAsc("order_num")); + List houseInfos = houseInfoMapper.selectList(new QueryWrapper().orderByAsc("order_num")); return buildTree(areaInfos, buildingInfos, floorInfos, houseInfos); } return List.of(); @@ -135,13 +169,13 @@ public class HouseInfoServiceImpl implements IHouseInfoService { List houseInfos) { // 房间 -> 楼层映射 Map> floorMap = houseInfos.stream() - .map(r -> new SpaceTreeSelect(r.getId(), r.getHouseName(), false, r.getFloorId(), 3)) + .map(r -> new SpaceTreeSelect(r.getId(), r.getHouseName(), false, r.getFloorId(), 4)) .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); // 楼层 -> 楼栋映射 Map> buildingMap = floorInfos.stream() .map(f -> { - SpaceTreeSelect node = new SpaceTreeSelect(f.getId(), f.getFloorName(), false, f.getBuildingId(), 2); + SpaceTreeSelect node = new SpaceTreeSelect(f.getId(), f.getFloorName(), false, f.getBuildingId(), 3); node.setChildren(floorMap.getOrDefault(f.getId(), Collections.emptyList())); return node; }) @@ -150,20 +184,26 @@ public class HouseInfoServiceImpl implements IHouseInfoService { // 楼栋 -> 区域映射 Map> areaMap = buildingInfos.stream() .map(b -> { - SpaceTreeSelect node = new SpaceTreeSelect(b.getId(), b.getBuildingName(), false, b.getAreaId(), 1); + SpaceTreeSelect node = new SpaceTreeSelect(b.getId(), b.getBuildingName(), false, b.getAreaId(), 2); node.setChildren(buildingMap.getOrDefault(b.getId(), Collections.emptyList())); return node; }) .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); - // 构建区域树 - return areaInfos.stream() + // 区域 -> 根节点映射 + Map> map = areaInfos.stream() .map(a -> { - SpaceTreeSelect node = new SpaceTreeSelect(a.getId(), a.getAreaName(), false, null, 0); + SpaceTreeSelect node = new SpaceTreeSelect(a.getId(), a.getAreaName(), false, "0", 1); node.setChildren(areaMap.getOrDefault(a.getId(), Collections.emptyList())); return node; }) - .collect(Collectors.toList()); + .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); + List sysParams = sysParamsMapper.selectSysParamsList(); + return sysParams.stream().map(r -> { + SpaceTreeSelect node = new SpaceTreeSelect(r.getId(), r.getProName(), false, null, 0); + node.setChildren(map.getOrDefault(r.getId(), Collections.emptyList())); + return node; + }).collect(Collectors.toList()); } } diff --git a/mh-system/src/main/resources/mapper/system/SysParamsMapper.xml b/mh-system/src/main/resources/mapper/system/SysParamsMapper.xml new file mode 100644 index 0000000..94ffe64 --- /dev/null +++ b/mh-system/src/main/resources/mapper/system/SysParamsMapper.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + \ No newline at end of file