From 5ec2a670499243c5f8610ee1492843672a2e63d5 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Sat, 23 Aug 2025 16:36:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/property/service/impl/EnumFetcherServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java index b5922ac5..b10e19d8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/EnumFetcherServiceImpl.java @@ -50,6 +50,7 @@ public class EnumFetcherServiceImpl implements EnumFetcherService { private ServiceWorkOrdersTypeMapper serviceWorkOrdersTypeMapper; @Autowired private TbUnitMapper unitMapper; + @Autowired private AttendanceUserGroupMapper attendanceUserGroupMapper; @Override From d3a1d16b8f7bfa7a83bd6e03bd1311a81a28ad25 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Sat, 23 Aug 2025 19:17:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E7=89=A9?= =?UTF-8?q?=E4=B8=9A=E4=B8=80=E4=BA=9Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cleanOrder/CleanOrderController.java | 2 +- .../org/dromara/property/domain/Meet.java | 5 +++ .../property/domain/bo/MeetBookingBo.java | 8 ++--- .../dromara/property/domain/vo/MeetVo.java | 4 +++ .../domain/vo/cleanOrderVo/CleanOrderVo.java | 5 +++ .../dromara/property/mapper/TbRoomMapper.java | 3 +- .../impl/InspectionPlanServiceImpl.java | 20 ++++++----- .../service/impl/MeetBookingServiceImpl.java | 36 +++++++++++-------- .../service/impl/MeetServiceImpl.java | 19 +++++----- .../cleanOrderImpl/CleanOrderServiceImpl.java | 14 +++++--- .../mapper/Property/TbRoomMapper.xml | 15 ++++---- 11 files changed, 80 insertions(+), 51 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java index 2d3f5a13..96ea5b21 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/cleanOrder/CleanOrderController.java @@ -40,7 +40,7 @@ public class CleanOrderController extends BaseController { /** * 查询保洁订单列表 */ - @SaCheckPermission("property:clean_order:list") + //@SaCheckPermission("property:clean_order:list") @GetMapping("/list") public TableDataInfo list(CleanOrderBo bo, PageQuery pageQuery) { return cleanOrderService.queryPageList(bo, pageQuery); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java index ebd38779..6567fad3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/Meet.java @@ -93,6 +93,11 @@ public class Meet extends TenantEntity { */ private String appointmentTime; + /** + * 图片 + */ + private String picture; + /** * 开放开始时段 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBookingBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBookingBo.java index 9e1f7492..0512f2f3 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBookingBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetBookingBo.java @@ -67,7 +67,7 @@ public class MeetBookingBo extends BaseEntity { * 参会人数 */ @NotNull(message = "参会人数不能为空", groups = { AddGroup.class, EditGroup.class }) - private int personSum; + private Integer personSum; /** * 费用 @@ -78,17 +78,17 @@ public class MeetBookingBo extends BaseEntity { /** * 是否包含增值服务 */ - private int attach; + private Integer attach; /** * 支付状态 */ - private int payState; + private Integer payState; /** * 状态 */ - private int state; + private Integer state; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java index 902cec12..b562928e 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MeetVo.java @@ -123,6 +123,10 @@ public class MeetVo implements Serializable { * 预约时间 */ private String appointmentTime; + /** + * 图片 + */ + private String picture; /** * (1免费2.付费,3面议) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java index e9bc10ac..c9e1762b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/cleanOrderVo/CleanOrderVo.java @@ -38,6 +38,11 @@ public class CleanOrderVo implements Serializable { */ @ExcelProperty(value = "位置") private Long location; + /** + * 位置 + */ + @ExcelProperty(value = "位置") + private String locationName; /** * 面积 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java index bcb15a59..caae3fe6 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/TbRoomMapper.java @@ -1,6 +1,7 @@ package org.dromara.property.mapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.dromara.property.domain.TbRoom; import org.dromara.property.domain.vo.TbRoomVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -19,5 +20,5 @@ public interface TbRoomMapper extends BaseMapperPlus { //查询房间名称 String queryRoomName(Long roomId); - Map queryRoomNameList(List ids); + Map queryRoomNameList(@Param("ids") List ids); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java index c555a10d..9906ecc9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java @@ -183,15 +183,17 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { */ private void validEntityBeforebo(Long id,InspectionPlanBo bo) { //TODO 做一些数据校验,如唯一约束 - Assert.isTrue(CollUtil.isNotEmpty(bo.getInspectionPlanStaffBoList()), "巡检人员不存在"); - QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); - staffLambdaQueryWrapper.eq("inspection_plan_id", id); - inspectionPlanStaffMapper.delete(staffLambdaQueryWrapper); - List inspectionPlanStaffBoList = bo.getInspectionPlanStaffBoList(); - inspectionPlanStaffBoList.stream().forEach(s->{ - s.setInspectionPlanId(id); - }); - inspectionPlanStaffMapper.insertBatch(BeanUtil.copyToList(inspectionPlanStaffBoList, InspectionPlanStaff.class)); + if(CollUtil.isNotEmpty(bo.getInspectionPlanStaffBoList())){ + QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); + staffLambdaQueryWrapper.eq("inspection_plan_id", id); + inspectionPlanStaffMapper.delete(staffLambdaQueryWrapper); + List inspectionPlanStaffBoList = bo.getInspectionPlanStaffBoList(); + inspectionPlanStaffBoList.stream().forEach(s->{ + s.setInspectionPlanId(id); + }); + inspectionPlanStaffMapper.insertBatch(BeanUtil.copyToList(inspectionPlanStaffBoList, InspectionPlanStaff.class)); + } + } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java index 4e82e4c2..e523081d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetBookingServiceImpl.java @@ -65,9 +65,10 @@ public class MeetBookingServiceImpl implements IMeetBookingService { MeetVo meetVo = meetMapper.selectVoById(meetBookingDetailVo.getMeetId()); String locationName = roomMapper.queryRoomName(Long.valueOf(meetVo.getLocation())); meetBookingDetailVo.setLocationName(ObjectUtil.isNotEmpty(locationName) ? locationName : null); - RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetBookingVo.getPerson())); - meetBookingDetailVo.setPersonName(ObjectUtil.isNotEmpty(userInfo) ? userInfo.getNickName() : null); - meetBookingDetailVo.setPhone(ObjectUtil.isNotEmpty(userInfo) ? userInfo.getPhonenumber() : null); + //RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetBookingVo.getPerson())); + ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(Long.valueOf(meetBookingVo.getPerson())); + meetBookingDetailVo.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); + meetBookingDetailVo.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone(): null); ResidentUnitVo residentUnitVo = residentUnitMapper.selectVoById(Long.valueOf(meetBookingVo.getUnit())); meetBookingDetailVo.setUnitName(ObjectUtil.isNotNull(residentUnitVo) ? residentUnitVo.getName() : null); return meetBookingDetailVo; @@ -86,7 +87,8 @@ public class MeetBookingServiceImpl implements IMeetBookingService { Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); List residentUnitVolist = residentUnitMapper.selectVoList(); List userId = result.getRecords().stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - List remoteUserVos = remoteUserService.selectListByIds(userId); + List remoteUserVos = residentPersonMapper.selectVoByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); List meetBookingVoList = new ArrayList<>(); result.getRecords().stream().forEach(s -> { if (CollUtil.isNotEmpty(residentUnitVolist)) { @@ -95,10 +97,10 @@ public class MeetBookingServiceImpl implements IMeetBookingService { s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ? residentUnitVo.getName() : null); } if (CollUtil.isNotEmpty(remoteUserVos)) { - RemoteUserVo remoteUserVo = remoteUserVos.stream() + ResidentPersonVo residentPersonVo = remoteUserVos.stream() .filter(vo -> vo.getUserId() != null && String.valueOf(vo.getUserId()).equals(s.getPerson())).findFirst().orElse(null); - s.setPersonName(ObjectUtil.isNotEmpty(remoteUserVo) ? remoteUserVo.getNickName() : null); - s.setPhone(ObjectUtil.isNotEmpty(remoteUserVo) ? remoteUserVo.getPhonenumber() : null); + s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); + s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); } meetBookingVoList.add(s); }); @@ -118,6 +120,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService { LocalDateTime startOfDay = date.atStartOfDay(); LocalDateTime endOfDay = date.atTime(LocalTime.MAX); meetBookingLambdaQueryWrapper + .eq(MeetBooking::getState,2) .le(MeetBooking::getScheduledStarttime, endOfDay) .ge(MeetBooking::getScheduledEndtime, startOfDay); List meetBookings = baseMapper.selectList(meetBookingLambdaQueryWrapper); @@ -128,7 +131,8 @@ public class MeetBookingServiceImpl implements IMeetBookingService { SimpleDateFormat df = new SimpleDateFormat("HH"); List residentUnitVolist = residentUnitMapper.selectVoList(); List userId = meetBookingAppointmentVoList.stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - List remoteUserVos = remoteUserService.selectListByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); + List remoteUserVos = residentPersonMapper.selectVoByIds(userId); meetBookingAppointmentVoList.stream().forEach( s -> { if (CollUtil.isNotEmpty(residentUnitVolist)) { @@ -137,10 +141,10 @@ public class MeetBookingServiceImpl implements IMeetBookingService { s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo) ?residentUnitVo.getName():null); } if (CollUtil.isNotEmpty(remoteUserVos)) { - RemoteUserVo remoteUserVo = remoteUserVos.stream() - .filter(vo -> vo.getUserId() != null && String.valueOf(vo.getUserId()).equals(s.getPerson())).findFirst().orElse(null); - s.setPersonName(ObjectUtil.isNotEmpty(remoteUserVo) ? remoteUserVo.getNickName() : null); - s.setPhone(ObjectUtil.isNotEmpty(remoteUserVo) ? remoteUserVo.getPhonenumber() : null); + ResidentPersonVo residentPersonVo = remoteUserVos.stream() + .filter(vo -> vo.getId() != null && String.valueOf(vo.getId()).equals(s.getPerson())).findFirst().orElse(null); + s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); + s.setPhone(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getPhone() : null); } String str = df.format(s.getScheduledStarttime()); int a = Integer.parseInt(str); @@ -176,6 +180,7 @@ public class MeetBookingServiceImpl implements IMeetBookingService { // 构建查询条件 LambdaQueryWrapper bookingLambdaQueryWrapper = new LambdaQueryWrapper<>(); bookingLambdaQueryWrapper.eq(MeetBooking::getMeetId, meetId) + .eq(MeetBooking::getState,2) .ge(MeetBooking::getScheduledStarttime, startOfWeek) .le(MeetBooking::getScheduledEndtime, endOfWeek); List meetBookingVoList = baseMapper.selectVoList(bookingLambdaQueryWrapper); @@ -188,7 +193,8 @@ public class MeetBookingServiceImpl implements IMeetBookingService { SimpleDateFormat df = new SimpleDateFormat("HH"); List residentUnitVolist = residentUnitMapper.selectVoList(); List userId = meetBookingWeekVoList.stream().map(vo -> vo.getPerson()).distinct().map(Long::parseLong).collect(Collectors.toList()); - List remoteUserVos = remoteUserService.selectListByIds(userId); + // List remoteUserVos = remoteUserService.selectListByIds(userId); + List remoteUserVos = residentPersonMapper.selectVoByIds(userId); meetBookingWeekVoList.stream().forEach(s -> { if (CollUtil.isNotEmpty(residentUnitVolist)) { ResidentUnitVo residentUnitVo = residentUnitVolist.stream() @@ -196,9 +202,9 @@ public class MeetBookingServiceImpl implements IMeetBookingService { s.setUnitName(ObjectUtil.isNotEmpty(residentUnitVo)? residentUnitVo.getName():null); } if (CollUtil.isNotEmpty(remoteUserVos)) { - RemoteUserVo remoteUserVo = remoteUserVos.stream() + ResidentPersonVo residentPersonVo = remoteUserVos.stream() .filter(vo -> vo.getUserId() != null && String.valueOf(vo.getUserId()).equals(s.getPerson())).findFirst().orElse(null); - s.setPersonName(ObjectUtil.isNotEmpty(remoteUserVo) ? remoteUserVo.getNickName() : null); + s.setPersonName(ObjectUtil.isNotEmpty(residentPersonVo) ? residentPersonVo.getUserName() : null); } //设置指定的Date对象不设置默认返回当天的星期 calendar.setTime(s.getScheduledStarttime()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java index 26bcdef0..c986c0b5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java @@ -63,16 +63,16 @@ public class MeetServiceImpl implements IMeetService { @Override public MeetVo queryById(Long id) { MeetVo meetVo = baseMapper.selectVoById(id); -// ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetVo.getPrincipals()); -// if(ObjectUtil.isNotEmpty(residentPersonVo)){ -// meetVo.setPrincipalsName(residentPersonVo.getUserName()); -// meetVo.setPhoneNo(residentPersonVo.getPhone()); -// } - RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetVo.getPrincipals())); - if (ObjectUtil.isNotEmpty(userInfo)) { - meetVo.setPrincipalsName(userInfo.getNickName()); - meetVo.setPhoneNo(userInfo.getPhonenumber()); + ResidentPersonVo residentPersonVo = residentPersonMapper.selectVoById(meetVo.getPrincipals()); + if(ObjectUtil.isNotEmpty(residentPersonVo)){ + meetVo.setPrincipalsName(residentPersonVo.getUserName()); + meetVo.setPhoneNo(residentPersonVo.getPhone()); } +// RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(meetVo.getPrincipals())); +// if (ObjectUtil.isNotEmpty(userInfo)) { +// meetVo.setPrincipalsName(userInfo.getNickName()); +// meetVo.setPhoneNo(userInfo.getPhonenumber()); +// } String locationName = roomMapper.queryRoomName(Long.valueOf(meetVo.getLocation())); meetVo.setLocationName(locationName); return meetVo; @@ -172,6 +172,7 @@ public class MeetServiceImpl implements IMeetService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(MeetBo bo) { Meet add = MapstructUtils.convert(bo, Meet.class); + bo.setStatus(1); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java index 96edb815..6b7e2831 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/cleanOrderImpl/CleanOrderServiceImpl.java @@ -10,12 +10,10 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.property.domain.Clean; -import org.dromara.property.domain.CleanOrder; -import org.dromara.property.domain.CleanRelation; -import org.dromara.property.domain.CleanserverOrder; +import org.dromara.property.domain.*; import org.dromara.property.domain.bo.cleanOrderBo.CleanOrderBo; import org.dromara.property.domain.vo.cleanOrderVo.CleanOrderVo; +import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanOrderMapper; import org.dromara.property.mapper.cleanOrderMapper.CleanRelationMapper; @@ -47,6 +45,7 @@ public class CleanOrderServiceImpl implements ICleanOrderService { private final CleanMapper cleanMapper; private final CleanRelationMapper cleanRelationMapper; + private final TbRoomMapper roomMapper; //NOTUNBOOKING:未退订 BOOKING:已退订 private final Integer NOTUNBOOKING = 0; @@ -97,6 +96,13 @@ public class CleanOrderServiceImpl implements ICleanOrderService { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw, CleanOrderVo.class); // Page result = baseMapper.selectForPage(pageQuery.build(), lqw); + //List locationIdList = result.getRecords().stream().map(CleanOrderVo::getLocation).collect(Collectors.toList()); +// Map longStringMap = roomMapper.queryRoomName(item.getLocation()); + //找出符合条件的房间名称 + result.getRecords().forEach(item -> { + String localName = roomMapper.queryRoomName(item.getLocation()); + item.setLocationName(localName != null ? localName : "未知房间"); + }); return TableDataInfo.build(result); } diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml index bdc04ceb..fbe839ae 100644 --- a/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/TbRoomMapper.xml @@ -6,26 +6,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - SELECT - concat(c.community_name, b.building_name, u.unit_name, f.floor_name, r.room_number) + r.id, + concat(c.community_name, b.building_name, f.floor_name, r.room_number) AS room_name FROM tb_room r INNER JOIN tb_floor f ON r.floor_id = f.id - INNER JOIN tb_unit u ON f.unit_id = u.id - INNER JOIN tb_building b ON u.building_id = b.id + INNER JOIN tb_building b ON f.building_id = b.id INNER JOIN tb_community c ON b.community_id = c.id - where r.id IN + WHERE r.id IN #{id}