diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/BuildingTreeLevelDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/BuildingTreeLevelDTO.java index 195336b46e..5aa877ecaf 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/BuildingTreeLevelDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/BuildingTreeLevelDTO.java @@ -17,6 +17,7 @@ package com.epmet.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.Data; import java.io.Serializable; @@ -57,4 +58,8 @@ public class BuildingTreeLevelDTO implements Serializable { private String showNum; private String showName; + //agency、grid + @JsonIgnore + private String orgType; + } \ No newline at end of file diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseManageTreeFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseManageTreeFormDTO.java index 6ef78708be..f8a659eafd 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseManageTreeFormDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseManageTreeFormDTO.java @@ -19,13 +19,6 @@ public class HouseManageTreeFormDTO implements Serializable { public interface NodeEventGroup { } - /** - * 当前工作人员所属组织id - * 房屋信息界面左侧树初始化 - */ - @NotBlank(message = "工作人员所属组织id不能为空", groups = InitTreeGroup.class) - private String staffAgencyId; - /** * 组织id、网格id、小区id、楼栋id @@ -50,12 +43,12 @@ public class HouseManageTreeFormDTO implements Serializable { /** * tokenDto.customerId */ - @NotBlank(message = "customerId不能为空", groups = InitTreeGroup.class) + @NotBlank(message = "customerId不能为空", groups = {InitTreeGroup.class,NodeEventGroup.class}) private String customerId; /** * tokenDto.userId */ - @NotBlank(message = "staffId不能为空", groups = InitTreeGroup.class) + @NotBlank(message = "staffId不能为空", groups = {InitTreeGroup.class,NodeEventGroup.class}) private String staffId; } diff --git a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcHouseListFormDTO.java b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcHouseListFormDTO.java index e2022b1420..fc24ee9fae 100644 --- a/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcHouseListFormDTO.java +++ b/epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcHouseListFormDTO.java @@ -115,4 +115,14 @@ public class IcHouseListFormDTO extends PageFormDTO { * 楼栋ID */ private String unitId; + + + //对应界面上的所属组织 + /** + * 组织:agency + * 网格:grid + * 与orgId一起使用 + */ + private String orgType; + private String orgId; } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java index c144b425b9..971015a298 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java @@ -123,16 +123,34 @@ public class BuildingController { /** * 房屋信息左侧树 - * 逐级展开,用户点击树节点去查询 + * 逐级展开,用户点击树节点去查询 目前只有烟台客户房屋信息调用 * @param tokenDTO * @return */ @PostMapping("treeinit") - public Result> treeInit(@LoginUser TokenDto tokenDTO,@RequestBody HouseManageTreeFormDTO formDTO){ + public Result treeInit(@LoginUser TokenDto tokenDTO){ + HouseManageTreeFormDTO formDTO=new HouseManageTreeFormDTO(); formDTO.setCustomerId(tokenDTO.getCustomerId()); formDTO.setStaffId(tokenDTO.getUserId()); - List buildingTreeLevelDTOS =buildingService.treeInit(formDTO); - return new Result>().ok(buildingTreeLevelDTOS); + ValidatorUtils.validateEntity(formDTO,HouseManageTreeFormDTO.InitTreeGroup.class); + BuildingTreeLevelDTO buildingTreeLevelDTOS =buildingService.treeInit(formDTO); + return new Result().ok(buildingTreeLevelDTOS); + } + + /** + * 房屋信息左侧树 + * 点击树上节点,查询下一级列表 + * @param tokenDTO + * @param formDTO + * @return + */ + @PostMapping("next-tree-node") + public Result> nextTreeNode(@LoginUser TokenDto tokenDTO,@RequestBody HouseManageTreeFormDTO formDTO){ + formDTO.setCustomerId(tokenDTO.getCustomerId()); + formDTO.setStaffId(tokenDTO.getUserId()); + ValidatorUtils.validateEntity(formDTO,HouseManageTreeFormDTO.NodeEventGroup.class); + List resultList =buildingService.nextTreeNode(formDTO); + return new Result>().ok(resultList); } /** diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java index e2fbd3162a..7e98f598f8 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java @@ -18,6 +18,7 @@ package com.epmet.dao; import com.epmet.commons.mybatis.dao.BaseDao; +import com.epmet.dto.BuildingTreeLevelDTO; import com.epmet.dto.CustomerAgencyDTO; import com.epmet.dto.form.GridInfoVaccinePrarmeterFormDTO; import com.epmet.dto.form.OrgInfoPointFormDTO; @@ -401,6 +402,25 @@ public interface CustomerAgencyDao extends BaseDao { List getCurrentUserCommunityInfo(@Param("customerId") String customerId,@Param("staffAgencyId")String staffAgencyId); + /** + * + * @param agencyId + * @return 组织信息,用于房屋信息左侧树 + */ + BuildingTreeLevelDTO selectAgencyTree(String agencyId); + /** + * + * @param agencyId + * @return 获取当前agencyId的下一级组织+直属网格 + */ + List selectNextOrg(String agencyId); + + /** + * 查询当前agencyId下 组织数+网格数 + * @param agencyId + * @return + */ + Integer selectTotalNext(String agencyId); } diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java index 0b6beb0aa8..27e1c4c1ee 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java @@ -67,7 +67,16 @@ public interface BuildingService { * @param houseManageTreeFormDTO * @return 逐级展开,用户点击树节点去查询 */ - List treeInit(HouseManageTreeFormDTO houseManageTreeFormDTO); + BuildingTreeLevelDTO treeInit(HouseManageTreeFormDTO houseManageTreeFormDTO); + + /** + * 房屋信息左侧树 + * 点击树上节点,查询下一级列表 + * @param houseManageTreeFormDTO + * @return + */ + List nextTreeNode(HouseManageTreeFormDTO houseManageTreeFormDTO); + List treeIds(String customerId, String staffId); PageData listBuilding(IcBuildingListFormDTO formDTO); diff --git a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java index 5e5eac517f..3219513ac1 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java +++ b/epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java @@ -53,10 +53,7 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; @@ -320,57 +317,175 @@ public class BuildingServiceImpl implements BuildingService { * @return 逐级展开,用户点击树节点去查询 */ @Override - public List treeInit(HouseManageTreeFormDTO formDTO) { - List customerAgencyList=new ArrayList<>(); - // 1.获取所在组织及下级组织 - CustomerAgencyEntity customerAgency = customerAgencyDao.selectById(formDTO.getStaffAgencyId()); - customerAgencyList.add(customerAgency); - // 2、查询直属下级组织 - List subAgencyList = icBuildingDao.selectAgencyChildrenList(formDTO.getCustomerId(), null, formDTO.getStaffAgencyId()); - if (!CollectionUtils.isEmpty(customerAgencyList)) { - customerAgencyList.addAll(subAgencyList); + public BuildingTreeLevelDTO treeInit(HouseManageTreeFormDTO formDTO) { + CustomerStaffInfoCacheResult staffInfoCacheResult=CustomerStaffRedis.getStaffInfo(formDTO.getCustomerId(),formDTO.getStaffId()); + BuildingTreeLevelDTO resultDto = customerAgencyDao.selectAgencyTree(staffInfoCacheResult.getAgencyId()); + if (null != resultDto) { + int showNum = customerAgencyDao.selectTotalNext(staffInfoCacheResult.getAgencyId()); + resultDto.setShowNum(String.valueOf(showNum)); + resultDto.setShowName(String.format("%s(%s)", resultDto.getLabel(), showNum)); + List children = customerAgencyDao.selectNextOrg(staffInfoCacheResult.getAgencyId()); + for (BuildingTreeLevelDTO dto : children) { + if ("agency".equals(dto.getOrgType())) { + dto.setShowNum(String.valueOf(customerAgencyDao.selectTotalNext(dto.getId()))); + dto.setShowName(String.format("%s(%s)", dto.getLabel(), dto.getShowNum())); + } else if ("grid".equals(dto.getOrgType())) { + LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda() + .eq(IcNeighborHoodEntity::getGridId, dto.getId()); + dto.setShowNum(String.valueOf(icNeighborHoodDao.selectCount(queryWrapper))); + dto.setShowName(String.format("%s(%s)", dto.getLabel(), dto.getShowNum())); + } + } + resultDto.setChildren(children); } + return resultDto; + } - List resultList = customerAgencyList.stream().map(item -> { - BuildingTreeLevelDTO buildingTreeLevelDTO = new BuildingTreeLevelDTO(); - buildingTreeLevelDTO.setId(item.getId()); - buildingTreeLevelDTO.setPId(item.getPid()); - buildingTreeLevelDTO.setLabel(item.getOrganizationName()); - buildingTreeLevelDTO.setLevel(item.getLevel()); - buildingTreeLevelDTO.setLongitude(item.getLongitude()); - buildingTreeLevelDTO.setLatitude(item.getLatitude()); - buildingTreeLevelDTO.setChildren(new ArrayList<>()); - // 当前组织有几个下级组织 - buildingTreeLevelDTO.setShowNum(StrConstant.EPMETY_STR); - return buildingTreeLevelDTO; - }).collect(Collectors.toList()); + /** + * 房屋信息左侧树 + * 点击树上节点,查询下一级列表 + * + * @param formDTO + * @return + */ + @Override + public List nextTreeNode(HouseManageTreeFormDTO formDTO) { + /** + * level:::: + * 省级:province + * 市级: city + * 区县级: district, + * 乡(镇、街道)级:street, + * 社区级:community, + * 网格:grid + * 小区:neighborHood + * 楼栋:building + */ + List resultList = new ArrayList<>(); + if ("province".equals(formDTO.getLevel()) + || "city".equals(formDTO.getLevel()) + || "district".equals(formDTO.getLevel()) + || "street".equals(formDTO.getLevel())) { + List list = customerAgencyDao.selectNextOrg(formDTO.getId()); + for (BuildingTreeLevelDTO dto : list) { + if ("agency".equals(dto.getOrgType())) { + dto.setShowNum(String.valueOf(customerAgencyDao.selectTotalNext(dto.getId()))); + dto.setShowName(String.format("%s(%s)", dto.getLabel(), dto.getShowNum())); + } else if ("grid".equals(dto.getOrgType())) { + LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda() + .eq(IcNeighborHoodEntity::getGridId, dto.getId()); + dto.setShowNum(String.valueOf(icNeighborHoodDao.selectCount(queryWrapper))); + dto.setShowName(String.format("%s(%s)", dto.getLabel(), dto.getShowNum())); + } + } + resultList.addAll(list); + } else if ("community".equals(formDTO.getLevel())) { + // 网格列表,需要计算网格下小区数量 + resultList.addAll(getGridTreeNode(formDTO.getId())); + } else if ("grid".equals(formDTO.getLevel())) { + // 小区列表,需要计算小区下楼栋数量 + resultList.addAll(getNeighborHoodTreeNode(formDTO.getId())); + } else if ("neighborHood".equals(formDTO.getLevel())) { + // 楼栋列表,需要计算楼栋下 实有房屋数/楼栋总户数 + resultList.addAll(getBuildTreeNode(formDTO.getId())); + } else if ("building".equals(formDTO.getLevel())) { + // 直接返回 + return resultList; + } + return resultList; + } - // 3.获取组织下的网格 + private List getGridTreeNode(String agencyId) { + List list = new ArrayList<>(); LambdaQueryWrapper gridWrapper = new LambdaQueryWrapper<>(); - gridWrapper.eq(CustomerGridEntity::getPid, formDTO.getStaffAgencyId()); + gridWrapper.eq(CustomerGridEntity::getPid, agencyId); gridWrapper.last("ORDER BY sort,CAST(GRID_NAME AS SIGNED),CONVERT(GRID_NAME using gbk)"); List customerGridList = customerGridDao.selectList(gridWrapper); + customerGridList.forEach(gridEntity -> { + BuildingTreeLevelDTO resultDto = new BuildingTreeLevelDTO(); + resultDto.setId(gridEntity.getId()); + resultDto.setLabel(gridEntity.getGridName()); + resultDto.setLevel("grid"); + resultDto.setPId(gridEntity.getPid()); + resultDto.setLongitude(gridEntity.getLongitude()); + resultDto.setLatitude(gridEntity.getLatitude()); + resultDto.setChildren(new ArrayList<>()); + // 当前网格下有几个小区 + LambdaQueryWrapper neighborhoodWrapper = new QueryWrapper().lambda() + .eq(IcNeighborHoodEntity::getGridId, resultDto.getId()); + resultDto.setShowNum(String.valueOf(icNeighborHoodDao.selectCount(neighborhoodWrapper))); + resultDto.setShowName(String.format("%s(%s)", resultDto.getLabel(), resultDto.getShowNum())); + list.add(resultDto); + }); + return list; + } - if (CollectionUtils.isEmpty(customerGridList)) { - return covertToTree(customerAgency, resultList); - } + private List getNeighborHoodTreeNode(String gridId) { + List list = new ArrayList<>(); + // 当前网格下有几个小区 + LambdaQueryWrapper neighborhoodWrapper = new QueryWrapper().lambda() + .eq(IcNeighborHoodEntity::getGridId, gridId) + .last("ORDER BY CAST(NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(NEIGHBOR_HOOD_NAME using gbk)"); + ; + List neighborHoodEntityList = icNeighborHoodDao.selectList(neighborhoodWrapper); + neighborHoodEntityList.forEach(item -> { + BuildingTreeLevelDTO neighborHood = new BuildingTreeLevelDTO(); + neighborHood.setId(item.getId()); + neighborHood.setPId(item.getGridId()); + neighborHood.setLabel(item.getNeighborHoodName()); + neighborHood.setLevel("neighborHood"); + neighborHood.setLongitude(item.getLongitude()); + neighborHood.setLatitude(item.getLatitude()); + neighborHood.setChildren(new ArrayList<>()); + // 当前小区下,有几栋楼 + LambdaQueryWrapper buildingQueryWrapper = new QueryWrapper().lambda() + .eq(IcBuildingEntity::getNeighborHoodId, neighborHood.getId()); + neighborHood.setShowNum(String.valueOf(icBuildingDao.selectCount(buildingQueryWrapper))); + neighborHood.setShowNum(String.format("%s(%s)", neighborHood.getLabel(), neighborHood.getShowNum())); + list.add(neighborHood); + }); + return list; + } - List gridList = customerGridList.stream().map(item -> { - BuildingTreeLevelDTO buildingTreeLevelDTO = new BuildingTreeLevelDTO(); - buildingTreeLevelDTO.setId(item.getId()); - buildingTreeLevelDTO.setLabel(item.getGridName()); - buildingTreeLevelDTO.setLevel("grid"); - buildingTreeLevelDTO.setPId(item.getPid()); - buildingTreeLevelDTO.setLongitude(item.getLongitude()); - buildingTreeLevelDTO.setLatitude(item.getLatitude()); - buildingTreeLevelDTO.setChildren(new ArrayList<>()); - // 当前网格下有几个小区 - buildingTreeLevelDTO.setShowNum(StrConstant.EPMETY_STR); - return buildingTreeLevelDTO; - }).collect(Collectors.toList()); + private List getBuildTreeNode(String neighborHoodId) { + List list = new ArrayList<>(); + LambdaQueryWrapper buildingQueryWrapper = new QueryWrapper().lambda() + .in(IcBuildingEntity::getNeighborHoodId, neighborHoodId) + .last("ORDER BY SORT, CAST(BUILDING_NAME AS SIGNED),CONVERT(BUILDING_NAME USING gbk)"); + List icBuildingList = icBuildingDao.selectList(buildingQueryWrapper); + + // 获取楼里已经有多少个房屋 + LambdaQueryWrapper icHouseEntityWrapper = new QueryWrapper().lambda() + .eq(IcHouseEntity::getNeighborHoodId, neighborHoodId) + .select(IcHouseEntity::getId) + .select(IcHouseEntity::getBuildingId); + List buildingHouseCount = icHouseDao.selectList(icHouseEntityWrapper); + Map buildingHouseCountMap = buildingHouseCount.stream().collect(Collectors.groupingBy(IcHouseEntity::getBuildingId, Collectors.counting())); - resultList.addAll(gridList); - return covertToTree(customerAgency, resultList); + icBuildingList.forEach(item -> { + BuildingTreeLevelDTO building = new BuildingTreeLevelDTO(); + building.setId(item.getId()); + building.setPId(item.getNeighborHoodId()); + building.setLabel(item.getBuildingName()); + building.setLevel("building"); + building.setLongitude(item.getLongitude()); + building.setLatitude(item.getLatitude()); + building.setChildren(new ArrayList<>()); + // 当前楼栋共有多少户,有多少户有人住 + building.setShowNum(StrConstant.EPMETY_STR); + // 楼栋总户数 + Integer total = null == item.getTotalHouseNum() ? NumConstant.ZERO : item.getTotalHouseNum(); + // 实际已录入的总房屋数 + int count = buildingHouseCountMap.getOrDefault(item.getId(), NumConstant.ZERO_L).intValue(); + if (NumConstant.ZERO == total) { + building.setShowNum(String.format("%s/%s", count, count)); + } else { + building.setShowNum(String.format("%s/%s", count, total)); + } + building.setShowName(String.format("%s(%s)", building.getLabel(), building.getShowNum())); + list.add(building); + }); + return list; } /** diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml index 482eac4596..37964a6e2c 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml @@ -1055,4 +1055,69 @@ + + + + + + diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml index ded214fc88..2c8176a18f 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml @@ -190,7 +190,9 @@ ca.organization_name AS organizationName, ca.LEVEL AS LEVEL, ca.pid as pid, - ca.pids as pids + ca.pids as pids, + ca.LONGITUDE longitude, + ca.LATITUDE latitude FROM customer_agency ca WHERE diff --git a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml index 441dfe7f1b..6eac8ed9fd 100644 --- a/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml +++ b/epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml @@ -128,6 +128,16 @@ 1 = 1 and a.del_flag = '0' + + + AND c.GRID_ID = #{orgId} + + + + + and (c.AGENCY_ID =#{orgId} or c.AGENCY_PIDS like concat('%',#{orgId},'%') ) + + and case c.AGENCY_PIDS when '' then CONCAT(c.AGENCY_ID) like CONCAT(#{pids}, '%') else CONCAT(c.AGENCY_PIDS, ':', c.AGENCY_ID) like CONCAT(#{pids}, '%') end