Browse Source

房屋初始化方式修改

tangbin 9 tháng trước cách đây
mục cha
commit
6e6bc85ef7
29 tập tin đã thay đổi với 475 bổ sung144 xóa
  1. 14 0
      yezhu-api/src/main/java/com/kioor/common/controller/ApiTestController.java
  2. 2 0
      yezhu-api/src/main/java/com/kioor/common/service/SysRegionService.java
  3. 43 0
      yezhu-api/src/main/java/com/kioor/common/service/impl/SysRegionServiceImpl.java
  4. 1 0
      yezhu-api/src/main/java/com/kioor/messageboard/controller/ApiMessageController.java
  5. 5 0
      yezhu-api/src/main/java/com/kioor/messageboard/dto/MessageDTO.java
  6. 3 0
      yezhu-api/src/main/java/com/kioor/messageboard/dto/MessagePostDTO.java
  7. 10 3
      yezhu-api/src/main/java/com/kioor/messageboard/service/impl/MessageServiceImpl.java
  8. 74 60
      yezhu-api/src/main/java/com/kioor/room/controller/ApiHousingEstateController.java
  9. 70 7
      yezhu-api/src/main/java/com/kioor/room/controller/ApiRoomController.java
  10. 8 1
      yezhu-api/src/main/java/com/kioor/room/controller/ApiUserHousingEstateController.java
  11. 7 0
      yezhu-api/src/main/java/com/kioor/room/dto/BuildingDTO.java
  12. 8 0
      yezhu-api/src/main/java/com/kioor/room/dto/FloorDTO.java
  13. 6 0
      yezhu-api/src/main/java/com/kioor/room/dto/RoomDetailDTO.java
  14. 8 0
      yezhu-api/src/main/java/com/kioor/room/dto/UnitDTO.java
  15. 1 2
      yezhu-api/src/main/java/com/kioor/room/entity/RoomEntity.java
  16. 2 0
      yezhu-api/src/main/java/com/kioor/room/service/BuildingService.java
  17. 2 0
      yezhu-api/src/main/java/com/kioor/room/service/FloorService.java
  18. 17 4
      yezhu-api/src/main/java/com/kioor/room/service/HousingEstateService.java
  19. 2 0
      yezhu-api/src/main/java/com/kioor/room/service/UnitService.java
  20. 15 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/BuildingServiceImpl.java
  21. 16 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/FloorServiceImpl.java
  22. 103 63
      yezhu-api/src/main/java/com/kioor/room/service/impl/HousingEstateServiceImpl.java
  23. 16 0
      yezhu-api/src/main/java/com/kioor/room/service/impl/UnitServiceImpl.java
  24. 23 3
      yezhu-api/src/main/java/com/kioor/user/dto/UserRoomDTO.java
  25. 1 1
      yezhu-api/src/main/resources/mapper/common/SysRegionDao.xml
  26. 3 0
      yezhu-api/src/main/resources/mapper/room/BuildingDao.xml
  27. 6 0
      yezhu-api/src/main/resources/mapper/room/FloorDao.xml
  28. 3 0
      yezhu-api/src/main/resources/mapper/room/RoomDao.xml
  29. 6 0
      yezhu-api/src/main/resources/mapper/room/UnitDao.xml

+ 14 - 0
yezhu-api/src/main/java/com/kioor/common/controller/ApiTestController.java

@@ -10,11 +10,14 @@ package com.kioor.common.controller;
 
 import com.kioor.annotation.Login;
 import com.kioor.annotation.LoginUser;
+import com.kioor.common.service.SysRegionService;
+import com.kioor.common.service.impl.SysRegionServiceImpl;
 import com.kioor.common.utils.Result;
 import com.kioor.user.entity.UserEntity;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -25,11 +28,15 @@ import org.springframework.web.bind.annotation.RestController;
  *
  * @author Mark sunlightcs@gmail.com
  */
+@AllArgsConstructor
 @RestController
 @RequestMapping("/client")
 @Tag(name = "测试接口")
 public class ApiTestController {
 
+    private final SysRegionService sysRegionService;
+    private final SysRegionServiceImpl sysRegionServiceImpl;
+
     @Login
     @GetMapping("userInfo")
     @Operation(summary = "获取用户信息")
@@ -50,4 +57,11 @@ public class ApiTestController {
         return new Result<String>().ok("无需token也能访问。。。");
     }
 
+    @GetMapping("allRegionJson")
+    @Operation(summary = "忽略Token获取省市区json")
+    public Result<String> allRegionJson() {
+        sysRegionService.allRegionJson();
+        return new Result<String>().ok("无需token也能访问。。。");
+    }
+
 }

+ 2 - 0
yezhu-api/src/main/java/com/kioor/common/service/SysRegionService.java

@@ -38,4 +38,6 @@ public interface SysRegionService extends BaseService<SysRegionEntity> {
 	int getCountByPid(Long pid);
 
 	List<RegionProvince> getRegion(boolean threeLevel);
+
+	void allRegionJson();
 }

+ 43 - 0
yezhu-api/src/main/java/com/kioor/common/service/impl/SysRegionServiceImpl.java

@@ -8,6 +8,7 @@
 
 package com.kioor.common.service.impl;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.kioor.common.dao.SysRegionDao;
 import com.kioor.common.dto.SysRegionDTO;
 import com.kioor.common.dto.region.Region;
@@ -26,8 +27,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -170,4 +173,44 @@ public class SysRegionServiceImpl extends BaseServiceImpl<SysRegionDao, SysRegio
 
 		return provinces;
 	}
