Browse Source

房屋信息左侧树,逐级查询;查询房屋列表,添加所属组织树

master
yinzuomei 3 years ago
parent
commit
469aea1256
  1. 5
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/BuildingTreeLevelDTO.java
  2. 11
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/HouseManageTreeFormDTO.java
  3. 10
      epmet-module/gov-org/gov-org-client/src/main/java/com/epmet/dto/form/IcHouseListFormDTO.java
  4. 26
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/controller/BuildingController.java
  5. 20
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/dao/CustomerAgencyDao.java
  6. 11
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/BuildingService.java
  7. 207
      epmet-module/gov-org/gov-org-server/src/main/java/com/epmet/service/impl/BuildingServiceImpl.java
  8. 65
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml
  9. 4
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcBuildingDao.xml
  10. 10
      epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

5
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;
}

11
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;
}

10
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;
}

26
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<List<BuildingTreeLevelDTO>> treeInit(@LoginUser TokenDto tokenDTO,@RequestBody HouseManageTreeFormDTO formDTO){
public Result<BuildingTreeLevelDTO> treeInit(@LoginUser TokenDto tokenDTO){
HouseManageTreeFormDTO formDTO=new HouseManageTreeFormDTO();
formDTO.setCustomerId(tokenDTO.getCustomerId());
formDTO.setStaffId(tokenDTO.getUserId());
List<BuildingTreeLevelDTO> buildingTreeLevelDTOS =buildingService.treeInit(formDTO);
return new Result<List<BuildingTreeLevelDTO>>().ok(buildingTreeLevelDTOS);
ValidatorUtils.validateEntity(formDTO,HouseManageTreeFormDTO.InitTreeGroup.class);
BuildingTreeLevelDTO buildingTreeLevelDTOS =buildingService.treeInit(formDTO);
return new Result<BuildingTreeLevelDTO>().ok(buildingTreeLevelDTOS);
}
/**
* 房屋信息左侧树
* 点击树上节点查询下一级列表
* @param tokenDTO
* @param formDTO
* @return
*/
@PostMapping("next-tree-node")
public Result<List<BuildingTreeLevelDTO>> nextTreeNode(@LoginUser TokenDto tokenDTO,@RequestBody HouseManageTreeFormDTO formDTO){
formDTO.setCustomerId(tokenDTO.getCustomerId());
formDTO.setStaffId(tokenDTO.getUserId());
ValidatorUtils.validateEntity(formDTO,HouseManageTreeFormDTO.NodeEventGroup.class);
List<BuildingTreeLevelDTO> resultList =buildingService.nextTreeNode(formDTO);
return new Result<List<BuildingTreeLevelDTO>>().ok(resultList);
}
/**

20
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<CustomerAgencyEntity> {
List<CurrentUserCommunityInfoResultDTO> getCurrentUserCommunityInfo(@Param("customerId") String customerId,@Param("staffAgencyId")String staffAgencyId);
/**
*
* @param agencyId
* @return 组织信息用于房屋信息左侧树
*/
BuildingTreeLevelDTO selectAgencyTree(String agencyId);
/**
*
* @param agencyId
* @return 获取当前agencyId的下一级组织+直属网格
*/
List<BuildingTreeLevelDTO> selectNextOrg(String agencyId);
/**
* 查询当前agencyId下 组织数+网格数
* @param agencyId
* @return
*/
Integer selectTotalNext(String agencyId);
}

11
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<BuildingTreeLevelDTO> treeInit(HouseManageTreeFormDTO houseManageTreeFormDTO);
BuildingTreeLevelDTO treeInit(HouseManageTreeFormDTO houseManageTreeFormDTO);
/**
* 房屋信息左侧树
* 点击树上节点查询下一级列表
* @param houseManageTreeFormDTO
* @return
*/
List<BuildingTreeLevelDTO> nextTreeNode(HouseManageTreeFormDTO houseManageTreeFormDTO);
List<String> treeIds(String customerId, String staffId);
PageData<IcBuildingListResultDTO> listBuilding(IcBuildingListFormDTO formDTO);

