diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/house/HouseDO.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/house/HouseDO.java index e11896a..9456c10 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/house/HouseDO.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/dataobject/house/HouseDO.java @@ -3,7 +3,7 @@ package com.fjrcloud.community.module.community.dal.dataobject.house; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import com.fjrcloud.community.framework.mybatis.core.dataobject.BaseDO; +import com.fjrcloud.community.framework.tenant.core.db.TenantBaseDO; import lombok.*; import java.math.BigDecimal; @@ -21,7 +21,7 @@ import java.math.BigDecimal; @Builder @NoArgsConstructor @AllArgsConstructor -public class HouseDO extends BaseDO { +public class HouseDO extends TenantBaseDO { /** * 主键ID diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/mysql/house/HouseMapper.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/mysql/house/HouseMapper.java index a05cd7c..e139b72 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/mysql/house/HouseMapper.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/dal/mysql/house/HouseMapper.java @@ -30,4 +30,13 @@ public interface HouseMapper extends BaseMapperX { .orderByDesc(HouseDO::getId)); } + default HouseDO selectByCommunityAndRoom(Long communityId, String buildingNo, String unitNo, String roomNo) { + return selectOne(new LambdaQueryWrapperX() + .eq(HouseDO::getCommunityId, communityId) + .eq(HouseDO::getBuildingNo, buildingNo) + .eq(HouseDO::getUnitNo, unitNo) + .eq(HouseDO::getRoomNo, roomNo) + .last("LIMIT 1")); + } + } \ No newline at end of file diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java index eb29b0c..c3acb93 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/enums/ErrorCodeConstants.java @@ -19,6 +19,8 @@ public interface ErrorCodeConstants { ErrorCode HOUSE_IMPORT_LIST_IS_EMPTY = new ErrorCode(2_001_001_002, "导入房屋数据不能为空!"); + ErrorCode HOUSE_DUPLICATE = new ErrorCode(2_001_001_003, "该小区已存在相同的房屋【{}号楼-{}单元-{}室】"); + ErrorCode MEMBER_HOUSE_NOT_EXISTS = new ErrorCode(2_002_001_002, "业主认证信息不存在"); ErrorCode MEMBER_HOUSE_EXISTS = new ErrorCode(2_002_001_003, "该房屋已存在认证记录,请勿重复提交"); diff --git a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/house/HouseServiceImpl.java b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/house/HouseServiceImpl.java index 99fb7aa..7e80e91 100644 --- a/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/house/HouseServiceImpl.java +++ b/fjrcloud-module-community/src/main/java/com/fjrcloud/community/module/community/service/house/HouseServiceImpl.java @@ -28,8 +28,7 @@ import java.util.stream.Collectors; import static com.fjrcloud.community.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.fjrcloud.community.framework.tenant.core.security.TenantSecurityWebFilter.SYSTEM_TENANT_ID; -import static com.fjrcloud.community.module.community.enums.ErrorCodeConstants.HOUSE_IMPORT_LIST_IS_EMPTY; -import static com.fjrcloud.community.module.community.enums.ErrorCodeConstants.HOUSE_NOT_EXISTS; +import static com.fjrcloud.community.module.community.enums.ErrorCodeConstants.*; /** * 房屋信息主 Service 实现类 @@ -51,8 +50,15 @@ public class HouseServiceImpl implements HouseService { @Override public Long createHouse(HouseSaveReqVO createReqVO) { + // 校验房屋是否重复(同一小区、同一楼号、同一单元号、同一门牌号) + validateHouseDuplicate(null, createReqVO.getCommunityId(), + createReqVO.getBuildingNo(), createReqVO.getUnitNo(), createReqVO.getRoomNo()); + // 插入 HouseDO house = BeanUtils.toBean(createReqVO, HouseDO.class); + if(Objects.equals(TenantContextHolder.getTenantId(), SYSTEM_TENANT_ID)){ + house.setTenantId(house.getCommunityId()); + } houseMapper.insert(house); // 返回 @@ -63,8 +69,16 @@ public class HouseServiceImpl implements HouseService { public void updateHouse(HouseSaveReqVO updateReqVO) { // 校验存在 validateHouseExists(updateReqVO.getId()); + + // 校验房屋是否重复(排除当前记录) + validateHouseDuplicate(updateReqVO.getId(), updateReqVO.getCommunityId(), + updateReqVO.getBuildingNo(), updateReqVO.getUnitNo(), updateReqVO.getRoomNo()); + // 更新 HouseDO updateObj = BeanUtils.toBean(updateReqVO, HouseDO.class); + if(Objects.equals(TenantContextHolder.getTenantId(), SYSTEM_TENANT_ID)){ + updateObj.setTenantId(updateObj.getCommunityId()); + } houseMapper.updateById(updateObj); } @@ -89,6 +103,24 @@ public class HouseServiceImpl implements HouseService { } } + /** + * 校验房屋是否重复 + * + * @param id 房屋ID(更新时传入,新增时传null) + * @param communityId 小区ID + * @param buildingNo 楼号 + * @param unitNo 单元号 + * @param roomNo 门牌号 + */ + private void validateHouseDuplicate(Long id, Long communityId, String buildingNo, String unitNo, String roomNo) { + HouseDO existHouse = houseMapper.selectByCommunityAndRoom(communityId, buildingNo, unitNo, roomNo); + + // 如果找到了重复的房屋,且不是当前正在更新的房屋,则抛出异常 + if (existHouse != null && !Objects.equals(existHouse.getId(), id)) { + throw exception(HOUSE_DUPLICATE, buildingNo, unitNo, roomNo); + } + } + @Override public HouseDO getHouse(Long id) { return houseMapper.selectById(id);