From ebeb23734e50fe78d81847476cc501cd8ef43e62 Mon Sep 17 00:00:00 2001 From: mh Date: Thu, 20 Feb 2025 17:35:45 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E3=80=81=E6=A5=BC=E6=A0=8B=E3=80=81=E6=A5=BC=E5=B1=82=E3=80=81?= =?UTF-8?q?=E6=88=BF=E9=97=B4=E4=BF=A1=E6=81=AF=E7=AE=A1=E7=90=86=E6=A0=91?= =?UTF-8?q?=E5=BD=A2=E6=8E=A5=E5=8F=A3=EF=BC=9B=202=E3=80=81=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8C=BA=E5=9F=9F=E3=80=81=E6=A5=BC=E6=A0=8B=E3=80=81?= =?UTF-8?q?=E6=A5=BC=E5=B1=82=E3=80=81=E6=88=BF=E9=97=B4=E8=B7=9F=E9=87=87?= =?UTF-8?q?=E9=9B=86=E5=8F=82=E6=95=B0=E5=85=B3=E8=81=94=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../space/CpmSpaceRelationController.java | 94 ++++++++++++++++++ .../web/controller/space/SpaceController.java | 43 ++++++++ .../common/core/domain/SpaceTreeSelect.java | 98 +++++++++++++++++++ .../core/domain/entity/CpmSpaceRelation.java | 85 ++++++++++++++++ .../device/CollectionParamsManageMapper.java | 41 ++++++++ .../mapper/space/CpmSpaceRelationMapper.java | 16 +++ .../system/mapper/space/HouseInfoMapper.java | 31 +++++- .../space/ICpmSpaceRelationService.java | 28 ++++++ .../service/space/IHouseInfoService.java | 5 +- .../space/impl/AreaInfoServiceImpl.java | 3 +- .../space/impl/BuildingInfoServiceImpl.java | 2 + .../impl/CpmSpaceRelationServiceImpl.java | 78 +++++++++++++++ .../space/impl/FloorInfoServiceImpl.java | 2 + .../space/impl/HouseInfoServiceImpl.java | 70 +++++++++++++ ...、楼栋、楼层、房间信息表.sql} | 71 ++++++++++---- 15 files changed, 645 insertions(+), 22 deletions(-) create mode 100644 mh-admin/src/main/java/com/mh/web/controller/space/CpmSpaceRelationController.java create mode 100644 mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/SpaceTreeSelect.java create mode 100644 mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java create mode 100644 mh-system/src/main/java/com/mh/system/mapper/space/CpmSpaceRelationMapper.java create mode 100644 mh-system/src/main/java/com/mh/system/service/space/ICpmSpaceRelationService.java create mode 100644 mh-system/src/main/java/com/mh/system/service/space/impl/CpmSpaceRelationServiceImpl.java rename sql/{区域/楼栋/楼层/房间信息表.sql => 区域、楼栋、楼层、房间信息表.sql} (75%) diff --git a/mh-admin/src/main/java/com/mh/web/controller/space/CpmSpaceRelationController.java b/mh-admin/src/main/java/com/mh/web/controller/space/CpmSpaceRelationController.java new file mode 100644 index 0000000..3070d05 --- /dev/null +++ b/mh-admin/src/main/java/com/mh/web/controller/space/CpmSpaceRelationController.java @@ -0,0 +1,94 @@ +package com.mh.web.controller.space; + +import com.mh.common.annotation.Log; +import com.mh.common.core.controller.BaseController; +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.entity.CpmSpaceRelation; +import com.mh.common.core.page.TableDataInfo; +import com.mh.common.enums.BusinessType; +import com.mh.system.service.space.ICpmSpaceRelationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 采集参数和区域、楼栋、楼层、房间关联控制类 + * @date 2025-02-20 15:13:10 + */ +@RestController +@RequestMapping("/space/relation") +public class CpmSpaceRelationController extends BaseController { + + private final ICpmSpaceRelationService cpmSpaceRelationService; + + @Autowired + public CpmSpaceRelationController(ICpmSpaceRelationService cpmSpaceRelationService) { + this.cpmSpaceRelationService = cpmSpaceRelationService; + } + + /** + * 获取采集参数、区域等关联管理列表内容数据 + */ + @PreAuthorize("@ss.hasPermi('system:cpmSpaceRelation:list')") + @GetMapping("/list") + public TableDataInfo list(CpmSpaceRelation cpmSpaceRelation) + { + startPage(); + List list = cpmSpaceRelationService.selectCpmSpaceRelationList(cpmSpaceRelation); + return getDataTable(list); + } + + /** + * 根据区域管理id获取详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:cpmSpaceRelation:query')") + @GetMapping(value = "/{cpmSpaceRelationId}") + public AjaxResult getInfo(@PathVariable String cpmSpaceRelationId) + { + return success(cpmSpaceRelationService.selectCpmSpaceRelationById(cpmSpaceRelationId)); + } + + /** + * 新增采集参数、区域等关联管理 + */ + @PreAuthorize("@ss.hasPermi('system:cpmSpaceRelation:add')") + @Log(title = "采集参数、区域等关联管理", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody CpmSpaceRelation CpmSpaceRelation) + { + CpmSpaceRelation.setCreateBy(getUsername()); + return toAjax(cpmSpaceRelationService.insertCpmSpaceRelation(CpmSpaceRelation)); + } + + /** + * 修改采集参数、区域等关联管理 + */ + @PreAuthorize("@ss.hasPermi('system:cpmSpaceRelation:edit')") + @Log(title = "采集参数、区域等关联管理", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody CpmSpaceRelation CpmSpaceRelation) + { + CpmSpaceRelation.setUpdateBy(getUsername()); + return toAjax(cpmSpaceRelationService.updateCpmSpaceRelation(CpmSpaceRelation)); + } + + /** + * 删除采集参数、区域等关联管理 + */ + @PreAuthorize("@ss.hasPermi('system:cpmSpaceRelation:remove')") + @Log(title = "采集参数、区域等关联管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{cpmSpaceRelationIds}") + public AjaxResult remove(@PathVariable String[] cpmSpaceRelationIds) + { + return toAjax(cpmSpaceRelationService.deleteCpmSpaceRelationByIds(cpmSpaceRelationIds)); + } + + +} diff --git a/mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java b/mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java new file mode 100644 index 0000000..f02b201 --- /dev/null +++ b/mh-admin/src/main/java/com/mh/web/controller/space/SpaceController.java @@ -0,0 +1,43 @@ +package com.mh.web.controller.space; + +import com.mh.common.annotation.Log; +import com.mh.common.core.controller.BaseController; +import com.mh.common.core.domain.AjaxResult; +import com.mh.common.core.domain.entity.CpmSpaceRelation; +import com.mh.common.core.domain.entity.HouseInfo; +import com.mh.common.enums.BusinessType; +import com.mh.system.service.space.IHouseInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 空间区域管理 + * @date 2025-02-20 08:34:51 + */ +@RestController +@RequestMapping("/space") +public class SpaceController extends BaseController { + + private final IHouseInfoService houseInfoService; + + @Autowired + public SpaceController(IHouseInfoService houseInfoService) { + this.houseInfoService = houseInfoService; + } + + @GetMapping("/tree") + public AjaxResult tree() { + return AjaxResult.success(houseInfoService.buildTree()); + } + + @Log(title = "采集参数和区域、楼栋、楼层、房间的关联表", businessType = BusinessType.INSERT) + @PostMapping("/relation") + public AjaxResult relation(@Validated @RequestBody CpmSpaceRelation cpmSpaceRelation) { + cpmSpaceRelation.setCreateBy(getUsername()); + return AjaxResult.success(); + } +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/SpaceTreeSelect.java b/mh-common/src/main/java/com/mh/common/core/domain/SpaceTreeSelect.java new file mode 100644 index 0000000..8d39e4d --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/SpaceTreeSelect.java @@ -0,0 +1,98 @@ +package com.mh.common.core.domain; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.mh.common.constant.UserConstants; +import com.mh.common.core.domain.entity.SysDept; +import com.mh.common.core.domain.entity.SysMenu; +import com.mh.common.utils.StringUtils; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect树结构实体类 + * + * @author mh + */ +public class SpaceTreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 节点ID */ + private String id; + + /** 节点名称 */ + private String label; + + /** 节点禁用 */ + private boolean disabled = false; + + /** 子节点 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + // 用于构建关系的临时字段(不序列化) + @JsonIgnore + private String parentId; + + public SpaceTreeSelect() + { + + } + + public SpaceTreeSelect(String id, String houseName, boolean b, String floorId) { + this.id = id; + this.label = houseName; + this.disabled = b; + this.parentId = floorId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public boolean isDisabled() + { + return disabled; + } + + public void setDisabled(boolean disabled) + { + this.disabled = disabled; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + +} diff --git a/mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java b/mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java new file mode 100644 index 0000000..ad2a471 --- /dev/null +++ b/mh-common/src/main/java/com/mh/common/core/domain/entity/CpmSpaceRelation.java @@ -0,0 +1,85 @@ +package com.mh.common.core.domain.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.mh.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import org.apache.commons.lang3.builder.ToStringBuilder; + +import java.util.Map; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 采集参数和区域、楼栋、楼层、房间的关联表 + * @date 2025-02-20 14:44:35 + */ +@Setter +@Getter +@TableName("cpm_space_relation") +public class CpmSpaceRelation extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_UUID) + private String id; + + /** + * 采集参数id + */ + private String cpmId; + + /** + * 区域id + */ + private String areaId; + + /** + * 楼栋id + */ + private String buildingId; + + /** + * 楼层id + */ + private String floorId; + + /** + * 房间id + */ + private String houseId; + + /** + * 过滤掉BaseENtity的searchValue,param,remark + */ + @TableField(exist = false) + private String remark; + + @TableField(exist = false) + private String searchValue; + + /** 请求参数 */ + @TableField(exist = false) + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + @Override + public String toString() { + return new ToStringBuilder(this) + .append("id", id) + .append("cpmId", cpmId) + .append("areaId", areaId) + .append("buildingId", buildingId) + .append("floorId", floorId) + .append("houseId", houseId) + .append("remark", remark) + .append("searchValue", searchValue) + .append("params", params) + .toString(); + } +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java index ca3c898..53f6723 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/device/CollectionParamsManageMapper.java @@ -54,4 +54,45 @@ public interface CollectionParamsManageMapper extends BaseMapper selectByHouseId(@Param("houseId") String houseId); + + @Select("select " + + " cpm.* " + + "from " + + " collection_params_manage cpm " + + "join cpm_space_relation csr " + + "on " + + " cpm.id = csr.cpm_id " + + " and csr.floor_id = #{floorId} ") + List selectByFloorId(@Param("floorId") String floorId); + + @Select("select " + + " cpm.* " + + "from " + + " collection_params_manage cpm " + + "join cpm_space_relation csr " + + "on " + + " cpm.id = csr.cpm_id " + + " and csr.building_id = #{buildingId} ") + List selectByBuildingId(@Param("buildingId") String buildingId); + + @Select("select " + + " cpm.* " + + "from " + + " collection_params_manage cpm " + + "join cpm_space_relation csr " + + "on " + + " cpm.id = csr.cpm_id " + + " and csr.area_id = #{areaId} ") + List selectByAreaId(@Param("areaId") String areaId); + } diff --git a/mh-system/src/main/java/com/mh/system/mapper/space/CpmSpaceRelationMapper.java b/mh-system/src/main/java/com/mh/system/mapper/space/CpmSpaceRelationMapper.java new file mode 100644 index 0000000..cdbc39e --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/mapper/space/CpmSpaceRelationMapper.java @@ -0,0 +1,16 @@ +package com.mh.system.mapper.space; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.mh.common.core.domain.entity.CpmSpaceRelation; +import org.apache.ibatis.annotations.Mapper; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 参数区域关联表管理 + * @date 2025-02-20 15:33:31 + */ +@Mapper +public interface CpmSpaceRelationMapper extends BaseMapper { +} diff --git a/mh-system/src/main/java/com/mh/system/mapper/space/HouseInfoMapper.java b/mh-system/src/main/java/com/mh/system/mapper/space/HouseInfoMapper.java index 988eb1b..177edf3 100644 --- a/mh-system/src/main/java/com/mh/system/mapper/space/HouseInfoMapper.java +++ b/mh-system/src/main/java/com/mh/system/mapper/space/HouseInfoMapper.java @@ -1,9 +1,12 @@ package com.mh.system.mapper.space; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.mh.common.core.domain.entity.FloorInfo; import com.mh.common.core.domain.entity.HouseInfo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; +import java.util.Map; /** * @author LJF @@ -14,4 +17,30 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface HouseInfoMapper extends BaseMapper { + + @Select("select " + + " ai.area_name, " + + " bi.building_name , " + + " fi.floor_name , " + + " hi.area_id , " + + " hi.building_id , " + + " hi.floor_id , " + + " hi.id, " + + " hi.house_name, " + + " ai.order_num as ai_order_num, " + + " bi.order_num as bi_order_num, " + + " fi.order_num as fi_order_num, " + + " hi.order_num as hi_order_num " + + "from " + + " house_info hi " + + "join floor_info fi " + + "on " + + " hi.floor_id = fi.id " + + "join building_info bi " + + "on " + + " hi.building_id = bi.id " + + "join area_info ai " + + "on " + + " hi.area_id = ai.id") + List> selectTree(); } diff --git a/mh-system/src/main/java/com/mh/system/service/space/ICpmSpaceRelationService.java b/mh-system/src/main/java/com/mh/system/service/space/ICpmSpaceRelationService.java new file mode 100644 index 0000000..532274f --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/space/ICpmSpaceRelationService.java @@ -0,0 +1,28 @@ +package com.mh.system.service.space; + +import com.mh.common.core.domain.SpaceTreeSelect; +import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.entity.CpmSpaceRelation; + +import java.util.List; + +/** + * @author LJF + * @version 1.0 + * @project EEMCS + * @description 区域、楼栋、楼层、房间跟采集参数关联管理 + * @date 2025-02-19 16:37:19 + */ +public interface ICpmSpaceRelationService { + + List selectCpmSpaceRelationList(CpmSpaceRelation cpmSpaceRelation); + + CpmSpaceRelation selectCpmSpaceRelationById(String cpmSpaceRelationId); + + int insertCpmSpaceRelation(CpmSpaceRelation cpmSpaceRelation); + + int updateCpmSpaceRelation(CpmSpaceRelation cpmSpaceRelation); + + int deleteCpmSpaceRelationByIds(String[] buildingIds); + +} diff --git a/mh-system/src/main/java/com/mh/system/service/space/IHouseInfoService.java b/mh-system/src/main/java/com/mh/system/service/space/IHouseInfoService.java index e0ae89f..da8eef5 100644 --- a/mh-system/src/main/java/com/mh/system/service/space/IHouseInfoService.java +++ b/mh-system/src/main/java/com/mh/system/service/space/IHouseInfoService.java @@ -1,5 +1,6 @@ package com.mh.system.service.space; +import com.mh.common.core.domain.SpaceTreeSelect; import com.mh.common.core.domain.entity.HouseInfo; import java.util.List; @@ -22,5 +23,7 @@ public interface IHouseInfoService { int updateHouseInfo(HouseInfo houseInfo); int deleteHouseInfoByIds(String[] buildingIds); - + + List buildTree(); + } diff --git a/mh-system/src/main/java/com/mh/system/service/space/impl/AreaInfoServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/space/impl/AreaInfoServiceImpl.java index a515743..07c5d9e 100644 --- a/mh-system/src/main/java/com/mh/system/service/space/impl/AreaInfoServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/space/impl/AreaInfoServiceImpl.java @@ -2,13 +2,13 @@ package com.mh.system.service.space.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mh.common.core.domain.entity.AreaInfo; -import com.mh.common.core.domain.entity.DeviceLedger; import com.mh.common.utils.StringUtils; import com.mh.system.mapper.space.AreaInfoMapper; import com.mh.system.service.space.IAreaInfoService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; /** @@ -54,6 +54,7 @@ public class AreaInfoServiceImpl implements IAreaInfoService { @Override public int updateAreaInfo(AreaInfo areaInfo) { + areaInfo.setUpdateTime(new Date()); return areaInfoMapper.updateById(areaInfo); } diff --git a/mh-system/src/main/java/com/mh/system/service/space/impl/BuildingInfoServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/space/impl/BuildingInfoServiceImpl.java index 82af985..59c37f9 100644 --- a/mh-system/src/main/java/com/mh/system/service/space/impl/BuildingInfoServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/space/impl/BuildingInfoServiceImpl.java @@ -9,6 +9,7 @@ import com.mh.system.service.space.IBuildingInfoService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; /** @@ -64,6 +65,7 @@ public class BuildingInfoServiceImpl implements IBuildingInfoService { if (StringUtils.isEmpty(buildingInfo.getAreaId())) { throw new RuntimeException("没有对应的区域id"); } + buildingInfo.setUpdateTime(new Date()); return buildingInfoMapper.updateById(buildingInfo); } diff --git a/mh-system/src/main/java/com/mh/system/service/space/impl/CpmSpaceRelationServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/space/impl/CpmSpaceRelationServiceImpl.java new file mode 100644 index 0000000..fc25f6d --- /dev/null +++ b/mh-system/src/main/java/com/mh/system/service/space/impl/CpmSpaceRelationServiceImpl.java @@ -0,0 +1,78 @@ +package com.mh.system.service.space.impl; + +import com.mh.common.core.domain.entity.CollectionParamsManage; +import com.mh.common.core.domain.entity.CpmSpaceRelation; +import com.mh.common.utils.StringUtils; +import com.mh.system.mapper.device.CollectionParamsManageMapper; +import com.mh.system.mapper.space.CpmSpaceRelationMapper; +import com.mh.system.service.space.ICpmSpaceRelationService; +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-02-19 16:37:19 + */ +@Service +public class CpmSpaceRelationServiceImpl implements ICpmSpaceRelationService { + + private final CpmSpaceRelationMapper cpmSpaceRelationMapper; + + private final CollectionParamsManageMapper collectionParamsManageMapper; + + @Autowired + public CpmSpaceRelationServiceImpl(CpmSpaceRelationMapper cpmSpaceRelationMapper, CollectionParamsManageMapper collectionParamsManageMapper) { + this.cpmSpaceRelationMapper = cpmSpaceRelationMapper; + this.collectionParamsManageMapper = collectionParamsManageMapper; + } + + @Override + public List selectCpmSpaceRelationList(CpmSpaceRelation cpmSpaceRelation) { + // 判断房间号id是否为空 + if (cpmSpaceRelation == null) { + return List.of(); + } + if (!StringUtils.isEmpty(cpmSpaceRelation.getHouseId())) { + return collectionParamsManageMapper.selectByHouseId(cpmSpaceRelation.getHouseId()); + } else if (!StringUtils.isEmpty(cpmSpaceRelation.getFloorId() )) { + return collectionParamsManageMapper.selectByFloorId(cpmSpaceRelation.getFloorId()); + } else if (!StringUtils.isEmpty(cpmSpaceRelation.getBuildingId() )) { + return collectionParamsManageMapper.selectByBuildingId(cpmSpaceRelation.getBuildingId()); + } else if (!StringUtils.isEmpty(cpmSpaceRelation.getAreaId() )) { + return collectionParamsManageMapper.selectByAreaId(cpmSpaceRelation.getAreaId()); + } else { + return List.of(); + } + } + + @Override + public CpmSpaceRelation selectCpmSpaceRelationById(String cpmSpaceRelationId) { + return cpmSpaceRelationMapper.selectById(cpmSpaceRelationId); + } + + @Override + public int insertCpmSpaceRelation(CpmSpaceRelation cpmSpaceRelation) { + return cpmSpaceRelationMapper.insert(cpmSpaceRelation); + } + + @Override + public int updateCpmSpaceRelation(CpmSpaceRelation cpmSpaceRelation) { + return cpmSpaceRelationMapper.updateById(cpmSpaceRelation); + } + + @Override + public int deleteCpmSpaceRelationByIds(String[] buildingIds) { + if (buildingIds != null && buildingIds.length > 0) { + for (String buildingId : buildingIds) { + cpmSpaceRelationMapper.deleteById(buildingId); + } + return buildingIds.length; + } + return 0; + } +} 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 0da3f47..cc2bb08 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 @@ -8,6 +8,7 @@ import com.mh.system.service.space.IFloorInfoService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; /** @@ -73,6 +74,7 @@ public class FloorInfoServiceImpl implements IFloorInfoService { if(StringUtils.isEmpty(floorInfo.getBuildingId())) { throw new RuntimeException("没有对应的楼栋id"); } + floorInfo.setUpdateTime(new Date()); return floorInfoMapper.updateById(floorInfo); } 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 5f0a249..c2f2a05 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 @@ -1,14 +1,25 @@ 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.utils.StringUtils; +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.stereotype.Service; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author LJF @@ -20,6 +31,15 @@ import java.util.List; @Service public class HouseInfoServiceImpl implements IHouseInfoService { + @Resource + private AreaInfoMapper areaInfoMapper; + + @Resource + private BuildingInfoMapper buildingInfoMapper; + + @Resource + private FloorInfoMapper floorInfoMapper; + @Resource private HouseInfoMapper houseInfoMapper; @@ -96,4 +116,54 @@ public class HouseInfoServiceImpl implements IHouseInfoService { } return 0; } + + @Override + public List buildTree() { + List areaInfos = areaInfoMapper.selectList(null); + if (areaInfos != null && !areaInfos.isEmpty()) { + List buildingInfos = buildingInfoMapper.selectList(null); + List floorInfos = floorInfoMapper.selectList(null); + List houseInfos = houseInfoMapper.selectList(null); + return buildTree(areaInfos, buildingInfos, floorInfos, houseInfos); + } + return List.of(); + } + + public List buildTree(List areaInfos, + List buildingInfos, + List floorInfos, + List houseInfos) { + // 房间 -> 楼层映射 + Map> floorMap = houseInfos.stream() + .map(r -> new SpaceTreeSelect(r.getId(), r.getHouseName(), false, r.getFloorId())) + .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); + + // 楼层 -> 楼栋映射 + Map> buildingMap = floorInfos.stream() + .map(f -> { + SpaceTreeSelect node = new SpaceTreeSelect(f.getId(), f.getFloorName(), false, f.getBuildingId()); + node.setChildren(floorMap.getOrDefault(f.getId(), Collections.emptyList())); + return node; + }) + .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); + + // 楼栋 -> 区域映射 + Map> areaMap = buildingInfos.stream() + .map(b -> { + SpaceTreeSelect node = new SpaceTreeSelect(b.getId(), b.getBuildingName(), false, b.getAreaId()); + node.setChildren(buildingMap.getOrDefault(b.getId(), Collections.emptyList())); + return node; + }) + .collect(Collectors.groupingBy(SpaceTreeSelect::getParentId)); + + // 构建区域树 + return areaInfos.stream() + .map(a -> { + SpaceTreeSelect node = new SpaceTreeSelect(a.getId(), a.getAreaName(), false, null); + node.setChildren(areaMap.getOrDefault(a.getId(), Collections.emptyList())); + return node; + }) + .collect(Collectors.toList()); + } + } diff --git a/sql/区域/楼栋/楼层/房间信息表.sql b/sql/区域、楼栋、楼层、房间信息表.sql similarity index 75% rename from sql/区域/楼栋/楼层/房间信息表.sql rename to sql/区域、楼栋、楼层、房间信息表.sql index 9d2b31b..541a115 100644 --- a/sql/区域/楼栋/楼层/房间信息表.sql +++ b/sql/区域、楼栋、楼层、房间信息表.sql @@ -7,8 +7,8 @@ create table area_info ( remark varchar(500), create_by varchar(200), update_by varchar(200), - created_time timestamp default current_timestamp, - updated_time timestamp default current_timestamp + create_time timestamp default current_timestamp, + update_time timestamp default current_timestamp ); comment on table area_info is '区域信息表,用于存储系统中的所有区域数据'; comment on column area_info.id is '区域唯一标识符,使用uuid格式确保全局唯一性[ty-reference](2)'; @@ -18,14 +18,14 @@ comment on column area_info.parent_id is '父级区域id,默认值为0表示 comment on column area_info.remark is '备注信息,允许存储长达500个字符的额外说明'; comment on column area_info.create_by is '创建者,记录创建该区域的用户信息'; comment on column area_info.update_by is '最后更新者,记录最近一次修改该区域的用户信息'; -comment on column area_info.created_time is '创建时间,默认值为当前时间戳'; -comment on column area_info.updated_time is '最后更新时间,默认值为当前时间戳'; +comment on column area_info. create_time is '创建时间,默认值为当前时间戳'; +comment on column area_info.update_time is '最后更新时间,默认值为当前时间戳'; create index idx_area_name on area_info (area_name); create index idx_area_parent_id on area_info (parent_id); create index idx_area_parent_order on area_info (parent_id, order_num); create index idx_area_remark_fulltext on area_info using gin(to_tsvector('english', remark)); -create index idx_area_created_time on area_info (created_time); -create index idx_area_updated_time on area_info (updated_time); +create index idx_area_ create_time on area_info ( create_time); +create index idx_area_update_time on area_info (update_time); -- 楼栋表 create table building_info ( @@ -45,8 +45,8 @@ create table building_info ( low_tank_height numeric(24,2) null, create_by varchar(200), update_by varchar(200), - created_time timestamp default current_timestamp, - updated_time timestamp default current_timestamp, + create_time timestamp default current_timestamp, + update_time timestamp default current_timestamp, constraint pk_building primary key (id) ); -- 表的注释 @@ -69,8 +69,8 @@ comment on column building_info.pump_count is '水泵数量,记录楼栋内安 comment on column building_info.low_tank_height is '低区水箱高度,记录低区水箱的具体高度。'; comment on column building_info.create_by is '创建者,记录谁创建了这条记录。'; comment on column building_info.update_by is '更新者,记录最近一次修改该记录的用户。'; -comment on column building_info.created_time is '创建时间,自动设置为记录创建时的时间戳。'; -comment on column building_info.updated_time is '更新时间,自动设置为记录最后一次修改的时间戳。'; +comment on column building_info. create_time is '创建时间,自动设置为记录创建时的时间戳。'; +comment on column building_info.update_time is '更新时间,自动设置为记录最后一次修改的时间戳。'; create index idx_building_name on building_info (building_name); create index idx_area_id on building_info (area_id); @@ -91,8 +91,8 @@ create table floor_info ( remark varchar(500), create_by varchar(200), update_by varchar(200), - created_time timestamp default current_timestamp, - updated_time timestamp default current_timestamp + create_time timestamp default current_timestamp, + update_time timestamp default current_timestamp ); -- 添加表注释 @@ -111,8 +111,8 @@ comment on column floor_info.parent_id is '父级楼层id,默认值为“0” comment on column floor_info.remark is '备注信息,用于记录额外说明'; comment on column floor_info.create_by is '创建者,记录谁创建了这条记录'; comment on column floor_info.update_by is '更新者,记录最近一次修改该记录的用户'; -comment on column floor_info.created_time is '创建时间,自动设置为记录创建时的时间戳'; -comment on column floor_info.updated_time is '更新时间,自动设置为记录最后一次修改的时间戳'; +comment on column floor_info. create_time is '创建时间,自动设置为记录创建时的时间戳'; +comment on column floor_info.update_time is '更新时间,自动设置为记录最后一次修改的时间戳'; create index idx_floor_info_area_id on floor_info (area_id); create index idx_floor_info_building_id on floor_info (building_id); create index idx_floor_info_floor_purpose on floor_info (floor_purpose); @@ -134,8 +134,8 @@ create table house_info ( remark varchar(500) null, -- 备注信息 create_by varchar(200) null, -- 创建者 update_by varchar(200) null, -- 更新者 - created_time timestamp default current_timestamp, -- 创建时间 - updated_time timestamp default current_timestamp -- 更新时间 + create_time timestamp default current_timestamp, -- 创建时间 + update_time timestamp default current_timestamp -- 更新时间 ); comment on table house_info is '房屋信息表,用于存储房屋的基本信息及属性'; @@ -153,10 +153,43 @@ comment on column house_info.status is '状态:0:正常,1:禁用'; comment on column house_info.remark is '备注信息'; comment on column house_info.create_by is '创建者'; comment on column house_info.update_by is '更新者'; -comment on column house_info.created_time is '创建时间'; -comment on column house_info.updated_time is '更新时间'; +comment on column house_info. create_time is '创建时间'; +comment on column house_info.update_time is '更新时间'; create index idx_house_info_area_id on house_info (area_id); create index idx_house_info_building_id on house_info (building_id); create index idx_house_info_floor_id on house_info (floor_id); create index idx_house_info_area_building on house_info (area_id, building_id); -create index idx_house_info_building_floor on house_info (building_id, floor_id); \ No newline at end of file +create index idx_house_info_building_floor on house_info (building_id, floor_id); + +ALTER TABLE public.house_info ADD order_num int4 NULL; +COMMENT ON COLUMN public.house_info.order_num IS '房间排序号,用于定义房间显示顺序'; + +-- 采集参数和区域、楼栋、楼层、房间绑定关联表 +create table cpm_space_relation ( + id varchar(36) primary key not null, + cpm_id varchar(36) not null, + area_id varchar(36) not null, + building_id varchar(36) not null, + floor_id varchar(36) not null, + house_id varchar(36) not null, + create_by varchar(200) null, -- 创建者 + update_by varchar(200) null, -- 更新者 + create_time timestamp default current_timestamp, -- 创建时间 + update_time timestamp default current_timestamp -- 更新时间 +); +comment on table cpm_space_relation is '采集参数和区域、楼栋、楼层、房间绑定关联表'; +comment on column cpm_space_relation.id is '主键'; +comment on column cpm_space_relation.cpm_id is '采集参数id'; +comment on column cpm_space_relation.area_id is '所属区域id'; +comment on column cpm_space_relation.building_id is '所属建筑物id'; +comment on column cpm_space_relation.floor_id is '所属楼层id'; +comment on column cpm_space_relation.house_id is '所属房间id'; +comment on column cpm_space_relation.create_by is '创建者'; +comment on column cpm_space_relation.update_by is '更新者'; +comment on column cpm_space_relation.create_time is '创建时间'; +comment on column cpm_space_relation.update_time is '更新时间'; +create index idx_cpm_space_relation_cpm_id on cpm_space_relation (cpm_id); +create index idx_cpm_space_relation_area_id on cpm_space_relation (area_id); +create index idx_cpm_space_relation_building_id on cpm_space_relation (building_id); +create index idx_cpm_space_relation_floor_id on cpm_space_relation (floor_id); +create index idx_cpm_space_relation_house_id on cpm_space_relation (house_id);