207
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<BuildingTreeLevelDTO> treeInit(HouseManageTreeFormDTO formDTO) {
List<CustomerAgencyEntity> customerAgencyList=new ArrayList<>();
// 1.获取所在组织及下级组织
CustomerAgencyEntity customerAgency = customerAgencyDao.selectById(formDTO.getStaffAgencyId());
customerAgencyList.add(customerAgency);
// 2、查询直属下级组织
List<CustomerAgencyEntity> 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<BuildingTreeLevelDTO> 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<IcNeighborHoodEntity> queryWrapper = new QueryWrapper<IcNeighborHoodEntity>().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<BuildingTreeLevelDTO> 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<BuildingTreeLevelDTO> nextTreeNode(HouseManageTreeFormDTO formDTO) {
/**
* level::::
* 省级:province
* 市级: city
* 区县级: district,
* 街道:street,
* 社区级community
* 网格grid
* 小区neighborHood
* 楼栋building
*/
List<BuildingTreeLevelDTO> resultList = new ArrayList<>();
if ("province".equals(formDTO.getLevel())
|| "city".equals(formDTO.getLevel())
|| "district".equals(formDTO.getLevel())
|| "street".equals(formDTO.getLevel())) {
List<BuildingTreeLevelDTO> 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<IcNeighborHoodEntity> queryWrapper = new QueryWrapper<IcNeighborHoodEntity>().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<BuildingTreeLevelDTO> getGridTreeNode(String agencyId) {
List<BuildingTreeLevelDTO> list = new ArrayList<>();
LambdaQueryWrapper<CustomerGridEntity> 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<CustomerGridEntity> 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<IcNeighborHoodEntity> neighborhoodWrapper = new QueryWrapper<IcNeighborHoodEntity>().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<BuildingTreeLevelDTO> getNeighborHoodTreeNode(String gridId) {
List<BuildingTreeLevelDTO> list = new ArrayList<>();
// 当前网格下有几个小区
LambdaQueryWrapper<IcNeighborHoodEntity> neighborhoodWrapper = new QueryWrapper<IcNeighborHoodEntity>().lambda()
.eq(IcNeighborHoodEntity::getGridId, gridId)
.last("ORDER BY CAST(NEIGHBOR_HOOD_NAME AS SIGNED),CONVERT(NEIGHBOR_HOOD_NAME using gbk)");
;
List<IcNeighborHoodEntity> 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<IcBuildingEntity> buildingQueryWrapper = new QueryWrapper<IcBuildingEntity>().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<BuildingTreeLevelDTO> 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<BuildingTreeLevelDTO> getBuildTreeNode(String neighborHoodId) {
List<BuildingTreeLevelDTO> list = new ArrayList<>();
LambdaQueryWrapper<IcBuildingEntity> buildingQueryWrapper = new QueryWrapper<IcBuildingEntity>().lambda()
.in(IcBuildingEntity::getNeighborHoodId, neighborHoodId)
.last("ORDER BY SORT, CAST(BUILDING_NAME AS SIGNED),CONVERT(BUILDING_NAME USING gbk)");
List<IcBuildingEntity> icBuildingList = icBuildingDao.selectList(buildingQueryWrapper);
// 获取楼里已经有多少个房屋
LambdaQueryWrapper<IcHouseEntity> icHouseEntityWrapper = new QueryWrapper<IcHouseEntity>().lambda()
.eq(IcHouseEntity::getNeighborHoodId, neighborHoodId)
.select(IcHouseEntity::getId)
.select(IcHouseEntity::getBuildingId);
List<IcHouseEntity> buildingHouseCount = icHouseDao.selectList(icHouseEntityWrapper);
Map<String, Long> 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;
}
/**

65
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/CustomerAgencyDao.xml

@ -1055,4 +1055,69 @@
</select>
<select id="selectAgencyTree" parameterType="java.lang.String" resultType="com.epmet.dto.BuildingTreeLevelDTO">
SELECT
ca.ID as id,
ca.ORGANIZATION_NAME as label,
ca.LONGITUDE as longitude,
ca.LATITUDE as latitude,
ca.`LEVEL` as level,
ca.PID as pId,
'agency' AS orgType
FROM
customer_agency ca
WHERE
ca.ID = #{agencyId}
AND ca.DEL_FLAG = '0'
</select>
<select id="selectNextOrg" parameterType="java.lang.String" resultType="com.epmet.dto.BuildingTreeLevelDTO">
(SELECT ca.ID as id,
ca.ORGANIZATION_NAME as label,
ca.LONGITUDE as longitude,
ca.LATITUDE as latitude,
ca.`LEVEL` as level,
ca.PID as pId,
'agency' AS orgType
FROM customer_agency ca
WHERE ca.PID = #{agencyId}
AND ca.DEL_FLAG = '0'
ORDER BY CAST(ca.organization_name AS SIGNED), CONVERT(ca.organization_name using gbk))
union all
(SELECT cg.id,
cg.GRID_NAME AS label,
cg.LONGITUDE,
cg.LATITUDE,
'grid' AS LEVEL,
cg.PID,
'grid' AS orgType
FROM customer_grid cg
WHERE cg.DEL_FLAG = '0'
AND cg.PID = #{agencyId}
ORDER BY cg.sort, CAST(cg.GRID_NAME AS SIGNED), CONVERT(cg.GRID_NAME using gbk))
</select>
<select id="selectTotalNext" parameterType="java.lang.String" resultType="java.lang.Integer">
SELECT
sum( t.total )
FROM
(
SELECT
count( a.id ) AS total
FROM
customer_agency a
WHERE
a.PID = #{agencyId}
AND a.DEL_FLAG = '0'
UNION all
SELECT
count( g.id ) AS total
FROM
customer_grid g
WHERE
g.PID = #{agencyId}
AND g.DEL_FLAG = '0'
) t
</select>
</mapper>

4
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

10
epmet-module/gov-org/gov-org-server/src/main/resources/mapper/IcHouseDao.xml

@ -128,6 +128,16 @@
<where>
1 = 1
and a.del_flag = '0'
<if test=" orgType == 'grid'">
<if test="orgId != null and orgId != ''">
AND c.GRID_ID = #{orgId}
</if>
</if>
<if test=" orgType == 'agency'">
<if test="orgId != null and orgId != ''">
and (c.AGENCY_ID =#{orgId} or c.AGENCY_PIDS like concat('%',#{orgId},'%') )
</if>
</if>
<if test="pids != null and pids != ''">
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

Loading…
Cancel
Save