tangbin 10 månader sedan
förälder
incheckning
6b96ef2f38

+ 55 - 3
yezhu-api/src/main/java/com/kioor/room/controller/ApiHousingEstateController.java

@@ -10,7 +10,9 @@ package com.kioor.room.controller;
 
 
 import com.kioor.annotation.Login;
+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.Result;
 import com.kioor.common.validator.AssertUtils;
@@ -20,7 +22,9 @@ import com.kioor.common.validator.group.DefaultGroup;
 import com.kioor.common.validator.group.UpdateGroup;
 import com.kioor.room.dto.HousingEstateDTO;
 import com.kioor.room.dto.BuildingInitDTO;
+import com.kioor.room.enums.HousingEstateStatus;
 import com.kioor.room.service.HousingEstateService;
+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.Parameters;
@@ -54,9 +58,12 @@ public class ApiHousingEstateController {
             @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true),
             @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"),
             @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)"),
+            @Parameter(name = "status", description = "小区状态:0待审核,1审核通过,2审核不通过,3禁用"),
             @Parameter(name = "name", description = "名称")
     })
     public Result<PageData<HousingEstateDTO>> page(@Parameter(hidden = true) @RequestParam Map<String, Object> params) {
+        //如果状态为空则查询已审核通过的小区
+//        params.putIfAbsent("status", 1);
         PageData<HousingEstateDTO> page = housingEstateService.page(params);
 
         return new Result<PageData<HousingEstateDTO>>().ok(page);
@@ -77,6 +84,7 @@ 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);
@@ -108,6 +116,30 @@ public class ApiHousingEstateController {
         return new Result();
     }
 
+    @Login
+    @PutMapping("examine")
+    @Operation(summary = "审核小区")
+    @Parameters({
+            @Parameter(name = "housingEstateId", description = "小区id", required = true),
+            @Parameter(name = "status", description = "小区状态:0待审核,1审核通过,2审核不通过,3禁用", required = true)
+    })
+    public Result examine(@Parameter(hidden = true) @RequestParam Map<String, Object> params, @LoginUser UserEntity user) {
+        //效验登录用户是否是管理员
+        if(!user.getMobile().equals("18582543217")){
+            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"非法操作,请联系管理员审核");
+        }
+        if(params.get("housingEstateId")==null||params.get("status")==null){
+            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"参数非法");
+        }
+        HousingEstateDTO housingEstate = housingEstateService.get(Long.parseLong(String.valueOf(params.get("housingEstateId"))));
+        if(housingEstate==null){
+            return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR,"小区不存在");
+        }
+        housingEstate.setStatus(Integer.parseInt(String.valueOf(params.get("status"))));
+        housingEstateService.update(housingEstate);
+
+        return new Result();
+    }
 
     @Login
     @PostMapping("housingEstateInit")
@@ -115,14 +147,34 @@ public class ApiHousingEstateController {
     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,"操作非法,小区已有数据,请联系管理员重置");
+        }
         //先清空房号