+
+	/**
+	 * 所有区域json
+	 */
+	public void allRegionJson(){
+		List<SysRegionEntity> provinceList = baseDao.getListByLevel(RegionLevelEnum.ONE.value());
+		List<SysRegionEntity> cityList = baseDao.getListByLevel(RegionLevelEnum.TWO.value());
+		List<SysRegionEntity> countyList = baseDao.getListByLevel(RegionLevelEnum.THREE.value());
+		//将上面的列表转换成如下格式的json:{province_list:{110000:'北京市',120000:'天津市’,130000:'河北省’,140000:’山西省’,150000:'内蒙古自治区’},city_list{110100:'北京市',120100:'天津市',130100:'石家庄市’},county_list:{110101:'东城区',110102:'西城区',110105:'朝阳区',110108:'丰台区',110107:'石景山区'}}
+		Map<String, Object> result = convertToMap(provinceList, cityList, countyList);
+
+		ObjectMapper mapper = new ObjectMapper();
+		try {
+			String jsonResult = mapper.writeValueAsString(result);
+			System.out.println(jsonResult);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	private static Map<String, Object> convertToMap(
+			List<SysRegionEntity> provinceList,
+			List<SysRegionEntity> cityList,
+			List<SysRegionEntity> countyList) {
+
+		Map<String, Object> resultMap = new HashMap<>();
+
+		Map<Long, String> provinces = provinceList.stream()
+				.collect(Collectors.toMap(SysRegionEntity::getId, SysRegionEntity::getName));
+		Map<Long, String> cities = cityList.stream()
+				.collect(Collectors.toMap(SysRegionEntity::getId, SysRegionEntity::getName));
+		Map<Long, String> counties = countyList.stream()
+				.collect(Collectors.toMap(SysRegionEntity::getId, SysRegionEntity::getName));
+
+		resultMap.put("province_list", provinces);
+		resultMap.put("city_list", cities);
+		resultMap.put("county_list", counties);
+
+		return resultMap;
+	}
 }

+ 1 - 0
yezhu-api/src/main/java/com/kioor/messageboard/controller/ApiMessageController.java

@@ -91,6 +91,7 @@ public class ApiMessageController {
     public Result<PageData<MessageDTO>> mypage(@Parameter(hidden = true) @RequestParam Map<String, Object> params, @Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
         params.put("editUser", userId);
         PageData<MessageDTO> page = messageService.page(params);
+
         //校验小区状态
         if(page.getList()!=null && !page.getList().isEmpty()){
             int status = housingEstateService.checkStatus(page.getList().get(0).getHousingEstateId());

+ 5 - 0
yezhu-api/src/main/java/com/kioor/messageboard/dto/MessageDTO.java

@@ -10,6 +10,7 @@
 package com.kioor.messageboard.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.util.Date;
@@ -32,7 +33,11 @@ public class MessageDTO {
     @Schema(description = "帖子")
     private Long messagePostId;
 
+    @Schema(description = "帖子详情")
+    private MessagePostDTO messagePostDTO;
+
     @Schema(description = "留言内容")
+    @NotNull(message = "留言内容不能为空")
     private String content;
 
     @Schema(description = "编辑人")

+ 3 - 0
yezhu-api/src/main/java/com/kioor/messageboard/dto/MessagePostDTO.java

@@ -10,6 +10,7 @@
 package com.kioor.messageboard.dto;
 
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.util.Date;
@@ -33,9 +34,11 @@ public class MessagePostDTO {
     private Long messageBoardId;
 
     @Schema(description = "帖子标题")
+    @NotNull(message = "帖子标题不能为空")
     private String title;
 
     @Schema(description = "帖子内容")
+    @NotNull(message = "帖子内容不能为空")
     private String content;
 
     @Schema(description = "编辑人")

+ 10 - 3
yezhu-api/src/main/java/com/kioor/messageboard/service/impl/MessageServiceImpl.java

@@ -15,9 +15,10 @@ import com.kioor.common.utils.CommonUtils;
 import com.kioor.common.utils.ConvertUtils;
 import com.kioor.messageboard.dao.MessageDao;
 import com.kioor.messageboard.dto.MessageDTO;
+import com.kioor.messageboard.dto.MessagePostDTO;
 import com.kioor.messageboard.entity.MessageEntity;
+import com.kioor.messageboard.service.MessagePostService;
 import com.kioor.messageboard.service.MessageService;
-import com.kioor.user.service.UserService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -28,7 +29,7 @@ import java.util.Map;
 @AllArgsConstructor
 public class MessageServiceImpl extends BaseServiceImpl<MessageDao, MessageEntity> implements MessageService {
 
-    private final UserService userService;
+    private final MessagePostService messagePostService;
 
     /**
      * 分页
@@ -41,7 +42,7 @@ public class MessageServiceImpl extends BaseServiceImpl<MessageDao, MessageEntit
 
         //查询
         List<MessageDTO> list = baseDao.getList(params);
-        //根据是否显示姓名和是否显示房号隐藏对应的数据
+        //根据是否显示姓名和是否显示房号隐藏对应的数据,并且将帖子标题赋值返回
         list.forEach(this::hiddenInformation);
 
 
@@ -70,6 +71,12 @@ public class MessageServiceImpl extends BaseServiceImpl<MessageDao, MessageEntit
         if(dto.getShowRoomFlag() != 1){
             dto.setRoomName(CommonUtils.hiddenInformation(dto.getRoomName()));
         }
+        //查询留言对应的帖子内容并赋值
+        MessagePostDTO messagePostDTO = messagePostService.get(dto.getMessagePostId());
+        if(messagePostDTO.getShowRoomFlag() != 1){
+            messagePostDTO.setRoomName(CommonUtils.hiddenInformation(dto.getRoomName()));
+        }
+        dto.setMessagePostDTO(messagePostDTO);
     }
 
     @Override

+ 74 - 60
yezhu-api/src/main/java/com/kioor/room/controller/ApiHousingEstateController.java

@@ -14,6 +14,7 @@ import com.kioor.annotation.LoginUser;
 import com.kioor.common.constant.Constant;
 import com.kioor.common.exception.ErrorCode;
 import com.kioor.common.page.PageData;
+import com.kioor.common.utils.ConvertUtils;
 import com.kioor.common.utils.Result;
 import com.kioor.common.validator.AssertUtils;
 import com.kioor.common.validator.ValidatorUtils;
@@ -22,9 +23,8 @@ import com.kioor.common.validator.group.DefaultGroup;
 import com.kioor.common.validator.group.UpdateGroup;
 import com.kioor.messageboard.dto.MessageBoardDTO;
 import com.kioor.messageboard.service.MessageBoardService;
-import com.kioor.room.dto.BuildingInitDTO;
 import com.kioor.room.dto.HousingEstateDTO;
-import com.kioor.room.enums.HousingEstateStatus;
+import com.kioor.room.entity.HousingEstateEntity;
 import com.kioor.room.service.HousingEstateService;
 import com.kioor.user.entity.UserEntity;
 import io.swagger.v3.oas.annotations.Operation;
@@ -36,7 +36,6 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.Arrays;
 import java.util.Date;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -90,10 +89,25 @@ public class ApiHousingEstateController {
     public Result save(@RequestBody HousingEstateDTO dto, @Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
         //效验数据
         ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
-        dto.setStatus(0);
-        dto.setCreateUser(userId);
-        dto.setCreateDate(new Date());
-        housingEstateService.save(dto);
+        //重名校验
+        if(housingEstateService.checkName(dto.getName())){
+            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"小区名称重复");
+        }
+        HousingEstateEntity entity = ConvertUtils.sourceToTarget(dto, HousingEstateEntity.class);
+        entity.setStatus(0);
+        entity.setCreateUser(userId);
+        entity.setCreateDate(new Date());
+        entity.setInitFlag(1);
+        housingEstateService.insert(entity);
+
+        //初始化小区论坛
+        MessageBoardDTO messageBoardDTO = messageBoardService.infoByHousingEstate(entity.getId());
+        if(messageBoardDTO == null ){
+            messageBoardDTO = new MessageBoardDTO();
+            messageBoardDTO.setHousingEstateId(entity.getId());
+            messageBoardDTO.setName(entity.getName()+"-小区论坛");
+            messageBoardService.save(messageBoardDTO);
+        }
 
         return new Result();
     }
@@ -147,59 +161,59 @@ public class ApiHousingEstateController {
         return new Result();
     }
 
-    @Login
-    @PostMapping("housingEstateInit")
-    @Operation(summary = "根据设置信息初始化小区房号")
-    public Result housingEstateInit(@RequestBody List<BuildingInitDTO> buildingInitDTOList, @Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
-        //效验数据
-        ValidatorUtils.validateEntity(buildingInitDTOList, AddGroup.class, DefaultGroup.class);
-        //校验是否是同一小区的楼栋
-        if(!housingEstateService.checkBuildingList(buildingInitDTOList)){
-            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"参数非法,不是同一小区的数据");
-        }
-        //校验小区状态
-        if(!buildingInitDTOList.isEmpty()){
-            int status = housingEstateService.checkStatus(buildingInitDTOList.get(0).getHousingEstateId());
-            if(status!=1) {
-                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
-            }
-        }
-        //校验小区创建者和初始化的人是否是同一人
-        if(!housingEstateService.checkCreateUser(buildingInitDTOList.get(0).getHousingEstateId(),userId)){
-            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"操作非法,该小区并非你创建");
-        }
-        //校验小区是否已被初始化,如果已被初始化则不允许操作
-        if(!housingEstateService.checkInit(buildingInitDTOList.get(0).getHousingEstateId())){
-            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"操作非法,小区已有数据,请联系管理员重置");
-        }
-        HousingEstateDTO housingEstateDTO = housingEstateService.get(buildingInitDTOList.get(0).getHousingEstateId());
-        //先清空房号
-        if(!buildingInitDTOList.isEmpty()){
-            buildingInitDTOList.forEach(buildingInitDTO -> {
-                housingEstateService.cleanAll(buildingInitDTO.getHousingEstateId());
-                //删除小区论坛
-                MessageBoardDTO messageBoardDTO = messageBoardService.infoByHousingEstate(buildingInitDTO.getHousingEstateId());
-                if(messageBoardDTO != null ){
-                    messageBoardService.deleteById(messageBoardDTO.getId());
-                }
-            });
-        }
-        //更新小区初始化状态为1
-        housingEstateService.updateInitFlag(buildingInitDTOList.get(0).getHousingEstateId(),1);
-        //初始化小区信息
-        housingEstateService.buildingInit(buildingInitDTOList);
-
-        //初始化小区论坛
-        MessageBoardDTO messageBoardDTO = messageBoardService.infoByHousingEstate(buildingInitDTOList.get(0).getHousingEstateId());
-        if(messageBoardDTO == null ){
-            messageBoardDTO = new MessageBoardDTO();
-            messageBoardDTO.setHousingEstateId(buildingInitDTOList.get(0).getHousingEstateId());
-            messageBoardDTO.setName(housingEstateDTO==null?"小区论坛":housingEstateDTO.getName()+"-小区论坛");
-            messageBoardService.save(messageBoardDTO);
-        }
-
-        return new Result();
-    }
+//    @Login
+//    @PostMapping("housingEstateInit")
+//    @Operation(summary = "根据设置信息初始化小区房号")
+//    public Result housingEstateInit(@RequestBody List<BuildingInitDTO> buildingInitDTOList, @Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
+//        //效验数据
+//        ValidatorUtils.validateEntity(buildingInitDTOList, AddGroup.class, DefaultGroup.class);
+//        //校验是否是同一小区的楼栋
+//        if(!housingEstateService.checkBuildingList(buildingInitDTOList)){
+//            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"参数非法,不是同一小区的数据");
+//        }
+//        //校验小区状态
+//        if(!buildingInitDTOList.isEmpty()){
+//            int status = housingEstateService.checkStatus(buildingInitDTOList.get(0).getHousingEstateId());
+//            if(status!=1) {
+//                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+//            }
+//        }
+//        //校验小区创建者和初始化的人是否是同一人
+//        if(!housingEstateService.checkCreateUser(buildingInitDTOList.get(0).getHousingEstateId(),userId)){
+//            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"操作非法,该小区并非你创建");
+//        }
+//        //校验小区是否已被初始化,如果已被初始化则不允许操作
+//        if(!housingEstateService.checkInit(buildingInitDTOList.get(0).getHousingEstateId())){
+//            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"操作非法,小区已有数据,请联系管理员重置");
+//        }
+//        HousingEstateDTO housingEstateDTO = housingEstateService.get(buildingInitDTOList.get(0).getHousingEstateId());
+//        //先清空房号
+//        if(!buildingInitDTOList.isEmpty()){
+//            buildingInitDTOList.forEach(buildingInitDTO -> {
+//                housingEstateService.cleanAll(buildingInitDTO.getHousingEstateId());
+//                //删除小区论坛
+//                MessageBoardDTO messageBoardDTO = messageBoardService.infoByHousingEstate(buildingInitDTO.getHousingEstateId());
+//                if(messageBoardDTO != null ){
+//                    messageBoardService.deleteById(messageBoardDTO.getId());
+//                }
+//            });
+//        }
+//        //更新小区初始化状态为1
+//        housingEstateService.updateInitFlag(buildingInitDTOList.get(0).getHousingEstateId(),1);
+//        //初始化小区信息
+//        housingEstateService.buildingInit(buildingInitDTOList);
+//
+//        //初始化小区论坛
+//        MessageBoardDTO messageBoardDTO = messageBoardService.infoByHousingEstate(buildingInitDTOList.get(0).getHousingEstateId());
+//        if(messageBoardDTO == null ){
+//            messageBoardDTO = new MessageBoardDTO();
+//            messageBoardDTO.setHousingEstateId(buildingInitDTOList.get(0).getHousingEstateId());
+//            messageBoardDTO.setName(housingEstateDTO==null?"小区论坛":housingEstateDTO.getName()+"-小区论坛");
+//            messageBoardService.save(messageBoardDTO);
+//        }
+//
+//        return new Result();
+//    }
 
     @Login
     @DeleteMapping("cleanAll")

+ 70 - 7
yezhu-api/src/main/java/com/kioor/room/controller/ApiRoomController.java

@@ -93,6 +93,46 @@ public class ApiRoomController {
         return new Result<List<AllRoomDTO>>().ok(list);
     }
 
+//    @Login
+//    @GetMapping("allAroundList")
+//    @Operation(summary = "我周围的房间列表")
+//    public Result<List<RoomDetailDTO>> allAroundList(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
+//        //同楼层的房间
+//        List<RoomDetailDTO> floorList = roomService.floorList(userId);
+//        //校验小区状态
+//        if(!floorList.isEmpty()){
+//            int status = housingEstateService.checkStatus(floorList.get(0).getHousingEstateId());
+//            if(status!=1) {
+//                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+//            }
+//        }
+//
+//        //楼上的房间,设置数量和floorList相同的属性全为空的list
+//        List<RoomDetailDTO> upList = new ArrayList<>();
+//        //楼下的房间
+//        List<RoomDetailDTO> downList = new ArrayList<>();
+//
+//        for(RoomDetailDTO room :floorList){
+//            if(room.getSelfFlag() == 1){
+//                RoomDetailDTO upDto = roomService.roomUp(userId);
+//                upList.add(upDto == null ? new RoomDetailDTO() : upDto);
+//                RoomDetailDTO downDto = roomService.roomDown(userId);
+//                downList.add(downDto == null ? new RoomDetailDTO() : downDto);
+//            }else {
+//                //往list中添加空的RoomDetailDTO
+//                upList.add(new RoomDetailDTO());
+//                downList.add(new RoomDetailDTO());
+//            }
+//        }
+//        //将三个list拼接返回
+//        List<RoomDetailDTO> list = new ArrayList<>();
+//        list.addAll(upList);
+//        list.addAll(floorList);
+//        list.addAll(downList);
+//
+//        return new Result<List<RoomDetailDTO>>().ok(list);
+//    }
+
     @Login
     @GetMapping("allAroundList")
     @Operation(summary = "我周围的房间列表")
@@ -106,28 +146,51 @@ public class ApiRoomController {
                 return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
             }
         }
+        //从floorList的最后一个对象获取最大房号
+        int maxRoomNum = floorList.get(floorList.size()-1).getRoomNum();
+        //获取我的楼层
+        int centerFloor = floorService.get(floorList.get(0).getFloorId()).getFloorNum();
 
         //楼上的房间,设置数量和floorList相同的属性全为空的list
         List<RoomDetailDTO> upList = new ArrayList<>();
+        //本层的房间,设置数量和floorList相同的属性全为空的list
+        List<RoomDetailDTO> centerList = new ArrayList<>();
         //楼下的房间
         List<RoomDetailDTO> downList = new ArrayList<>();
 
-        for(RoomDetailDTO room :floorList){
-            if(room.getSelfFlag() == 1){
+
+        for(int i = 1 ;i<= maxRoomNum;i++){
+            RoomDetailDTO initRoom = new RoomDetailDTO();
+            for(RoomDetailDTO room :floorList){
+                if(room.getRoomNum() == i){
+                    initRoom = room;
+                }
+            }
+            if (initRoom.getSelfFlag() == 1){
                 RoomDetailDTO upDto = roomService.roomUp(userId);
-                upList.add(upDto == null ? new RoomDetailDTO() : upDto);
+                upList.add(upDto == null ? new RoomDetailDTO(centerFloor+1 + String.format("%02d", i)) : upDto);
+
+                centerList.add(initRoom);
+
                 RoomDetailDTO downDto = roomService.roomDown(userId);
-                downList.add(downDto == null ? new RoomDetailDTO() : downDto);
+                downList.add(downDto == null ? new RoomDetailDTO(centerFloor-1 + String.format("%02d", i)) : downDto);
+            }else if(initRoom.getId()==null){
+                //往list中添加空的RoomDetailDTO
+                upList.add(new RoomDetailDTO(centerFloor+1 + String.format("%02d", i)));
+                centerList.add(new RoomDetailDTO(centerFloor + String.format("%02d", i)));
+                downList.add(new RoomDetailDTO(centerFloor-1 + String.format("%02d", i)));
             }else {
                 //往list中添加空的RoomDetailDTO
-                upList.add(new RoomDetailDTO());
-                downList.add(new RoomDetailDTO());
+                upList.add(new RoomDetailDTO(centerFloor+1 + String.format("%02d", i)));
+                centerList.add(initRoom);
+                downList.add(new RoomDetailDTO(centerFloor-1 + String.format("%02d", i)));
             }
         }
+
         //将三个list拼接返回
         List<RoomDetailDTO> list = new ArrayList<>();
         list.addAll(upList);
-        list.addAll(floorList);
+        list.addAll(centerList);
         list.addAll(downList);
 
         return new Result<List<RoomDetailDTO>>().ok(list);

+ 8 - 1
yezhu-api/src/main/java/com/kioor/room/controller/ApiUserHousingEstateController.java

@@ -14,6 +14,8 @@ import com.kioor.common.utils.Result;
 import com.kioor.common.validator.ValidatorUtils;
 import com.kioor.room.dto.RoomDTO;
 import com.kioor.room.entity.UserHousingEstateEntity;
+import com.kioor.room.service.BuildingService;
+import com.kioor.room.service.HousingEstateService;
 import com.kioor.room.service.RoomService;
 import com.kioor.room.service.UserHousingEstateService;
 import com.kioor.user.dto.UserRoomDTO;
@@ -37,6 +39,9 @@ import java.util.Map;
 @Tag(name = "用户和房屋关系")
 public class ApiUserHousingEstateController {
 
+    private final BuildingService buildingService;
+    private final HousingEstateService housingEstateService;
+
     private final RoomService roomService;
 
     private final UserHousingEstateService userHousingEstateService;
@@ -54,9 +59,11 @@ public class ApiUserHousingEstateController {
             return new Result().error("该用户已经绑定有房屋,需要绑定更多房屋请走审核流程");
         }
 
+        Long roomId = housingEstateService.roomInit(dto);
+
         //新增用户和房屋关系
         UserHousingEstateEntity userHousingEstateEntity = new UserHousingEstateEntity();
-        RoomDTO roomDTO = roomService.findRoomById(dto.getRoomId());
+        RoomDTO roomDTO = roomService.findRoomById(roomId);
         if(roomDTO!=null){
             userHousingEstateEntity.setUserId(userId);
             userHousingEstateEntity.setHousingEstateId(roomDTO.getHousingEstateId());

+ 7 - 0
yezhu-api/src/main/java/com/kioor/room/dto/BuildingDTO.java

@@ -30,4 +30,11 @@ public class BuildingDTO {
     @Schema(description = "楼栋号")
     private String buildingNum;
 
+    public BuildingDTO() {
+    }
+
+    public BuildingDTO(Long housingEstateId, Integer buildingNum) {
+        this.housingEstateId = housingEstateId;
+        this.buildingNum = String.valueOf(buildingNum);
+    }
 }

+ 8 - 0
yezhu-api/src/main/java/com/kioor/room/dto/FloorDTO.java

@@ -33,4 +33,12 @@ public class FloorDTO {
     @Schema(description = "楼层号")
     private Integer floorNum;
 
+    public FloorDTO() {
+    }
+
+    public FloorDTO(Long housingEstateId, Long unitId, Integer floorNum) {
+        this.housingEstateId = housingEstateId;
+        this.unitId = unitId;
+        this.floorNum = floorNum;
+    }
 }

+ 6 - 0
yezhu-api/src/main/java/com/kioor/room/dto/RoomDetailDTO.java

@@ -53,4 +53,10 @@ public class RoomDetailDTO {
 
     List<UserResponseDTO> userList;
 
+    public RoomDetailDTO() {
+    }
+
+    public RoomDetailDTO(String fullRoomNum) {
+        this.fullRoomNum = fullRoomNum;
+    }
 }

+ 8 - 0
yezhu-api/src/main/java/com/kioor/room/dto/UnitDTO.java

@@ -33,4 +33,12 @@ public class UnitDTO {
     @Schema(description = "单元号")
     private String unitNum;
 
+    public UnitDTO() {
+    }
+
+    public UnitDTO(Long housingEstateId, Long buildingId, Integer unitNum) {
+        this.housingEstateId = housingEstateId;
+        this.buildingId = buildingId;
+        this.unitNum = String.valueOf(unitNum);
+    }
 }

+ 1 - 2
yezhu-api/src/main/java/com/kioor/room/entity/RoomEntity.java

@@ -55,8 +55,7 @@ public class RoomEntity implements Serializable {
     public RoomEntity() {
     }
 
-    public RoomEntity(Long id, Long housingEstateId, Long buildingId, Long unitId, Long floorId, Integer roomNum, String remark) {
-        this.id = id;
+    public RoomEntity(Long housingEstateId, Long buildingId, Long unitId, Long floorId, Integer roomNum, String remark) {
         this.housingEstateId = housingEstateId;
         this.buildingId = buildingId;
         this.unitId = unitId;

+ 2 - 0
yezhu-api/src/main/java/com/kioor/room/service/BuildingService.java

@@ -37,4 +37,6 @@ public interface BuildingService extends BaseService<BuildingEntity> {
 
     void update(BuildingDTO dto);
 
+    Long saveOrUpdate(BuildingDTO dto);
+
 }

+ 2 - 0
yezhu-api/src/main/java/com/kioor/room/service/FloorService.java

@@ -36,4 +36,6 @@ public interface FloorService extends BaseService<FloorEntity> {
     void save(FloorDTO dto);
 
     void update(FloorDTO dto);
+
+    Long saveOrUpdate(FloorDTO dto);
 }

+ 17 - 4
yezhu-api/src/main/java/com/kioor/room/service/HousingEstateService.java

@@ -13,6 +13,7 @@ import com.kioor.common.service.BaseService;
 import com.kioor.room.dto.HousingEstateDTO;
 import com.kioor.room.dto.BuildingInitDTO;
 import com.kioor.room.entity.HousingEstateEntity;
+import com.kioor.user.dto.UserRoomDTO;
 
 import java.util.List;
 import java.util.Map;
@@ -31,12 +32,17 @@ public interface HousingEstateService extends BaseService<HousingEstateEntity> {
 
     void update(HousingEstateDTO dto);
 
+//    /**
+//     * 初始化小区信息
+//     * @param buildingInitDTOList
+//     */
+//    void buildingInit(List<BuildingInitDTO> buildingInitDTOList);
+
     /**
-     * 初始化小区信息
-     * @param buildingInitDTOList
+     * 初始化房屋信息(新)
+     * @param dto 房屋信息
      */
-    void buildingInit(List<BuildingInitDTO> buildingInitDTOList);
-
+    Long roomInit(UserRoomDTO dto);
     /**
      * 清空小区房号
      * @param housingEstateId
@@ -57,6 +63,13 @@ public interface HousingEstateService extends BaseService<HousingEstateEntity> {
      */
     int checkStatus(Long housingEstateId);
 
+    /**
+     * 校验小区重名
+     * @param name
+     * @return
+     */
+    boolean  checkName(String name);
+
     /**
      * 校验小区创建者和初始化的人是否是同一人
      * @param housingEstateId

+ 2 - 0
yezhu-api/src/main/java/com/kioor/room/service/UnitService.java

@@ -36,4 +36,6 @@ public interface UnitService extends BaseService<UnitEntity> {
     void save(UnitDTO dto);
 
     void update(UnitDTO dto);
+
+    Long saveOrUpdate(UnitDTO dto);
 }

+ 15 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/BuildingServiceImpl.java

@@ -92,4 +92,19 @@ public class BuildingServiceImpl extends BaseServiceImpl<BuildingDao, BuildingEn
 
         updateById(entity);
     }
+
+    @Override
+    public Long saveOrUpdate(BuildingDTO dto) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("buildingNum",dto.getBuildingNum());
+        params.put("housingEstateId",dto.getHousingEstateId());
+        List<BuildingEntity> list = baseDao.getList(params);
+        if(list.size()>0){
+            return list.get(0).getId();
+        }else{
+            BuildingEntity entity = ConvertUtils.sourceToTarget(dto, BuildingEntity.class);
+            insert(entity);
+            return entity.getId();
+        }
+    }
 }

+ 16 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/FloorServiceImpl.java

@@ -90,4 +90,20 @@ public class FloorServiceImpl extends BaseServiceImpl<FloorDao, FloorEntity> imp
 
         updateById(entity);
     }
+    @Override
+    public Long saveOrUpdate(FloorDTO dto) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("housingEstateId",dto.getHousingEstateId());
+        params.put("unitId",dto.getUnitId());
+        params.put("floorNum",dto.getFloorNum());
+        List<FloorEntity> list = baseDao.getList(params);
+        if(list.size()>0){
+            return list.get(0).getId();
+        }else{
+            FloorEntity entity = ConvertUtils.sourceToTarget(dto, FloorEntity.class);
+            insert(entity);
+            return entity.getId();
+        }
+    }
+
 }

+ 103 - 63
yezhu-api/src/main/java/com/kioor/room/service/impl/HousingEstateServiceImpl.java

@@ -10,7 +10,6 @@ package com.kioor.room.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.kioor.common.constant.Constant;
 import com.kioor.common.dto.SysRegionDTO;
 import com.kioor.common.page.PageData;
@@ -18,11 +17,10 @@ import com.kioor.common.service.SysRegionService;
 import com.kioor.common.service.impl.BaseServiceImpl;
 import com.kioor.common.utils.ConvertUtils;
 import com.kioor.room.dao.HousingEstateDao;
-import com.kioor.room.dto.HousingEstateDTO;
-import com.kioor.room.dto.BuildingInitDTO;
-import com.kioor.room.dto.UnitInfoDTO;
+import com.kioor.room.dto.*;
 import com.kioor.room.entity.*;
 import com.kioor.room.service.*;
+import com.kioor.user.dto.UserRoomDTO;
 import com.kioor.user.service.UserService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -129,71 +127,99 @@ public class HousingEstateServiceImpl extends BaseServiceImpl<HousingEstateDao,
         updateById(entity);
     }
 
+//    /**
+//     * 初始化小区内信息(旧)
+//     * @param buildingInitDTOList 楼栋列表
+//     */
+//    @Override
+//    public void buildingInit(List<BuildingInitDTO> buildingInitDTOList) {
+//        Map<Long, BuildingEntity> buildingsMap = new HashMap<>();
+//        Map<Long, UnitEntity> unitsMap = new HashMap<>();
+//        List<FloorEntity> floorsList = new ArrayList<>();
+//        List<RoomEntity> roomsList = new ArrayList<>();
+//
+//        //遍历楼栋
+//        for (BuildingInitDTO estateInit : buildingInitDTOList) {
+//            Long housingEstateId = estateInit.getHousingEstateId();
+//            String buildingNum = estateInit.getBuildingNum();
+//            //创建楼栋
+//            Long buildingId = IdWorker.getId();
+//            BuildingEntity buildingEntity = buildingsMap.computeIfAbsent(buildingId,
+//                    k -> new BuildingEntity(buildingId,housingEstateId, buildingNum));
+//
+//            //遍历楼栋下的单元
+//            for (UnitInfoDTO unitInfo : estateInit.getUnitInfo()) {
+//                String unitNum = unitInfo.getUnitNum();
+//                int floorCount = unitInfo.getFloorCount();
+//                int apartmentPerFloor = unitInfo.getApartmentPerFloor();
+//                //创建单元
+//                Long unitId = IdWorker.getId();
+//                UnitEntity unitEntity = unitsMap.computeIfAbsent(unitId,
+//                        k -> new UnitEntity(IdWorker.getId(),housingEstateId, buildingEntity.getId(), unitNum));
+//
+//                //遍历楼层
+//                for (int floor = 1; floor <= floorCount; floor++) {
+//                    //创建楼层
+//                    FloorEntity floorEntity = new FloorEntity(IdWorker.getId(),housingEstateId, unitEntity.getId(), floor);
+//                    floorsList.add(floorEntity);
+//                    //遍历该楼层每一户
+//                    for (int apartment = 1; apartment <= apartmentPerFloor; apartment++) {
+//                        RoomEntity roomEntity = new RoomEntity(IdWorker.getId(),housingEstateId, buildingId, unitId, floorEntity.getId(), apartment, buildingNum + "-" + unitNum + "-" + floor + String.format("%02d", apartment));
+//                        roomsList.add(roomEntity);
+//
+//                        // 检查是否需要批量保存房间
+//                        if (roomsList.size() >= BATCH_SIZE) {
+//                            roomService.insertBatch(roomsList);
+//                            roomsList.clear();
+//                        }
+//                    }
+//                }
+//            }
+//        }
+//
+//        // 批量保存剩余的房间
+//        if (!roomsList.isEmpty()) {
+//            roomService.insertBatch(roomsList);
+//        }
+//
+//        // 批量保存楼栋、单元和楼层(如果有必要的话,应先检查是否有新增数据)
+//        for (BuildingEntity building : buildingsMap.values()) {
+//            buildingService.insertBatch(Collections.singletonList(building));
+//        }
+//        for (UnitEntity unit : unitsMap.values()) {
+//            unitService.insertBatch(Collections.singletonList(unit));
+//        }
+//        if (!floorsList.isEmpty()) {
+//            floorService.insertBatch(floorsList);
+//        }
+//    }
+
+
+
     /**
-     * 初始化小区内信息
-     * @param buildingInitDTOList 楼栋列表
+     * 初始化房屋信息(新)
+     * @param dto 房屋信息
      */
     @Override
-    public void buildingInit(List<BuildingInitDTO> buildingInitDTOList) {
-        Map<Long, BuildingEntity> buildingsMap = new HashMap<>();
-        Map<Long, UnitEntity> unitsMap = new HashMap<>();
-        List<FloorEntity> floorsList = new ArrayList<>();
-        List<RoomEntity> roomsList = new ArrayList<>();
-
-        //遍历楼栋
-        for (BuildingInitDTO estateInit : buildingInitDTOList) {
-            Long housingEstateId = estateInit.getHousingEstateId();
-            String buildingNum = estateInit.getBuildingNum();
-            //创建楼栋
-            Long buildingId = IdWorker.getId();
-            BuildingEntity buildingEntity = buildingsMap.computeIfAbsent(buildingId,
-                    k -> new BuildingEntity(buildingId,housingEstateId, buildingNum));
-
-            //遍历楼栋下的单元
-            for (UnitInfoDTO unitInfo : estateInit.getUnitInfo()) {
-                String unitNum = unitInfo.getUnitNum();
-                int floorCount = unitInfo.getFloorCount();
-                int apartmentPerFloor = unitInfo.getApartmentPerFloor();
-                //创建单元
-                Long unitId = IdWorker.getId();
-                UnitEntity unitEntity = unitsMap.computeIfAbsent(unitId,
-                        k -> new UnitEntity(IdWorker.getId(),housingEstateId, buildingEntity.getId(), unitNum));
-
-                //遍历楼层
-                for (int floor = 1; floor <= floorCount; floor++) {
-                    //创建楼层
-                    FloorEntity floorEntity = new FloorEntity(IdWorker.getId(),housingEstateId, unitEntity.getId(), floor);
-                    floorsList.add(floorEntity);
-                    //遍历该楼层每一户
-                    for (int apartment = 1; apartment <= apartmentPerFloor; apartment++) {
-                        RoomEntity roomEntity = new RoomEntity(IdWorker.getId(),housingEstateId, buildingId, unitId, floorEntity.getId(), apartment, buildingNum + "-" + unitNum + "-" + floor + String.format("%02d", apartment));
-                        roomsList.add(roomEntity);
-
-                        // 检查是否需要批量保存房间
-                        if (roomsList.size() >= BATCH_SIZE) {
-                            roomService.insertBatch(roomsList);
-                            roomsList.clear();
-                        }
-                    }
-                }
-            }
-        }
+    public Long roomInit(UserRoomDTO dto) {
+        //校验该小区此楼栋是否已存在,如果不存在就新增
+        Long buildingId = buildingService.saveOrUpdate(new BuildingDTO(dto.getHousingEstateId(), dto.getBuildingNum()));
 
-        // 批量保存剩余的房间
-        if (!roomsList.isEmpty()) {
-            roomService.insertBatch(roomsList);
-        }
+        Long unitId = unitService.saveOrUpdate(new UnitDTO(dto.getHousingEstateId(), buildingId, dto.getUnitNum()));
 
-        // 批量保存楼栋、单元和楼层(如果有必要的话,应先检查是否有新增数据)
-        for (BuildingEntity building : buildingsMap.values()) {
-            buildingService.insertBatch(Collections.singletonList(building));
-        }
-        for (UnitEntity unit : unitsMap.values()) {
-            unitService.insertBatch(Collections.singletonList(unit));
-        }
-        if (!floorsList.isEmpty()) {
-            floorService.insertBatch(floorsList);
+        Long floorId = floorService.saveOrUpdate(new FloorDTO(dto.getHousingEstateId(), unitId, dto.getFloorNum()));
+
+        //校验房屋是否已存在
+        Map<String, Object> params = new HashMap<>();
+        params.put("floorId", floorId);
+        params.put("roomNum", dto.getRoomNum());
+        List<RoomDTO> roomDTOS = roomService.list(params);
+        if(!roomDTOS.isEmpty()){
+            return roomDTOS.get(0).getId();
         }
+        RoomEntity roomEntity = new RoomEntity(dto.getHousingEstateId(), buildingId, unitId, floorId, dto.getRoomNum(), dto.getBuildingNum() + "-" + dto.getUnitNum() + "-" + dto.getFloorNum() + String.format("%02d", dto.getRoomNum()));
+        roomService.insert(roomEntity);
+        return roomEntity.getId();
     }
 
     /**
@@ -247,6 +273,20 @@ public class HousingEstateServiceImpl extends BaseServiceImpl<HousingEstateDao,
         return 0;
     }
 
+    /**
+     * 校验小区重名
+     *
+     * @param name
+     * @return
+     */
+    @Override
+    public boolean checkName(String name) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("name", name);
+        List<HousingEstateEntity> list = baseDao.getList(params);
+        return !list.isEmpty();
+    }
+
     /**
      * 校验小区创建者和初始化的人是否是同一人
      *

+ 16 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/UnitServiceImpl.java

@@ -91,4 +91,20 @@ public class UnitServiceImpl extends BaseServiceImpl<UnitDao, UnitEntity> implem
 
         updateById(entity);
     }
+
+    @Override
+    public Long saveOrUpdate(UnitDTO dto) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("housingEstateId",dto.getHousingEstateId());
+        params.put("buildingId",dto.getBuildingId());
+        params.put("unitNum",dto.getUnitNum());
+        List<UnitEntity> list = baseDao.getList(params);
+        if(list.size()>0){
+            return list.get(0).getId();
+        }else{
+            UnitEntity entity = ConvertUtils.sourceToTarget(dto, UnitEntity.class);
+            insert(entity);
+            return entity.getId();
+        }
+    }
 }

+ 23 - 3
yezhu-api/src/main/java/com/kioor/user/dto/UserRoomDTO.java

@@ -23,8 +23,28 @@ import lombok.Data;
 @Schema(description = "用户房间关系")
 public class UserRoomDTO {
 
-    @Schema(description = "房间")
-    @NotNull(message = "房间不能为空")
-    private Long roomId;
+//    @Schema(description = "房间")
+//    @NotNull(message = "房间不能为空")
+//    private Long roomId;
+
+    @Schema(description = "小区")
+    @NotNull
+    private Long housingEstateId;
+
+    @Schema(description = "楼栋")
+    @NotNull
+    private int buildingNum;
+
+    @Schema(description = "单元")
+    @NotNull
+    private int unitNum;
+
+    @Schema(description = "楼层")
+    @NotNull
+    private int floorNum;
+
+    @Schema(description = "房号")
+    @NotNull
+    private int roomNum;
 
 }

+ 1 - 1
yezhu-api/src/main/resources/mapper/common/SysRegionDao.xml

@@ -21,7 +21,7 @@
     </select>
 
     <select id="getListByLevel" resultType="com.kioor.common.entity.SysRegionEntity">
-        select id, pid, name from sys_region where level = #{value} order by sort
+        select id, pid, name from sys_region where tree_level = #{value} order by sort
     </select>
 
     <select id="getById" resultType="com.kioor.common.entity.SysRegionEntity">

+ 3 - 0
yezhu-api/src/main/resources/mapper/room/BuildingDao.xml

@@ -8,6 +8,9 @@
         <if test="housingEstateId != null">
             and housing_estate_id = #{housingEstateId}
         </if>
+        <if test="buildingNum != null">
+            and building_num = #{buildingNum}
+        </if>
     </select>
 
 </mapper>

+ 6 - 0
yezhu-api/src/main/resources/mapper/room/FloorDao.xml

@@ -5,9 +5,15 @@
 
     <select id="getList" resultType="com.kioor.room.entity.FloorEntity">
         select * from tb_floor where 1=1
+        <if test="housingEstateId != null">
+            and housing_estate_id = #{housingEstateId}
+        </if>
         <if test="unitId != null">
             and unit_id = #{unitId}
         </if>
+        <if test="floorNum != null">
+            and floor_num = #{floorNum}
+        </if>
     </select>
 
 </mapper>

+ 3 - 0
yezhu-api/src/main/resources/mapper/room/RoomDao.xml

@@ -8,6 +8,9 @@
         <if test="floorId != null">
             and floor_id = #{floorId}
         </if>
+        <if test="roomNum != null">
+            and room_num = #{roomNum}
+        </if>
     </select>
     <select id="floorList" resultType="com.kioor.room.dto.RoomDTO">
         select hisRoom.*

+ 6 - 0
yezhu-api/src/main/resources/mapper/room/UnitDao.xml

@@ -5,9 +5,15 @@
 
     <select id="getList" resultType="com.kioor.room.entity.UnitEntity">
         select * from tb_unit where 1=1
+        <if test="housingEstateId != null">
+            and housing_estate_id = #{housingEstateId}
+        </if>
         <if test="buildingId != null">
             and building_id = #{buildingId}
         </if>
+        <if test="unitNum != null">
+            and unit_num = #{unitNum}
+        </if>
     </select>
 
 </mapper>