-        if(buildingInitDTOList.size() > 0){
+        if(!buildingInitDTOList.isEmpty()){
             buildingInitDTOList.forEach(buildingInitDTO -> {
                 housingEstateService.cleanAll(buildingInitDTO.getHousingEstateId());
             });
         }
-
+        //更新小区初始化状态为1
+        housingEstateService.updateInitFlag(buildingInitDTOList.get(0).getHousingEstateId(),1);
+        //初始化小区信息
         housingEstateService.buildingInit(buildingInitDTOList);
 
         return new Result();

+ 33 - 4
yezhu-api/src/main/java/com/kioor/room/controller/ApiRoomController.java

@@ -10,6 +10,7 @@ package com.kioor.room.controller;
 
 
 import com.kioor.annotation.Login;
+import com.kioor.common.exception.ErrorCode;
 import com.kioor.common.utils.Result;
 import com.kioor.common.validator.AssertUtils;
 import com.kioor.common.validator.ValidatorUtils;
@@ -18,6 +19,8 @@ import com.kioor.common.validator.group.DefaultGroup;
 import com.kioor.common.validator.group.UpdateGroup;
 import com.kioor.room.dto.RoomDTO;
 import com.kioor.room.dto.RoomDetailDTO;
+import com.kioor.room.enums.HousingEstateStatus;
+import com.kioor.room.service.HousingEstateService;
 import com.kioor.room.service.RoomService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -43,6 +46,8 @@ public class ApiRoomController {
 
     private final RoomService roomService;
 
+    private final HousingEstateService housingEstateService;
+
     @Login
     @GetMapping("list")
     @Operation(summary = "列表")
@@ -63,7 +68,13 @@ public class ApiRoomController {
     @Operation(summary = "我同楼层的房间列表")
     public Result<List<RoomDetailDTO>> floorList(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
         List<RoomDetailDTO> list = roomService.floorList(userId);
-
+        //校验小区状态
+        if(list.size()>0){
+            int status = housingEstateService.checkStatus(list.get(0).getHousingEstateId());
+            if(status!=1) {
+                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+            }
+        }
         return new Result<List<RoomDetailDTO>>().ok(list);
     }
 
@@ -73,7 +84,13 @@ public class ApiRoomController {
     public Result<RoomDetailDTO> roomUp(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
 
         RoomDetailDTO dto = roomService.roomUp(userId);
-
+        //校验小区状态
+        if(dto!=null){
+            int status = housingEstateService.checkStatus(dto.getHousingEstateId());
+            if(status!=1) {
+                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+            }
+        }
         return new Result<RoomDetailDTO>().ok(dto);
     }
 
@@ -83,7 +100,13 @@ public class ApiRoomController {
     public Result<RoomDetailDTO> roomDown(@Parameter(hidden = true) @RequestAttribute("userId") Long userId) {
 
         RoomDetailDTO dto = roomService.roomDown(userId);
-
+        //校验小区状态
+        if(dto!=null){
+            int status = housingEstateService.checkStatus(dto.getHousingEstateId());
+            if(status!=1) {
+                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+            }
+        }
         return new Result<RoomDetailDTO>().ok(dto);
     }
 
@@ -92,7 +115,13 @@ public class ApiRoomController {
     @GetMapping("{id}")
     public Result<RoomDTO> info(@PathVariable("id") Long id) {
         RoomDTO room = roomService.get(id);
-
+        //校验小区状态
+        if(room!=null){
+            int status = housingEstateService.checkStatus(room.getHousingEstateId());
+            if(status!=1) {
+                return new Result().error(ErrorCode.INTERNAL_SERVER_ERROR, "无法访问,小区当前状态为" + HousingEstateStatus.fromCode(status).getDescription());
+            }
+        }
         return new Result<RoomDTO>().ok(room);
     }
 

+ 3 - 0
yezhu-api/src/main/java/com/kioor/room/dto/HousingEstateDTO.java

@@ -59,4 +59,7 @@ public class HousingEstateDTO {
     @Schema(description = "创建时间")
     private Date createDate;
 
+    @Schema(description = "小区状态:0待审核,1审核通过,2审核不通过,3禁用")
+    private int status;
+
 }

+ 8 - 0
yezhu-api/src/main/java/com/kioor/room/entity/HousingEstateEntity.java

@@ -40,6 +40,10 @@ public class HousingEstateEntity implements Serializable {
      * 详细地址
      */
     private String addr;
+    /**
+     * 是否已经初始化
+     */
+    private int initFlag;
     /**
      * 创建人
      */
@@ -48,5 +52,9 @@ public class HousingEstateEntity implements Serializable {
      * 创建时间
      */
     private Date createDate;
+    /**
+     * 小区状态:0待审核,1审核通过,2审核不通过,3禁用
+     */
+    private int status;
 
 }

+ 34 - 0
yezhu-api/src/main/java/com/kioor/room/enums/HousingEstateStatus.java

@@ -0,0 +1,34 @@
+package com.kioor.room.enums;
+
+public enum HousingEstateStatus {
+    PENDING(0, "待审核"),
+    APPROVED(1, "审核通过"),
+    REJECTED(2, "审核不通过"),
+    DISABLED(3, "禁用");
+
+    private final int code;
+    private final String description;
+
+    HousingEstateStatus(int code, String description) {
+        this.code = code;
+        this.description = description;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    // 可选:提供一个静态方法来根据code查找枚举实例
+    public static HousingEstateStatus fromCode(int code) {
+        for (HousingEstateStatus status : values()) {
+            if (status.getCode() == code) {
+                return status;
+            }
+        }
+        throw new IllegalArgumentException("Invalid status code: " + code);
+    }
+}

+ 35 - 0
yezhu-api/src/main/java/com/kioor/room/service/HousingEstateService.java

@@ -42,4 +42,39 @@ public interface HousingEstateService extends BaseService<HousingEstateEntity> {
      * @param housingEstateId
      */
     void cleanAll(Long housingEstateId);
+
+    /**
+     * 校验列表中的楼栋是否都是同一小区
+     * @param buildingInitDTOList
+     * @return
+     */
+    boolean checkBuildingList(List<BuildingInitDTO> buildingInitDTOList);
+
+    /**
+     * 校验小区状态
+     * @param housingEstateId
+     * @return
+     */
+    int checkStatus(Long housingEstateId);
+
+    /**
+     * 校验小区创建者和初始化的人是否是同一人
+     * @param housingEstateId
+     * @param userId
+     * @return
+     */
+    boolean checkCreateUser(Long housingEstateId,Long userId);
+
+    /**
+     * 校验小区是否已被初始化,如果已被初始化则不允许操作
+     * @param housingEstateId
+     * @return
+     */
+    boolean checkInit(Long housingEstateId);
+
+    /**
+     * 更新小区初始化状态
+     * @param housingEstateId
+     */
+    void updateInitFlag(Long housingEstateId,int initFlag);
 }

+ 78 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/HousingEstateServiceImpl.java

@@ -210,4 +210,82 @@ public class HousingEstateServiceImpl extends BaseServiceImpl<HousingEstateDao,
         userHousingEstateService.delete(new LambdaQueryWrapper<UserHousingEstateEntity>().eq(UserHousingEstateEntity::getHousingEstateId, housingEstateId));
     }
 
+    /**
+     * 校验列表中的楼栋是否都是同一小区
+     *
+     * @param buildingInitDTOList
+     * @return
+     */
+    @Override
+    public boolean checkBuildingList(List<BuildingInitDTO> buildingInitDTOList) {
+        if (buildingInitDTOList.isEmpty()) {
+            return true; // 空列表视为一致
+        }
+
+        Long firstHousingEstateId = buildingInitDTOList.get(0).getHousingEstateId();
+
+        long inconsistentCount = buildingInitDTOList.stream()
+                .filter(buildingInitDTO -> !Objects.equals(buildingInitDTO.getHousingEstateId(), firstHousingEstateId))
+                .count();
+
+        return inconsistentCount == 0;
+    }
+
+    /**
+     * 校验小区状态
+     *
+     * @param housingEstateId
+     * @return
+     */
+    @Override
+    public int checkStatus(Long housingEstateId) {
+        HousingEstateEntity housingEstateEntity = selectById(housingEstateId);
+        if(housingEstateEntity!=null){
+            return housingEstateEntity.getStatus();
+        }
+
+        return 0;
+    }
+
+    /**
+     * 校验小区创建者和初始化的人是否是同一人
+     *
+     * @param housingEstateId
+     * @param userId
+     * @return
+     */
+    @Override
+    public boolean checkCreateUser(Long housingEstateId,Long userId) {
+        HousingEstateEntity housingEstateEntity = selectById(housingEstateId);
+        return Objects.equals(housingEstateEntity.getCreateUser(), userId);
+    }
+
+    /**
+     * 校验小区是否可以初始化,如果已被初始化则不允许操作
+     *
+     * @param housingEstateId
+     * @return
+     */
+    @Override
+    public boolean checkInit(Long housingEstateId) {
+        HousingEstateEntity housingEstateEntity = selectById(housingEstateId);
+        if(housingEstateEntity.getInitFlag() == 1){
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 更新小区初始化状态
+     *
+     * @param housingEstateId
+     * @param initFlag
+     */
+    @Override
+    public void updateInitFlag(Long housingEstateId, int initFlag) {
+        HousingEstateEntity housingEstateEntity = selectById(housingEstateId);
+        housingEstateEntity.setInitFlag(initFlag);
+        baseDao.updateById(housingEstateEntity);
+    }
+
 }

+ 3 - 0
yezhu-api/src/main/java/com/kioor/room/service/impl/RoomServiceImpl.java

@@ -74,6 +74,9 @@ public class RoomServiceImpl extends BaseServiceImpl<RoomDao, RoomEntity> implem
      * @param loginUser
      */
     private void getRoomDetailDTO(RoomDetailDTO roomDetailDTO, UserEntity loginUser) {
+        if(roomDetailDTO==null){
+            return;
+        }
         RoomDTO myRoom = findRoomByUserId(loginUser.getId());
         if(myRoom!=null && Objects.equals(myRoom.getId(), roomDetailDTO.getId()))
         {

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

@@ -6,6 +6,9 @@
 
     <select id="getList" resultType="com.kioor.room.entity.HousingEstateEntity">
         select * from tb_housing_estate where 1=1
+        <if test="status != null">
+            and status = #{status}
+        </if>
         <if test="name != null and name.trim() != ''">
             and name like #{name}
         </if>